2016-03-07 6 views
0

У меня проблема с моим PHP-скриптом. Когда я пытаюсь сохранить данные, это показывает мне ошибку.PHP не сохраняет данные в DB

<!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

Почему вы используете mysql_fetch_array, когда после этого вы используете PDO? –

+0

Не знаете, что это: '' ['login'] ',' ['pass'] ',' ['pass_v'] ',' ['email'] ',' ['email_v'] '' – devpro

+0

refer эта ссылка для использования mysql_fetch_array(): -http: //php.net/manual/en/function.mysql-fetch-array.php – WisdmLabs

ответ

1

Вы смешивание deprecated mysql_* функции с более современным интерфейсом PDO.

До тех пор, пока у вас нет вызова , функции mysql_* не будут работать.

mysql_query() возвращает false, когда он не может подключиться к базе данных, в результате чего появляется ваше сообщение об ошибке.

Измените свой код, чтобы использовать только PDO.

Другое дело, $_Post не будет работать. PHP чувствителен к регистру, а правильное имя переменной - $_POST.

0

Вы должны передать результат mysql_connect в качестве первого аргумента mysql_fetch_array. Но mysql расширение устарело, используйте mysqli или PDO.

$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?.

Смежные вопросы