2016-01-11 3 views
1

Я пытаюсь обновить несколько значений в базе данных. Тем не менее, я могу обновить только одно значение одновременно с нажатием кнопки «Отправить».Обновление нескольких значений в PHP

ПРИМЕЧАНИЕ: - Мне просто нужно знать, как выполнять итерацию через переменные $ _POST, не заставляя их жестко кодировать и передавать их в функцию, если она не является NULL.

Любые советы о том, как я могу отправить это для нескольких полей.

HTML: -

First Name : 
     <input type="text" name="CUSTOMER_FNAME" value="<?php if(isset($_POST['CUSTOMER_FNAME'])) echo htmlspecialchars($_POST['CUSTOMER_FNAME']); ?>" 
      placeholder="<?php echo $customerRegistration->property('CUSTOMER_FNAME');?>" /> 
    LastName: 
     <input type="text" name="CUSTOMER_LNAME" value="<?php if(isset($_POST['CUSTOMER_LNAME'])) echo htmlspecialchars($_POST['CUSTOMER_LNAME']); ?>" 
      placeholder="<?php echo $customerRegistration->property('CUSTOMER_LNAME');?>" /> 
    Email: 
     <input type="text" name="EMAIL" value="<?php if(isset($_POST['EMAIL'])) echo htmlspecialchars($_POST['EMAIL']); ?>" 
      placeholder="<?php echo $customerRegistration->property('EMAIL');?>" /> 

Функция здесь: -

$id= $_SESSION['id']; 
if (isset($_POST['submit'])){ 
    foreach ($_POST as $key => $value) { 
     if ($value!= NULL && $key!="submit") { 
      $customerRegistration->update_one($id,$key,$value); 
     } 
    } 
} 


    public function update_one($id,$key,$value){ 
    mysqli_real_escape_string($con,$value) 

    $sql = "UPDATE `customer_registration` SET "; 
    $sql .= "`{$key}`="."'{$value}' "; 
    $sql .= "WHERE `CUSTOMER_ID`="."'{$id}' "; 
    mysqli_query($con,$sql); 

} 

Примечание: - $ customerRegistration является экземпляром регистрации класса Customer, который имеет доступ к update_one ($ ID, $ key, $ value), и это обновление отлично подходит для одиночных значений.

мне просто нужно знать, как можно цикл в переменной $ _POST продолжают работать до тех пор он не пустой (несколько значений редактируются.)

Результат Var Dump: -

 array(6) { ["CUSTOMER_FNAME"]=> string(4) "UMAR" ["CUSTOMER_LNAME"]=> string(5) "AFTAB" ["EMAIL"]=> string(16) "[email protected]" ["PHONE"]=> string(10) "4154561235" ["CUSTOMER_DOB"]=> string(0) "" ["submit"]=> string(14) "Submit Changes" } 
+0

Трудно сказать, не зная, что такое '$ customerRegistration' является экземпляром. – wogsland

+0

запустите var_dump в вашем $ _POST и посмотрите, есть ли все нужные значения – Phiter

+0

@wogsland, но функция обновления работает нормально, хотя –

ответ

0

Цикл while становится бесконечным циклом, если задан какой-либо из параметров. Замените цикл while простым if(). $ Значение переменной никогда не может быть пустым, не более пустая строка, поэтому удалите это условие из если:

if ($key!="submit") { 
     $customerRegistration->update_one($id,$key,$value); 
    } 
+0

Это не работает, я изменил с того, если до этого, по достоинству оцените усилия. –

+0

«Не работает» - это бессмысленный ответ. Pls предоставляет точное сообщение об ошибке или описывает неожиданное поведение! – Shadow

+0

Я пробовал это, прежде чем переключиться на время.если только обновляет одно значение и разрешает только одно обновление –

0

просто предложение, если вы используете PHP 5.6 вы можете использовать VARIADIC. См. Ссылку ниже. Надеюсь это поможет. :)

https://philsturgeon.uk/php/2013/08/30/potential-variadic-function-syntax-for-php-56/

if (isset($_POST['submit'])) 
{ 
    function update_one($id, $_POST); 

} 


function update_one($id, ...$params) 
{ 
    $sql = "UPDATE `customer_registration` SET "; 
    foreach ($params as $key => $val){ 
     if ($value != NULL && $key != "submit") { 
      $sql.= "`{$key}`="."'{$value}' "; 
     } 
    } 
    $sql.= "WHERE `CUSTOMER_ID`="."'{$id}' "; 
    mysqli_query($con,$sql); 

} 
+0

, можете ли вы проиллюстрировать, как это поможет мне в итерации через переменные $ _POST. –

+0

см. Обновление, оно не проверено. Я надеюсь, что вы получите идею – bwaaaaaa

+0

Не смешивайте массивы с переменным количеством параметров. Здесь вам не нужен вариационный подход, поскольку вы просто передаете массив $ _POST в качестве параметра. – Shadow

0

Вы забыли указать имя входа в $ _POST. Это то, что нужно для

$id= $_SESSION['id']; 

if (isset($_POST['submit'])){ 
$input_names = ['CUSTOMER_FNAME', 'CUSTOMER_LNAME', 'EMAIL']; 
    for($i=0;$i<count($input_names);$i++){ 
    foreach ($_POST[$input_names][$i] as $key => $value) { 
     if ($value!= NULL && $key!="submit") { 
     $customerRegistration->update_one($id,$key,$value); 
     } // end of if 
    } // end of foreach 
    } // end of for 

} // end of if 
+0

Для этого для работы имена полей в html следует изменить так, чтобы они включали трейлинг []. Но вопрос не указывает на то, что несколько записей обновляются. – Shadow

+0

$ _POST [$ input_names [$ i]] = $ _POST ['CUSTOM_FNAME']. То, что вы говорите, было бы правдой, если бы я поставил $ i за $ _POST, например: $ _POST [$ input_names] [$ i]. Я петлю через массив имен. – JosefPP

+0

foreach ($ _POST [$ input_names [$ i]] как $ key => $ value) цикл подразумевает, что вы считаете, что каждое имя ввода происходит несколько раз в сообщении. – Shadow

Смежные вопросы