0

我有一个表格,允许用户注册多个事件。它们以带有复选框的形式列出(均以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 循环之外建立一个新数组一样简单,例如,在 foreach 循环$events_attending=array();数组中添加元素,例如和.$events_attending['date'] = $exhib_date;$events_attending['venue'] = $exhib_venue;

我已经测试了这个减去 foreach 循环print_r(),它工作正常 - 所以我猜这就是我的问题所在?

任何人都可以提供帮助吗?提前致谢!

4

5 回答 5

0

您的猜测是正确的,您只是错过了一个小(但很大)的细节。您需要将该数组的每一行与某种其他标识符区分开来。例如:

$events_attending[$exhib_id]['date'] = $exhib_date;
$events_attending[$exhib_id]['venue'] = $exhib_venue;

干杯。

于 2012-06-18T18:50:47.280 回答
0

看起来您正在覆盖数组中的相同条目。尝试这个:

$events_attending[] = array('date' => $exhib_date, 'venue' => $exhib_venue);

顺便说一句,在我看来,您应该真正使用 mysql_fetch_assoc() 代替 mysql_fetch_array(),它确实有助于在维护代码时避免错误。

哦,是的,请务必在您在查询中注入的 POST 值上使用 mysql_real_escape_string(),人们可以进行 SQL 注入!

于 2012-06-18T18:53:15.063 回答
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.
于 2012-06-18T18:49:23.173 回答
0
$events_attending[] = array( 'date' => $exhib_date, 'venue' => $exhib_venue );

这会将您的值附加到数组的末尾,而不是在每次循环迭代时覆盖它们。

于 2012-06-18T18:50:01.020 回答
0

我认为最简单的方法是更改​​这些行

$exhib_date=$vr[1];
$exhib_venue=$vr[2];

$exhib_date[]=$vr[1];
$exhib_venue[]=$vr[2];

然后你将有两个数组供以后使用

$exhib_date
$exhib_venue
于 2012-06-18T18:50:06.667 回答