2015-08-18 3 views
0

У меня возникла проблема с формой PHP, выполняющей обновление по одной строке за раз. Он будет работать для первой строки без проблем, но в следующих строках не получаются все переменные. Например, строка 1 будет иметь company1, проверена платная и не проверена на деактивацию, и она получает и обновляет все переменные. Но строка company2 получает только ID и значения по умолчанию для флажков. По какой-то причине он не вытаскивает информацию для всей строки, а только идентификатор. Любая помощь будет оценена!PHP SQL Обновление одной строки из формы за один раз

This is my Form (edited): 
      <html> 
    <body> 

<form action="next.php" method="POST"> 
<table border="1" align="center"> 
<tr> 
    <th> 
     Name 
    </th> 
    <th> 
     Address 
    </th> 
    <th> 
     Paid 
    </th> 
    <th> 
     Active 
    </th> 
</tr> 
<?php 
require_once ("connect.php"); 
require_once ("phpfunctions.php"); 
error_reporting(0); 

    $cd=companyDisplay(); 

$result = mysqli_query($mysqli,$cd); 


while($res=mysqli_fetch_array($result)) 
{ 
$final[]=$row; 


?> 

<tr> 
    <td class="name"> 
     <a href='edit.php?ID="<?php echo $res['ID']; ?>"'> 
      <?php echo $res['name'];?> 
     </a> 
    </td> 
    <td class="Address"> 
     <?php echo $res['Address'];?> 
    </td> 
    <td class="paid"> 
    <?php foreach($final as $k => $v){ ?> 
     <input type="checkbox" value="0" name="results[<?= $k ?>][paid]" 
     <?php } ?> 
      <?php 
       if($res["paid"]==0) 
       { 
       echo "checked"; 
       }    
      ?>> 

    </td> 
    <td class="active"> 
    <?php foreach($final as $k => $v){ ?> 
     <input type="checkbox" value="0" name="results[<?= $k ?>][active]" 
     <?php } ?> 
      <?php 
       if($res["active"]==0) 
       { 
        echo "checked"; 
       }   
      ?> > 
    </td> 

    <td class="update"> 
     <?php foreach($final as $k => $v){ ?> 
     <input type="hidden" name="results[<?= $k ?>][ID]" value="<?php echo $res['ID']; ?>"> 
      <?php } ?> 
     <input type="submit" name="submit" value="Update"> 

    </td> 
</tr> 

<?php } ?> 

</table> 
</form> 

    </body> 
</html> 


This is my next php page where the variables are posted and the query is run: 

<?php 
require_once ("connect.php"); 
require_once ("phpfunctions.php"); 
error_reporting(0); 
var_dump($_POST); 


//info to store from index.php 
$ID=$_POST['ID']; 
$ID= str_replace('"', '', $ID); 
$paid=(isset($_POST['paid']))? 0 : 1; 
$active = (isset($_POST['active']))? 0 : 1; 


//adds updated info to database 
$uc=updateCompany($paid,$active,$ID); 
$r = mysqli_query($mysqli,$uc); 
echo "Information stored successfully"; 
echo $paid; 
echo $active; 
echo $ID; 
?> 

And here is my function: 

function updateCompany($paid,$active,$ID) 
{ 
    $uc="UPDATE 
      `company` 
     SET 
      `paid`='$paid', 
      `active`='$active' 
     WHERE 
      `ID`='$ID'"; 

    return $uc; 
} 

Выход для первой строки:

массив (3) {[ "оплачено"] => строка (1) "0" [ "ID"] => строка (2) "12" [ "представить"] => строка (6) "Обновить"} информация, хранящаяся успешно 0 (за дополнительную плату) 1 (деактивировать) 12 (ID)

выход для следующего ряда:

массив (2) {["ID"] => строка (2) "13" ["submit"] => строка (6) "Обновить"} Информация успешно сохранена 1 (оплачена) 1 (деактивировать) 13 (ID)

Оба имеют одинаковый выбор и должны быть одинаковыми, за исключением идентификатора. Где я здесь не так?

+0

'ID' (GET метод) и вы используете массив POST' $ ID = $ _ POST [ 'ID'];? ' –

+0

У вас есть' '

петельные внутри' '. Это не работает. – MaggsWeb

+0

удалил форму внутри формы, теперь я получаю одинаковый идентификатор для всех. Идентификатор последних строк. Post $ ID предназначен для скрытого значения. Неправильный способ этого? – iggulds

ответ

0

Несколько проблем здесь:

  • ваш forms не нужно enctype="multipart/form-data", как это относится к загрузке файлов

  • <tr> теги отсутствует. Заголовки таблицы должны быть внутри <tr> теги

  • echo "checked=='checked'"; имеет дополнительный = знак, не нужно, я бы просто поместить слово checked там

  • indexVerify.php?ID= Почему вы используете ?ID= если метод вашей формы POST не GET.

  • <form action='indexVerify.php?ID="<?php echo $res['ID']; ?>"' method="post"> есть внутри другой form. Это не разрешено и будет разорвать ваш html-код.

  • Вы повторяете свои результаты и задаете свои входы неправильным образом. Это то, что вы в основном делает сейчас:

    <form> 
    <?php while ($res = mysqli_fetch_array($result)){ ?> 
        <input type="checkbox" value="0" name="paid" /> 
    <?php } ?> 
    </form> 
    

    При отправке формы, вы будете в конечном итоге с последней: $_POST[paid] = ""; игнорируя все другие результаты. Чтобы исправить это установить ваши входы должны быть установлены таким образом:

    <?php 
    while ($res = mysqli_fetch_array($result)){ 
        $final[] = $row; 
    } 
    ?> 
    <form> 
    <?php foreach($final as $k => $v)){ ?> 
        <input type="checkbox" value="0" name="results[<?= $k ?>][paid]" /> 
    <?php } ?> 
    </form> 
    

    Делая это, как выше даст вам результат массива, как это:

    $_POST[results] = 
    (array) 
        [0] => [ 
          "paid" => "" 
          ] 
        [1] => [ 
          "paid" => "" 
          ] 
    

    , которые затем можно перебирать и представить это в вашу базу данных.

+0

Как бы итерация от этого взгляда на базу данных? – iggulds

+0

изменил форму, но массивы по-прежнему дают мне те же идентификаторы последнего. Я опубликовал изменения, возможно, я сделал что-то не так – iggulds

+0

привет и добро пожаловать в StackOverflow. Это много, чтобы объяснить, возможно, я могу помочь вам удаленно через Teamviewer. Дай мне знать. – CodeGodie

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