Saklanması checkbox verileri

2 Cevap php

Şu anda kullanarak onay kutularını bir dizi gösterilir sayede bir senaryo yazıyorum:

<?
  while($i = mysqli_fetch_array($get_perms)){

  $pname = $i[pname];
  $id = $i[id];
?>
  <div>
    <input type="checkbox" tabindex="1" name="<? echo("$id");?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo(" $pname");?>
  </div>
<? } ?>

Ancak, ben de benzer bir şey yaparak başka bir rol var, ama Sget_perms farklı verileri elde etmek için farklı bir sql için.

Bu form / komut verileri geri gönderme söz konusu olduğunda Şimdi, belli ki, formda iki databits ayrım arasında bir sorun var oluyor.

Bu formda verilen verileri güncelleştirmek için SQL olduğunu:

$insert = mysql_query("UPDATE `perms` SET
    `title`='$_POST[title]',
    `1` ='$_POST[1]',
    `2` ='$_POST[2]',
    `3` ='$_POST[3]',
    `4` ='$_POST[4]',
    `5` ='$_POST[5]',
    `user` ='$_POST[username]'
     WHERE `userid` = '$valued_user_show[id]'
")

Peki yeryüzünde nasıl doğru ikisi arasındaki ayrım ve doğru SQL girmek mümkün olması mı?

Tablonun şema temelde:

7 columns, userid, user, 1, 2, 3, 4 ,6 userid is the userid of the user who has been posted to script before form. user is the name. The numbers are the permission numbers.

$ Get_perm bir dizi tablodan kullanıcı hakkında güncel bilgileri yüklemek için sql.

2 Cevap

Birincisi: never o kaçan olmadan bir SQL ifadesinde kullanıcı gönderilen verileri içerir! Kötü niyetli bir kullanıcı, veri yazılmadığından izni olmadan veri almak ve zarar her türlü neden olduğunu yararlanabilir. Her zaman mysql_real_escape_string() bir sorgu girmeden sunulan değerleri kaçmak için kullanabilirsiniz.

Gerçek soruya: alanlar sizin iki benzer setleri ayırt etmek için, sadece onlara farklı isimler vermek. Belki de ilk permsA denilen olacağını ve ikinci permsB. Daha sonra bu gibi HTML almak istiyorum:

<input type="checkbox" tabindex="1" name="permsA_<? echo $id;?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo htmlspecialchars($pname);?>

Ben de bir değişken koyarak htmlspecialchars() düzgün HTML kullanmak için $pname değerini kaçış, ve ben etrafında gereksiz tırnak "$id" ihmal etmek için bir çağrı (dahil unutmayın böyle tırnak sadece PHP dizesini ayrıştırmak için ek bir işlem yapmak yapar, sadece tırnak olmadan değişken kendisini yankı).

Sonra SQL deyimi:

$insert = mysql_query("UPDATE `perms` SET
    `title`='" . mysql_real_escape_string($_POST[title]) . "',
    `1` ='" . mysql_real_escape_string($_POST['permsA_1'] . "',
    `2` ='" . mysql_real_escape_string($_POST['permsA_2'] . "',
    `3` ='" . mysql_real_escape_string($_POST['permsA_3'] . "',
    `4` ='" . mysql_real_escape_string($_POST['permsA_4'] . "',
    `5` ='" . mysql_real_escape_string($_POST['permsA_5'] . "',
    `user` ='" . mysql_real_escape_string($_POST['username']) . "'
     WHERE `userid` = '$valued_user_show[id]'
")

Burada tek değişiklik permsA_ öneki eklemek ve düzgün tüm kullanıcı gönderilen değerleri kaçmak.

Lütfen onay kutusuyla bir dizi oluşturun:

<input type="checkbox" name="mycheckbox[]"/>

Ve "MyCheckBox" sizin _POST verileri bir dizi olarak sunulacak.