Php 为什么表单值没有插入到数据库中

Php 为什么表单值没有插入到数据库中,php,mysql,Php,Mysql,有人能告诉我在坐标表中添加表单值时我的代码哪里不正确吗?我让用户在该页面之前输入要输入的坐标数(即生成该页面上的文本框),然后输入坐标值并填充到数据库中。我不断得到数组到字符串的转换错误,但一直无法修复它 如果框的数量可以更改,如何插入值?如果用户只输入4,这将生成4行,每行有三个坐标(x,y,z),该怎么办?这就是我不明白的地方。如果只使用静态表单值,我就能够将值获取到表中 我是一个初学者,但学习缓慢,循序渐进,并感谢积极和建设性的答案 <head> <title

有人能告诉我在坐标表中添加表单值时我的代码哪里不正确吗?我让用户在该页面之前输入要输入的坐标数(即生成该页面上的文本框),然后输入坐标值并填充到数据库中。我不断得到数组到字符串的转换错误,但一直无法修复它

如果框的数量可以更改,如何插入值?如果用户只输入4,这将生成4行,每行有三个坐标(x,y,z),该怎么办?这就是我不明白的地方。如果只使用静态表单值,我就能够将值获取到表中

我是一个初学者,但学习缓慢,循序渐进,并感谢积极和建设性的答案

<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:Saw
mysql\u*
函数,已停止读取。-读取并更新!有任何错误吗?您的表单实际上没有任何带有
name=“textX”
…我收到错误“数组为字符串”有趣的是,我正在阅读的手册/书中并没有包含解决这个问题的所有信息,所以我去了网上,看到教程网站上的例子使用的是旧方法。这两种说法有什么区别?@Quentin在
'
周围
$textZ
。这是一本方法书是在教我,但是它没有涉及如何解决从表单字段获取数据的问题,如果您看到我的输入名称textx[]字段并插入到表中。至于PDO,这是我一直在使用的,但我决定遵循教程网站的示例来解决我的问题。我猜我选择错了。哦,我现在明白了,您正在尝试处理变量数组!请检查更新版本。我不太理解(?,,?)或者bindParam。我还没有使用该属性,但已经使用了bindValue。你能用简单的术语向我解释一下区别吗?ThanksbindParam会将变量转义并插入到SQL查询中“?”所在的位置。在我们的情况下,它会更快(当我们需要多次运行类似的查询时).bindParam可以使用命名占位符或问号。我希望文档能让您更清楚: