Autor | Zpráva | ||
---|---|---|---|
bicebs Profil |
#1 · Zasláno: 1. 11. 2013, 13:31:40 · Upravil/a: Moderátor (editace znemožněna) 1. 11. 2013, 18:19:20
Keď som to skúšal tak mi napiše Parse error: parse error in /3w/borec.cz/h/hrynah0vno/prvy skript.php on line 52
tu je skript <? function JeEmail ($cislo) { return ereg("^.+@.+..+$",$cislo); } function emailvdb ($email, $link) { $vysledok=mysql_query("select * from uzivatelia where email='".$email."'", $link); return (boolean) mysql_num_rows($vysledok); } function prezivkavdb ($prezivka, $link) { $vysledok=mysql_query("select * from uzivatelia where prezivka='".$prezivka."'", $link); return (boolean) mysql_num_rows($vysledok); } // telo skriptu - nejprve si vytvoříme odkaz na databázi $link=mysql_connect(mysql.webzdarma.cz, *****, *****); mysql_select_db(uzivatelia); mysql_query("SET NAMES 'utf8'"); $BudemeZobrazovat=true; if (!empty($_POST)) // už se odeslalo { /* budeme kontrolovat následující věci: 1) e-mailovou adresu 2) zda tam již e-mail není 3) zda tam již přezdívka není 4) zda je přezdívka mezi 3 a 50 znaky délky 5) zda je heslo 3 až 50 znaků dlouhé */ if (!JeEmail($_POST["email"])) echo "Není zadán platný e-mail"; elseif (emailvdb($_POST["email"], $link)) echo "Uvedený e-mail je již registrován"; elseif (prezivkavdb ($_POST["prezivka"], $link)) echo "Uvedená přezdívka je již registrována"; elseif ((strlen ($_POST["prezivka"])>50) | strlen ($_POST["prezivka"])<3)echo "Přezdívka musí mít 3-50 znaků"; elseif ((strlen ($_POST["heslo"])>50) | strlen ($_POST["heslo"])<3) echo "Heslo musí mít 3-50 znaků"; else { // kontolou jsme prošli $BudemeZobrazovat=false; // poděkujeme uživateli echo "Děkujeme za registraci. Na vaši adresu ".$_POST["email"]." byly zaslány informace pro její dokončení."; // uložíme to do databáze mysql_query ("insert into uzivatelia (email, prezivka, heslo) values ('".$_POST["email"]."', '".$_POST["prezivka"]."', '".$_POST["heslo"]."');", $link); $lastid=mysql_insert_id(); // a sestavíme e-mail s instrukcemi, jak registraci dokončí $path="[url=http://".$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["SCRIPT_NAME"]."?clanek=registracedokoncena&id=".$lastid."&email=".$_POST["email]http://".$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["SCRIPT_NAME"]."?clanek=registracedokoncena&id=".$lastid."&email=".$_POST["email[/url]"]; $telo = "Dekujeme Vam za registraci na nasem portale [nazev hudebniho portalu]. Pro dokonceni ". "registrace klepnete na nasledujici odkazn". "<a href="$path">$path</a>n". "Pokud jste se na nasem portale nechteli zaregistrovat, povazujte tento e-mail za bezpredmetny.n". "Vas [nazev hudebniho portalu] team."; $hlavicky="From: ".$_POST["email"]."nReturn-Path:".$_POST["email"]; @mail ($_POST["email"], "Registrace na portalu", $telo, $hlavicky, "-f ".$_POST["email"]); } } if ($BudemeZobrazovat):?> |
||
Tori Profil |
Co z toho je řádek 52?
Tady musíte použít apostrofy okolo URL: "<a href='$path'>$path</a>n". anebo ty vnitřní uvozovky escapovat. Viz Úvodzovky
|
||
bicebs Profil |
pomohlo to
|
||
Taps Profil |
#4 · Zasláno: 1. 11. 2013, 13:59:26
bicebs:
Zkus kod vložit do tagu pre, ať se nám snadněji hledá chyba. |
||
bicebs Profil |
teraz tam píše Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/borec.cz/h/hrynah0vno/prvy skript.php on line 10
|
||
bicebs Profil |
#6 · Zasláno: 1. 11. 2013, 17:29:50
tu mi ukazuje chybu return (boolean) mysql_num_rows($vysledok);
|
||
Tori Profil |
1. Dejte prosím ten kód do [>pre], tohle se nedá pořádně číst. (Klikněte si u prvního příspěvku na "Upravit", označte myší/klávesnicí celý ten kus kódu a klikněte na ikonku
[<>] nebo stiskněte Ctrl+E.) Moderátorovi budiž díky.
2. Chybí vám tam všude escapování dat, která vkládáte do SQL dotazů. Doplňte si to do skriptu, a pokud to bude stále házet nějakou chybu, napište jakou. |
||
Lkopo Profil * |
#8 · Zasláno: 1. 11. 2013, 18:05:23
Lebo je absolútna hlúposť dávať boolean na mysl_num_rows(). Má to vrátiť číselnú hodnotu a vy od toho očakávate typ boolean?
|
||
lionel messi Profil |
#9 · Zasláno: 1. 11. 2013, 18:08:04
bicebs:
Nie je to síce tvoj najväčší problém, ale nepoužívaj funkciu ereg, je zastaraná. Uprednostnil by som preg_match
|
||
Tori Profil |
#10 · Zasláno: 1. 11. 2013, 18:17:57
Lkopo:
IMHO to je ok - chce vědět, jestli e-mail už existuje v DB a na to je odpověď ano/ne. Jiná věc, že by se to dalo řešit i pomocí SELECT COUNT(*) , ale chyba je způsobená rozbitou syntaxí SQL dotazu, což zřejmě souvisí s chybějícím escapováním.
|
||
Tori Profil |
#11 · Zasláno: 1. 11. 2013, 19:57:39
bicebs:
A teď je, díky zformátování kódu, vidět ještě několik dalších chyb. Nejhorší je to chybějící escapování. Na ř.4 není escapovaná tečka v reguláru. Na ř.19+20 nejsou řetězce v uvozovkách, funguje je to jen díky benevolenci PHP. Na ř.37+38 má místo | být v podmínce || , jedno svislítko je logický (bitový) operátor. Zalomení řádku není n ale \n , navíc v hlavičkách e-mailu by, jestli se nepletu, bylo lepší používat \r\n .
|
||
bicebs Profil |
#12 · Zasláno: 2. 11. 2013, 17:47:34 · Upravil/a: bicebs
Riadky 19,20 som opravil - dal som tam tie úvodzovky ale stále mi píše chyba v riadku 10 a ako mám escapovať riadok 4 .
Pokiaľ si myslel riadok 37 a 38 toto elseif ((strlen ($_POST["prezivka"])>50) | strlen ($_POST["prezivka"])<3)echo "Přezdívka musí mít 3-50 znaků"; elseif ((strlen ($_POST["heslo"])>50) | strlen ($_POST["heslo"])<3) echo "Heslo musí mít 3-50 znaků"; else Neviem či to dobre escapujem ale keď to upravim takto $vysledok=mysql_query("select * from uzivatelia where email='\".$email.\"'", $link); |
||
Tori Profil |
#13 · Zasláno: 2. 11. 2013, 18:21:45
Tečka v reguláru znamená "jakýkoli znak". Pokud má znamenat jen "tečka", tak před ní musí být zpětné lomítko. Jinak by vám tou kontrolou prošel jakýkoli řetězec, který obsahuje za zavináčem aspoň tři jakékoli znaky.
return ereg("^.+@.+\..+$",$cislo); Řádek č.9 by měl (s escapováním pro MySQL) vypadat takto: $vysledok = mysql_query("select * from uzivatelia where email='".mysql_real_escape_string($email)."'", $link); Když si to tak změníte, stále vám to píše chybu na ř.10? A jakou?
|
||
bicebs Profil |
Teraz sa mi vymaže každé \ čo mám spraviť ?
Stále mi vypisuje Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/borec.cz/h/hrynah0vno/prvy skript.php on line 10 |
||
Tori Profil |
Jaké každé
\ ? Odkud?
K té chybě: příčina je v SQL dotazu, přesnou zjistíte podle FAQ: Nejčastější potíže s PHP (FAQ) » Warning mysql_fetch_array() (nebo jiná MySQL funkce): supplied argument is not a valid MySQL result resource… |
||
bicebs Profil |
#16 · Zasláno: 2. 11. 2013, 19:13:24 · Upravil/a: bicebs
Všetky obrátené lomýtka mi to vymazalo
z tade ("^.+@.+\..+$",$cislo) |
||
Tori Profil |
#17 · Zasláno: 2. 11. 2013, 19:26:02
Co používáte za editor?
|
||
bicebs Profil |
webzdarma.cz
Našiel som chybu a opravil ju namiesto názvu databázy som dal názov tabuľky ale teraz mi nič nenapíše pred tím mi napísalo Děkujeme za registraci. Na vaši adresu...byly zaslány informace pro její dokončení. |
||
bicebs Profil |
Keď mám rovnaké meno v phpmyadmin a názov databázy je to problém ?
|
||
jordan Profil * |
#20 · Zasláno: 4. 11. 2013, 09:25:32
na radku 52:
"<a href="$path">$path</a>n". chybí tečky popřípadě {} "<a href='".$path."'>".$path."</a>" řekl bych já |
||
bicebs Profil |
Tvar emailu to overí ale ďalšie podmienky nie problém bude asi niekde tu
function emailvdb ($email, $link) { $vysledok=mysql_query("select * from uzivatelia where email='".mysql_real_escape_string($email)."'", $link); return (boolean) mysql_num_rows($vysledok)or die( mysql_error()); } function prezivkavdb ($prezivka, $link) { $vysledok=mysql_query("select * from uzivatelia where prezivka='".mysql_real_escape_string($prezivka)."'", $link); return (boolean) mysql_num_rows($vysledok) or die( mysql_error()); } // telo skriptu - nejprve si vytvoříme odkaz na databázi $link=mysql_connect("mysql.webzdarma.cz","hrynah0vno","heslo"); mysql_select_db("hrynah0vno"); mysql_query("SET NAMES 'utf8'"); |
||
Časová prodleva: 3 dny
|
|||
Tori Profil |
#22 · Zasláno: 8. 11. 2013, 23:09:19
Jestli vám skript nečekaně skončí někde u těch podmínek, tak příčina je tady:
return (boolean) mysql_num_rows($vysledok) or die( mysql_error()); FALSE, 0, "", NULL apod.), tak se provede druhá část a skript se v tom místě ukončí (podívejte se do manuálu, jak funguje zkrácené vyhodnocování podmínek). Tu označenou část smažte a nechte tam jen return (boolean) mysql_num_rows($vysledok);
|
||
nemeja Profil |
#23 · Zasláno: 9. 11. 2013, 09:22:45
Nestačilo by pro kontrolu, zda se příkaz provedl dát tu podmínku na mysql_query?
function prezivkavdb ($prezivka, $link) { return mysql_query("select * from uzivatelia where prezivka='".mysql_real_escape_string($prezivka)."'", $link); } Případně: function prezivkavdb ($prezivka, $link) { if(mysql_query("select * from uzivatelia where prezivka='".mysql_real_escape_string($prezivka)."'", $link)){ $return = true; } else { $return = mysql_error(); } return $return; A nebo podmínku shrnout na jeden řádek function prezivkavdb ($prezivka, $link) { $query = "select * from uzivatelia where prezivka='".mysql_real_escape_string($prezivka)."'"; return (mysql_query($query, $link) ? true : mysql_error()); } |
||
Tori Profil |
#24 · Zasláno: 9. 11. 2013, 13:04:26
První příklad dělá něco úplně jiného (ověřuje syntaktickou správnost dotazu, nikoli existenci přezdívky v DB), u dalších dvou by si bicebs musel přepsat podmínky na porovnávání identity:
if ( prezivkavdb($_POST['prezivka'], $link) === true ) { (jinak by to mohlo vracet nesprávné výsledky).
|
||
Kubo2 Profil |
Alebo na štrvtom riadku nemejovho posledného kódu poprípade: // ... return (bool) mysql_errno($link); // .. Ospravedlňujem sa za príspevok, príliš letmo som preletel fórum. |
||
Časová prodleva: 10 let
|
0