【问题标题】:Can't get php mysqli while statement to post无法获取 php mysqli 而要发布的语句
【发布时间】:2014-01-29 22:33:46
【问题描述】:

我是 php 新手,我一直在尝试获取一个表单以将值发布到数据库。

  • 我已成功连接到数据库,因为我可以从表中提取值并在 HTML 中显示它们。

  • 我相信 mysqli_query 是正确的,因为我可以将 $variables 替换为示例,它们可以工作并发布。

  • 但是,我似乎找不到正确的组合如何插入 $name 和 $desc 变量,我已经尝试过 $name、'$name' 和 '$_POST[friendname]。我错过了什么?

<?php include 'includes/connect.php'; $name = $_POST[friendname]; $desc = $_POST[desc]; //WRITE TO DATABASE if(!$_POST) { echo "Form info: " . $name . " " . $desc; echo "<br />Use the form below to add a new person! <br /><br />"; } else { $query = "INSERT INTO Friends (ID, Name, Description) VALUES ('NULL', $name, $desc)"; mysqli_query($sql, $query); echo "<br />You've added " . $name . "<br /><br />"; } $result = mysqli_query($sql,"SELECT * FROM Friends"); while($row = mysqli_fetch_array($result)) { echo "<strong>" . $row['Name'] . "</strong> - " . $row['Description']; echo "<br>"; } ?> <p><strong>Add a new person to the database</strong></p> <!-- FORM --> <form name="addform" action="index.php" method="post"> Name: <input type="text" name="friendname" /><br /> Description: <input type="text" name="desc" /><br /> <input type="submit" name="submit" label="submit" /> </form>

【问题讨论】:

  • *EDIT 很奇怪:下面的第一行有时有效,但有时无效,连续工作 3 次,但不是第 4 行。不知道为什么会这样。 $query = "INSERT INTO Friends (ID, Name, Description) VALUES ('NULL', '$name', '$desc')";
  • 通过将 NULL 括在引号中,您将其设为字符串而不是 NULL。您要做的是让数据库创建密钥/ID。尝试改用这个INSERT INTO Friends(Name, Description) VALUES("$name", "$desc")

标签: php mysql mysqli


【解决方案1】:

尽量不要将id放入查询中,我假设该列是自动递增的。 你也应该把变量如下所示

$query = "INSERT INTO Friends (Name, Description) 
                   VALUES ('".$name."', '".$desc."')";

注意:如果您可以向我们展示您的数据库中存储了哪些数据,那将会有所帮助

【讨论】:

  • 建议您可能希望尽快回答您的问题,因此我建议您尽可能清晰地发布您的代码和问题,以便于理解
【解决方案2】:

尝试替换

$query = "INSERT INTO Friends (ID, Name, Description)
VALUES ('NULL', $name, $desc)";

到

$query = "INSERT INTO Friends (ID, Name, Description)
VALUES ('NULL', {$name}, {$desc})";

你可以使用PDO而不是将SQL语句写成字符串

【讨论】:

    【解决方案3】:

    我不得不将desc 用反引号括起来,这是MySQL 所说的“这是一个变量名”,因为desc 是一个关键字。如果您将列名改为description,您的生活会更轻松。

    PDO 是大多数 PHP 安装的标准配置,确实让事情变得更容易。

    <?php
    $pdo = new PDO("mysql:host=localhost;dbname=mysql", "user", "password"); 
    
    if (isset($_POST))
    {
        $name = $_POST['friendname'];
        $desc = $_POST['desc'];
        echo "Form info: " . $name . " " . $desc;
    
        // WRITE TO DATABASE
        $sql = "INSERT INTO Friends(friendname, `desc`) VALUES (:fn, :d)";
        $query = $pdo->prepare($sql);
        $query->execute(array(':fn'=>$name, ':d'=>$desc));
        echo "<br />You've added " . $name . "<br /><br />";
        die;
    }
    ?>
    
    <p>Use the form below to add a new person!</p>
    
    <p><strong>Add a new person to the database</strong></p>
    
    <form name="addform" action="index.php" method="post">
        Name:  <input type="text" name="friendname" /><br />
        Description:  <input type="text" name="desc" /><br />
        <input type="submit" name="submit" label="submit" />
    </form>
    

    这里有一个执行“SELECT *”的合理示例: How to fetch row with PDO

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 2017-02-28
      相关资源
      最近更新 更多