Mysqli sorgu öğelerin listesini alma

3 Cevap php

Şu anda verilen mysqli sorgudaki güncellemek için şeylerin bir listesi var:

$insert = mysqli_query($db,"UPDATE `tbl_perms` SET
 `1` ='" . mysqli_real_escape_string($db,$_POST['permsA_1']) . "',    
 `2` ='" . mysqli_real_escape_string($db,$_POST['permsA_2']) . "',    
 `3` ='" . mysqli_real_escape_string($db,$_POST['permsA_3']) . "',    
 `4` ='" . mysqli_real_escape_string($db,$_POST['permsA_4']) . "',    
 `5` ='" . mysqli_real_escape_string($db,$_POST['permsA_5']) . "', 
 `6` ='" . mysqli_real_escape_string($db,$_POST['permsA_6']) . "',
 `7` ='" . mysqli_real_escape_string($db,$_POST['permsA_7']) . "',
 `8` ='" . mysqli_real_escape_string($db,$_POST['permsA_8']) . "',
 `9` ='" . mysqli_real_escape_string($db,$_POST['permsA_9']) . "',
`10` ='" . mysqli_real_escape_string($db,$_POST['permsA_10']) . "'
 WHERE `userid` = '$id' ")or die(mysqli_error($db));

Böylece ben elle SQL kodunu zorunda kalmamak Bunu nasıl yeniden ne zaman "izinler" bu otomatik olarak sql sorgusu yapmak için gerekli sql üretir, ilave edilir?

Teşekkürler.

3 Cevap

Buyrun:

$updaters = array();

for ($i = 1; $i <= 10; $i++)
{
    if (isset($_POST['permsA_'.$i]))
        $updaters[] = '`'.$i.'` = \''.mysqli_real_escape_string($db, $_POST['permsA_'.$i]).'\'';
}

$insert = mysqli_query($db,'UPDATE `tbl_perms` SET '.implode(',', $updaters).
    'WHERE `userid` = '.$id)or die(mysqli_error($db));

: Alanlar gibi bir şey deniyordu, böylece oldukça i döngü kontrol etmek için bir $ kullanmak zorunda değil, ben formu yeniden adlandırmak istiyorum - diğerleri biraz daha farklı yapardım eğer mümkünse dışında, ne dedi

<input type="checkbox" value="1" name="permsA[1]">
<input type="checkbox" value="1" name="permsA[2]">

vs vs

Daha sonra böyle böyle başvurmak olabilir sonrası bir dizi olsun istiyorum:

$_POST['permsA'][1];
$_POST['permsA'][2];

Bu Avantajı yapabileceğiniz olduğunu:

$bits = array();
foreach ($_POST['permsA'] as $key=>$value) {
  $bits[] = $key . " = '" . mysqli_real_escape_string($db, $value) . "'";
}

$sql = "UPDATE permissions SET " . implode(', ', $bits) . " WHERE userid = '$id' ") 
 or die(mysqli_error($db));

Ve yapmanın avantajı, bir gün sisteme daha fazla izinleri eklediğinizde rastgele bir hata almak ve 1 $ :) için kullandığınız max geçmiyor ki

Eğer rağmen formunu değiştirmek mümkün olmayabilir, ya da hiç bu çözüm daha iyi durumda, daha fazla izin vermeyebilir teşekkür ederiz.

Sadece bir taslak:

$sql = "UPDATE `tbl_perms` SET ";
for ($i = 1; $i < 100; i++) {
  if (isset($_POST['permsA_' . $i])) {
    if ($i > 1) $sql .= ",";
    $sql .= "`$i` ='" . mysqli_real_escape_string($db,$_POST['permsA_1']) . "'";
  }
}
$sql .= " WHERE `userid` = '$id'";

100 sadece keyfi bir sayı olduğunu unutmayınız