【问题标题】:How to insert mutliple records into mysql using foreach output?如何使用foreach输出将多条记录插入mysql?
【发布时间】:2017-01-30 13:16:11
【问题描述】:

我有一个小应用程序,用户通过“添加另一个票证”按钮在一个表单中添加 3-4 张票证。这些文本框是通过 Jquery .append() 生成的,每张票都有 5 个输入框。代码如下

<form  action="ticket-addcode.php" method="post" enctype="multipart/form-data" class="my-form">
<span id="tixmegaform">
<input type="hidden" name="Eventid" value="<?php  echo $eventid; ?>" />
<div class="AddRow">
<label>Package Name</label>
	<input class="requierd" type="text" name="ticketgroup" placeholder="Enter the Package Name. Most Preferably Event name" id="EN" value="<?php echo $ticketgroup; ?>">
</div>
<h5>Ticket 1</h5>
<div class="AddRow">
<label>Ticket Title</label>
	<input class="requierd" type="text" name="tname[]" placeholder="Enter the Package Name. Most Preferably Event name" id="EN">
</div>
<div class="AddRow">
<label>Ticket Desc</label>
	<input class="requierd" type="text" name="tdesc[]" placeholder="Enter the Details" id="EN">
</div>
<div class="AddRow">
<label>Ticket Cost</label>
	<input class="requierd" type="text" name="tprice[]" placeholder="Enter the ticket Cost in Numbers. No Currency" id="EN">
</div>
<div class="AddRow">
<label>Ticket Book URL</label>
	<input class="requierd" type="text" name="turl[]" placeholder="Enter the URL without http" id="EN">
</div>

<div class="AddRow">
<label>Time</label>
	<input type="text" class="left requierd" name="eventTime[]" id="timeformatExample1" placeholder="Start">
</div>

<div class="AddRow">
<label>Date</label>
	<input class="requierd" type="text" name="tdate[]" placeholder="Enter the Package Name. Most Preferably Event name" id="from">
</div>


</span>
<input type="submit" name="submit" class="add_field_button_submit">
</form>
</div>

</div>

</div>
<a href="#"><div class="add_field_button">Add Another Ticket</div></a>
</div>

所以,当我点击提交按钮时,一个嵌套的 foreach 会遍历提交按钮生成的数组。我能够从数组中获取值,但不知何故,输出对我没有用。下面是 foreach 和输出

foreach ($_POST as $pos => $newarr) {
foreach($newarr as $res => $final){
echo $pos.'-----'.$final.'<br>';


}
}

Output

**tname-----VIP tix
tdesc-----Early Bird Desc
tdesc-----VIP Desc Tix
tprice-----5000
tprice-----10000
turl-----google.com
turl-----yahoo.com
eventTime-----00:30:00
eventTime-----00:00:45
tdate-----2-2-2016
tdate-----3-3-2016**

我尝试使用插入语句,但它不起作用。似乎我的 foreach 正在解析子数组(tname 数组)和外部数组。如果我的 foreach 可以只获取不同键的值而不是整个子数组,我就可以将记录插入到 db 中。

您能否指导我如何实现这一点以及将 INSERT 语句放在哪里?

【问题讨论】:

  • 抱歉,无法真正理解您的问题。您的“foreach 循环”是否无法为您提供您期望的数组(缺少一个 tname??)还是您不知道如何编写“INSERT”语句?
  • 请同时发布 javascript 附加代码。

标签: php mysql loops multidimensional-array foreach


【解决方案1】:

我认为循环遍历$_POST 对你没有任何好处。请注意您的信息出现的顺序如何使其变得困难?

而是选择您的任何数组字段来首先确定您拥有的票数。然后使用票数来迭代每张票。这样您就可以将相关信息的每个组(票)的索引放在一起。通过索引,您可以获取该组的所有相关信息。

获得必要的信息后,您可以通过一次插入一个或一次大插入来存储每个信息。为简单起见,我们将使用前一种方法(使用 PDO)。

以下是其外观的粗略且未经测试的草图:

try {
    $dbh = new PDO($dsn, $user, $password);
    // prepare your SQL statement
    $sth = $dbh->prepare("INSERT INTO table (title, desc, price, url) VALUES(?, ?, ?, ?)");
    // loop over each ticket information
    for ($i = 0, $numTickets = count($_POST['tname']); $i < $numTickets; $i++) {
        $title = $_POST['tname'][$i];
        $desc = $_POST['tdesc'][$i];
        $price = $_POST['tprice'][$i];
        $url = $_POST['turl'][$i];
        // insert information into database
        $sth->execute(array($title, $desc, $price, $url));
    }
} catch (PDOException $e) {
    // if something goes wrong, add some logic
}

有关 PDO 的更多信息,请阅读documentation

【讨论】:

    【解决方案2】:

    使用以下 SQL 格式进行插入: 例子: 插入到 tbl_name (a,b,c) 值 (7,8,9);

    根据您的代码: $sql01 = "插入 tbl_name (tname,tdesc,tprice, turl) 值"; foreach ($_POST as $pos => $newarr) { $sql01 .= "("; $sql01 .= isset($_POST['tname'])?array_merge($_POST['tname'],","):""; $sql01 .= isset($_POST['tdesc'])?array_merge($_POST['tdesc'],","):""; $sql01 .= isset($_POST['tprice'])?array_merge($_POST['tprice'],","):""; $sql01 .= isset($_POST['turl'])?array_merge($_POST['turl'],","):""; $sql01 .= ")"; }

    mysql_query($sql01);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多