Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个;更新;第页MYSQL/PHP_Php_Mysql_Sql - Fatal编程技术网

创建一个;更新;第页MYSQL/PHP

创建一个;更新;第页MYSQL/PHP,php,mysql,sql,Php,Mysql,Sql,我目前正试图通过php创建一个页面,允许用户更新我数据库中的数据。我遇到了两个问题:首先,当我运行代码时,我得到了“Error:Query was empty”,但是数据库进行了更新,这导致了我的第二个问题。保留为空的字段(如果用户只有一个或两个要更新的内容,则不必在所有字段中输入数据)在进行更新后变为空。这是因为我当前的脚本更新了所有元素,但是否有任何方法可以让它在用户将输入字段留空的情况下,在更新数据库时不会发生任何更改 这是我的密码: if (isset($_POST['submit'])

我目前正试图通过php创建一个页面,允许用户更新我数据库中的数据。我遇到了两个问题:首先,当我运行代码时,我得到了“Error:Query was empty”,但是数据库进行了更新,这导致了我的第二个问题。保留为空的字段(如果用户只有一个或两个要更新的内容,则不必在所有字段中输入数据)在进行更新后变为空。这是因为我当前的脚本更新了所有元素,但是否有任何方法可以让它在用户将输入字段留空的情况下,在更新数据库时不会发生任何更改

这是我的密码:

if (isset($_POST['submit'])) {
    $id = $_POST['id'];
    $lastname = $_POST['lastname'];
    $firstname = $_POST['firstname'];
    $color = $_POST['color'];
    $number = $_POST['number'];

    // need id to be filled and need at least one other content type for changes to be made
    if (empty($id) || empty($lastname) and empty($firstname) and empty($major) and empty($gpa)) {
        echo "<font color='red'>Invalid Submission. Make sure you have an ID and at least one other field filled.  </font><br/>";   
    } else {    
        // if all the fields are filled (not empty)
        // insert data to database  
        mysql_query ("UPDATE students SET lastname = '$lastname', firstname = '$firstname', favoritecolor = '$color', favoritenumber = '$number' WHERE id = '$id'");

        if (!mysql_query($sql,$con)) {
            die('Error: ' . mysql_error());
        }

        // display success message
        echo "<font color='blue'>Data updated successfully.</font>";
        // Close connection to the database
        mysql_close($con);
    }
} 
if(isset($\u POST['submit'])){
$id=$_POST['id'];
$lastname=$\u POST['lastname'];
$firstname=$_POST['firstname'];
$color=$_POST['color'];
$number=$_POST['number'];
//需要填写id,并且需要至少一种其他内容类型才能进行更改
if(empty($id)| | empty($lastname)和empty($firstname)以及empty($major)和empty($gpa)){
echo“提交无效。请确保您有一个ID并至少填写了一个其他字段。
”; }否则{ //如果所有字段都已填充(非空) //将数据插入数据库 mysql_查询(“更新学生集lastname='$lastname',firstname='$firstname',favoritecolor='$color',favoritenumber='$number',其中id='$id'); if(!mysql_query($sql,$con)){ die('Error:'.mysql_Error()); } //显示成功消息 echo“数据更新成功。”; //关闭与数据库的连接 mysql_close($con); } }
如果(!mysql\u query($sql,$con))
此处未定义
$sql
$con
。您是否应该运行两次mysql\u query?

  • 没有mysql连接函数,我想它是在别处调用的
  • 打印出您的查询字符串。我总是发现通过
    “SELECT*FROM.”%tblvar.;“显式地表示什么是字符串,什么是变量。”更易于调试
    
    要回答您的问题,您需要捕获查询的结果并检查其中的错误

    $query = mysql_query(/*query*/);
    if (!$query)
        //error handling
    

    根据我的评论,请务必仔细阅读SQL注入。

    为了更好地帮助您理解所看到的行为,我将向您解释代码的错误:

    mysql_query ("UPDATE students SET lastname = '$lastname', firstname = '$firstname', favoritecolor = '$color', favoritenumber = '$number' WHERE id = '$id'");
    
    第一部分是执行一个MySQL查询,而不管您没有将它的返回值赋给一个变量

    if (!mysql_query($sql,$con)) {
        die('Error: ' . mysql_error());
    }
    
    第二部分试图通过传递尚未设置的第一个参数
    $sql
    ,以及似乎尚未设置的第二个参数
    $con
    来运行查询。您运行的第一个查询执行得很好,而第二个查询永远无法执行。您的解决方案:

    $result = mysql_query(
        "UPDATE students 
         SET lastname = '$lastname', firstname = '$firstname', 
             favoritecolor = '$color', favoritenumber = '$number' 
         WHERE id = '$id'"
    );
    if (!$result) {
        throw new Exception('Error: ' . mysql_error());
        // or die() is fine too if that's what you really prefer
    }
    

    这与您的问题无关,但您的脚本容易受到名为的非常危险的攻击。只是想确保你意识到并了解这一点。