【问题标题】:How to insert multiple values into database using php for loop如何使用php for循环将多个值插入数据库
【发布时间】:2023-04-11 12:23:01
【问题描述】:

我在每一行都有一个文本框和一个下拉框。

现在我想在文本框中输入一些日期并在下拉列表中选择一些值。

当我点击它应该被保存到数据库中。

我该怎么做?

这是我的代码

php插入代码: 当我点击提交这个php代码应该

<?php
mysql_connect("localhost", "tiger", "tiger") or die(mysql_error());
mysql_select_db("theaterdb") or die(mysql_error());
$query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('$_POST[Fname]','$_POST[language]') ") or die(mysql_error());
?>

下拉是动态生成的

代码:

function create(param) {
    'use strict';

    var i, target = document.getElementById('screens');
    target.innerHTML = '';

    for(i = 0; i < param; i += 1) {
       target.innerHTML +='</br>';
       target.innerHTML +='New Movie '+i+'  ';
       target.innerHTML += '<input type="text" name="Fname">';
       target.innerHTML +='  '+'Language '+'  ';
       target.innerHTML += "<?php 
        try {
            $dbh = new PDO('mysql:dbname=theaterdb;host=localhost','tiger','tiger');
        } catch (PDOException $e) {
            echo 'Connection failed: ' . $e->getMessage();
        }

        $sql = 'SELECT language FROM languages;';

        $sth = $dbh->prepare($sql);
        $sth->execute();

        echo "<select name='language' id='course'>";
        echo "<option>----Select Language----</option>"; 
        while($row = $sth->fetch(PDO::FETCH_ASSOC)) {
            echo "<option value='" . $row['language'] ."'>" . $row['language']. "</option>";
        }
        echo "</select>";
?>";
       target.innerHTML +='</br>';
       target.innerHTML +='</br>';
    }
}

用户界面看起来像这样......

【问题讨论】:

  • 你现在做事的方式很容易受到 SQL 注入的影响! 永远不要将您的帖子值直接放在您的查询中!使用 mysql_real_escape_string 转义它们或开始使用 PDO 或 mysqli!
  • @Bono,最好不要mysql_really_escape_me_please_perhaps_string,见this issuePDO or prepared statements 代替。
  • @Bruno 不用告诉我,我随时都会选择 PDO,但他可能不会。所以他至少应该做的是逃跑。

标签: php javascript html mysql ajax


【解决方案1】:

添加名称 像这样的文本框和选择框

name="text_box"+i 和 name="select_box"+i。 “我”

是循环中计数器的值,例如,如果您有 100 个新电影,您将为每个文本框命名,例如 text_box1, text_box2. ..... text_box100. 您应该在提交时记住“新电影”的数字,即“i”和在 php 代码中,只需循环每个元素并保存它们。在第一次迭代中,您将拥有 $_POST[Fname1] and $_POST[language1] 等。

【讨论】:

    【解决方案2】:

    在您的 js 中添加一行,使输入按照target.innerHTML = '&lt;input name="RowCount" value="' + param + '" hidden /&gt;' 的行打印一些内容,然后在您的 PHP 使用中:

    for ($i=0; $i < $_POST["RowCount"]; $i++) {
         $query = sprintf("INSERT INTO movie ('movie_name', 'language') VALUES ('%s', '%s')",
             mysqli_real_escape_string($_POST["Fname"]), // Escaping values before inserting.
             mysqli_real_escape_string($_POST["language"]));
         mysqli_query($con, $query);
    }
    

    【讨论】:

    • 你应该避免mysqli_real_escape_string
    • 我明白了,有趣的阅读,虽然假设 testtestic8 使用 UTF-8 作为他在数据库中的字符集(很可能),但它是非常安全的。否则我们只需要在转义值之前调用mysqli_set_charset()
    【解决方案3】:

    在 HTML 表单中:将文本框和下拉元素名称设置为相同的算法 ElementName+RowNumber; 为 RowCount 插入元素:&lt;input type="hidden" name="RowCount" value="3"&gt;

    在 PHP 中:获取值:

    for($iRow=0;$iRow less $_POST['RowCount'];$iRow++) {
        mysql_query("INSERT INTO movie (movie_name,language) VALUES('".$_POST['Fname'.$iRow]."','".$_POST['language'.$iRow]."');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多