PHP循环遍历元素并添加到数据库

时间:2017-04-15 15:43:09

标签: php mysql

我不知道我想做的事情是否可以实现/合理但我还是会问:

我正在构建一个调查类型的网站,我正在考虑将响应存储在MySQL数据库中。每个响应/文本字段都是记录

我正在处理的当前页面有两个元素(Answer1和Answer2)。

如何让提交将每个答案作为单独的行添加到我的数据库中?例如,2个单独的记录,不同的文本存储在responsetext字段中?

我有以下(出于安全原因显然已更改),它添加了一条记录,但是我指定的元素:

$conn = new mysqli($dbhost, $dbuser, $dbpass,$dbname);

if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} 
$stmt = $conn->prepare("INSERT INTO responses (qkey,rtext)
VALUES ('".$_POST["1"]."','".$_POST["Q1Answer"]."')");  

$Q1Answer = $_POST["Q1Answer"];

$stmt->bind_param("s", $Q1Answer);

$stmt->execute();

$stmt->close();   

$conn->close();

我想我可以循环遍历所有元素并逐个添加它们?这可以在提交行动/帖子上吗?

我在这里搜索过但找不到任何能够提供帮助的东西......

2 个答案:

答案 0 :(得分:2)

首先,永远不要在你的sql语句中使用$ _POST或$ _GET或$ _SESSION值,你应该总是使用例如:#/ p>进行清理。

$value = mysqli_real_escape_string($_POST['value1']);

这是为了防止任何mysql注入,就像OldPadawan提到的那样..

要回答您的问题,您可以使用for循环:

$i = 1;
foreach ( $_POST as $key => $value ){
    if ( $key == $i ){
        $value.$i = mysqli_real_escape_string($value);
     }
     if ( $key == 'Q'.$i.'Answer' ){
        $value.$i = mysqli_real_escape_string($value);
     }
    if ( $i % 2 ){
        mysqli_query($conn, "INSERT INTO responses (qkey,rtext) VALUES ($key.($i-1), $key.$i)");
    }
$i++;
 }

答案 1 :(得分:0)

看看这个@K。 TROMP

$i = 1;
$queryValue = NULL;
foreach ($_POST as $key => $value) {
    if ($key == $i) {
        $value . $i = mysqli_real_escape_string($value);
    }
    if ($key == 'Q' . $i . 'Answer') {
        $value . $i = mysqli_real_escape_string($value);
    }
    if ($i % 2) {
        $queryValue .= "($key.($i-1), $key.$i),";
    }
    $i++;
}
$query = 'INSERT INTO responses (qkey,rtext) VALUES ' . rtrim($queryValue);
mysqli_query($conn, $query);