我有一个允许用户注册多个事件的表单。它们以带有复选框的形式列出(所有名称为registrations[]
且事件ID为值)并作为数组提交。
后续页面循环遍历每个“已检查”事件,为每个事件向数据库添加记录:
foreach ($_POST['registrations'] as $registration) {
$query="SELECT exhibitions.exhib_id, DATE_FORMAT(exhibitions.exhib_date, %d/%m/%y'), venues.venue_name FROM exhibitions, venues WHERE exhibitions.venue_id='$registration' AND venues.venue_id='$registration' LIMIT 1";
$result=mysql_query($query);
$vr=mysql_fetch_array($result, MYSQL_NUM);
$exhib_id=$vr[0];
$exhib_date=$vr[1];
$exhib_venue=$vr[2];
// do database stuff here
}
我需要做的是将每个$exhib_date
和$exhib_venue
存储在一个单独的数组中,稍后我可以重复使用(在确认电子邮件中,将列出用户已注册的所有事件)。
我认为这就像在foreach循环中建立一个新的数组 一样简单,例如$events_attending=array();
并在 foreach循环中向数组添加元素,例如$events_attending['date'] = $exhib_date;
和$events_attending['venue'] = $exhib_venue;
。
我使用print_r()
测试了这个减去foreach循环并且它工作正常 - 所以我猜这是我的问题所在?
任何人都可以帮忙吗?提前谢谢!
答案 0 :(得分:0)
除了清理$ _POST数据外,请尝试:
foreach ($_POST['registrations'] as $registration) {
$query="SELECT exhibitions.exhib_id, DATE_FORMAT(exhibitions.exhib_date, %d/%m/%y'), venues.venue_name FROM exhibitions, venues WHERE exhibitions.venue_id='$registration' AND venues.venue_id='$registration' LIMIT 1";
$result=mysql_query($query);
$vr=mysql_fetch_array($result, MYSQL_NUM);
$event[$exhib_id] = array('date' => $vr[1], 'venue' => $vr[2]);
// do database stuff here
}
然后你可以做:
print_r($event);
Array(
[1] => Array (
date => 'event date',
venue => 'venue'
)
[2] => Array (
date => 'event date',
venue => 'venue'
)
如果您知道自己想要的活动,可以致电:
$event[2]['date'] to get event date, or $event[2]['venue'] for the venue, etc.
答案 1 :(得分:0)
$events_attending[] = array( 'date' => $exhib_date, 'venue' => $exhib_venue );
这会将您的值附加到数组的末尾,而不是在每次循环迭代时覆盖它们。
答案 2 :(得分:0)
我认为最简单的方法是更改这些行
$exhib_date=$vr[1];
$exhib_venue=$vr[2];
到
$exhib_date[]=$vr[1];
$exhib_venue[]=$vr[2];
然后您将有两个数组供以后使用,名为
$exhib_date
$exhib_venue
答案 3 :(得分:0)
你的猜测是正确的,你只是错过了一个小(但很大)的细节。您需要将该数组的每一行与某种其他标识符区分开来。例如:
$events_attending[$exhib_id]['date'] = $exhib_date;
$events_attending[$exhib_id]['venue'] = $exhib_venue;
干杯。
答案 4 :(得分:0)
看起来你正在覆盖你阵列中的相同条目。试试这个:
$events_attending[] = array('date' => $exhib_date, 'venue' => $exhib_venue);
顺便说一句,在我看来你应该使用mysql_fetch_assoc()代替mysql_fetch_array(),它确实有助于在维护代码时避免错误。
哦,是的,请确保在查询中注入的POST值上使用mysql_real_escape_string(),人们可以进行SQL注入!