| 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 uzivateletady 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: 13 let
|
|||
0