Her uygun kayıt atama, tabloya birden çok değişkenler girin

4 Cevap php

Ben w mekanlarından bir liste kutusunda bir açılır /, bir html tabloya verileri görüntüler. Her gönüllü bir mekan tahsis edilecektir. Ben html masaya sokmak aşağı gitmek için güçlü olmak ve her gönüllü bir mekan atama öngörülüyor. Kutusunun aşağı açılan onlar atanabilir tüm olası mekanları içerir.

<select>
<option value="1">Setup</option>
<option value="2">Check in</option>
etc...
</select>

Ben her gönüllüyü atama bittim Sonra, bir kez ben göndermek ve her bir gönüllü için uygun değerini atar vurmak istiyorum.

Bunu nasıl yapıyor hakkında gitmek istiyorum, ben bunu biliyorum, ama bir kerede yalnızca bir.

4 Cevap

Bir gönüllü id içeren bir şekilde, her bir select adını değiştirin:

<select name="venues[1]">
<option value="1">Setup</option>
etc...
</select>

<select name="venues[2]">
<option value="1">Setup</option>
etc...
</select>

<select name="venues[3]">
<option value="1">Setup</option>
etc...
</select>

1, 2, 3 (Beeing gönüllü id) ve her bir gönüllü için seçilen değeri Beeing değerler: Mesai $ _POST isimli mekânları ve endeksleri ile bir tablo olacaktır gönderin.

Şimdi $_POST['venues'] dizisinde yineleme ve her değeri kaydedebilirsiniz:

foreach ($_POST['venues'] as $volunteer_id => $venue) {
  save_venue_for_volunteer($volunteer_id, $venue);
}

İşte bu başa nasıl çok kaba bir örnek. Not: MySQL tablo (MySQL varsayarak) işlemleri destekleyen bir türde olması gerekir (InnoDB yapar, MyISAM değil).

<?php

if ( isset( $_POST['venuChoice'] ) )
{
    //	Create a transaction
    mysql_query( 'BEGIN' );

    $failure = false;

    //	Loop over the selections
    foreach ( $_POST['venuChoice'] as $employeeId => $venueId )
    {
    	$sql = sprintf(
    			'UPDATE table SET columns=%d WHERE id=%d'
    		,	intval( mysql_real_escape_string( $venueId ) )
    		,	intval( mysql_real_escape_string( $employeeId ) )
    	);
    	if ( ! @mysql_query( $sql ) )
    	{
    		$failure = true;
    		break;
    	}
    }

    //	Close out the transaction
    if ( $failure )
    {
    	mysql_query( 'ROLLBACK' );
    	//	Display and error or something
    } else {
    	mysql_query( 'COMMIT' );
	//	Success!
    }
}

?>

<form>
    <select name="venueChoice[1]">
    	<option value="1">Setup</option>
    	<option value="2">Check in</option>
    </select>
    <select name="venueChoice[2]">
    	<option value="1">Setup</option>
    	<option value="2">Check in</option>
    </select>
    <select name="venueChoice[3]">
    	<option value="1">Setup</option>
    	<option value="2">Check in</option>
    </select>

</form>

Ayrıca, her bir çalışanın mevcut mekan seçimi takip etmek için bu değişiklik POST verileri ile karşılaştırmak, ve sonra sadece gerçekten değişmiş olduğunu olanlar için GÜNCELLEME sorguları yürütebilir.

Ben herhangi bir şekilde düşünemiyorum. Sen 1 MySQL sorgu içine birden fazla SQL ifadeleri koyabilirsiniz:

UPDATE volunteer SET venue = 1 WHERE id = 2;
UPDATE volunteer SET venue = 2 WHERE id = 3;
...

Ben bir yolu olsaydı, ama ben nerede birine bunu yapmak için her sorguda çok farklı olacağını düşünüyorum.

foreach ($_POST['venues'] as $volunteer_id => $venue) {
    save_venue_for_volunteer($volunteer_id, $venue);
}

function save_venue_for_volunteer($volunteer_id, $venue) {
    $result = mysql_query("UPDATE volunteers_2009 SET venue_id='$venue' WHERE id='$volunteer_id'") 
    or die(mysql_error());
}

Bu kaydedilecektir tablo volunteers_2009 olduğunu, bu yüzden bu nasıl olmalıdır?