2016-03-07 97 views
0

我的PHP脚本有问题。当我尝试保存数据时,显示错误。PHP没有将数据保存到数据库

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
</head>  
<body> 
<?php 
    require_once 'user.php'; 

    if ((isset($_POST["send"])) && ($_POST["send"] == 1)) { 
     if (isset($_Post["login"])){ 
      $login = mysql_real_escape_string(htmlspecialchars($_POST["login"])); 
     } else { 
      $login=''; 
     } 

     if (isset($_Post["pass"])){ 
      $login = mysql_real_escape_string(htmlspecialchars($_POST["pass"])); 
     } else { 
      $pass=''; 
     } 

     if (isset($_Post["pass_v"])){ 
      $login = mysql_real_escape_string(htmlspecialchars($_POST["pass_v"])); 
     } else { 
      $pass_v=''; 
     } 

     if (isset($_Post["email"])){ 
      $login = mysql_real_escape_string(htmlspecialchars($_POST["email"])); 
     } else { 
      $email=''; 
     } 

     if (isset($_Post["emai_v"])){ 
      $login = mysql_real_escape_string(htmlspecialchars($_POST["email_v"])); 
     } else { 
      $email_v=''; 
     } 

     $existsLogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM login WHERE login='$login' LIMIT 1")); 
     $existsEmail = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM Email WHERE email='$email' LIMIT 1")); 

     $errors = ''; 

     if (!$login || !$email || !$pass || !$pass_v || !$email_v) $errors .= '- Musisz wypełnić wszystkie pola<br />'; 
     if ($existsLogin[0] >= 1) $errors .= '- Ten login jest zajęty<br />'; 
     if ($existsEmail[0] >= 1) $errors .= '- Ten e-mail jest już używany<br />'; 
     if ($email != $email_v) $errors .= '- E-maile się nie zgadzają<br />'; 
     if ($pass != $pass_v) $errors .= '- Hasła się nie zgadzają<br />'; 

     if ($errors != '') { 
      echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br />'.$errors.'</p>'; 
     } else { 
      $pass = user::passSalter($pass); 

      try { 
       $pdow = new PDO('mysql:host=localhost;dbname=log_cdr', 'root', 'slawek132'); 
       $pdow->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       $sqlw = "INSERT INTO login (login, pass, pass_v, email, email_v) VALUES ('['login']','['pass']','['pass_v']','['email']','['email_v']')"; 

       if ($pdow->query($sqlw)) { 
        echo "<script type= 'text/javascript'>alert('Dane użytkownika zapisane poprawnie.');</script>"; 
       } else{ 
        echo "<script type= 'text/javascript'>alert('Niepoprawne zapisanie danych użytkownika!');</script>"; 
       } 

       $pdow = null; 
      } catch(PDOException $w) { 
       echo $w->getMessage(); 
      } 

      //mysql_query("INSERT INTO log_cdr (login, email, email_v, pass, pass_v) VALUES('$login','$email','$pass');") or die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>'); 

      echo '<p class="success">'.$login.', zostałeś zarejestrowany.<br /><a href="login.php">Logowanie</a></p>'; 
     } 
    } 
?> 

<form method="post" action="">  
<label for="login">Wprowadź nazwę użytkownika</label> 
<input maxlength="32" type="text" name="pass_v" placeholder="Wprowadź nazwę użytkownika"/> 

<label for="pass">Wprowadź hasło</label> 
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź hasło"/> 

<label for="pass_again">Wprowadź ponownie hasło</label> 
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź ponownie hasło"/> 

<label for="email">Wprowadź E-mail</label> 
<input type="text" name="email" maxlength="50" id="email" placeholder="Wprowadź Email"/> 

<label for="email_again">Potwierdź Email</label> 
<input type="text" maxlength="255" name="email_v" id="email_again" placeholder="Wprowadź ponownie Email"/><br /> 


<input type="hidden" name="send" value="1" /> 
<input type="submit" value="Zarejestruj" /> 
<input type="submit" value="Zmień hasło" /> 
<a href="logout.php"><input type="button" value="Wyloguj" name="Wyloguj"/ ></a> 
</form> 

<?php 
require 'footer.php'; 
?> 

</body> 
</head> 

错误消息:

警告:mysql_fetch_array()预计参数1是资源,在布尔C中给出:\ XAMPP \ htdocs中\ CDR \ register.php第45行上
警告: mysql_fetch_array()预计参数1是资源,在布尔C中给出:\ XAMPP \ htdocs中\ CDR \上线register.php 46

我校正为:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
<link rel="stylesheet" type="text/css" href="style.css" /> 
</head> 

<body> 

<?php 



require_once 'user.php'; 



       try { 
       $pdow = new PDO('mysql:host=localhost;dbname=log_cdr', 'root', 'slawek132'); 
       $pdow->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       $sqlw = "INSERT INTO login (login, pass, pass_v, email, email_v) 
       VALUES ('['login']','['pass']','['pass_v']','['email']','['email_v']')"; 
       if ($pdow->query($sqlw)) { 
       echo "<script type= 'text/javascript'>alert('Dane użytkownika zapisane poprawnie.');</script>"; 
       } 
       else{ 
       echo "<script type= 'text/javascript'>alert('Niepoprawne zapisanie danych użytkownika!');</script>"; 
       } 

       $pdow = null; 
       } 
       catch(PDOException $w) 
       { 
       echo $w->getMessage(); 
       } 


$result = $mysqeli->query("SELECT COUNT(*) FROM log_cdr WHERE login='$login' LIMIT 1"); // btw, this query is vulnerable to SQL injection 
$existsLogin = $result->fetch_array(); 



if ((isset($_POST["send"])) && ($_POST["send"] == 1)) { 

    if (isset($_POST["login"])){ 
     $login = mysql_real_escape_string(htmlspecialchars($_POST["login"])); 
     } else { 
     $login=''; 
} 
    if (isset($_POST["pass"])){ 
     $login = mysql_real_escape_string(htmlspecialchars($_POST["pass"])); 
     } else { 
     $pass=''; 
} 
    if (isset($_POST["pass_v"])){ 
     $login = mysql_real_escape_string(htmlspecialchars($_POST["pass_v"])); 
     } else { 
     $pass_v=''; 
} 
    if (isset($_POST["email"])){ 
     $login = mysql_real_escape_string(htmlspecialchars($_POST["email"])); 
     } else { 
     $email=''; 
} 
    if (isset($_POST["emai_v"])){ 
     $login = mysql_real_escape_string(htmlspecialchars($_POST["email_v"])); 
     } else { 
     $email_v=''; 
} 


$existsLogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM log_cdr WHERE login='$login' LIMIT 1")); 
$existsEmail = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM log_cdr WHERE email='$email' LIMIT 1")); 

    $errors = ''; 



    if (!$login || !$email || !$pass || !$pass_v || !$email_v) $errors .= '- Musisz wypełnić wszystkie pola<br />'; 
    if ($existsLogin[0] >= 1) $errors .= '- Ten login jest zajęty<br />'; 
    if ($existsEmail[0] >= 1) $errors .= '- Ten e-mail jest już używany<br />'; 
    if ($email != $email_v) $errors .= '- E-maile się nie zgadzają<br />'; 
    if ($pass != $pass_v) $errors .= '- Hasła się nie zgadzają<br />'; 

    if ($errors != '') { 
     echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br />'.$errors.'</p>'; 
    } 

    else { 


     $pass = user::passSalter($pass); 





     //mysql_query("INSERT INTO log_cdr (login, email, email_v, pass, pass_v) VALUES('$login','$email','$pass');") or die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>'); 

     echo '<p class="success">'.$login.', zostałeś zarejestrowany. 
     <br /><a href="login.php">Logowanie</a></p>'; 
    } 
} 
?> 

<form method="post" action=""> 

<label for="login">Wprowadź nazwę użytkownika</label> 
<input maxlength="32" type="text" name="pass_v" placeholder="Wprowadź nazwę użytkownika"/> 

<label for="pass">Wprowadź hasło</label> 
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź hasło"/> 

<label for="pass_again">Wprowadź ponownie hasło</label> 
<input maxlength="32" type="password" name="pass_v" placeholder="Wprowadź ponownie hasło"/> 

<label for="email">Wprowadź E-mail</label> 
<input type="text" name="email" maxlength="50" id="email" placeholder="Wprowadź Email"/> 

<label for="email_again">Potwierdź Email</label> 
<input type="text" maxlength="255" name="email_v" id="email_again" placeholder="Wprowadź ponownie Email"/><br /> 


<input type="hidden" name="send" value="1" /> 
<input type="submit" value="Zarejestruj" /> 
<input type="submit" value="Zmień hasło" /> 
<a href="logout.php"><input type="button" value="Wyloguj" name="Wyloguj"/ ></a> 
</form> 

<?php 
require 'footer.php'; 
?> 

</body> 
</html> 

而且有错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'login']','['pass']','['pass_v']','['email']','['email_v']')' at line 2 
Notice: Undefined variable: mysqeli in C:\xampp\htdocs\CDR\register.php on line 38 

Fatal error: Call to a member function query() on null in C:\xampp\htdocs\CDR\register.php on line 38 
+3

为什么在使用PDO之后使用mysql_fetch_array? – 2016-03-07 07:57:58

+0

不知道这是什么:'['login']','['pass']','['pass_v']','['email']','['email_v']'' – devpro

+0

这个链接使用mysql_fetch_array():-http://php.net/manual/en/function.mysql-fetch-array.php – WisdmLabs

回答

1

您用更现代的界面PDO混合deprecated mysql_*功能。

只要你没有mysql_connect()呼叫在开始mysql_*函数将无法正常工作。

mysql_query()返回false当它无法连接到数据库,导致您的错误消息。

更改您的代码以仅使用PDO。另外,$_Post不起作用。 PHP区分大小写,正确的变量名称是$_POST

0

您必须将mysql_connect的结果作为第一个参数传递给mysql_fetch_array。但mysql扩展名已弃用,请使用mysqliPDO

$db = new mysqli('127.0.0.1', 'your_user', 'your_pass', 'your_db'); 
$result = $mysqli->query("SELECT COUNT(*) FROM login WHERE login='$login' LIMIT 1"); // btw, this query is vulnerable to SQL injection 
$existsLogin = $result->fetch_array(); 

更多示例可见here

也看看How can I prevent SQL injection in PHP?