| Autor | Zpráva | ||
|---|---|---|---|
| jou222 Profil |
Zdravím,
dělám si na svém webu registraci a teď při kontrole jsem zjístil, že je někde v kódu chyba a podmínky nefungují. Někde je chyba a nemůžu ji najít. Budu rád za pomoc a ochotu děkuji jou222. <?php
if(isset($_POST["odeslani_reg"])) {
if ($_POST["user_reg"]) {
if ((strlen ($_POST["user_reg"])<31) && strlen ($_POST["user_reg"])>2) {
if ($_POST["pass_reg"]) {
if ((strlen ($_POST["pass_reg"])<31) && strlen ($_POST["pass_reg"])>5) {
if ($_POST["mail_reg"]){
$registrace = mysql_query("INSERT INTO uzivatele (id_uziv,user,pass,mail,jmeno,prijmeni,id_skupiny) VALUES (null, \"".$_POST["user_reg"]."\",\"".hashovani($_POST["pass_reg"])."\",\"".$_POST["mail_reg"]."\",\"".$_POST["jmeno_reg"]."\",\"".$_POST["prijmeni_reg"]."\",null)");
if($registrace) {
echo '
<meta http-equiv="refresh" content="0;url=index.php?stranka=login">
';
} else echo 'chyba';
} else echo "Není vyplněn E-mail!";
} else echo "Heslo jméno musí obsahovat 6 - 30 znaků!";
} else echo "Není vyplněno heslo!";
} else echo "Uživatelelské jméno musí obsahovat 3 - 30 znaků!";
} else echo "Není vyplněno uživatelelské jméno!";
}
?>
<form method="post" action="">
<div class="modul-registrace-uzivatele">
<h3>Formulář - Registrace uživatele</h3>
<table>
<tr>
</tr>
<tr>
<td><label for="user">*Uživatelské jméno:*</label><br /><span class="label-info">(Délka 3-30 znaků)</span></td><td><input id="input-user" type="text" name="user_reg" ></td></tr>
<tr><td><label for="pass">Heslo:*</label><br /><span class="label-info">(Délka 6-30 znaků)</span></td><td><input id="input-pass" type="password" name="pass_reg"></td></tr>
<tr><td><label for="mail">E-mail:*</label></td><td><input id="input-mail" type="text" name="mail_reg"></td></tr>
<td><label for="jmeno">Jméno:</label><br /><span class="label-info"> </span></td><td><input id="input-user" type="text" name="jmeno_reg" ></td></tr>
<tr><td><label for="prijmeni">Příjmení:</label><br /><span class="label-info"> </span></td><td><input id="input-user" type="text" name="prijmeni_reg"></td></tr>
</table>
</div>
<input type="submit" name="odeslani_reg" value="Registrovat se">
<button type="reset">Reset</button>
<a href="index.php?stranka=homepage"><button type="button" value="Zrušit">Zrušit</button></a>
</form>
<font>* Povinné údaje!</font>
<!--
kodování hesla pomoci hashu sha1 \"".sha1($_POST["pass"])."\" \"".hashovani($_POST["pass"])."\"
-->
|
||
| Camo Profil |
#2 · Zasláno: 19. 2. 2013, 20:15:57
Čo myslíš pod tým, že podmienky nefungujú? Kedy nefungujú? A aká chyba sa ti zobrazuje?
PS: Dúfam, že to do tej DB neposielaš tak ako si napísal. Bez ošetrenia... |
||
| Kubo2 Profil |
#3 · Zasláno: 19. 2. 2013, 23:36:46
jou222:
Ty si teda rozum :D hneď na začiatku v podmienke máš chybu: if ((strlen ($_POST["user_reg"])<31) && strlen ($_POST["user_reg"])>2) { // ...
if ((strlen ($_POST["pass_reg"])<31) && strlen ($_POST["pass_reg"])>5) { // a tu tieža hneď v ďaľšej podmienke znova. načo to tam preboha dávaš? |
||
| Someone Profil |
Kubo2:
Navíc je tam sice má, ale to nezapříčiňuje daný problém. jou222: 1) Piš čitelnější kód a snaž se dodržovat nějaké coding standars, chyby se poté budou lépe odhalovat. ad 1) například if(isset($_POST['jmeno'])){
if(isset($_POST['heslo'])){
echo "Ahoj";
}
}by se dalo zapsat mnohem přehledněji: (při takto krátkém kódu to ani moc nehraje roli a zabírá to zbytečně moc místa, ale až toho bude víc, tak se to projeví) if (isset($_POST['jmeno']))
if (isset($_POST['heslo'])) {
echo 'Ahoj';
}
}3) když při INSERTU vypisuješ názvy sloupců do kterých budeš zapisovat, tak místo uvedení sloupce id a následného zapsání NULL do hodnoty ho můžeš prostě vynechat. 4) nepřesměrovávej pomocí meta tagu, ale pomocí php funkce Header 5) přijde mi zbytečné kontrolovat délku hesla nebo jména a zároveň to jestli byly odeslané. Stačí kontrolvoat tu délku, protože není-li heslo odeslané, dálka bude 0 a nesplní se podmínka o délce hesla. 6) místo uvozovek (") používej v SQL příkazu spíš apostrofy (') 7) V takových případech je nejlepší si zvolit nějaký postup analýzy, kterým se dopátráš toho kde je chyba. Důležité je to, co se po odeslání formuláře vypíše. Vypíše-li se "chyba", tak je to jasné. Nesplnila se podmínka if($registrace) a z toho dojdeme k tomu, že je chyba někde v SQL dotazu. Ten výstup je asi takové klíčové vodítko k tomu, kde ta chyba vlastně nastala. 8) To je asi vše, názorná ukázka toho, že ten kód může vypadat i docela přehledně: <?php
// byl formulář odeslán?
if (isset($_POST["odeslani_reg"])) {
// je jméno dlouhé 3 - 30 znaků?
if (strlen($_POST["user_reg"]<31) && strlen($_POST["user_reg"])>2) {
// je heslo dlouhé 6-30 znaků?
if (strlen($_POST["pass_reg"])<31 && strlen($_POST["pass_reg"])>5) {
// byl vyplněn email?
if (!empty($_POST["mail_reg"])){
// všechny podmínky splněny:
// hodnoty je třeba projet escapovací funkcí mysql_real_Escape_string()
$user = $_POST["user_reg"];
$heslo = $_POST["pass_reg"];
$email = $_POST["mail_reg"];
$jmeno = $_POST['jmeno_reg'];
$prijmeni = $_POST['prijmeni_reg'];
// SQL příkaz do DB
$registrace = mysql_query("
INSERT INTO uzivatele (user,pass,mail,jmeno,prijmeni)
VALUES (
'" . $user . "',
'" . hashovani($heslo) . "',
'" . $email . "',
'" . $jmeno . "',
'" . $prijmeni . "'
)
");
// pokud proběhl sql příkaz v pořádku, přesměrujeme
if($registrace) {
Header("Location: index.php?stranka=login");
exit();
} else {
echo 'chyba';
}
} else {
echo "Není vyplněn E-mail!";
}
} else {
echo "Heslo jméno musí obsahovat 6 - 30 znaků!";
}
} else {
echo "Uživatelelské jméno musí obsahovat 3 - 30 znaků!";
}
} |
||
|
Časová prodleva: 13 let
|
|||
0