php表单插入到mysql

php表单插入到mysql,php,html,mysql,Php,Html,Mysql,我的php代码似乎不起作用。我昨天就开始工作了,但我一定是改变了什么,现在不是了。据我所知,是if($word)引起了问题。else部分起作用,它与mysql数据库连接,但if语句不起作用 以下是php: <?php require('connect.php'); $word=$_POST['word']; $submit=$_POST['submit']; if($submit){ if($word){ mysql_query("INSER

我的php代码似乎不起作用。我昨天就开始工作了,但我一定是改变了什么,现在不是了。据我所知,是if($word)引起了问题。else部分起作用,它与mysql数据库连接,但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>

标签


您应该立即停止使用此代码。它容易受到SQL注入的攻击。您需要学习如何绑定参数以防止出现这种情况,以及如何使用未弃用的API。我还建议您检查
REQUEST\u METHOD
,而不是将
$\u 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);
}
?>


这是一个很好的起点。

您应该立即停止使用此代码。它容易受到SQL注入的攻击。您需要学习如何绑定参数以防止出现这种情况,以及如何使用未弃用的API。我还建议您检查
REQUEST\u METHOD
,而不是将
$\u 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);
}
?>


这是一个很好的起点。

您很可能需要引用您的
$word

INSERT INTO words (word) VALUES ('$word')
正如评论中提到的

别忘了输入净化


您很可能需要引用您的
$word

INSERT INTO words (word) VALUES ('$word')
正如评论中提到的

别忘了输入净化


。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助你决定哪一个。“据我所知,是if($word)导致了问题”-你能提供一些你认为导致问题的原因吗?它导致了什么问题?您的查询有sql注入,请参见此处如何处理输入如果我将mysql\u查询更改为简单的回显,它仍然无法工作。但是,如果字段id留空,“输入一个单词”回显不起作用。。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助你决定哪一个。“据我所知,是if($word)导致了问题”-你能提供一些你认为导致问题的原因吗?它导致了什么问题?您的查询有sql注入,请参见此处如何处理输入如果我将mysql\u查询更改为简单的回显,它仍然无法工作。但是,如果字段id为空,则“输入单词”回显会起作用。
插入单词集(单词)值($word)
不是有效的MySQL语法。@AarolamaBluenk由于$word周围没有任何引号,所以它会断开,但仅仅添加引号并不能解决真正的问题。
插入单词集(单词)值($word)
不是有效的MySQL语法。@AarolamaBluenk由于$word没有任何引号,所以它会中断,但仅仅添加引号并不能解决真正的问题。虽然这可能是OP的最佳答案,但您可能应该让他使用OOP PHP,因为他似乎对此非常陌生。最好从OOP开始学习,而不是只是在以后从头开始学习。@Hiroto我不明白为什么我应该让他使用OOP,也不明白为什么这样更好。编程风格由OP决定。我在答案下面的评论应该足够了。虽然这可能是OP的最佳答案,但您可能应该让他指向OOP PHP,因为他似乎对此非常陌生。最好从OOP开始学习,而不是只是在以后从头开始学习。@Hiroto我不明白为什么我应该让他使用OOP,也不明白为什么这样更好。编程风格由OP决定。我在答案下的评论应该足够了。