Php 为什么表单值没有插入到数据库中
有人能告诉我在坐标表中添加表单值时我的代码哪里不正确吗?我让用户在该页面之前输入要输入的坐标数(即生成该页面上的文本框),然后输入坐标值并填充到数据库中。我不断得到数组到字符串的转换错误,但一直无法修复它 如果框的数量可以更改,如何插入值?如果用户只输入4,这将生成4行,每行有三个坐标(x,y,z),该怎么办?这就是我不明白的地方。如果只使用静态表单值,我就能够将值获取到表中 我是一个初学者,但学习缓慢,循序渐进,并感谢积极和建设性的答案Php 为什么表单值没有插入到数据库中,php,mysql,Php,Mysql,有人能告诉我在坐标表中添加表单值时我的代码哪里不正确吗?我让用户在该页面之前输入要输入的坐标数(即生成该页面上的文本框),然后输入坐标值并填充到数据库中。我不断得到数组到字符串的转换错误,但一直无法修复它 如果框的数量可以更改,如何插入值?如果用户只输入4,这将生成4行,每行有三个坐标(x,y,z),该怎么办?这就是我不明白的地方。如果只使用静态表单值,我就能够将值获取到表中 我是一个初学者,但学习缓慢,循序渐进,并感谢积极和建设性的答案 <head> <title
<head>
<title>Add Coordinate to Database</title>
</head>
<body>
<?php
if(isset($_POST['add'])) {
$dbhost = 'localhost';
$dbname = 'your_db_name';
$dbuser = 'John';
$dbpass = 'johns##password';
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser,
$dbpass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO coordTable (x, y, z) VALUES (?, ?, ?)");
$stmt->bindParam(1, $_POST['textx']);
$stmt->bindParam(2, $_POST['texty']); //what is difference between bindParam/bindValue
$stmt->bindParam(3, $_POST['textz']);
$stmt->execute();
}
if(! get_coordinates() ) {
$textx = filter_input($_POST['textx']);
$texty = filter_input($_POST['texty']);
$textz = filter_input($_POST['textz']);
}else {
$textx = $_POST['textx'];
$texty = $_POST['texty'];
$textz = $_POST['textz'];
}
$sql = "INSERT INTO coordTable". "(x, y, z)
) ". "VALUES('$textx','$texty',$textz)";
?>
<form method="post" action="output_process.php">
<?php for ($counter = 1; $counter <= $num_boxes; $counter++) { ?>
(x<?php echo $counter; ?>:<input name="textx[]<?php echo $counter; ?>" type="text" value="">,
y<?php echo $counter; ?>: <input name="texty[]<?php echo $counter; ?>" type="text" value"">,
z<?php echo $counter; ?>: <input name="textz[]<?php echo $counter; ?>" type="text" value"">)<br><br>
<?php } ?>
<input name="button2" type="submit" value="Submit">
</form>
向数据库添加坐标
您的查询字符串如下所示:
$sql = "INSERT INTO coordTable". "(x, y, z)
) ". "VALUES('$textX','$textY',$textZ)";
$sql = "INSERT INTO coordTable". "(x, y, z)
) ". "VALUES('$textX','$textY','$textZ')";
而查询字符串应如下所示:
$sql = "INSERT INTO coordTable". "(x, y, z)
) ". "VALUES('$textX','$textY',$textZ)";
$sql = "INSERT INTO coordTable". "(x, y, z)
) ". "VALUES('$textX','$textY','$textZ')";
正如其他作者所说,mysql函数已经过时,无法在PHP7中工作,您应该选择不同的函数。此外,您没有清理POST变量,恶意用户可以对您的数据库执行任何操作
以下是现代PDO的替代品:
(x:Sawmysql\u*
函数,已停止读取。-读取并更新!有任何错误吗?您的表单实际上没有任何带有name=“textX”
…我收到错误“数组为字符串”有趣的是,我正在阅读的手册/书中并没有包含解决这个问题的所有信息,所以我去了网上,看到教程网站上的例子使用的是旧方法。这两种说法有什么区别?@Quentin在'
周围$textZ
。这是一本方法书是在教我,但是它没有涉及如何解决从表单字段获取数据的问题,如果您看到我的输入名称textx[]字段并插入到表中。至于PDO,这是我一直在使用的,但我决定遵循教程网站的示例来解决我的问题。我猜我选择错了。哦,我现在明白了,您正在尝试处理变量数组!请检查更新版本。我不太理解(?,,?)或者bindParam。我还没有使用该属性,但已经使用了bindValue。你能用简单的术语向我解释一下区别吗?ThanksbindParam会将变量转义并插入到SQL查询中“?”所在的位置。在我们的情况下,它会更快(当我们需要多次运行类似的查询时).bindParam可以使用命名占位符或问号。我希望文档能让您更清楚: