Autor Zpráva
janberka
Profil *
Ahoj, mám jeden problém s registračním php skriptem, se kterým už si dlouho nevím rady. Jde o to, že když vyplním do formuláře uživatele, který už existuje v databázi, uloží se mi (což by neměl).

reg-send.php - ukládací skript
<?php
  session_start();
  $podminky = $_POST['podminky'];
  if(isset($podminky)) {
    $pass = $_POST['pass'];
    $passrep = $_POST['passrep'];
    $md5pass = md5($pass);
    if($pass == $passrep) {
      $login = $_POST['login'];
      $mail = $_POST['mail'];
      $dateb = $_POST['dateb'];
      $q1 = mysql_query('SELECT * FROM users WHERE login = '.$login.'');
      $q2 = mysql_query('SELECT * FROM users WHERE email = '.$mail.'');
      if($login == ''){
        $_SESSION['r-s'] = 'c';
        header("location: registration.php");
        }
      elseif($pass == '') {
        $_SESSION['r-s'] = 'k';
        header("location: registration.php");
        }
      elseif($mail == '') {
        $_SESSION['r-s'] = 'd';
        header("location: registration.php");
        }
      elseif($dateb == '') {
        $_SESSION['r-s'] = 'e';
        header("location: registration.php");
        }
      elseif(mysql_num_rows($q1) > 0) {
        $_SESSION['r-s'] = 'f';
        header("location: registration.php");
        }
      elseif(mysql_num_rows($q2) > 0) {
        $_SESSION['r-s'] = 'h';
        header("location: registration.php");
        }
      else {
        $money = '3000';
        $smoney = '20';
        $level = '1';
        $controled = 'n';
        //vkládání dat do databáze  
        mysql_query("SET NAMES 'utf8' COLLATE 'utf8_czech_ci'");
        $q = "INSERT INTO users (id, login, pass, email, dateb, money, smoney, level, controled)
        VALUES ('','$login','$md5pass','$mail','$dateb','$money','$smoney','$level','$controled')";
        $dotaz3 = mysql_query ($q);
        if (!$dotaz3) { 
          $_SESSION['r-s'] = 'ch';
          header('location: info.php');
          }
        else {
          $q3 = mysql_query("SELECT id FROM users WHERE login='.$login.'");
          $id = $q3['id'];
          $to = "$mail";  
          $extra = "From: Včelí svět\r\nReply-To: Včelí svět\r\n".
          "Content-Type: text/plain; charset=\"utf-8\"\n";  
          $subject = "Aktivační email ze hry Včelí svět";  
          $mess = " Vážený/á ".$login.",\n Váš účet zaktivujete kliknutím na <a href=\"info.php?id=".$id."\"> tento odkaz </a> Poté se již budete smět přihlásit. \n Děkujeme za registraci a přejeme pěkné hraní!";  
          mail ($to, $subject, $mess, $extra);
          $_SESSION['r-s'] = 'i';
          header('location: info.php');
          }
        }
      }
    else {
      $_SESSION['r-s'] = 'b';
      header("location: registration.php");
      }
    }
  else {
    $_SESSION['r-s'] = 'a';
    header("location: registration.php");
    }
  
?>

registration.php - stránka s formulářem

<!DOCTYPE HTML>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>Včelí svět - Registrace</title>
    <link rel="stylesheet" href="style.css" type="text/css">
  </head>
  <body>
    <div id="cele">
      <div id="page">
        <?php
          include 'includes/headmenu.php';
          include'includes/login-form.php';
        ?>
        <div id="body">
          <h2> Registrace uživatele </h2>
          <?php
            session_start();
            if(isset($_SESSION['r-s'])){
              $rs = $_SESSION['r-s'];
              if($rs == 'a'){
                echo '<div id="font1"> Nesouhlasil/a jste s podmínkami! </div>';
                }
              elseif($rs == 'b') {
                echo '<div id="font1"> Hesla se neshodují! </div>';  
                }
              elseif($rs == 'c') {
                echo '<div id="font1"> Nezadal/a jste přihlašovací jméno! </div>';  
                }
              elseif($rs == 'd') {
                echo '<div id="font1"> Neudal/a jste svůj email! </div>';
                }
              elseif($rs == 'e') {
                echo '<div id="font1"> Nezadal/a jste své datum narození, které je nutné pro Vaše obdarování při narozeninách! </div>';
                }
              elseif($rs == 'f') {
                echo '<div id="font1"> Vámi zadané přihlašovací jméno je již registrováno! Zkuste jiné! </div>';
                }
              elseif($rs == 'g') {
                echo '<div id="font1"> Vámi zadané heslo je příliš krátké, zvolte delší!!! (min. 6 znaků) </div>';
                }
              elseif($rs == 'h') {
                echo '<div id="font1"> Email je již registrován u jiného účtu! Použijte jiný! </div>';
                }
              }
            
          ?>
          <form action="reg-send.php" method="post">
            <table>
              <tr> <td> Přihlašovací jméno: </td> <td> <input type="text" name="login"> </td> </tr>
              <tr> <td> Heslo: </td> <td> <input type="password" name="pass"> </td> </tr>
              <tr> <td colspan="2"> Heslo musí mít nejméně 6 znaků!!! </td> </tr>
              <tr> <td> Heslo znovu: </td> <td> <input type="password" name="passrep"> </td> </tr>
              <tr> <td> Email: </td> <td> <input type="mail" name="mail"> </td> </tr>
              <tr> <td> Datum narození: </td> <td> <input type="date" name="dateb"> </td> </tr>
              <tr> <td> <input type="checkbox" name="podminky"> </td> <td> Souhlasím s podímkami Včelího světa (viz. <a href="pravidla.php"> Pravidla </a>) </td> </tr>
              <tr> <td> </td> <td> <input type="submit" value="Zaregistrovat"> </td> </tr>
            </table>
          </form>  
          <?php
            include'includes/copyright.php';
          ?>
        </div>
      </div>
    </div>
  </body>
</html>
Taps
Profil
janberka:
zkus sql dotaz upravit do této podoby
mysql_query("SELECT * FROM users WHERE login = '$login'");
janberka
Profil *
to nepomohlo, nejakej jinej tip pls?
Taps
Profil
janberka:
pomocí echa si vypiš co ti vrací sql dotaz a pak zkus dotaz provést v phpmyadminu (admineru)
janberka
Profil *
nic mi to nezjistilo
jenikkozak
Profil
Funkce mysql_query vrací buď resource, nebo false v případě, že dotaz skončí chybou. Pro získání dat z resource je potřeba použít další funkci - mysql_fetch_array. (Obě zmíněné funkce jsou považovány za zastaralé - viz boxík Warning nahoře na stránkách jejich popisu.)

Data vkládaná do databáze je potřeba escapovat, v opačném případě jde jednak o bezpečnostní chybu a jednak ti to neumožní některé znaky do databáze uložit.
Taps
Profil
jenikkozak, janberka:
Samozřejmě jsem měl na mysli výpis níže uvedený
echo "SELECT * FROM users WHERE login = '$login'";
mzk
Profil *
janberka:
Ahoj, mám jeden problém s registračním php skriptem, se kterým už si dlouho nevím rady. Jde o to, že když vyplním do formuláře uživatele, který už existuje v databázi, uloží se mi (což by neměl).
tak si dej unikátní klíče na sloupce v databázi
janberka
Profil *
díky, už se mi to povedlo vyřešit
Joker
Profil
janberka:
už se mi to povedlo vyřešit
Jak?

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: