$ _POST As $ anahtar =>

4 Cevap php

Ben sorun bir onay kutusunu geçti bilgilerini güncellemek için bir form almak yaşıyorum. Ben bu kodu verildi.

$one = isset($_POST['one']) ? 'on' : 'off';

Bu sürece ben ayrı ayrı onay kutusunu çağırmak gibi harika çalışıyor. Benim sorunum ben toplamda yaklaşık 200 onay kutularını olması.

İşte UPDATE ile kullanıyorum kodudur. Herkes bana nerede benim şimdiki koduna verildi kodu eklemek anlamaya yardımcı olabilir misiniz? Ben varyasyonları her türlü denedim.

if($_POST['submit']){
    if(!empty($applicant_id)){
	    $sql = "UPDATE play SET ";
	    foreach($_POST as $key => $value){
			    if(($key != 'submit') && ($key != 'applicant_id')){
				    $sql .=  $key. " = '$value',";
			    }
	    }
	    $sql = substr($sql, 0, -1);
	    $sql .= " WHERE ".$applicant_id." = $applicant_id";
	    $result = mysql_query($sql,$db) or die(mysql_error(). "<br />SQL: $sql");	
    } 
}

4 Cevap

Çözelti bir array() veya benzeri olası onay kutularını sizin bilinen liste ile başlamaktır. Ben böyle bir liste formunu oluşturmak varsayalım miyim? Eğer değilse, muhtemelen gerekir. Sonra her bir onay kutusunun varlığını denetlemek için aynı veriler üzerinde bir döngü kullanabilirsiniz.

Diğer bazı ipuçları:

isset($array[$key]) tavsiye edilmez. O zaman en güvenilir olacak olsa da, başarısız olur $array[$key] olup null. Doğru çağrı array_key_exists($key, $array).

SQL için dize parçalarını birleştirirken zaman yaptığın gibi, bu aşağıdakileri yapmak için daha şık:

 $sqlvalues = array();
 foreach( $options as $field ) {
    if( array_key_exists('checkbox_'.$field, $_POST) )
        $sqlvalues[] = $field.' = \'on\'';
    else
        $sqlvalues[] = $field.' = \'off\'';
 }
 mysql_query('UPDATE '.$table.' SET '.implode(', ', $sqlvalues).' WHERE applicant_id = '.$applicant_id);

HTML onay kutusunu davranışlara çalışıyor olabilir: onlar ise Kutularını sadece sunucuya gönderilir; onlar kapalı ise, hiçbir ad / değer çifti gönderilir. Yukarıdaki kod ile değerleri kapatarak sorun olacak.

Yani değerler sizin bilinen listesinde çalıştırmak ve $ _POST parametreleri onları kontrol etmeniz gerekir.

Bir dizi adı kullanmak gerekir ve o PHP bir dizi olacak.

Ndp dediği gibi bir onay kutusu işaretli değilse, değeri iletilmez. Yani "off" değeri ile, onay kutusunu giriş alanından önce aynı adla gizli bir giriş alanı kullanmak gerekir.

<label for="one">One</label> 
<input type="hidden" name="checkboxes[one]" value="off"/>
<input type="checkbox" name="checkboxes[one]" id="one" value="on"/>

Unutmayın kontrol = o için varsayılan olmalıdır eğer "kontrol".

Sen döngü şimdi POST ile onay kutularını olabilir veya GET

foreach ($_POST['checkboxes'] as $key => $value) {
    //something
}
if($_POST['submit']){
    if(!empty($applicant_id)){
            $sql = "UPDATE play SET ";
            foreach($_POST as $key => $value){
                if(($key != 'submit') && ($key != 'applicant_id')){
                     $sql .=  $key . " = '" . ($value ? 'on' : 'off') . "',";
                }
            }
            $sql = substr($sql, 0, -1);
            $sql .= " WHERE ".$applicant_id." = $applicant_id";
            $result = mysql_query($sql,$db) or die(mysql_error(). "<br />SQL: $sql");   
    } 
}

Yukarıdaki tüm girişler onay kutularını olduğunu varsayar. Onlar değilse, onları ayırmak için bir kongre çalışmak gerekir.

Eğer mysql_real_escape_string() ile girişleri sterilize edilmez çünkü arada, sizin şu anda UPDATE kod SQL injection açıktır çalışıyor. Şerefe.