从foreach循环建立一个数组

时间:2012-06-18 18:45:43

标签: php

我有一个允许用户注册多个事件的表单。它们以带有复选框的形式列出(所有名称为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循环并且它工作正常 - 所以我猜这是我的问题所在?

任何人都可以帮忙吗?提前谢谢!

5 个答案:

答案 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注入!