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">&nbsp;</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">&nbsp;</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
Č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
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ž
máš tam navyše jeden pár zátvoriek. to sa dá ľahko prehliadnuť. Zmaž ho.
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';

                }

        }
2) nezapomeň validovat vstupy pomocí escapovací funkce, v tvém případě pomocí mysql_real_Escape_string().
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ů!";
        }
        
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: