
Neznámá chyba Parse error v PHP
V databázi mam data které chci změnit mam na to
<?
$pripoj=MySQL_Connect($se, $us, $pa) or Die(MySQL_Error());
MySQL_Select_Db($db) or Die(MySQL_Error());
$dotaz="SELECT nick,icq,skype FROM users WHERE nick LIKE '$z[0]";;
//vytvoření sql dotazu
$vysledek = MySQL_Query($dotaz); // provedení sql dotazu
while ($zaznam = MySQL_Fetch_Array($vysledek)){
$icq=$zaznam["icq"];
$skype=$zaznam["skype"];
$nick=$zaznam["nick"];
echo "<h2><strong>Změna údajů</strong></h2>";
echo "<FORM METHOD=\"POST\" ACTION=\"zmena-udaju2.php$string\" onSubmit=\"return kontrola(formular);\">";
echo "<br><strong>ICQ:</strong>(9) <INPUT TYPE=\"TEXT\" NAME=\"icq2\" MAXLENGTH=\"9\" SIZE=\"20\" VALUE=\"$icq\" onkeypress=\"return numeric(event);\">";
echo "<br><strong>Skype:</strong>(32) <INPUT TYPE=\"TEXT\" NAME=\"skype2\" MAXLENGTH=\"32\" SIZE=\"20\" VALUE=\"$skype\" onkeypress=\"return alfanumeric(event,0);\">";
echo "<br><INPUT TYPE=\"VHIDDEN\" NAME=\"nick\" VALUE=\"$nick\">;
echo "<br><INPUT TYPE=\"SUBMIT\" VALUE=\"Odeslat\">";
echo "</FORM>";
}
?>
a to pak má zpracovat
<?
//změní icq v tabulce users
mysql_query ("UPDATE users SET icq =$icq2 WHERE nick = '$nick'");
//změní icq v tabulce users
mysql_query ("UPDATE users SET skype =$skype2 WHERE nick = '$nick'");
if ($icq2!='' || $skype2!='') {$vysledek="<br><strong style=\"color:#008000\">Úspěšně změněno.</strong>";}
else {$vysledek="<br><strong style=\"color:#8b0000\">Někde se stala chyba<br><a style=\"color:blue\" href=\"zmena-udaju.php$string\">zadat znova</a></strong>";}
echo "$vysledek";
?>
už při otevření první stránky to hází Parse error: parse error in /3w/webz.cz/p/pavel-d/test/zmena-udaju.php on line 88
Změna předmětu, původně: Neznámá chyba (host)
A ktora je line 88? Na riadku 88 mas chybu.
Tak sem napis ktory je riadok 88, vidiet to aj v notepade dole v stavovej liste ze na ktorom riadku mas kurzor tak sa presun na riadok 88 a len tam hladaj chybu.
P.S. a ako pisal host chyba ti tam apostrof ' pred "
no řádek 88 je
co je na tom špatně ?
ako uz pisal los, chybu hladas na tomto alebo predchadzajucom riadku, ptz ak je predchadzajuci neukonceny tak si PHP mysli ze riadok 88 je pokracovanie z predch.riadku a mu tam potom nesedi syntax ked najde " co povazuje za ukoncenie predch.riadku.
no tak tohodle sem si nevšiml je fakt že to funguje ale změnit to jde jen na čísla text to nebere
Najskôr to bude súvisieť s dátovým typom toho stĺpca v tabuľke. Na zistenie toho, či sa "někde stala chyba", slúží návratová hodnota funkcie mysql_query. Aby si zistil, aká presne chyba sa stala, tak použi funkciu mysql_error.
Takže ak riadok mysql_query(...) upravíš na mysql_query(...) or die(mysql_error()), tak uvidíš, aká chyba nastala počas vykonávania toho príkazu.
Hodnoty v jednom riadku môžeš meniť jedným SQL príkazom, nepotrebuješ pre každý stĺpec samostatný SQL príkaz.
Odporúčam prečítať si niečo o útokoch typu SQL injection, proti ktorým nie je v tvojom kóde žiadne zabezpečenie.
Hlavne ma v tom dost chaos, testovat uspesnost pomocou if ($icq2!='' || $skype2!='') mi pride dost komicke (ale mozno len nechapem myslienkove postupy autora :)
jo zrovna tohle je trochu zvláštně napsáno ale to sem dělal na rychlo to neni teď důležité
Prva vec skus vyhodit vsetky javascripty (vcetne toho onSubmit=), je to zbytocne (ochrana to neni to ti prelomi aj ziak zakl.skoly). Ochranu musis robit v PHP ak to ma byt ucinna ochrana, uz to pisal los.
Druha vec daj si vypisat tie SQL errory ako pise los.
když sem si přes echo mysql_errno() . ": " . mysql_error() . "\n"; nechal vypsat chybu vyhodilo to:
1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
začátek stránky sem tady nezveřejňoval takže dodatečně ale chybu nevidim
Vypis si ten SQL prikaz aj niekde na vystup (alebo do suboru), nech vies jaky SQL prikaz tam posielas, a z toho budes moct usudit ze co je v tom SQL prikaze blbo (su tam blbo nejake uvodzovky alebo apostrofy).