Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Zapsání proměných do databáze v cyklu WHILE (PHP a MySQL)

mám v databázi tabulku s neznámým počtem řádků.
Vytáhnu si ji do formuláře (abych případně mohl upravovat, jednotlivé položky si pro rozlišení pojmenuju podle id (počet řádků mám spočítaný taky).
Např:

<input type="text" size="15" name="obsah'.$rec["id"].'" value="'.$rec["obsah"].'">

Až sem je všechno v pořádku. Ale když to chci upravené dát zpět do tabulky, nevím jak dostat proměnné postupně podle cyklu:

while ($pocet_poradi > 0){
$update_bloky = mysql_query("UPDATE bloky SET obsah='$obsah', side='$side', zap='$zap', poradi='$poradi'  WHERE id='$pocet_poradi';" );
} //konec while poradi   

Jediné čeho jsem dosáhl je konstrukce:

$side = '$side'.$pocet_poradi;

což ale obsah proměnné $side změní na například "$side2" .

Prosím poraďte.

Děkuji

Předmět Autor Datum
Používej pole: <input name="pole[]"> <input name="pole[]"> Jinak ti tohleto půjde blbě. Pokud chc…
marekdrtic 08.10.2009 18:15
marekdrtic
Tady je vyčtení z databáze: $query2 = "SELECT * FROM bloky;"; $result2 = mysql_query($query2, $link…
Brmboš 08.10.2009 20:57
Brmboš
Pokiaľ som správne pochopil, tak v POST-e ti prídu dáta pre polia obsahN, sideN, zapN, poradiN a pod…
los 08.10.2009 21:18
los
Tak je vidět, že se mám ještě hodně co učit, to bych nedal dohromady ani kdybych .... Asi třetině to…
Brmboš 09.10.2009 11:17
Brmboš
Při ladění jsem narazil na jedinou drobnou chybičku: v tom to řádku je přehozená "1" a "0" $zap =… poslední
Brmboš 09.10.2009 16:57
Brmboš

Tady je vyčtení z databáze:

$query2 = "SELECT * FROM bloky;";
$result2 = mysql_query($query2, $link)or die ("Nepovedlo se spočítat bloky!!");
$pocet_poradi = mysql_num_rows($result2);


echo '<FORM action="bloky_uprav1.php" method="post">';

$query = mysql_query("SELECT * FROM bloky WHERE side = 'L' ORDER BY poradi;") ;
while($rec = mysql_fetch_array($query)) {
echo '<div class="blok">
      <div class="blok_nadpis">&nbsp;&nbsp;'
      .$jazyky[$rec["nazev"]].' ('.$rec["nazev"].')
      </div>
      <div class="blok_in" align="right">
      <br />       
      Vkládám: <input type="text" size="15" maxlength="200" name="obsah'.$rec["id"].'" value="'.$rec["obsah"].'"><br />
      Strana: <select name="side'.$rec["id"].'" size="1"> 
              <option value="R"'; if ($rec["side"]='R'){ echo 'selected';} echo '>R
              <option value="L"'; if ($rec["side"]='L'){ echo 'selected';} echo '>L
              </select> 
      <br />
      Zapnuto: <select name="zap'.$rec["id"].'" size="1"> 
               <option value="0"'; if ($rec["zap"]='0'){ echo 'selected';} echo '>0
               <option value="1"'; if ($rec["zap"]='1'){ echo 'selected';} echo '>1
               </select>
      <br />
      Pořadí: '.$rec["poradi"].'
      <select name="poradi'.$rec["id"].'" size="1"> 
      <option value="'.$rec["poradi"].'" selected>'.$rec["poradi"];    
$i=$pocet_poradi;
while ($i > 0){
echo '<option value="'.$i.'">'.$i;
     $i--;
     } //konec while poradi    
echo '</select>            
      <input type="hidden" name="pocet_poradi" value="'.$pocet_poradi.'">
      <input type="hidden" name="id" value="'.$rec["id"].'">
      </div>
      </div>';
} //konec while - bloky
echo '<input type="submit" class="tlacitko" value="Odeslat" onClick="return posli()">
      </form>';

A zapsat to potřebuju, jak jsem psal:

while ($pocet_poradi > 0){
$update_bloky = mysql_query("UPDATE bloky SET obsah='$obsah', side='$side', zap='$zap', poradi='$poradi'  WHERE id='$pocet_poradi';" );
} //konec while poradi  

a uznávám, že ač to asi bude triviální, jsem v koncích, proto zoufale prosím o pomoc.

Pokiaľ som správne pochopil, tak v POST-e ti prídu dáta pre polia obsahN, sideN, zapN, poradiN a pod., kde N je identifikátor riadku. Takže sa nemôžeš spoľahnúť na to, že by ti prišli dáta pre všetky N od 1 po nejaké Nmax a bude to tým pádom trochu zložitejšie.

Princíp bude taký, že prebehneš všetky kľúče v POST-e a keď nájdeš kľúč v tvare obsahN, tak spracuješ vstup pre záznam s identifikátorom N.

Takže kód by mohol vyzerať približne takto (netestované, môžu tam byť preklepy a iné chyby):

foreach ($_POST as $key => $value)
  if (substr($key, 0, 5) == "obsah") {
    $n = (int)substr($key, 5);
    $obsah = mysql_real_escape_string($value);
    $side = isset($_POST["side$n"]) && $_POST["side$n"] == "R" ? "R" : "L";
    $zap = isset($_POST["zap$n"]) && $_POST["zap$n"] == "1" ? 0 : 1;
    $poradi = isset($_POST["poradi$n"]) ? (int)$_POST["poradi$n"] : 0;

    mysql_query("UPDATE bloky SET obsah='$obsah', side='$side', zap=$zap, poradi=$poradi WHERE id='$n';");
  }

Zpět do poradny Odpovědět na původní otázku Nahoru