【问题标题】:Function get_post and return mysqli_real_escape_string - PHP函数 get_post 并返回 mysqli_real_escape_string - PHP
【发布时间】:2018-12-31 21:00:15
【问题描述】:

我是编码初学者(我只是对 Visual Basic 和 Pascal 有一点经验),现在我正在尝试使用 O'Reilly 的书“Learning PHP, MySQL, JavaScript, CSS & HTML”学习一些 Web 开发5"。

问题是他使用的是 MySQL 而不是 MySQLi,所以当我跟随思考练习时,我需要做一些小的改动。

在名为“使用 PHP 访问 MySQL 数据库”的一章中,他构建了一个表单,用户可以在其中向数据库添加新书(包括书名、作者、年份、类别和 ISBN)。我的问题是我有一些错误,不允许在网页中看到提交的新书。

我不确定,但我认为它必须与 get_post 和 mysqli_real escape_string 部分有关。

这是我写的代码:

<?php //sqltest.php
require_once 'login.php';
$db_server = mysqli_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Unable to connect to MySQL: " . mysqli_error($db_server));

mysqli_select_db($db_server, $db_database)
    or die ("Unable to select database: " . mysqli_error($db_server));

//Deleting a record.
if (isset($_POST['delete']) && isset($_POST['isbn']))
    {
        $isbn = get_post('isbn');
        $query = "DELETE FROM classics WHERE isbn = '$isbn'";

        if (!mysqli_query($db_server,$query))
            echo "DELETE failed: $query<br>" .
            mysqli_error($query) . "<br><br>";
    }

//Add new elements to the database.
if (isset($_POST['author']) && //Isset -> Determine if a variable is set and is not NULL.
    isset($_POST['title']) &&
    isset($_POST['category']) &&
    isset($_POST['year']) &&
    isset($_POST['isbn']))
    {
     $author = get_post($db_server, 'author');
     $title = get_post($db_server, 'title'); 
     $category = get_post($db_server, 'category'); 
     $year = get_post($db_server, 'year'); 
     $isbn = get_post($db_server, 'isbn'); 
    }

     $query = "INSERT INTO classics VALUES" .
         "('$author', '$title', '$category', '$year', '$isbn')";

    //Displaying the form.
    echo <<<_END
    <form action = "sqltest.php" method="post"> <pre>
        Author <input type="text" name="author" />
        Title <input type="text" name="title" />
        Category <input type="text" name="category" />
        Year <input type="text" name="year" />
        ISBN <input type="text" name="isbn" />
             <input type="submit" value="ADD RECORD" />
    </pre></form>
_END;

    $query = "SELECT * FROM classics";
    $result = mysqli_query($db_server, $query);

    if (!$result) die ("Database acess failed: " . mysqli_query_error($result));

    $rows = mysqli_num_rows($result);

    for ($j = 0 ; $j < $rows ; ++$j)
    {
        $row = mysqli_fetch_row($result);
        echo <<<_END
        <pre>
        Author $row[0]
        Title $row[1]
        Category $row[2]
        Year $row[3]
        ISBN $row[4]
        </pre>
        <form action="sqltest.php" method="post">
        <input type="hidden" name="delete" value="yes">
        <input type="hidden" name="isbn" value="$row[4]">
        <input type="submit" value="DELETE RECORD"></form>
_END;
    }

    function get_post($db_server, $var)
    {
        return mysqli_real_escape_string($db_server, $_POST[$var]);
    }
    mysqli_close($db_server);
?>

只是为了更好地解释我的问题:我用新书的详细信息填写表格,然后提交,但新书没有出现在网页上(就像使用 MySQL 命令行之前添加的一样)。

感谢您的宝贵时间, 大卫

【问题讨论】:

  • 事实: 那本书很旧,其中描述的技术也很旧(实际上它已经从 PHP 中删除了)。数据库交互在 PHP 中通过绑定参数迈出了重要的一步,您根本不需要转义这样的值。最好找一本更新的书或其他资料来了解这个主题,否则你最终会以旧的方式使用新技术。 意见: mysqli 好像写成一个中间库,逐步从旧式升级到绑定参数,但对于新开发PDO 是更好的选择。
  • 实际问题可能是由于您将插入语句的文本分配给$query。往下几行,你确实调用了mysqli_query 来执行select 语句,但是insert 语句永远不会被执行。
  • @GolezTrol 我将听从您的建议,我将在其他地方开始我的“Web 开发之旅”(将 O'Reilly 的书留在后面)。说实话,九月份我将开始攻读计算机工程或计算机科学的学士学位,但我希望能够尽快“掌握”网络开发,以便开始从事小型项目。感谢您的回答和您的时间。 :)
  • 不客气。 :-) 对你想要领先有好处。如果您在开始上学或课程时有一点基础知识,那肯定会有所帮助。祝你获得学位好运!

标签: php mysql forms web


【解决方案1】:

您的代码有错误,具体是数据库列的名称。

$query = "INSERT INTO classics (author, title, category, year, isbn) VALUES ('$author', '$title', '$category', '$year', '$isbn');";

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    相关资源
    最近更新 更多