Autor | Zpráva | ||
---|---|---|---|
Xavi Profil * |
#1 · Zasláno: 12. 4. 2010, 18:36:10
Ahoj,
chtěl bych se zeptat, jestli někoho napadá, proč tenhle skript pro reg. uživatele nefunguje. je to příklad z Linuxsoftu. po nahrazení této části kódu $hlavicky="From: ".$_POST["email"]."\nReturn-Path:".$_POST["email"]; @mail ($_POST["email"], "Registrace na portalu", $telo, $hlavicky, "-f ".$_POST["email"]); tímto @mail ($_POST["email"], "Registrace na portalu", $telo); se mail odešle. <? function JeEmail ($cislo) { return ereg("^.+@.+\..+$",$cislo); } function emailvdb ($email) { $vysledek=mysql_query("select * from uzivatele where email='".$email."'", $GLOBALS["link"]); return (boolean) mysql_num_rows($vysledek); } function prezdivkavdb ($prezdivka) { $vysledek=mysql_query("select * from uzivatele where prezdivka='".$prezdivka."'", $GLOBALS["link"]); return (boolean) mysql_num_rows($vysledek); } $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"])) echo "Uvedený e-mail je již registrován"; elseif (prezdivkavdb ($_POST["prezdivka"])) { echo "Uvedená přezdívka je již registrována "; echo "(<a href=\"index.php?clanek=zapomenuteheslo\">připomenout heslo</a>)"; } elseif ((strlen ($_POST["prezdivka"])>50) | strlen ($_POST["prezdivka"])<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 uzivatele (email, prezdivka, heslo) values ('".$_POST["email"]."', '".$_POST["prezdivka"]."', '".$_POST["heslo"]."');", $GLOBALS["link"]); $lastid=mysql_insert_id(); // a sestavíme e-mail s instrukcemi, jak registraci dokončí $path="http://".$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SE RVER["SCRIPT_NAME"]."?clanek=registracedokoncena&id=".$citlive; $telo = "Dekujeme Vam za registraci na nasem portale [nazev hudebniho portalu]. Pro dokonceni ". "registrace navstivte nasledujici odkaz\n\n$path\n\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):?> <form method="post" action="index.php?clanek=registrace"> <table> <tr> <td>Přezdívka:</td> <td><input name="prezdivka" value="<?echo $_POST["prezdivka"]?>"></td> </tr> <tr> <td>E-mail:</td> <td><input name="email" value="<?echo $_POST["email"]?>"></td> </tr> <tr> <td>Heslo:</td> <td><input name="heslo" type = "password" value="<?echo $_POST["heslo"]?>"></td> </tr> <tr> <td colspan="2"><input type="Submit" name="odesli" value="Zaregistrovat"></td> </tr> </table> </form> <?endif;?> 2.část otázky, když se pošle ten mail po úpravě těch dvou řádek, stejně se mi nedaří registraci přes mail potvrdit(v databázi se 0 změní na 1), neboť toto nefunguje. : <? $sifra= new Crypt_Xtea; $citlive=$sifra->decrypt(base64_decode(urldecode($_GET["id"])),"T3dX?2.5du"); $udaje=explode("|",$citlive); mysql_query("update uzivatele set registracedokoncena=1 where id=".$udaje[0]." and email='".$udaje[1]."';",$GLOBALS["link"]); if (mysql_affected_rows()==1) echo "Vaše registrace byla dokončena."; else echo "Příkaz nebyl proveden, zřejmě jsou nesprávné parametry nebo již registrace byla dokončena"; ?> Předem děkuju za všechny podněty a nápady. Díky, Xavi |
||
Beavis Profil |
#2 · Zasláno: 12. 4. 2010, 18:53:17
Xavi:
Začal bych povolením výpisu chyb. Hned budete moudřejší.. |
||
Xavi Profil * |
#3 · Zasláno: 12. 4. 2010, 19:00:50
Chyby se mi vypisují, řekl bych, např. kdyby mi chyběl config.php tak se to ozve.
Pokud po změně kódu mail přijde, a zkusím potvrdit tu registraci, vypíše se toto: Příkaz nebyl proveden, zřejmě jsou nesprávné parametry nebo již registrace byla dokončena... |
||
Majkl578 Profil |
#4 · Zasláno: 12. 4. 2010, 19:10:33
Odstranil bych zavináč před funkcí mail, třeba se dozvíme něco zajímavého.
V tom druhém kódu bych zkontroloval, co vrací funkce mysql_query, pokud false, vypiš si mysql_error. |
||
Xavi Profil * |
#5 · Zasláno: 12. 4. 2010, 19:40:14
tak po odstranění zavináče to vypsalo
Warning: mail() [function.mail]: SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE in /data/www/www_adresa_com/16/registrace.php on line 61 |
||
Xavi Profil * |
#6 · Zasláno: 12. 4. 2010, 19:43:09
A nevím, jak použít string mysql_error. dá se vypat přes
echo |
||
Majkl578 Profil |
#7 · Zasláno: 12. 4. 2010, 20:08:29
|
||
Xavi Profil * |
#8 · Zasláno: 12. 4. 2010, 20:11:04
Pátý argument? Tím je v tomhle případě co?
|
||
slim12 Profil |
#9 · Zasláno: 12. 4. 2010, 20:11:43 · Upravil/a: slim12
Xavi:
na řadku 9-10 v tom kodu co jsi napsal mas spatne zapsano: $vysledek=mysql_query("select * from uzivatele where prezdivka='".$prezdivka."'", $GLOBALS["link"]); a mnělo by to bejt: $vysledek=mysql_query("select * from uzivatele where prezdivka='".$prezdivka."', "'.$GLOBALS["link"].'""); a na jiných řadkach maš stejnou chybu |
||
Xavi Profil * |
#10 · Zasláno: 12. 4. 2010, 20:17:24
Jsi si jistý, že je to chyba?
|
||
panther Profil |
#11 · Zasláno: 12. 4. 2010, 20:20:25
Xavi:
„Pátý argument? Tím je v tomhle případě co?“ to je to, co je ve funkci mail za 4. čárkou. |
||
slim12 Profil |
#12 · Zasláno: 12. 4. 2010, 20:21:01
jistý nejsem ale vim ze se proměnne do SQL se pišou tak ale skus to.pak se podivej zase na řadek 61 co ti vypisuje chyba myslim že tam maš taky chybu
|
||
panther Profil |
#13 · Zasláno: 12. 4. 2010, 20:23:35
slim12:
„jistý nejsem ale vim ze se proměnne do SQL se pišou tak ale skus to“ ne, ten zápis je dobře. Není to hodnota vkládaná do tabulky, ta patří do apostrofů. Tohle je identifikátor připojení, v tomto případě (při jednom připojení k DB) zbytečný. „pak se podivej zase na řadek 61 co ti vypisuje chyba myslim že tam maš taky chybu“ chybu dělá rozdělený název proměnné, zalomení řárků. |
||
slim12 Profil |
php ti muže hazet taky chyby kvuli uvozovkam:
$path="http://".$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SE RVER["SCRIPT_NAME"]."?clanek=registracedokoncena&id=".$citlive skus to taky změnit na: |
||
slim12 Profil |
#15 · Zasláno: 12. 4. 2010, 20:27:25
aha tak sorry
|
||
Xavi Profil * |
#16 · Zasláno: 12. 4. 2010, 20:28:29
To zalamuje tahle diskuze...
|
||
panther Profil |
#17 · Zasláno: 12. 4. 2010, 20:31:44
slim12:
„php ti muže hazet taky chyby kvuli uvozovkam:“ může, tebou uvedené zápisy jsou stejné. Xavi: „To zalamuje tahle diskuze...“ já vím, slim12 si zkopíroval kód k sobě a upozorňoval na chybu na řádku 61, která tam vlastně není. Trochu jsem se teď ztratil, s čímže to vlastně máš ještě problém. Umazal jsi pátý parametr ve funkci mail a nějaké další problémy máš? |
||
Xavi Profil * |
#18 · Zasláno: 12. 4. 2010, 20:34:38
Odstraněním toho pátehé argumentu to začalo běhat, tedy, první čás tscriptu. takže teď ještě potřebuju přijít na to, proč nefunguje schvalování... to jest:
<? $sifra= new Crypt_Xtea; $citlive=$sifra->decrypt(base64_decode(urldecode($_GET["id"])),"T3dX?2.5du"); $udaje=explode("|",$citlive); mysql_query("update uzivatele set registracedokoncena=1 where id=".$udaje[0]." and email='".$udaje[1]."';",$GLOBALS["link"]); if (mysql_affected_rows()==1) echo "Vaše registrace byla dokončena."; else echo "Příkaz nebyl proveden, zřejmě jsou nesprávné parametry nebo již registrace byla dokončena"; ?> |
||
slim12 Profil |
#19 · Zasláno: 12. 4. 2010, 20:36:36 · Upravil/a: slim12
panther:
moje uvedene zapisy nejsou stene podivejse do pole $_SERVER['SERVER_NAME'] |
||
panther Profil |
#20 · Zasláno: 12. 4. 2010, 20:43:58
slim12:
„namisto toho aby ses se mnou hadal“ já se s tebou nehádám, jen opravuji tvé nepřesné výroky. „moje uvedene zapisy nejsou stene podivejse do pole“ jsou různé, ale funkčně stejné. „tak bys mohl skusit hledat chybu v kodu Xavi“ dokud nenapíše chybovou hlášku, odmítám se tím kódem probírat. Jediná chybová hláška se týkala 5. argumentu funkce mail, ten je opraven. |
||
panther Profil |
#21 · Zasláno: 12. 4. 2010, 20:49:13
Xavi:
na řádku 5 máš navíc na konci středník. Už ti bylo řečeno, že si máš vypsat mysql_error(). Ignoruješ dobře míněné rady, máme ti to tu omýlat pořád dokola? |
||
Xavi Profil * |
#22 · Zasláno: 12. 4. 2010, 20:49:29
Při přidání
echo string mysql_error Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in /data/www/www_adresa_com/16/registracedokoncena.php on line 9 |
||
Xavi Profil * |
#23 · Zasláno: 12. 4. 2010, 20:50:15
Sorry, byl jsem si uvařit kafe.
|
||
slim12 Profil |
#24 · Zasláno: 12. 4. 2010, 20:50:22 · Upravil/a: slim12
no tak sorry panther moje chyba.ješte jednou sorry
|
||
panther Profil |
#25 · Zasláno: 12. 4. 2010, 20:52:19 · Upravil/a: panther
Xavi:
„echo string mysql_error“ mysql_query ("update uzivatele set registracedokoncena=1 where id=".$udaje[0]." and email='".$udaje[1]."'") or die (mysql_error()); echo ("update uzivatele set registracedokoncena=1 where id=".$udaje[0]." and email='".$udaje[1]."'"); //případně, pokud bude chyba, vypiš si dotaz, jestli jsou dobře naplněné proměnné udaje0 a udaje1 |
||
Xavi Profil * |
#26 · Zasláno: 12. 4. 2010, 20:52:31
btw: je to správně napsané? echo string mysql_error;
|
||
Xavi Profil * |
#27 · Zasláno: 12. 4. 2010, 20:54:31
OPRAVENO, tedy:
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 'and email=''' at line 1 |
||
Xavi Profil * |
#28 · Zasláno: 12. 4. 2010, 21:12:32
Jak to muze mit chybu near and email at line 1 kdyz at lin 1 nic takovýho nemám?
|
||
panther Profil |
#29 · Zasláno: 12. 4. 2010, 21:15:38
Xavi:
„Jak to muze mit chybu near and email at line 1“ „near“ = blízko, vedle. Máš chybu v dotazu vedle uvedeného řetězce, zpravidla vlevo od něj. Neměla by tam náhodou být závorka? „kdyz at lin 1 nic takovýho nemám?“ 1. řádek SQL dotazu. Vzhledem k tomu, že je celý na jeden řádek, na jiném než prvním řádku chyba být nemůže. |
||
Xavi Profil * |
#30 · Zasláno: 12. 4. 2010, 21:21:25
Vím co znamená near :-)
jestli tam má být závorka, nechápu proč ani jak... |
||
Téma pokračuje na další straně.
|
0