Autor | Zpráva | ||
---|---|---|---|
Kos112567 Profil |
Ahoj,
chtěl bych nějak jednoduše zapisovat registrované uživatelé do databáze. Vytvořil jsem si php soubor s připojením do databáze: <? $db_server = '127.0.0.1'; $db_login = 'root'; $db_password = ''; $db_name = 'sokolmilicincz1'; $spojeni = @MySQL_Connect($db_server ,$db_login, $db_password); @mysqli_select_db($db_name)or die('<p style="color: red">Nastala chyba v pripojeni k databazi'); mysqli_query("set names utf8"); ?> a pak registrační stránku s formulářem <?php include "connect.php"; if(isset($_POST['submit'])) { $nick = mysql_real_escape_string($_POST['nick']); $heslo = mysql_real_escape_string($_POST['heslo']); $over_heslo = mysql_real_escape_string($_POST['over_heslo']); $md5_heslo = md5($heslo); $email = mysql_real_escape_string($_POST['email']); $user_check = mysql_query("SELECT login FROM uzivatele WHERE login='".$nick."'"); if($nick==""){echo"Nebyl vyplněn nick!";} else if(mysql_num_rows($user_check)){echo"Tento nick používá již jiný uživatel.";} else if($heslo==""){echo"Nebylo vyplněno heslo";} else if($over_heslo==""){echo"Nebylo vyplněno ověřovací heslo";} else if($heslo!=$over_heslo){echo"Vyplněná hesla se neshodují";} else if($email==""){echo"Nebyl vyplněn email";} else{ $sql= mysql_query("INSERT INTO uzivatele VALUES ('','$nick','$md5_heslo','$email')") or die(mysql_error()); echo"Registrace byla úspěšně dokončena!"; } } ?> <!DOCTYPE html> <html lang="cs-cz"> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="styl.css" type="text/css" /> <title>Web o TJ Sokol Miličín</title> </head> <body> <header> <div id="logo"><img src="obrazky/sokolMale.png" alt="logo"></div> <nav> <ul> <li class="aktivni"><a href="index.php">Domů</a></li> <li><a href="sport.php">Sport</a></li> <li><a href="kultura.php">Kultura</a></li> <li><a href="fotogalerie.php">Fotogalerie</a></li> <li><a href="dokumenty.php">Dokumenty</a></li> <li><a href="historie.php">Historie</a></li> <li class="login"><a href="prihlaseni.php">Přihlášení</a></li> </ul> </nav> </header> <article> <div id="centrovac"> <header> <h1>Registrace</h1> </header> <section> <form action="#" method="post"> <table> <tr> <td>Přezdívka: </td> <td><input type="text" name="nick" value="<?php if(isset($_POST["nick"])){echo $_POST["nick"];}?>" size="25" tabindex="1" /></td> </tr> <tr> <td>Heslo: </td> <td><input type="password" name="heslo" value="" size="25" tabindex="2" /></td> </tr> <tr> <td>Ověření hesla: </td> <td><input type="password" name="over_heslo" value="" size="25" tabindex="3" /></td> </tr> <tr> <td>Email: </td> <td><input type="text" name="email" value="<?php if(isset($_POST["email"])){echo $_POST["email"];}?>" size="25" tabindex="4" /></td> </tr> <tr> <td colspan="2"><input type="submit" name="submit" value="Registrovat se" /></td> </tr> </table> </form> </section> <div class="cistic"></div> </div> </article> <footer> </footer> </body> </html> Nicméně, vždy vždy když otevřu stránku s registrací, tak mi to vypíše že se nepodařilo připojit k databázi (přitom to dělám pouze u sebe, tudíž se domnívám že údaje 127.0.0.1, root a bez hesla je výchozí nastavení phpmyadmin, které jsem si v balíku xampp nainstaloval) Můžu někoho požádat o radu? :) Díky |
||
Enko Profil |
#2 · Zasláno: 24. 1. 2017, 16:49:16
Existuje ta databáze? Založil jsi uživatele, který má oprávnění k této databázi?
|
||
Kos112567 Profil |
Ano, existuje, jmenuje se sokolmilicincz1 a tabulku jsem takto vygeneroval
CREATE TABLE `uzivatele` ( `id` int(5) NOT NULL auto_increment, `login` varchar(40) NOT NULL, `heslo` varchar(32) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; Uživatele, který má opravnění k této databázi? Já jsem tam připojuji jako root, tak se domnívám, že má práva na všechny |
||
Kos112567 Profil |
Přitom pokud tam ručně vložím nějaké záznamy, tak mi to v pořádku načte na stránku. Pokud do toho php vložím vyloženě SQL insert s daty, tak mi to do databáze zapíše též..
|
||
Lonanek Profil |
Kos112567:
$spojeni = @MySQL_Connect($db_server ,$db_login, $db_password); @mysqli_select_db($db_name)or die('<p style="color: red">Nastala chyba v pripojeni k databazi'); mysqli_query("set names utf8"); ?> používejte všude mysqli nebo PDO. MySQL je v novějších verzí PHP nefunkční. |
||
Kos112567 Profil |
#6 · Zasláno: 24. 1. 2017, 18:45:12
Chápu, sice jsem vše přejmenoval na mysqli, nicméně stále mi to hlásí Nastala chyba v připojení-
|
||
Davex Profil |
#7 · Zasláno: 24. 1. 2017, 18:49:51
Kos112567:
Nemohlo by to být třeba tím, že funkcím mysqli_*() předáváš jen jeden argument?
|
||
Kos112567 Profil |
Vyhodí mi to tuto hlášku rovnou, nemusím ani ten formulář odesílat
XAMPP jsem přeinstaloval, nevím ještě, co bych měl dělat... :/ |
||
ArdaGamesTV Profil |
#9 · Zasláno: 24. 1. 2017, 19:11:36
Zkus si stáhnout Vertrigoserver používám ho už skoro rok a od xampu se skoro vůbec neliší. Třeba je ta chyba v Xamppu.
|
||
Kos112567 Profil |
Nevím, pořád mi přijde, že bych měl zadávat špatně login (což všude píší defaultně root) nebo heslo (všude píší, že je vypnnuté) - tohle je můj config.inc.php
<?php /* * This is needed for cookie based authentication to encrypt password in * cookie */ $cfg['blowfish_secret'] = 'xampp'; /* YOU SHOULD CHANGE THIS FOR A MORE SECURE COOKIE AUTH! */ /* * Servers configuration */ $i = 0; /* * First server */ $i++; /* Authentication type and info */ $cfg['Servers'][$i]['auth_type'] = 'config'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = ''; $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['AllowNoPassword'] = true; $cfg['Lang'] = ''; /* Bind to the localhost ipv4 address and tcp */ $cfg['Servers'][$i]['host'] = '127.0.0.1'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; /* User for advanced features */ $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = ''; /* Advanced phpMyAdmin features */ $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; /* * End of servers configuration */ ?> Ok, díky za radu. Vyzkouším :) |
||
Keeehi Profil |
#11 · Zasláno: 24. 1. 2017, 19:21:19
ArdaGamesTV:
Není Kos112567: Problém je v tom, že si vypisuješ svojí verzi hlášky a přitom nevíš, co se vlastně stalo. Vypiš si reálnou chybu, co ti databáze vrátí. $mysqli = new mysqli("127.0.0.1", "root", "", "sokolmilicincz1"); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } ... |
||
Davex Profil |
#12 · Zasláno: 24. 1. 2017, 19:22:47
Kos112567:
„Vyhodí mi to tuto hlášku rovnou, nemusím ani ten formulář odesílat“ To je logické, když ty mysqli_*() funkce, které se spouštějí hned na začátku v connect.php , používáš špatně.
Doporučuji projít příklady v dokumentaci počínaje funkcí mysqli_connect() , kde je i ošetření chyb se zobrazením chybových hlášek.
|
||
Kos112567 Profil |
Ok, takže už to mám dobře :) Díky!
a když se podíváte na ten registrační formulář, tam žádná chyba není? Stále mi to do té databáze nezapisuje uživatele, nicméně teď již to spojení je navázáno. Ani mi to nevypisuje to echo, když nevyplním email... |
||
Lonanek Profil |
#14 · Zasláno: 24. 1. 2017, 20:10:20
Jak vypadá upravený kód?
|
||
Kos112567 Profil |
Takto:
<?php include "connect.php"; if(isset($_POST['submit'])) { $nick = mysqli_real_escape_string($_POST['nick']); $heslo = mysqli_real_escape_string($_POST['heslo']); $over_heslo = mysqli_real_escape_string($_POST['over_heslo']); $md5_heslo = md5($heslo); $email = mysqli_real_escape_string($_POST['email']); $user_check = mysqli_query("SELECT login FROM uzivatele WHERE login='".$nick."'"); if($nick==""){echo"Nebyl vyplněn nick!";} else if(mysqli_num_rows($user_check)){echo"Tento nick používá již jiný uživatel.";} else if($heslo==""){echo"Nebylo vyplněno heslo";} else if($over_heslo==""){echo"Nebylo vyplněno ověřovací heslo";} else if($heslo!=$over_heslo){echo"Vyplněná hesla se neshodují";} else if($email==""){echo"Nebyl vyplněn email";} else{ $sql= mysqli_query("INSERT INTO uzivatele VALUES ('','$nick','$md5_heslo','$email')") or die(mysqli_error()); echo"Registrace byla úspěšně dokončena!"; } } ?> A ten samotný formulář: <form action="#" method="post"> <table> <tr> <td>Login: </td> <td><input type="text" name="nick" value="<?php if(isset($_POST["nick"])){echo $_POST["nick"];}?>" size="25" tabindex="1" /></td> </tr> <tr> <td>Heslo: </td> <td><input type="password" name="heslo" value="" size="25" tabindex="2" /></td> </tr> <tr> <td>Ověření hesla: </td> <td><input type="password" name="over_heslo" value="" size="25" tabindex="3" /></td> </tr> <tr> <td>Email: </td> <td><input type="text" name="email" value="<?php if(isset($_POST["email"])){echo $_POST["email"];}?>" size="25" tabindex="4" /></td> </tr> <tr> <td colspan="2"><input type="submit" name="submit" value="Registrovat se" /></td> </tr> </table> </form> |
||
Lonanek Profil |
Zkuste upravit takto:
<?php include "connect.php"; if(isset($_POST['submit'])) { $nick = mysqli_real_escape_string($link, $_POST['nick']); $heslo = mysqli_real_escape_string($link, $_POST['heslo']); $over_heslo = mysqli_real_escape_string($link, $_POST['over_heslo']); $md5_heslo = md5($heslo); $email = mysqli_real_escape_string($link, $_POST['email']); $user_check = mysqli_query($link, "SELECT login FROM uzivatele WHERE login='".$nick."'"); if($nick=="") {echo "Nebyl vyplněn nick!";} elseif (mysqli_num_rows($user_check)) {echo "Tento nick používá již jiný uživatel.";} elseif ($heslo=="") {echo "Nebylo vyplněno heslo";} elseif ($over_heslo=="") {echo "Nebylo vyplněno ověřovací heslo";} elseif ($heslo!=$over_heslo) {echo "Vyplněná hesla se neshodují";} elseif ($email=="") {echo "Nebyl vyplněn email";} else { $sql= mysqli_query($link, "INSERT INTO uzivatele VALUES (NULL,'$nick','$md5_heslo','$email')") or die(mysqli_error()); echo "Registrace byla úspěšně dokončena!"; } } |
||
Kos112567 Profil |
#17 · Zasláno: 24. 1. 2017, 20:41:54
Stále nic... :/
|
||
Lonanek Profil |
Nějaká hláška?
V příkazech mysqli Vám chybí povinný parametr $spojení |
||
Kos112567 Profil |
Nene, vždycky ty vyplněné textboxy akorát zmizí.
Nehledě na to, když formulář vyplním správně nebo špatně. Úplně bez hlášky. |
||
Lonanek Profil |
mysqli_query ($link, $dotaz);
Již to zmiňoval Davex [#12] |
||
juriad_ Profil * |
#21 · Zasláno: 24. 1. 2017, 20:54:53
Skoro všechny myqli_ funkce chtějí jako parametr spojení s databází. Toto se týká i mysqli_real_escape_string.
|
||
Kos112567 Profil |
#22 · Zasláno: 24. 1. 2017, 21:00:04
Ok, takže ten kód teď vypadá takto
<?php include "connect.php"; if(isset($_POST['submit'])) { $nick = mysqli_real_escape_string($link, $_POST['nick']); $heslo = mysqli_real_escape_string($link, $_POST['heslo']); $over_heslo = mysqli_real_escape_string($link, $_POST['over_heslo']); $md5_heslo = md5($heslo); $email = mysqli_real_escape_string($link, $_POST['email']); $user_check = mysqli_query($link, "SELECT login FROM uzivatele WHERE login='".$nick."'"); if($nick=="") {echo "Nebyl vyplněn nick!";} elseif (mysqli_num_rows($link, $user_check)) {echo "Tento nick používá již jiný uživatel.";} elseif ($heslo=="") {echo "Nebylo vyplněno heslo";} elseif ($over_heslo=="") {echo "Nebylo vyplněno ověřovací heslo";} elseif ($heslo!=$over_heslo) {echo "Vyplněná hesla se neshodují";} elseif ($email=="") {echo "Nebyl vyplněn email";} else { $sql= mysqli_query($link, "INSERT INTO uzivatele VALUES (NULL,'$nick','$md5_heslo','$email')") or die(mysqli_error()); echo "Registrace byla úspěšně dokončena!"; } } ?> Nicméně stále to nefunguje, viz ten můj předchozí příspěvek |
||
Lonanek Profil |
A v config.php nastavuje spojení do jaké proměnné?
Podle prvního příspěvku se jmenuje $spojeni |
||
Kos112567 Profil |
#24 · Zasláno: 24. 1. 2017, 21:05:18
Myslíš v connect.php? $spojeni se to jmenovalo, nicméně jak jsem to upravoval, tak jsem tam nechal název $link
Viz connect.php kód <?php $link = mysqli_connect("127.0.0.1", "root", "", "sokolmilicincz1"); if (!$link) { echo "Error: Unable to connect to MySQL." . PHP_EOL; echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; exit; } echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL; echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL; mysqli_close($link); ?> |
||
Lonanek Profil |
#25 · Zasláno: 24. 1. 2017, 21:07:24
No když se před spuštěním samotného kódu (dotazů) spojení uzavře nemůže to fungovat správně.
Vyhoďte z kódu mysqli_close($link);
|
||
Kos112567 Profil |
Ajo, já jsem *****:) To je tak, když to tupě kopíruju a ani si to pořádně nečtu.
No, nicméně i bez tohoto řádku se to chová stále stejně... |
||
Lonanek Profil |
#27 · Zasláno: 24. 1. 2017, 21:26:31
Mě to na lokálu v pohodě projde. Včetně chybových hlášek o nevyplnění polí.
|
||
Kos112567 Profil |
Ale i kdyby bylo spojení zavřené, tak ty moje podmínky (nebylo vyplněno heslo, email, hesla se neshodují), by měly vypsat nějaké echo, nebo ne?
Aha, tak to je opravdu podivné... Jinak používám Phpstorm 2016.3.2 a XAMPP s PHP 7 - nemohl by být v tom nějak problém? Já si to jinak moc neumím vysvětlit, interpreter mám v IDE nastaven na C:\xampp\php\php.exe Verzi PHP nastavenou stejnou jako CLI interpreter (tedy tu verzi 7) |
||
Lonanek Profil |
#29 · Zasláno: 24. 1. 2017, 21:37:50
mám to takto:
index.php <?php include "connect.php"; if (isset($_POST['submit'])) { $nick = mysqli_real_escape_string($link, $_POST['nick']); $heslo = mysqli_real_escape_string($link, $_POST['heslo']); $over_heslo = mysqli_real_escape_string($link, $_POST['over_heslo']); $md5_heslo = md5($heslo); $email = mysqli_real_escape_string($link, $_POST['email']); $user_check = mysqli_query($link, "SELECT login FROM uzivatele WHERE login='".$nick."'"); if($nick=="") { echo "Nebyl vyplněn nick!"; } elseif (mysqli_num_rows($user_check)) { echo "Tento nick používá již jiný uživatel."; } elseif ($heslo=="") { echo "Nebylo vyplněno heslo"; } elseif ($over_heslo=="") { echo "Nebylo vyplněno ověřovací heslo"; } elseif ($heslo!=$over_heslo) { echo "Vyplněná hesla se neshodují"; } elseif ($email=="") { echo "Nebyl vyplněn email"; } else { $sql= mysqli_query($link, "INSERT INTO uzivatele VALUES (NULL,'$nick','$md5_heslo','$email')") or die(mysqli_error()); echo "Registrace byla úspěšně dokončena!"; } } echo ' <form action="#" method="post"> <table> <tr> <td>Login: </td> <td><input type="text" name="nick" value="'. (isset($_POST["nick"]) ? $_POST["nick"] : '') .'" size="25" tabindex="1" /></td> </tr> <tr> <td>Heslo: </td> <td><input type="password" name="heslo" value="" size="25" tabindex="2" /></td> </tr> <tr> <td>Ověření hesla: </td> <td><input type="password" name="over_heslo" value="" size="25" tabindex="3" /></td> </tr> <tr> <td>Email: </td> <td><input type="text" name="email" value="' . (isset($_POST["email"]) ? $_POST["email"] : '') . '" size="25" tabindex="4" /></td> </tr> <tr> <td colspan="2"><input type="submit" name="submit" value="Registrovat se" /></td> </tr> </table> </form>'; connect.php <?php $link = mysqli_connect("127.0.0.1", "root", "", "test"); if (!$link) { echo "Error: Unable to connect to MySQL." . PHP_EOL; echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; exit; } echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL; echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL; echo "<br /><br />"; A vše funguje jak má. |
||
Kos112567 Profil |
#30 · Zasláno: 24. 1. 2017, 21:44:50
Ano, mám to na mezeru naprosto stejné - jediné, co se stane je, že v adresním řádku po stisku tlačítka Registrovat se přibude #.
Jinak používám Google Chrome, teď jsem to zkusil na Firefoxu a ten mi při pokusu o odeslání formuláře hodí 404 |
||
Téma pokračuje na další straně.
|
0