php - 如何使用foreach输出将多条记录插入mysql?

标签 php mysql loops multidimensional-array foreach

我有一个小应用程序,用户可以通过“添加另一个票证”按钮在单个表单中添加 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 只能获取不同键的值而不是整个子数组,我就可以将记录插入到数据库中。

您能指导我如何实现这一目标以及在哪里放置 INSERT 语句吗?

最佳答案

我认为像您所做的那样循环 $_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 .

关于php - 如何使用foreach输出将多条记录插入mysql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39630934/

相关文章:

php执行sh文件

php - PHP自动加载器: ignoring non-existing include

mysql - 通过自定义函数对数据库中的查询结果进行排序

loops - Grails GSP循环遍历索引,并对选定的行进行处理

java - Java中线程错误异常

php - Ajax 表单 : Wrong value sent back

javascript - 如何将 JSON 数组从 php 传递到 JS?

mysql - 大型 MySql 表给服务器带来过多负载

java - 将 mysql 正则表达式转换为 java 正则表达式(和/或相反)

python - 使用循环动态查找序数 : find th - st - nd - rd