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

$_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];

そして、後で名前を付けて使用するための2つの配列があります

$exhib_date
$exhib_venue
于 2012-06-18T18:50:06.667 に答える
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_array() の代わりに mysql_fetch_assoc() を実際に使用する必要があります。これは、コードを維持するときにバグを回避するのに本当に役立ちます。

そうそう、クエリに挿入する POST 値に対して必ず mysql_real_escape_string() を使用してください。人々は SQL インジェクションを行う可能性があります!

于 2012-06-18T18:53:15.063 に答える