如何使用foreach输出插入多个记录到mysql


How to insert mutliple records into mysql using foreach output?

我有一个小的应用程序,其中用户添加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>

因此,当我点击Submit按钮时,嵌套的foreach将遍历由Submit按钮生成的数组。我能够从数组中获取值,但不知何故,输出对我没有用处。下面是每个& &;输出

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语句吗?

我不认为像你所做的那样循环$_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的更多信息,请阅读文档

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

根据你的代码:$sql01 = "INSERT INTO tbl_name (tname,tdesc,tprice, turl) VALUES ";foreach ($_POST as $pos => $newarr) {$sql01 .= "(";sql01美元。=收取($ _POST [' tname ']) ? array_merge ($ _POST [' tname '],","):";sql01美元。=收取($ _POST [' tdesc ']) ? array_merge ($ _POST [' tdesc '],","):";sql01美元。=收取($ _POST [' tprice ']) ? array_merge ($ _POST [' tprice '],","):";sql01美元。=收取($ _POST [' turl ']) ? array_merge ($ _POST [' turl '],","):";$sql01 .= ")";}

mysql_query($sql01);