2013-03-24 4 views
0

Извините, что я новичок в php, поэтому, пожалуйста, будьте терпеливы со мной. Я создаю пользовательский интерфейс, и когда я регистрирую его, он говорит, что я зарегистрировался, но он не хранит данные в базе данных. может кто-то, пожалуйста, помогите мне!Почему данные не хранятся в моей базе данных?

<?PHP 
$uname = ""; 
$pword = ""; 
$errorMessage = ""; 
$num_rows = 0; 

function quote_smart($value, $handle) { 

    if (get_magic_quotes_gpc()) { 
     $value = stripslashes($value); 
    } 

    if (!is_numeric($value)) { 
     $value = "'" . mysql_real_escape_string($value, $handle) . "'"; 
    } 
    return $value; 
} 

if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 


    $uname = $_POST['username']; 
    $pword = $_POST['password']; 

    $uname = htmlspecialchars($uname); 
    $pword = htmlspecialchars($pword); 

    $uLength = strlen($uname); 
    $pLength = strlen($pword); 

    if ($uLength >= 10 && $uLength <= 20) { 
     $errorMessage = ""; 
    } 
    else { 
     $errorMessage = $errorMessage . "Username must be between 10 and 20 characters" . "<BR>"; 
    } 

    if ($pLength >= 8 && $pLength <= 16) { 
     $errorMessage = ""; 
    } 
    else { 
     $errorMessage = $errorMessage . "Password must be between 8 and 16 characters" . "<BR>"; 
    } 



    if ($errorMessage == "") { 

    $user_name = "root"; 
    $pass_word = ""; 
    $database = "user authentication"; 
    $server = "127.0.0.1"; 

    $db_handle = mysql_connect($server, $user_name, $pass_word); 
    $db_found = mysql_select_db($database, $db_handle); 

    if ($db_found) { 

     $uname = quote_smart($uname, $db_handle); 
     $pword = quote_smart($pword, $db_handle); 


     $SQL = "SELECT * FROM login WHERE USERNAME = $uname"; 
     $result = mysql_query($SQL); 
     $num_rows = mysql_num_rows($result); 

     if ($num_rows > 0) { 
      $errorMessage = "Username already taken"; 
     } 

     else { 

      $SQL = "INSERT INTO login (L1, L2) VALUES ($uname, md5($pword))"; 

      $result = mysql_query($SQL); 

      mysql_close($db_handle); 

     //================================================================================= 
     // START THE SESSION AND PUT SOMETHING INTO THE SESSION VARIABLE CALLED login 
     // SEND USER TO A DIFFERENT PAGE AFTER SIGN UP 
     //================================================================================= 

      session_start(); 
      $_SESSION['login'] = "1"; 

      header ("Location: page1.php"); 

     } 

    } 
    else { 
     $errorMessage = "Database Not Found"; 
    } 




    } 

} 


?> 

    <html> 
    <head> 
    <title>Basic Login Script</title> 


    </head> 
    <body> 


<FORM NAME ="form1" METHOD ="POST" ACTION ="signup.php"> 

Username: <INPUT TYPE = 'TEXT' Name ='username' value="<?PHP print $uname;?>" maxlength="20"> 
Password: <INPUT TYPE = 'TEXT' Name ='password' value="<?PHP print $pword;?>" maxlength="16"> 

<P> 
<INPUT TYPE = "Submit" Name = "Submit1" VALUE = "Register"> 


</FORM> 
<P> 

<?PHP print $errorMessage;?> 

    </body> 
    </html> 
+0

ли вы эхо mysql_error? –

+0

Заменить $ SQL = "SELECT * FROM login WHERE USERNAME = $ uname"; с $ SQL = "SELECT * FROM login WHERE USERNAME = '". $ Uname. "'"; И Заменить $ SQL = "INSERT INTO login (L1, L2) VALUES ($ uname, md5 ($ pword))"; с $ SQL = "INSERT INTO login (L1, L2) VALUES ('". $ Uname. "', '" .md5 ($ pword). "')"; Также проверьте mysql_error(); – Arvind

+1

Имеет ли этот вопрос какое-либо отношение к [tag: eclipse], или вы просто пометили его, потому что используете Eclipse? –

ответ

0

Вы также можете захотеть, а использовать PDO, то вы не должны делать очистку пользовательского ввода, как PDO будет заботиться о том, что для вас. Вы можете создающий файл, держать все детали соединения, как это:

<?php 

      define('DB_HOST', 'localhost'); 
      define('DB_NAME', 'user authentication'); 
      define('DB_USER', 'root'); 
      define('DB_PASS', ''); 
      define('DSN', 'mysql:host='. DB_HOST . ';dbname=' . DB_NAME); 

    ?> 

Затем вы можете захотеть создать класс, чтобы сделать подключение к базе данных, как:

<?php 

    class database{ 

    public function databaseConnect(){ 
      /*Creates a new instance of the PDO called $db. 
      * NOTE: the use of DSN, DB_USER and so on. These variable live in the dbsettings file. 
      */ 
      $db = new PDO(DSN,DB_USER,DB_PASS); 
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      return $db; 
     } 
    } 

?> 

, то вы можете хотите создать класс для регистрации вашего пользователя:

<?php 

    //Include the database class file to allow access to properties and methods within that class. 
    require_once 'class.database.php'; 


    //echo 'I am database class file now included in the users class file. <br />'; 

    //This method will be user to check if the user enter the correct username password pair. 
    class users{ 


     public function checkValidUser($username){ 
      $userExists = false; 
      try { 
       $db = database::databaseConnect(); 

       $stmt = $db->prepare('SELECT uname FROM table WHERE uname=:username'); 
       $stmt->bindParam(':uname', $username, PDO::PARAM_STR); 
       $stmt->execute(); 

       if ($stmt->rowCount() == 1){ 
        $userExists = true; 
       } 

       $db = null; 

      } catch (PDOException $e) { 
       $userExists = false; 
      } 
      return $userExists; 
     } 

     public function addUser($firstname, $lastname, $username,$password){ 
      $success = true; 
      //Connect to the database 
      try { 
       $db = database::databaseConnect(); 
       //$db->databaseConnect(); 

       $stmt = $db->prepare('INSERT INTO table (FirstName, LastName, Username, Password) VALUES (:firstname, :lastname, :username, :password)'); 
       $stmt->bindParam(':firstname', $firstname, PDO::PARAM_STR); 
       $stmt->bindParam(':lastname', $lastname, PDO::PARAM_STR); 
       $stmt->bindParam(':username', $username, PDO::PARAM_STR); 
       $stmt->bindParam(':password', $password, PDO::PARAM_STR); 
       $success = $stmt->execute(); 

       if ($success){ 

        $success = true; 
       } 

       $db = null; 

      } catch (PDOException $e) { 
       //echo 'There was an error adding a new user. Please go back and try again. If this problem persits please contact the administrator.'; 
       $success = false; 
      } 
      return $success; 
     } 


?> 

Надеюсь, что это поможет.

0

enter link description here$SQL = "INSERT INTO login (L1, L2) VALUES ($uname, md5($pword))";

Вы не вставляя значения в соответствующие поля, по-видимому. Вы вставляете $uname в L1 и md5($pword) в L2, но в выбранном выше запросе у вас есть другое имя поля для имени пользователя, и я предполагаю то же самое для пароля.

$SQL = "SELECT * FROM login WHERE USERNAME = $uname";

Скорее всего, ваша вставка запроса должно быть что-то вроде:

$SQL = "INSERT INTO login (USERNAME, PASSWORD) VALUES ('{$uname}', MD5('{$pword}'))";

Я добавил одинарные кавычки имя пользователя и пароль, так как они предположительно являются строками. Кроме того, я добавил фигурные скобки вокруг переменных, чтобы отделить то, что такое SQL от PHP.

Одна последняя вещь, я хотел бы проверить в этом с PDO, как Willem suggested