PHP没有将数据保存到数据库

标签 php mysql

这个问题在这里已经有了答案:





mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc... expects parameter 1 to be resource

(31 个回答)


6年前关闭。




我的 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>

错误消息:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\CDR\register.php on line 45
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\CDR\register.php on line 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

最佳答案

您正在混合 deprecated mysql_* 具有更现代的界面 PDO 的功能。

只要你没有 mysql_connect()在开始时调用mysql_*功能将不起作用。
mysql_query()返回 false当它无法连接到数据库时,导致您的错误消息。

更改您的代码以仅使用 PDO。

另一件事,$_Post不管用。 PHP 区分大小写,正确的变量名是 $_POST .

关于PHP没有将数据保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35838704/

相关文章:

PHP内容分离

php - 从单独的表 laravel 中引用 2 列的列

mysql - 在mysql中的单行中显示数字和非数字列值的计数

android - SimpleAdapter 每秒崩溃一次

mysql - sequelize.js orm :Unique email validation for mysql not working

mysql多存储过程更新

php - PHP 中静态的反射类?

PHP 在特定时间后执行操作

PHP:Phing、Phar 和 phar.readonly

java - SQL 语法错误,准备好的语句,无详细信息