我是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>
答案 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分钟前
另外,您在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);