Autor | Zpráva | ||
---|---|---|---|
libormasek Profil |
#1 · Zasláno: 24. 10. 2013, 12:10:21
Ahoj mám problém s regostarcí php a msql databáze
tady je můj registrační formulář vše je dobře ale když to vložím na endoru,tak se my neukládají registrovaní uživatele co stím?A co mám špatně? Děkuji za pomoc <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <title>Registrace</title> </head> <body> <?php $kontrola_odeslani = $_POST["tlacitko"]; if($kontrola_odeslani){ $nick = $_POST["nick"]; $heslo = $_POST["heslo"]; $potvrd_heslo = $_POST["potvrd_heslo"]; $email = $_POST["email"]; if($heslo == $potvrd_heslo){ if($nick AND $email){ $heslo = md5(md5($heslo)); mysql_connect("localhost", "root", ""); mysql_select_db("databaze"); $ip = $_SERVER["REMOTE_ADDR"]; $zapis = mysql_query("INSERT INTO uzivatele SET nick='$nick', heslo='$heslo', email='$email', ip='$ip', opravneni='1' ;"); echo "Registrace proběhla v pořádku."; } else { echo "Nezadal jsi nick nebo email."; } } else { echo "Hesla nejsou shodná!"; } } ?> <p> <form action="<?php $PHP_SELF; ?>" method="POST"> <table> <tr><td>Nick: </td><td><input type="text" name="nick" /></td></tr> <tr><td>Heslo: </td><td><input type="password" name="heslo" /></td></tr> <tr><td>Potvrď Heslo: </td><td><input type="password" name="potvrd_heslo" /></td></tr> <tr><td>E-mail: </td><td><input type="text" name="email" /></td></tr> <tr><td><input type="submit" name="tlacitko" value="Registrovat" /></td></tr> </table> </form> </p> </body> </html> |
||
Meris Profil * |
#2 · Zasláno: 24. 10. 2013, 12:17:51
Ahoj,
co ti to vypisuje za chybu? |
||
libormasek Profil |
#3 · Zasláno: 24. 10. 2013, 12:31:06
No jde o to že když to testuju tak my to napíše registrace proběhla v pořádku...Ale broblém je v tom že se my to neukládá do databáze tabulky krerou jsem vytvořil
|
||
maks Profil |
libormasek:
- vyhoď na 21. ř. přebytečný středník - vypiš si, co do té DB posíláš, jestli je v proměnných to, co má být - vypiš si mysql_error() |
||
libormasek Profil |
#5 · Zasláno: 24. 10. 2013, 14:11:48
středníkem to není..Když ho vymažu tak my zmizne celá tabulka registrace
|
||
Tori Profil |
#6 · Zasláno: 24. 10. 2013, 16:09:39
libormasek:
1. maks myslel ten středník uvnitř SQL dotazu. Je tam spíš zbytečný, chybu AFAIK nezpůsobí. Mezi řádky 21 a 22 musíte ověřit, jestli dotaz proběhl v pořádku (tj. jestli proměnná $zapis není FALSE). V případě chyby zjistíte její popis zmíněnou funkcí mysql_error (viz též FAQ)
2. Data, která vkládáte do databáze musíte escapovat. Jinak stačí napsat do formuláře apostrof a SQL dotaz vám selže se syntaktickou chybou. $sql = "INSERT INTO uzivatele SET nick='" . mysql_real_escape_string($nick) ."', heslo='" . mysql_real_escape_string($heslo) . "', email='" . mysql_real_escape_string($email) . "', ip='" . mysql_real_escape_string($ip) . "', opravneni=1"; $zapis = mysql_query($sql); |
||
libormasek Profil |
#7 · Zasláno: 24. 10. 2013, 17:43:10
Tady je můj email.
Klikacka.eu@seznam.cz tak my napište a já vám pošlu odkaz mě to prostě nejde nevím co dělám špatně |
||
Tori Profil |
libormasek:
A máte správně nastavené připojení k databázi? Předpokládám, že na Endoře by neměl být uživatel "root". edit: Taky by možná pomohlo zapnout si zobrazování všech chyb: Nejčastější potíže s PHP (FAQ) » Zapnutí výpisu všech chyb a varování |
||
libormasek Profil |
#9 · Zasláno: 24. 10. 2013, 18:37:44
Ne chybu to neháže..Chyba je jen s připojením a uložením do databáze
mysql_connect("localhost", "root", ""); mysql_select_db("databaze"); $ip = $_SERVER["REMOTE_ADDR"]; $zapis = mysql_query("INSERT INTO uzivatele tady má být v těch řádcích ale nevím co a kam dám .. |
||
Enko Profil |
#10 · Zasláno: 24. 10. 2013, 19:22:03
Uprav si kód na ukládání do DB třeba takto:
if(mysql_query($sql_dotaz)){ //update probehl v poradku } else{ echo "MySQL chyba " . mysql_errno() . " - " . mysql_error() . "<br>"; } Dej vědět, jestli to to po mé úpravě, vrátí nějakou chybu. |
||
libormasek Profil |
#11 · Zasláno: 24. 10. 2013, 20:06:58
Enko:
Pěkné video děkuji moc co právě začínám,a chci si vytvořit takoví malí cheat.. s registrací . A začínám tvořit takže nejsem profík...Za každou radu jsem rád |
||
Enko Profil |
#12 · Zasláno: 24. 10. 2013, 23:54:08
Ještě doplním k mému kusu kódu, že toto je jen pro vývojové prostředí a testování. Na ostré aplikaci samozřejmě nikdy nevypisuj chyby z běhového prostředí jako jsou i ty dvě z MySQL, ale místo toho tyto chyby někde zachytávej (například včetně celého SQL dotazu, který selhal)a pravidelně kontroluj, zda vše funguje jak má a uživateli při selhání uložení oznam nějakou hlášku, že se uložení nezdařilo. Radši se 8x zeptej než něco blbě udělej :-) Potřebuješ ještě s něčím helfnout?
|
||
libormasek Profil |
#13 · Zasláno: 25. 10. 2013, 08:23:52
Enko:
Ahoj Zatím ne.Musím přít na tu chybu,proč se my to pořád neukládá do databáze. Začnu z nova..Jinak děkuji |
||
Enko Profil |
Super přístup! :-)
Trošku jsem ti to opravil a zakomentoval, abys vedel co a proc. Zabralo mi to pár minut a neoveroval jsem to, ale snad jsem nic neprehlidnul. Tak na to mrkni a dej vědět. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <title>Registrace</title> </head> <body> <?php /** Vygenerování náhodného řetězce * @param int délka vráceného řetězce * @param int použité znaky: <=10 číslice, <=36 +malá písmena, <=62 +velká písmena * @return string náhodný řetězec * @copyright Jakub Vrána, http://php.vrana.cz/ */ function rand_chars($count = 8, $chars = 36) { $return = ""; for ($i=0; $i < $count; $i++) { $rand = rand(0, $chars - 1); $return .= chr($rand + ($rand < 10 ? ord('0') : ($rand < 36 ? ord('a') - 10 : ord('A') - 36))); } return $return; } //byla odeslana POST data, lepsi nez to tvoje, protoze kontrolovat existenci $_POST pole nemusi vzdy fungovat if($_SERVER["REQUEST_METHOD"] == "POST"){ //kontrola vstupu, nasbirame chyby, pokud jsou if(empty($_POST["nick"])){$chyba[] = "<p class=\"error\"> Vyplň nick.</p>";} if(empty($_POST["heslo"])){$chyba[] = "<p class=\"error\"> Vyplň heslo.</p>";} if(empty($_POST["potvrd_heslo"])){$chyba[] = "<p class=\"error\"> Vyplň \"Potvrd heslo\".</p>";} if($_POST["heslo"] != $_POST["potvrd_heslo"]) {$chyba[] = "<p class=\"error\"> Zadana hesla se neshoduji.</p>";} if(!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)){$chyba[] = "<p class=\"error\">Pole \"Email\" není platný email.</p>";} //overime, jestli mame chyby ze vstupu, pokud ano, vypiseme je if(is_array($chyba)){ foreach($chyba as $value){ echo $value; } } //vse OK, jdeme zpracovat else{ //pripojeni k databazi $spojeni = mysql_connect("localhost","user","password"); if(!$spojeni){ echo "Nepodařilo se připojit k databázi.<br>"; } else{ mysql_select_db("databaze"); //vybereme databazi mysql_query("set names 'cp1250'"); //nastaveni kodovani databaze } //osetreni vstupu do databaze proti SQL Injection $nick = mysql_real_escape_string($_POST["nick"]); $heslo = mysql_real_escape_string($_POST["heslo"]); $potvrd_heslo = mysql_real_escape_string($_POST["potvrd_heslo"]); $email = mysql_real_escape_string($_POST["email"]); $ip = mysql_real_escape_string($_SERVER["REMOTE_ADDR"]); $salt = rand_chars(); //vygenerovani nahodneho retezce jako soli $hash_heslo = hash_hmac('sha512',$heslo , $salt); //zahashujeme heslo, muzes si zvolit i jiny pomaly hashovaci algoritmus //zde by bylo vhodne zjistovat, zda uzivatel s touto emailovou adresou jiz neexistuje //vytvoris si SQL dotaz na databazi $sql = 'INSERT INTO uzivatele (`nick`, `heslo`, `salt`, `email`, `ip`) VALUES (\''.$nick.'\', \''.$hash_heslo.'\', \''.$salt.'\', \''.$email.'\', \''.$ip.'\')'; if(mysql_query($sql)){ //Vse ulozeno, presmerujeme na stranku, ze je registrace OK header("Location: http://www.web.cz/registrace.php?registrovano=ok", true, 303); exit; } else{ //nepodarilo ze ulozit data echo "Nepodarilo se ulozit do DB. MySQL chyba " . mysql_errno() . " - " . mysql_error() . "<br>";//jen pro vyvojove prostredi, na ostry web jen hlasku, ze se to nezdarilo } } } ?> <p> <form action="" method="POST"> <!-- pokud posilas formular sam na sebe, hodnota v action muze byt prazdna, pokud chces neco psat, musis osetrovat v htmlspecialchars() jako obrana proti XSS --> <table> <tr><td>Nick: </td><td><input type="text" name="nick" maxlength="50" size="30" value="<?php echo htmlspecialchars($_POST["nick"]);?>" /></td></tr> <!-- veskere vstupy uzivatele na stranku osetruj pres htmlspecialchars, jako obranu pred XSS --> <tr><td>Heslo: </td><td><input type="password" name="heslo" maxlength="50" size="30" /></td></tr> <!-- z bezpecnostich duvodu nevypisujeme znovu heslo--> <tr><td>Potvrď Heslo: </td><td><input type="password" name="potvrd_heslo" maxlength="50" size="30" /></td></tr> <!-- z bezpecnostich duvodu nevypisujeme znovu heslo--> <tr><td>E-mail: </td><td><input type="text" name="email" maxlength="50" size="30" value="<?php if(isset($_POST["email"])){echo htmlspecialchars($_POST["email"]);} else{echo "@";}?>" /></td></tr> <tr><td><input type="submit" name="tlacitko" value="Registrovat" /></td></tr> </table> </form> </p> </body> </html> |
||
libormasek Profil |
#15 · Zasláno: 25. 10. 2013, 11:42:50
Enko:
Na endoře to píše chybu po odeslání registrace Nepodařilo se připojit k databázi. Nepodarilo se ulozit do DB. MySQL chyba 1045 - Access denied for user 'root'@'srv93.endora.cz' (using password: NO) |
||
Enko Profil |
#16 · Zasláno: 25. 10. 2013, 11:47:01
Takže chyba je jasná. V tomto řádku je něco špatně:
mysql_connect("localhost","user","password"); |
||
libormasek Profil |
#17 · Zasláno: 25. 10. 2013, 14:23:43
Nejde my to ať dělám co dělám prostě my to nejde..
Už vážně nevím |
||
libormasek Profil |
#18 · Zasláno: 25. 10. 2013, 19:02:32
Enko:
už to funguje ...Hurá :) Měl jsem chybu ve mysql_select_db("domazlice"); místo domazlice tam bylo uzivatele trochu skoumání a člověk na to příde když to nezdá |
||
libormasek Profil |
#19 · Zasláno: 25. 10. 2013, 20:30:32
Prosím o radu Mám účet na endoře a nefunguje my ukládání registrace do databáze..Někde mám chybu a nevím kde mysql_connect("localhost", "sql9.endora.cz","nick", "heslo"); mysql_select_db("test"); $zapis = mysql_query("INSERT INTO phpmyadmin SET nick='$nick |
||
Petr_ Profil * |
#20 · Zasláno: 25. 10. 2013, 20:49:34
Asi proto, že máte špatně parametry v připojení k DB. Správně to má být asi:
mysql_connect("sql9.endora.cz","nick", "heslo"); (Tipuji, neznám reálné hodnoty, ale je nutné dodržet jejich pořadí a význam.)
Ale to už zmiňoval [#16] Enko dříve. Opravdu máte v databázi nazvané test tabulku s názvem phpmyadmin? |
||
Tori Profil |
|||
libormasek Profil |
#22 · Zasláno: 25. 10. 2013, 21:15:41
Petr:
Ne zatím to vše testu aby to spránvně fungovalo...Důležeté je aby to šlo napřed ukládat Pak to všechno změním... |
||
Časová prodleva: 11 let
|
0