Autor Zpráva
Berzeger
Profil
Ahoj lidi, mam problem s jednim kodem. Tento kod ma upravit radek v databazi, ale misto toho, aby ho upravil, ho tam necha tak jak je, a pod nej prida novy, upraveny. Ale ten stary zustane... Poradi mi nekdo?

if ($_GET['akce'] == 'upravit')
{
$resultzaku = mysql_query("select * from ".$tabulka2." where id='$id'");
$rowvypisu = mysql_fetch_row($resultzaku);

echo "<form method=\"POST\" action=\"$PHP_SELF\">";
echo "<br>";
echo "<table border=\"1\" class=\"table\">";
echo "<tr align=\"center\" class=\"lidi\">";
echo "<td>";
echo "&nbsp;Pořadí účastníka/ů ve školním kole&nbsp;";
echo "</td>";
echo "<td>";
echo "&nbsp;Jméno a příjmení účastníka (účastníků)<sup>1</sup>&nbsp;";
echo "</td>";
echo "<td>";
echo "&nbsp;Datum narození&nbsp;";
echo "</td>";
echo "<td>";
echo "&nbsp;Třída&nbsp;";
echo "</td>";
echo "<td>";
echo "&nbsp;Název pokusu&nbsp;";
echo "</td>";
echo "<td>";
echo "Požadované pomůcky<br>a chemikálie (včetně množství)<sup>2</sup>&nbsp;";
echo "</td>";
echo "<td>";
echo "&nbsp;Zajistit oběd&nbsp;";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td align=\"center\" rowspan=\"2\">";
echo "<input type=\"Textbox\" name=\"poradi1\" value=\"$rowvypisu[11]\" class=\"textbox\">";
echo "</td>";
echo "<td align=\"center\">";
echo "<input type=\"Textbox\" name=\"jmena1\" value=\"$rowvypisu[1]\" class=\"textbox\">";
echo "</td>";
echo "<td align=\"center\">";
echo "<input type=\"Textbox\" name=\"narozeni1\" value=\"$rowvypisu[3]\" class=\"textbox\">";
echo "</td>";
echo "<td align=\"center\">";
echo "<input type=\"Textbox\" name=\"trida1\" value=\"$rowvypisu[7]\" class=\"textbox\">";
echo "</td>";
echo "<td align=\"center\" rowspan=\"2\">";
echo "<input type=\"Textbox\" name=\"pokus1\" value=\"$rowvypisu[5]\" class=\"textbox\">";
echo "</td>";
echo "<td align=\"center\" rowspan=\"2\">";
echo "<input type=\"Textbox\" name=\"pomucky1\" value=\"$rowvypisu[6]\" class=\"textbox\">";
echo "</td>";
echo "<td align=\"left\">";
echo "&nbsp;<span class=\"radio\"><input type=\"radio\" name=\"obed1\" value=\"Ano\">Ano&nbsp;</span><br>&nbsp;<span class=\"radio\"><input type=\"radio\" name=\"obed1\" value=\"Ne\" checked=\"checked\">Ne&nbsp;&nbsp;&nbsp;</span>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td align=\"center\">";
echo "<input type=\"Textbox\" name=\"jmena2\" value=\"$rowvypisu[2]\" class=\"textbox\">";
echo "</td>";
echo "<td align=\"center\">";
echo "<input type=\"Textbox\" name=\"narozeni2\" value=\"$rowvypisu[4]\" class=\"textbox\">";
echo "</td>";
echo "<td align=\"center\">";
echo "<input type=\"Textbox\" name=\"trida2\" value=\"$rowvypisu[8]\" class=\"textbox\">";
echo "</td>";
echo "<td align=\"left\">";
echo "&nbsp;<span class=\"radio\"><input type=\"radio\" name=\"obed2\" value=\"Ano\">Ano&nbsp;</span><br>&nbsp;<span class=\"radio\"><input type=\"radio\" name=\"obed2\" value=\"Ne\" checked=\"checked\">Ne&nbsp;&nbsp;&nbsp;</span>";
echo "</td> ";
echo "</tr>";
echo "</table>";

echo "<center>";
echo "<br>";
echo "<input type=\"Submit\" value=\"Odeslat a návrat\" class=\"textbox\">";
echo "</center>";

if ($_POST['jmena1'] != "" && $_POST['narozeni1'] != "" && $_POST['trida1'] != "" && $_POST['pokus1'] != "" && $_POST['pomucky1'] != "" && $_POST['poradi1'] != "")
{
mysql_query("update ".$tabulka2." set jmeno1='$jmena1',narozeni1='$narozeni1',trida1='$trida1',pokus1='$poku s1',pomucky1='$pomucky1',poradi1='$poradi1',jmeno1='$jmena1',narozeni2 ='$narozeni2',trida2='$trida2,obed1='$obed1',obed2='$obed2' where id='$id'");
}

echo "</form>";
}
Kajman_
Profil *
Tomu moc nevěřím, že by update dělalo nový řádek.

Ale tam má být místo meno1='$jmena1' raději meno1='".addslashes($_POST['jmena1'])."'

A možná si dát pozor na to, že kombinovat GET (nejspíše parametry v $PHP_SELF) a POST asi není korektní.
Berzeger
Profil
addslashes? Na co lomítka?
Každopádně furt to nejde. Respektive jde, ale zlobí.
error414
Profil
Berzeger
1. takovehle pouziti echa je spatny programatorsky postup.
2. neni to cely script tak nevim jestli nekde nemas INSERT INTO
3. update vzadnem pripade nevytvori novy radek
4. select * from neni take nejrychlejsi

Nejprve sem hod cely script nebo ho dej ke stazeni
Kajman_
Profil *
Na co lomítka?

Třeba, aby nebyl problém, když někdo pošle formulář s id nastaveným na 1' or '1 :-)
error414
Profil
Berzeger
Precti si neco o injection hacking

predstav si ze mas dotaz
SELECT * FROM tabulka WHERE id_tabulka = id_z_formu

z formulare ti posle
1 or 1=1"

a pak dostanes
SELECT * FROM tabulka WHERE id_tabulka = 1 or 1=1"

a co ti to vybere, nespis vse. :-)
Berzeger
Profil
ee, tohle co delam je specialni kam bude mit pristup jen par vyvolenych :) Kazdopadne jdu to jeste project.
Jinak, vim, ze update NEMA vytvorit novy radek, ale tady se mi proste vytvori:)
Berzeger
Profil
Myslím, že už vím, čím to je...
Berzeger
Profil
ne, tak jsem zjistil, ze jakoby to to update ignorovalo... ani, kdyz dam pryc to if, tak nic... Zjistil jsem, ze jak to pridalo ten radek, tak to zpusoboval skutecne jeden Insert Into ktery byl jinde, to uz jsem osetril, ted uz by mě jen zajimalo, proc to neupdatuje.
Paja a jaja
Profil *
nemám moc času to študovat, ale jak ten tvůj "update" query pozná, jaký id má upravovat?

jestli jsem něco nepřehlédl, tak si nepředáváš proměnnou...
Berzeger
Profil
Predavam ho takto "index.php?id=$rowvypisu[0]
cesar
Profil
A díval jsi se pořádně na ten sql dotaz? Asi moc ne. ;-)

trida2='$trida2,obed1='$obed1'

Nechybí tam náhodou apostrof? :-)
jozob
Profil
Berzeger
Doporučujem vypisovať mysql_error() a SQL dotaz.

-- OT --
A kód do tejto diskusie dávaj do "kontajneru" PRE (tlačítko so symbolom doláru), ten bold je ako dostať päsťou medzi oči...
cesar
Profil
Souhlasím s jozobem. Určitě si prve nechat vypsat chyby přes echo mysql_error();, ale dávat ho až pod ten SQL dotaz. Ale pozor, nesmíš u SQL dotazu potlačit chyby znakem @, jinak Ti to samozřejmě nic nevypíše. Už i s tímto jsem se setkal. ;-)
error414
Profil
cesar
IMHO to nei pravada, znak @potlacuje jen vzpsani chzb na screen,a le gce myssql_error() ji vypise i pres znak @
jozob
Profil
error414
Súhlas. Funkcia mysql_error() berie chybovú hlášku priamo z DB serveru.
cesar
Profil
Aha, takže se omlouvám za milné info. ;-)
Berzeger
Profil
Moc vam dekuju za rady, sice to nepomohlo, nicmene pro ty lidi jsem funkci Edit nahradil funkci Delete :D
Toto téma je uzamčeno. Odpověď nelze zaslat.

0