0

我的 php 代码似乎无法正常工作。昨天还在工作,但我一定改变了一些东西,现在没有了。据我所知,是 if($word) 导致了问题。else 部分起作用,它与 mysql db 连接,但那个 if 语句什么也不做。

这是php:

<?php
  require('connect.php');
  $word=$_POST['word'];
  $submit=$_POST['submit'];

  if($submit){
      if($word){
         mysql_query("INSERT INTO words (word) VALUES ($word)");
      }
      else{
         echo "Enter a word.";
      }
  }
?>

这是html表单:

<form name="form" id="form" method="post" action="index.php">
    <p><label>Label</label></p>
    <p><input type="text" name="word" id="word" maxlength="16"/></p>
    <p><input type="submit" name="submit" id="submit" value="Save"/></p>
</form>
4

2 回答 2

4

您应该立即停止使用此代码。它容易受到 SQL 注入的攻击。您需要学习如何绑定参数以防止这种情况发生,以及如何使用未弃用的 API。我还建议您检查REQUEST_METHOD而不是 if$_POST['word']设置,因为它可以为空。

由于您没有任何类型的错误捕获功能,因此很难判断可能是什么问题。如果我不得不猜测,这可能是因为您在发布的变量周围缺少单引号:

...INSERT INTO words (word) VALUES ('$word')...

使用参数:

<?php

if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['submit']) ) {

    $link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');

    /* check connection */
    if (!$link) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    $stmt = mysqli_prepare($link, "INSERT INTO words (word) VALUES (?)");
    mysqli_stmt_bind_param($stmt, 's', $_POST['word']);

    /* execute prepared statement */
    mysqli_stmt_execute($stmt);

    printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt));

    /* close statement and connection */
    mysqli_stmt_close($stmt);

    /* close connection */
    mysqli_close($link);
}
?>

文档是一个很好的起点。

于 2013-02-21T18:46:28.133 回答
1

您很可能需要引用您的$word价值...

INSERT INTO words (word) VALUES ('$word')

正如评论中提到的......

为什么我不应该在 PHP 中使用 mysql_* 函数?

并且不要忘记输入清理。

如何防止 PHP 中的 SQL 注入?

xkcd.com

于 2013-02-21T18:46:58.583 回答