Autor Zpráva
slawe
Profil
Zdravím,
měl bych takový problém - hromadný update do MySQL. Dočetl jsem se, že by se měla užívat fce foreach, ale tu já popravdě moc neznám ( sem amatér ). Zkusil jsem použít postup diskutovaný v Foreach - hromadný update záznamů, a po různých degeneracích je toto můj poslední výtvor:

<?
  if (!$id==0) {
    $vyber2=mysql_query("SELECT * FROM aktuality WHERE id='$id'");
    while ($vypis2= mysql_fetch_array($vyber2)) {
    
      echo "
          <form action='' method='post'>
            Datum: <input type='text' name='datumn[]' value='".$vypis2['datum']."'><br>
            <textarea name='textn[]' style='width:300px; height:150px'>".$vypis2['text']."</textarea><br>
            <input value=".$vypis2['id']." name='idn[]'>
            <input type='submit' value='Uložit změny' name='send' >
          <form>
    
    ";
    }
    if ($_POST["send"])
      {
        foreach($_POST["idn"] as $key => $ido)
          {
            mysql_query("UPDATE aktuality SET datum=\"".$_POST["datumn"][$key]."\", text=\"".$_POST["textn"][$key]."\" WHERE id=\"".$_POST["idn"][$key]."\"");
          }
      }
  }
?>


Po odeslání se mi to do db neuloží, a po asik hodině nervení nevím jak dál...

Prosím, poraďte.


pozn.: id se v db měnit nemá, do formuláře jsem možnost změny dal z mé zoufalosti...
slawe
Profil
Tak už nic, problém se nakonec ukázal v DB, takže tento skript jede... ale nešlo by to nějak zjednodušit? Toto je podle mne až přespříliš složité...
Joker
Profil
slawe:
První věc:
  if (!$id==0) {

nejspíš dělá něco jiného než si myslíte. Jestli význam toho je "Pokud $id není nula", použijte operátor !=
  if ($id!=0) {

(Edit) Dodatek: A záporná ID nejsou chyba? Možná by bylo lepší použít:
  if ($id>0) {


Dál moc nerozumím tomu kódu. Z kódu to jednak vypadá, že ID je pro každý záznam unikátní a neměl by se tedy nikdy vybrat víc než jeden řádek. Naproti tomu je kód zjevně napsaný tak, jako by řádků mohlo být více... ovšem při více řádcích se stejným ID to stejně nebude fungovat. Jak to tedy je?
slawe
Profil
Joker:
Každý záznam,řádek má unikátní vlastní id, a mám v plánu tak updatovat jen jeden řádek.


Pokud $id=0, zobrazí se seznam záznamů z DB. Tam pak kliknu na nějaký záznam, a v adrese se mi přenese id toho příspěvku, kterýá chci editovat. Proto !id==0. Oba mě teď fungují tak, jak mají, není jedno, který použiju?
Joker
Profil
slawe:
Oba mě teď fungují tak, jak mají
if($id != 0)

-> pokud hodnota $id není rovna 0
if(!$id == 0)

-> Pokud logická negace $id je rovna 0 (neboli false). Je to vlastně to samé jako: if($id)

Pro nulu shodou okolností obě konstrukce fungují stejně díky tomu, že v PHP se logické hodnoty konvertují na čísla jako false -> 0 a true -> 1 a čísla na logické hodnoty jako 0 -> false a cokoliv nenulového -> true.

Například if(!$id == 5), nebo jakékoliv jiné nenulové číslo, bude splněna v případě, že $id bude 0 a nesplněna pokud to bude jiné číslo.
slawe
Profil
Joker:

Aha, tak asi sem pochopil. Díky :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: