Takma checkbox veritabanı içine değerleri

6 Cevap php

I need help for this problem that i'm trying to solve for a while (i'm new in PHP). I have a form with several checkboxes which values are pulled from a database. I managed to display them in the form, assign an appropriate value to each, but cannot insert their values into other database.

İşte kod:

<form id="form1" name="form1" method="post" action="">
<?php
$info_id = $_GET['info_id'];
$kv_dodatoci = mysql_query("SELECT * FROM `dodatoci`") or die('ERROR DISPLAYING: ' . mysql_error());
while ($kol = mysql_fetch_array($kv_dodatoci)){
    $id_dodatoci = $kol['id_dodatoci'];
    $mk = $kol['mk'];


    echo '<input type="checkbox" name="id_dodatoci[]" id="id_dodatoci" value="' . $id_dodatoci . '" />';
    echo '<label for="' . $id_dodatoci.'">' . $mk . '</label><br />';
  }
?>
<input type="hidden" value="<?=$info_id?>" name="info_id" />
<input name="insert_info" type="submit" value="Insert Additional info" />
</form>
<?php
if (isset($_POST['insert_info']) && is_array($id_dodatoci)) {
    echo $id_dodatoci . '<br />';
    echo $mk . '<br />';

    // --- Guess here's the problem  ----- //
    foreach ($_POST['id_dodatoci'] as $dodatok) {
         $dodatok_kv = mysql_query("INSERT INTO `dodatoci_hotel` (id_dodatoci, info_id) VALUES ('$dodatok', '$info_id')") or die('ERROR INSERTING: '.mysql_error());
     }
}


?>

my problem is to loop through all checkboxes, and for each checked, populate a separate record in a database. actually i don't know how to recognize the which box is checked, and put the appropriate value in db.

Birisi bana bu çözmek ya da bana bir kılavuz vermek yardımcı olabilir umuyoruz.

Şimdiden teşekkürler.

6 Cevap

Bir onay kutusu seçilirse bir değere sahip olacak, çünkü söyleyebilirim. Seçilmemişse eğer, hiç PHP istek / get / post görünmeyecektir.

Ne yapmak isteyebilirsiniz dayanarak bunun değeri ve iş için kontrol etmektir. Değer varsayılan olarak 'açık' dize, ama değeri ile değiştirilebilir = HTML'' nitelik.

İşte yardımcı olabilecek kod birkaç parçacıkları şunlardır (tam üretim kalitesi değil, ancak göstermek yardımcı olacaktır):

HTML:

<input type='checkbox' name='ShowCloseWindowLink' value='1'/> Show the 'Close Window' link at the bottom of the form.

PHP:

if (isset($_POST["ShowCloseWindowLink"])) {
    $ShowCloseWindowLink=1;
} else {
    $ShowCloseWindowLink=0;
}

        .....


$sql = "update table set ShowCloseWindowLink = ".mysql_real_escape_string($ShowCloseWindowLink)." where ..."

(Kabul edeceği bir ShowCloseWindowLink sütun içeren bir tablo varsayarak bir 1 veya 0)

Hoi!

Bir onay kutusu işaretli olduğunda Peki, Eli yazdığı gibi, POST, ayarlı değil.

Bazen emin olmak için ek bir gizli alan (-dizi) kullanın, ben sayfadaki tüm onay kutularını bir listesi var.

Örnek:

<input type="checkbox" name="my_checkbox[<?=$id_of_checkbox?>]">
<input type="hidden" name="array_checkboxes[<?=$id_of_checkbox?>]" value="is_on_page">

Yani $ _POST olsun:

array(2){
 array(1){"my_checkbox" => array(1){[123]=>"1"}}
 array(1){"array_checkboxes" => array(1){[123]=>"is_on_page"}}
}

Ben bile onay kutusunun işaretli DEĞİLDİR ikinci satırı, olsun ve ben böyle bir şey ile tüm onay kutularını döngü yapabilirsiniz:

foreach ($_POST["array_checkboxes"] as $key => $value)
{
  if($value=="is_on_page")
  {
    $value_of_checkbox[$key] = $_POST["my_checkbox"][$key];
    //Save this value
  }
}

Bu yardımcı olur umarım! :)

Best regards, Bastian

Ekstra bir not olarak: Sen kimlikleri için yanlış HTML sözdizimi kullanıyorsanız ve <label>. <label> 's özniteliği bir ID değil, bir değeri işaret etmelidir "için". Ayrıca, her bir eleman için benzersiz kimlikleri gerekir. Eğer attılar kodu doğrulamak olmaz.

Ayrıca, tüm kodunuzu doğrulayarak değiliz. En azından, bir htmlspecialchars() veya htmlentities() do girişine önce çıktısı ve bir mysql_real_escape_string() DB veri eklemeden önce.

2nd Answer:

Sen böyle bir şey yapacağım:

HTML:

echo '<input type="checkbox" name="id_dodatoci[]" value="'.$id_dodatoci.'" />';

PHP:

if ( !empty($_POST["id_dodatoci"]) ) {
    $id_dodatoci = $_POST["id_dodatoci"];
    print_r($id_dodatoci);
    // This should provide an array of all the checkboxes that were checked.
    // Any not checked will not be present.
} else {
    // None of the id_dodatoci checkboxes were checked.
}

Eğer onay kutularını tümü için aynı adı kullanıyor, böylece onların değerler bir dizi olarak php geçilecek olmasıdır. Eğer farklı isimler kullanılırsa, o zaman her bir post it anahtar / değer çiftini sahibi oluyor olurdu.

Bu da yardımcı olabilir:

http://www.php-mysql-tutorial.com/php-tutorial/using-php-forms.php

Ayrıca birkaç kişi kullanmak ancak bu, HTML oldukça güzel bir şey var olabilir:

<input type="hidden" name="my_checkbox" value="N" />
<input type="checkbox" name="my_checkbox" value="Y" />

ve voila! - onay kutularını için varsayılan değerleri ...!

if(isset($_POST['id_dodatoci'])){


    $id_dodatoci=$_POST['id_dodatoci'];
    $arr_num=count($id_dodatoci);
    $i=0;
    while ($i < $arr_num)
   {

      $query="INSERT INTO `dodatoci_hotel`(id_dodatoci,info_id) 
    VALUES ('$id_dodatoci[$i]','$info_id')";
    $res=mysql_query($query) or die('ERROR INSERTING: '.mysql_error());
      $i++;
    }

   }

Bu i ihtiyacım döngü olduğunu ve kızlar ve erkekler için teşekkürler, ben $ i değişkeni ile her tuşu aracılığıyla bir döngü gerektiğini fark etti.