PHP表单不会将数据发送到MySQL

时间:2016-01-22 13:39:33

标签: php mysql

我是php新手。我一直试图通过PHP表单将数据输入MySQL,但不幸的是它无法正常工作。我用过post方法。请帮助我

<html>
    <body>
    <form action=zain.php method="post">
        category <input type="text" name="product_category"><br />
        <br />
        Name: <input type="text" name="product_name"><br /><br />
        <input type="submit" id = "go" name="submit" value="Go">
    </form>
    </body>
    <?php
    $user = 'root';
    $password = 'zz224466';
    $db = 'Zain';

    // Create connection
    $conn = mysqli_connect('localhost', $user, $password, $db);

    // Check connection
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "connected";

    mysqli_select_db($conn, "zain");


        $sql = "INSERT INTO product WHERE product_id=1 (product_category , product_name) VALUES('$_POST[product_category]','$_POST[product_category]')";

        mysqli_query($conn, $sql);
        mysqli_close($conn);


    ?>
    </html>

3 个答案:

答案 0 :(得分:2)

为了在双引号字符串内扩展数组,你需要这样做

 $sql = "INSERT INTO product 
                (product_category , product_name) 
          VALUES('{$_POST['product_category']}','{$_POST['product_name']}')";

我还将第二个字段的名称改为$_POST['product_name'],尽管这正是我认为它会被调用的。

如果你坚持不使用准备好的陈述,我也会,至少添加这个

 $c = mysqli_real_escape_string($conn, $_POST['product_category']);
 $p = mysqli_real_escape_string($conn, $_POST['product_name']);

 $sql = "INSERT INTO product 
                (product_category , product_name) 
          VALUES('$c','$p')";

更安全的方法是避免SQL注入

$sql = "INSERT INTO product 
                (product_category , product_name) VALUES(?, ?)";

if ($stmt = mysqli_prepare($conn, $sql)) {

    /* bind parameters for markers */
    mysqli_bind_param($stmt, "ss", $_POST['product_category'], $_POST['product_name']);

    mysqli_execute($stmt);

    .. .. .. 

} else {

    echo mysqli_error($conn);
    exit;
} 

答案 1 :(得分:2)

这段代码有几点需要解决。首先,正如评论中已经提到的那样,您之前有一个WHERE子句。插入查询不使用此项,因为您要插入新行 - 而不是更新一行。

此外,您在SQL语句中使用$_POST[product_category]。请注意,超级全局$_POST是一个数组,因此,您需要正确索引您尝试从该数组中检索的任何内容,因此它应该是$_POST['product_category'](请注意单引号)

此外,您的代码为vulnerable to SQL-injection,由于您已使用mysqli_,因此应将预备语句应用于您的代码。

$sql = "INSERT INTO product (product_category , product_name) VALUES (?,?)";
if ($stmt = mysqli_prepare($conn, $sql)) {
    mysqli_stmt_bind_param($stmt, "ss", $_POST['product_category'], $_POST['product_name']);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
}
mysqli_close($conn);

error_reporting(E_ALL);mysqli_error的使用会在出现问题时提醒您,所以请将其应用到您的代码中 - 当您知道错误的原因时,它会让问题变得更加容易。

答案 2 :(得分:2)

除了给出的其他答案之外,您的整个代码都在同一页面中,并且一旦页面加载,您很可能会在db中插入空数据。

因此,您需要使用条件语句(检查空数据输入)并首先使用提交按钮的名称属性预先分配变量。

即:

if(isset($_POST['submit'])){

    if( !empty($_POST['var1']) && !empty($_POST['var2']) ){

    $var1 = $_POST['var1'];
    $var2 = $_POST['var2'];

    // execute your SQL
     }

}

来自评论:

另外,你在同一页面内使用这整个代码,可能/最有可能将空数据插入数据库,但没有告诉我们。我对吗? @ZainFarooq加载页面后,它会立即输入空数据。我很确定我是对的,并且可能输入MySQL也在抱怨的字符。 - Fred -ii- 5分钟前

我认为你的最后评论为我提供了一些解决方案@ Fred-ii - Zain Farooq 2分钟前

@ZainFarooq很高兴听到我的帮助。 - Fred -ii- 2分钟前

  • 另一种选择是从PHP / SQL中分离HTML表单,并使用上面的答案中概述的条件语句。

另外,您在VALUES VALUES('$_POST[product_category]','$_POST[product_category]')中使用了相同的2个POST阵列,正如我在评论中已经概述的那样。其中一个应该是$_POST[product_name]

您可能还会输入MySQL可能抱怨的字符,例如撇号等。即:Joe's Bar & Grill。因此,您需要转义数据,无论如何都应该这样做。

另一个可能产生影响的是列类型和长度。列必须足够长以容纳插入的数据。如果输入的字符串长度大于列的长度,MySQL将无声地失败。

脚注:

您不需要此mysqli_select_db($conn, "zain");并且可以安全删除,因为您已经在以下位置声明了所有4个参数:

$conn = mysqli_connect('localhost', $user, $password, $db);