Autor Zpráva
Duchaplny
Profil
Zdravím,

spravil som si 2 php scripty, ktoré by mali podľa vybraného radio buttonu, a následnom odoslaní, upraviť stĺpec podľa určených podmienok (if, elseif). Problém je, že script č.1 mi vypíše chybu, ktorú neviem vyriešiť "Warning: mysql_query() expects parameter 2 to be resource". Je to akoby ťahal viac IDčiek, ale keď si to vypíšem, tak ťahá len 1 a presto píše, že je tých zdrojov viac. V scripte č.2 neviem nastaviť podmienky, pre vybraný radio button.

Je to vo while, takže sa tie buttony prideľujú k viacero riadkom, preto treba rozlišovať ID. Každopádne uvítam akékoľvek postrehy.

Script č.1 (keď to umiestním mimo while cyklu a napíšem tam ID "natvrdo" (bo inak to ID nemá odkiaľ vedieť), tak to funguje, ale to zas neviem, ako by som ťahal tie IDčka):
<?
$vysledok=mysql_query("SELECT id FROM table WHERE state=0");
while ($zaznam=mysql_fetch_array($vysledok)):
    if (isset($_POST['state']) && !empty($_POST['state']))
       {$state=mysql_real_escape_string($_POST['state']);
       
    if ($state=="jedna")
        mysql_query ("UPDATE table SET state=1 WHERE id=$zaznam[id]", $GLOBALS["result"]);
    
elseif ($state=="dva")
        mysql_query ("UPDATE table SET state=2 WHERE id=$zaznam[id]", $GLOBALS["result"]);

elseif ($state=="tri")
        mysql_query ("UPDATE table SET state=3 WHERE id=$zaznam[id]", $GLOBALS["result"]);

  else echo "chyba v scripte.";
       }

 <form  method='post' action=''>
  <input type='radio' name='state' value='jedna' />
  <input type='radio' name='state' value='dva' />
  <input type='radio' name='state' value='tri' />
  
  <input type='submit' value='odoslať' /> 
 </form>
endwhile;
?>
Script č.2 (tento script používam na checkboxy, ale tam nemám podmienky):
<?
$vysledok=mysql_query("SELECT id FROM table WHERE state=0");
if (isset($_POST['idecko']))

   {foreach($_POST["idecko"] as $idecko)
   {// tu by mali byť podmienky, ale neviem podľa čoho ich spraviť
    mysql_query ("UPDATE table SET state='$cislo' WHERE id='$idecko'", $GLOBALS["result"]);}
                                       // $cislo by mal obsahovať číslo 1-3
   }

while ($zaznam=mysql_fetch_array($vysledok)):
 <form  method='post' action=''>
  <input type='radio' name='idecko[]' value='$zaznam[id]' />
  <input type='radio' name='idecko[]' value='$zaznam[id]' />
  <input type='radio' name='idecko[]' value='$zaznam[id]' />
  
  <input type='submit' value='odoslať' /> 
 </form>
endwhile;
?>
Keeehi
Profil
Duchaplny:
Warning: mysql_query() expects parameter 2 to be resource
- to znamená, že očekává 2 parametr jako zdroj (proměnnou se spojením na DB). Tedy proměnnou ve které je návratová hodnota funkce mysql_connect(). Ale je to nepovinný parametr, takže když ho vynecháš, nic se nestane.

řádek 5 si přepiš na
$state=$_POST['state'];

řádky 7-17: Vhodnější by byl switch.
Případně to celé přepsat takto:
$preklad = array("jedna" => 1, "dva" => 2, "tri" => 3);

if(isset($preklad[$state]))
    mysql_query ("UPDATE table SET state=$preklad[$state] WHERE id=$zaznam[id]");
else
    echo "chyba v scripte.";


Ten druhý script moc nechápu.
Duchaplny
Profil
Keeehi:
Ten druhý script je na checkboxy, tam podmienky nie sú, ale skúšal som to aj touto cestou.

Dík za opravu. Takže v tom prvom mi chýbal vlastne $GLOBALS["result"]; ak som to správne pochopil.

Inak ten tvoj príklad mi upraví všetky riadky naraz. Neviem ako to ošetriť.
Keeehi
Profil
Duchaplny:
Takže v tom prvom mi chýbal vlastne $GLOBALS["result"]; ak som to správne pochopil.
Spíše přebýval.

Ten druhý script je na checkboxy
Ale já tam vidím type="radio"
Duchaplny
Profil
Keeehi:
Spíše přebýval.
Ahá tak.

Ale já tam vidím type="radio"
to už bola moja úprava na radio. Originál script nájdeš tu update riadkov cez checkboxy - [#3].

Nevieš mi poradiť čo s tým, keď mi to upravuje všetky riadky naraz ?
Duchaplny
Profil
už to skúšam pekne dlho, ale nejde mi to. Potrebujem ten script mať mimo while cyklu, takže tým pádom musím do input value dať $zaznam[id], ale neviem ako mám potom rozlišovať, ktorý <input type='radio'> bol označený. Keď zas rozlišujem <input type 'radio'>, tak mi nejdu IDčka. Na nete som videl akurát nejakú možnosť s <input type='hidden'>, ale tá sa mi vôbec nepáčila, bo nebola dobre rozpísaná a prišla mi zbytočne komplikovaná. Nemá niekto lepší nápad ?
Duchaplny
Profil
ok, tak už som to vyriešil. Poradili mi na inej stránke, ako to funguje s <input hidden>.

Riešenie:
<?
    if (!empty($zaznamId) && !empty($state))
       {$zaznamId = (int)$_POST['zaznamId'];
        $state = (int)$_POST['state'];

    if (isset($zaznamId) && isset($state))
        mysql_query ("UPDATE table SET state=$state WHERE id=$zaznamId");

  else echo "chyba v scripte.";
        }
  
$vysledok=mysql_query("SELECT id FROM table WHERE state=0");
  while ($zaznam=mysql_fetch_array($vysledok)):
    <form  method='post' action=''>
     <input type='hidden' name='zaznamId' value='$zaznam[id]' />
     <input type='radio' name='state' value='1' />
     <input type='radio' name='state' value='2' />
     <input type='radio' name='state' value='3' />
     <input type='submit' value='Odoslať' /> 
    </form>
  endwhile;
?>

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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