
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ě ?
Tento riadok je správne, ale na predchádzajúcom riadku nemáš ukončený reťazec úvodzovkou.
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
co?
už nic sem to vyřešil
ICQ snad ma byt len cislo, nie? mas tam nejaky javascript ze return numeric(event)
jo javascript sem odstranil a pořád to bere jen čísla což u skypu je problém
vypíše to že údeje byli změněny ale přitom se nezmění
Co to znamena "bere jen cisla"? Jak presne sa to prejavuje? Jaky presne tam mas teraz kod? (ten formular 2riakdky).
A pouzi reload v prehliadaci nech nepouziva stary zdrojak z cache.
Co mas v javascripte kontrola(formular) ?
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).