| Autor | Zpráva | ||
|---|---|---|---|
| soul Profil * |
#1 · Zasláno: 8. 3. 2014, 12:26:14
Dobrý den, zde mám skript na registraci. Bohužel ho mám nejspíš špatně a za boha nemohu najít chybu. (Pokud zadám Registrovat, vyjede mi že mám chybu na řádku 9 ale tu potom v php.ini zakážu. Mohl by mi prosím někdo poradit kde mám chybu?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dokument bez názvu</title>
</head>
<body>
<?php
$kontrola_registrace = $_POST["potvrd_registraci"];
if ($kontrola_registrace) {
$nick = $_POST["nick"];
$password = $_POST["password"];
$potvrd_password = $_POST["potvrd_password"];
$email = $_POST["email"];
if ($password == $potvrd_password){
if ($nick AND $email){
md5(md5($password));
}
mysql_connect("localhost", "root", "7s1u1ff3");
mysql_select_db("vojtuvblog");
$zapis = mysql_query("INSERT INTO uzivatele SET nick='$nick', password='$password', email='$email', opravneni='1';");
echo "Registrace proběhla v pořádku";}
else {echo "Hesla nejsou shodná.";}
}
?>
<form method="POST" action="<?php $PHP_SELF; ?>">
<table>
<td><tr>Nick: <input type="text" name="nick" /> </tr></td><br>
<td><tr>Email: <input type="text" name="email" /> </tr></td><br>
<td><tr>Heslo: <input type="password" name="potvrd_password" /> </tr></td><br>
<td><tr>Potvrd heslo: <input type="password" name="password" /> </tr></td><br>
<td><tr><input type="submit" name="potvrd_registraci" value="Registrovat"</tr></td><br>
</table>
</form>
</body>
</html> |
||
| juriad Profil |
To je tedy bastl neskutečný; snad na každém řádku je nějaká chyba. 9. řádek způsobí jen varování, ale skript pokračuje dál.
Mě tvůj skript beze změny funguje. <!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Dokument bez názvu</title>
</head>
<body>
<?php
if (isset($_POST['registrace'])) { # pokud byl odeslán formulář odesílacím tlačítkem
if (empty($_POST['nick']) || empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email'])) {
echo "Některá pole nejsou vyplněná!";
} else if ($_POST['password'] != $_POST['password2']) {
echo "Kontrola hesla neodpovídá heslu!";
} else {
$pass = sha1($_POST['password']); # použití bezpečnější funkce, jen jednou(!) a uložit výsledek
$db = mysqli_connect("localhost", "root", "TVOJE_TAJNE_HESLO", "vojtuvblog"); # použití mysqli_* místo zastaralého mysql_*; doufám, že tvé přihlašovací údaje nejsou reálné
$sql = "INSERT INTO uzivatele SET nick='"
. mysqli_real_escape_string($db, $_POST['nick']) # escapování vkládaných dat
. "', password='$pass', email='" # heslo není vyloženě třeba escapovat protože sha1 vrací jen znaky 0-9 a a-f
. mysqli_real_escape_string($db, $_POST['email']) . "', opravneni=1"; # na konci dotazu nemá být středník, číslo se nepíše do apostofů
if (!mysqli_query($db, $sql)) { # proveď dotaz a pokud nastala chyba v dotazu
echo "Registrace se nezdařila: ". mysqli_error($db); # vypiš problém, na produkci ho nevypisuj; útočník se dozví informace o databázi
} else {
echo "Registrace proběhla v pořádku";
}
}
}
?>
<form method="POST" action="#"> <!-- sám na sebe-->
<table> <!-- nauč se psát tabulky; je to vždy table -> tr -> td -->
<tr><td>Nick:</td><td><input type="text" name="nick"><td></tr>
<tr><td>Email:</td><td><input type="text" name="email"></td></tr>
<tr><td>Heslo:</td><td><input type="password" name="password"></td></tr>
<tr><td>Potvrd heslo:</td><td><input type="password" name="password2"></td></tr>
<tr><td></td><td><input type="submit" name="registrace" value="Registrovat"></td></tr>
</table>
</form>
</body>
</html> |
||
| Rockstar Profil * |
#3 · Zasláno: 9. 3. 2014, 00:21:17 · Upravil/a: Rockstar
Jak vyřešit tyto chyby?
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Přihlášení</title>
</head>
<body>
<?php
if (isset($_POST['potvrd_prihlaseni'])){
if(empty($_POST['nick']) || empty($_POST['password'])){
echo 'Nick nebo heslo nebylo zadáno. Zadejte prosím všechny položky.';
} else {
$pass = sha1($_POST['password']);
$nick = $_POST['nick'];
$db = mysqli_connect("localhost", "root", "idonthave", "Mordsmordre");
$dotaz = mysqli_query("SELECT * FROM uzivatele WHERE nick='".mysql_real_escape_string($nick)."' AND password='$pass'");
while ($vystup = mysqli_fetch_object($dotaz))
{
$id = $vystup->id;
$nickDB = $vystup->nick;
$passwordDB = $vystup->password;
$email = $vystup->email;
$opravneni = $vystup->opravneni;
}
if($nick != $nickDB || $heslo != $passwordDB){
echo 'Heslo nebo nick se neshoduje.';
} else {
$_SESSION["id"] = $id;
$_SESSION["nick"] = $nick;
$_SESSION["email"] = $email;
$_SESSION["opravneni"] = $opravneni;
echo "Byl jsi přihlášen jako $nick";
}
}
}
?>
<form method="POST" action="#">
<table>
<tr><td>Nick:</td> <td><input type="text" name="nick" /> </td></tr>
<tr><td>Heslo:</td><td> <input type="password" name="password" /></td></tr>
<tr><td></td><td><input type="submit" name="potvrd_prihlaseni" value="Příhlásit"></td></tr>
</table>
</form>
</body>
</html>Chyby: Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\Complex-Web-Server-2\www\VojtuvBlog\prihlaseni.php on line 17 Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, null given in C:\Complex-Web-Server-2\www\VojtuvBlog\prihlaseni.php on line 18 Notice: Undefined variable: nickDB in C:\Complex-Web-Server-2\www\VojtuvBlog\prihlaseni.php on line 26 |
||
| Micruss Profil |
#4 · Zasláno: 9. 3. 2014, 00:36:45
když používáš mysqli tak musíš dát i proměnou s db
$db = # db connect $query = mysqli_query($db, "QUERY"); a pak to poběží oboje :) |
||
| Alphard Profil |
Rockstar:
Přesunul jsem do původního vlákna, vaše problémy částečně souvisí s tím, co vám juriad radil. mysql_ extenze je zastaralá, proto použil mysqli_, kterou lze používat velmi podobně, ale ne stejně. Viz např. nutnost předávat parametr na spojení jak psal [#4] Micruss. |
||
|
Časová prodleva: 12 let
|
|||
0