无法从PHP编辑数据库

时间:2017-10-12 23:51:20

标签: php mysql

以下是我尝试用来编辑数据库中的条目的内容:

<?php
    $connect=mysqli_connect("localhost","root","");
    mysqli_select_db($connect,"bodylab");
    if (mysqli_connect_errno())
    {
        echo"Failed to connect to MySql: " .mysqli_connect_error();
    }


    $id=$_GET['idb'];
    $date=$_GET['date'];
    $usage=$_GET['usage'];
    $amount=$_GET['amount'];

    if (isset($_GET['edit']))
    {
        mysqli_query($connect,"UPDATE expand_p SET date='$date', usage='$usage', 
        amount=$amount WHERE id=$id");      
        header("location: admin_expand.php");
    }
    else if(isset($_GET['cancel']))
    {
        header("location: admin_expand.php");
    }
?>

我没有收到错误消息,但它无法正常工作。

我的表expand_p包含以下列:

id(int), date(date), usage(varchar), amount(int)

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

首先,让我解决您在代码中遇到的一些问题,我建议您真正关注它们,并思考如何解决它们。

  1. 您正在使用程序化MySQL进程(不是真正的问题,但我建议使用OOP方法,因为它在调试并将代码传递给其他开发人员时不那么冗长且更容易理解。)< / LI>
  2. 您正在通过网址传递信息......极不安全,可以轻松跟踪用户使用情况并窃取信息。
  3. 您提供的代码也可以操作,我可以转到URL并添加我想要的任何参数...
  4. 我也可以将一些代码传递到您的数据库中;你没有过滤输入。永远不要信任用户输入!
  5. 您正在直接在查询中输入信息;它是不安全的,你有SQL注入的危险。
  6. 现在让我们开始使用一段应该修复代码的代码;我将使用OOP方法。

    使用我们的OOP方法

    创建一个新连接
    $connect = new mysqli( 'localhost', 'root', '', 'bodylab' );
    // check for an error
    if ($this->_connection->connect_error)
    {
        trigger_error("Connection Error: " . $this->_connection->connect_error(), E_USER_ERROR);
    }
    

    创建连接后,现在从代码开始更新数据库。

    if ( isset( $_GET['edit'] ) && urlencode( $_GET['edit'] ) )
    {
        // Encode the URL when creating the variables
        $id     = htmlentities( $_GET['idb'] );
        $date   = htmlentities( $_GET['date'] );
        $usage  = htmlentities( $_GET['usage'] );
        $amount = htmlentities( $_GET['amount'] );
    
    
        // create sql
        $sql = "UPDATE expand_p SET date = ?, usage = ?, amount = ?  WHERE id = ?";
    
        // prepare query
        if ($stmt = $connect->prepare( $sql ))
        {
            // bind the params
            $stmt->bind_param('sssi', $date, $usage, $amount, $id);
            // execute the query
            $stmt->execute();
    
            // check for errors
            if ($stmt->errno)
            {
                $message = array(
                    'is_error' => 'danger',
                    'message' => 'Error: ' . $stmt->error
                );
            }
    
            // make sure at least 1 or more rows were affected
            if ($stmt->affected_rows > 0)
            {
                $message = array(
                    'is_error' => 'success',
                    'message' => 'Success: ' . $stmt->affected_rows . ' rows were updated.'
                );
            }
            else
            {
                // if not, send warning to user
                $message = array(
                    'is_error' => 'warning',
                    'message' => 'Warning: ' . $stmt->affected_rows . ' rows were updated.'
                );
            }
            // close your connection
            $stmt->close();
        }
        else
        {
            $message = array(
                'is_error' => 'warning',
                'message' => 'There are no records in the `' . $table . '` table.'
            );
            exit;
        }
    }
    

    请不要按原样使用代码,这是一个快速解决方案,可以解决您手头的问题;将其视为学习脚本,并对其进行改进。

    要查看任何错误,您可以检查$message变量,它会告诉您哪里出错了。

    // first check if variable exists
    if ( isset( $message ) )
    {
        // if it does print it
        print_r( $message );
    }
    

    然后你的输出应该是一个带有is_errormessage键的数组,你会看到错误,你可以追溯到它在过程中发生的位置。