Autor Zpráva
studentt
Profil *
Dobrý den, vytvořil jsem velice jednoduchý kód pro registraci, ale potřebuji poradit jak mám porovnat nicky v databázi s nově zapisovaným aby se neschodovali náhodou (uživatelská jména). Předem děkuji za odpověď. studentt
        $nick = $_REQUEST["nick"];
        $heslo = $_REQUEST["heslo"];
        $jmeno = $_REQUEST["jmeno"];
        $primeni = $_REQUEST["primeni"];
        $email = $_REQUEST["email"];
        $pravidla = $_REQUEST["pravidla"];
        if ($nick=="" || $heslo=="" || $jmeno=="" || $primeni=="" || $email=="" || $pravidla==""){
         echo '<p>*Vyplnění všech údajů a přijetí pravidel je povinné!</p>';
        }
        else {
         require "db.php"; 
         $sql="INSERT INTO uzivatele (nick, heslo, jmeno, primeni, email)
         VALUES
         ('$_POST[nick]','$_POST[heslo]','$_POST[jmeno]','$_POST[primeni]','$_POST[email]')";
         if (!mysql_query($sql,$con)){
          die('Error: ' . mysql_error());
         }
         echo '<p class="trureg">Jste registrován! Nyní se můžete přihlásit.</p>';
         mysql_close($con);
        }
        echo '<a href="?stranka=hlavni-stranka">Zpě na hlavní stránku</a>';
Sir Tom
Profil
studentt:
Také dobrý den,

před insertem do databáze musíš projít všechny řádky v databázi a porovnat sloupec nick s $nick:

$result = mysql_query("SELECT * FROM uzivatel WHERE nick = '".$nick."'");

Jestliže tento dotaz vrátí nula řádků (žádný řádek), tak $nick se v db nenachází a teprve poté můžeš použít funkci insert.
studentt
Profil *
Sir Tom: Děkuji za odpověď, funguje.


Tak jsem asi předčasně jásal, někde jsem asi nechal chybu nebo vás nepochopil protože pro změnu všechna jména již existují:
        $nick = $_REQUEST["nick"];
        $heslo = $_REQUEST["heslo"];
        $jmeno = $_REQUEST["jmeno"];
        $primeni = $_REQUEST["primeni"];
        $email = $_REQUEST["email"];
        $pravidla = $_REQUEST["pravidla"];
        if ($nick=="" || $heslo=="" || $jmeno=="" || $primeni=="" || $email=="" || $pravidla==""){
         echo '<p>*Vyplnění všech údajů a přijetí pravidel je povinné!</p>';
        }
        else {
         require "db.php";
         $result = mysql_query("SELECT * FROM uzivatele WHERE nick = '".$nick."'");
         if ($result == ""){ 
         $sql="INSERT INTO uzivatele (nick, heslo, jmeno, primeni, email)
         VALUES
         ('$_POST[nick]','$_POST[heslo]','$_POST[jmeno]','$_POST[primeni]','$_POST[email]')";
         if (!mysql_query($sql,$con)){
          die('Error: ' . mysql_error());
         }
         echo '<p class="trureg">Jste registrován! Nyní se můžete přihlásit.</p>';
         mysql_close($con);
         }
         else {
          echo'Uživatelské jméno již exiastuje';
         }
        }
martin1312
Profil
tak to veru neviem, či bude dobre fungovať. Riadok 13 nahraď
if(mysql_num_rows($result) == 0) {

PS: používaj radšej mysqli, mysql je deprecated

EDIT:
prečo na začiatku používaš $_REQUEST["nick"] a v sql dotaze $_POST[nick]? Okrem toho, že by si mal mať na začiatku rovno $nick = $_POST["nick"], nechápem, prečo zase v sql dotaze nepracuješ s $nick
studentt
Profil *
po 13 riadku uz to vcelku chodi
obcas to vyhodi chybu z require "db.php"; na 2 riadku
a ohledne esitu ja nejsem prilis zdatny phpckar


____
asi to takhle snad bude chodit a mohu se vrhnut na spousta dalsich funkci


díky za rady
Sir Tom
Profil
studentt:
Áha - očekával jsem, že znáš funkci mysql_num_rows().
martin1312
Profil
a uloži sa ti do DB to, čo chceš? pretože sa mi nechce veriť, že ('$_POST[nick]','$_POST[heslo]','$_POST[jmeno]','$_POST[primeni]','$_POST[email]')"; funguje. Narážam nato, že prvky v asociativnom poli maju byt v uvodzovkach. Každopádne, nahraď jednotlivé premenné tými, čo si si inicializoval na začiatku kódu ($nick,...).

A ošetri si do proti sql injection (ak nevieš, hoď to do googlu).
studentt
Profil *
promene se ulozi do db a to co navrhujes zkusim googlit, dik


martin1312:
Dival jsem se jak na programujme tak na wikipediu
asi to kompletne nechapem muzes mi napasat jak by to vypadalo a nejak polopate vysvetlit
prosim
panther
Profil
martin1312:
„nechce veriť, že [...] funguje“
funguje. Priste si to zkus, nemusis se divit na diskusnim foru. To, ze by tam apostrofy/uvozovky byt mohly (a mely), je vec druha.

studentt:
nastuduj si neco o escapovani.
jenikkozak
Profil
panther:
To, ze by tam apostrofy/uvozovky byt mohly (a mely), je vec druha.
Uvozovky by tam být nemohly, protože ty pole jsou uvnitř řetězce; tam se konstanta použít nedá.
martin1312
Profil
panther:
ok, mal som to v plane, ale som v skole.
panther
Profil
jenikkozak:
Uvozovky by tam být nemohly, protože ty pole jsou uvnitř řetězce
nemyslel jsem v konkretnim pripade, bylo to mysleno obecne.

martin1312:
priste zkousej, pak pis, kdyz si nejsi jisty. Akorat zanasis do diskuse bludy, byt neumyslne.
martin1312
Profil
panther:
Ospravedlňujem sa. Nabudúce si dám pozor. Aspoň som o niečo múdrejší.

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: