2017-02-05 12 views
-1

Я получаю сообщение об ошибке;UPDATE MULTI ROW

Примечание: Undefined смещение: 0 на линии 93

Мой PHP код выглядит следующим образом ниже код ..

$i=0; 
while ($ww=mysqli_fetch_array($query)) 
{ 
    if ($i%2==0) 
     $class="evenRow"; 
    else 
     $class="oddRow"; 

    $id=$ww[0]; 
    $studentid=$ww[1]; 
    $name=$ww[2]; 
    $kelompok=$ww[8]; 
    $block=$ww[9]; 
    $level=$ww[10]; 
    $house=$ww[11]; 
    $status=$ww[14]; 

    echo "<tr> 
     <input type=hidden name=applyid[] value=".$id."/> 
     <td>$studentid</td> 
     <td>$name</td> 
     <td>$kelompok</td> 
     <td>$block</a></td> 
     <td>$level</td> 
     <td>$house</td> 
     <td> 
      <input type=checkbox name=status approved checked> APPROVED <br> 
     </td> 
     </tr>"; 
    } 
    $i++; 
    echo "</table>"; 

Это ошибка в строке 93: $checkbox[] .= $_POST['applyid'][$i];}

И SQL-запрос для обновления статуса выглядит следующим образом:

<?php 

    include("connection.php"); 

    $checkbox = array(); 
    if(isset($_POST['applyid'])) 
    { 
     $check = count($_POST['applyid']); 
     for($i=0;$i<$check;$i++){ 
     $checkbox[] .= $_POST['applyid'][$i];} 

    $check = "('" . implode("','", $checkbox) . "');" ; 
    $sql="UPDATE application SET apply_status = 'APPROVED' WHERE apply_id IN $check" ; 
    $result = mysqli_query($con, $sql) or die(mysqli_error($con)); 
    }  
?> 

Я хочу обновить несколько строк, выбранных с помощью флажка. Это выход таблицы Click Here

....................................... .......................................

СМОТРЕТЬ СОГЛАШЕНИЕ О ПРОДВИЖЕНИИ:

Это мой код, если только только apply_status = 'PENDING' будет просматривать.

Я добавляю инструкцию if else ... но не работает. если есть несколько apply_status = approved. Это не покажет ожидающий. Но если нет apply_status = aprroved. Он будет просматривать все приложения.

<?php 
    include("connection.php"); 
    $sql="SELECT * FROM application"; 
    $record = mysqli_query($con, $sql) or die ("error".mysqli_error($con)); 
    $apply = mysqli_fetch_assoc($record); 

    $status1 = $apply["apply_status"]; 

    if ($status1 == "APPROVED") { 
     echo "<br>"; 
     echo "No application from student yet.<br>"; 
     echo "<br>"; 
    } else { 
     echo "<table border='1'><tr>    
     <td><strong>Student ID</strong></td> 
     <td><strong>Student Name</strong></td> 
     <td><strong>Kelompok</strong></td> 
     <td><strong>Block</strong></td> 
     <td><strong>Level</strong></td> 
     <td><strong>House</strong></td> 
     <td><strong>Status</strong></td> 
     </tr>"; 

     $i=0; 
     while ($ww=mysqli_fetch_array($query)) 
     { 
      if ($i%2==0) 
       $class="evenRow"; 
      else 
       $class="oddRow"; 

      $id=$ww[0]; 
      $studentid=$ww[1]; 
      $name=$ww[2]; 
      $kelompok=$ww[8]; 
      $block=$ww[9]; 
      $level=$ww[10]; 
      $house=$ww[11]; 
      $status=$ww[14]; 

      echo '<tr> 
      <input type="hidden" name="applyid['.$i.']" value="'.$id.'"/> 
      <td>'.$studentid.'</td> 
      <td>'.$name.'</td> 
      <td>'.$kelompok.'</td> 
      <td>'.$block.'</a></td> 
      <td>'.$level.'</td> 
      <td>'.$house.'</td> 
      <td> 
       <input type="checkbox" name="status['.$i.']" value="approved" checked> APPROVED <br> 
      </td> 
      </tr>'; 
      $i++; 
     } 

     echo '</table>'; 

    } 
?> 
+0

, какой код находится на линии 93? undefined offset означает, что PHP не может получить доступ к массиву, нет индекса 0. Попробуйте '' 'echo $ _POST ['applyid'] [0];' '', что такое вывод –

+0

Это действительно очень неясно. Поэтому я попытаюсь понять, чего вы пытаетесь достичь. вы проверяете, установлен ли флажок: «Утвержден статус одобрен» (кстати, а назовите его одним словом), если он установлен, чтобы статус был одобрен? –

+0

жаль, что я не вижу типа «значение». его предположим, что имя = статус = утверждено. «Проверено» означает, что кнопка проверки автоматически галочка. если пользователь не хочет его проверять, ему просто нужно отпереть кнопку. @CraigBezuidenhout –

ответ

0

Попробуйте изменить:

$check = count($_POST['applyid']); 
for($i=0;$i<$check;$i++){ 
    $checkbox[] .= $_POST['applyid'][$i]; 
} 

К

foreach($_POST['applyid'] as $index=>$idValue){ 
    $checkbox[] .= $idValue; 
} 

EDIT:

использовать индекс цикла индексировать вход, так что вы можете связать их друг с другом на странице приема:

$i = 0; // $i used to determain if it is odd or even, also used as the index in the html inputs 
      // comments are your friend 
    while ($ww=mysqli_fetch_array($query)) 
    { 
     if ($i%2==0){ // best practice for readable code is to use the braces 
      $class="evenRow"; 
     } 
     else{ 
      $class="oddRow"; 
     } 
     // easier to read when spaced equally 
     $id   = $ww[0]; 
     $studentid = $ww[1]; 
     $name  = $ww[2]; 
     $kelompok = $ww[8]; 
     $block  = $ww[9]; 
     $level  = $ww[10]; 
     $house  = $ww[11]; 
     $status  = $ww[14]; 

     // single quotes are faster to proccess in PHP 
     // use $i to force the array index 
     // place quotation marks arrount html attribute values 
     echo '<tr> 
       <input type="hidden" name="applyid['.$i.']" value="'.$id.'"/> 
       <td>'.$studentid.'</td> 
       <td>'.$name.'</td> 
       <td>'.$kelompok.'</td> 
       <td>'.$block.'</td> <!-- removed a closing "a" tag, as it wasn\'t closeing anything --> 
       <td>'.$level.'</td> 
       <td>'.$house.'</td> 
       <td> 
        <input type="checkbox" name="status['.$i.']" value="approved" checked> APPROVED <br> 
       </td> 
       </tr>'; 
     $i++; // increment $i inside the loop, else it will never change until the loop is completed 
    } 
    // single quotes are faster to proccess in PHP 
    echo '</table>'; 

На странице ПОЛУЧАТЬ, используйте это,

include("connection.php"); 

if(isset($_POST['applyid'])) 
{ 
    $allIDs = ''; // using this in the single SQL query, remove it if you not going to use it 
    $approvedIds = ''; // we will add all the approved Ids here for using in the SQL query 
    $unapprovedIds = ''; // we will add all the un-approved Ids here for using in the SQL query 
    // if the single SQL query works, remove the $unapprovedIds 
    foreach($_POST['applyid'] as $index=>$idValue){ 
     if(isset($_POST['status'][$index])){ // if the status for this ID was posted, it was selected (ony selected checkboxes get posted) 
      $approvedIds .= ($approvedIds === '' ? '' : ', ').$idValue; // we add it to the string that will be used in the "IN" 
                    // if $approvedIds is not blank, add a comma to format corrctly for SQL 
     }else{ // if the single SQL query works, remove this entire else 
      $unapprovedIds .= ($unapprovedIds === '' ? '' : ', ').$idValue; // we add it to the string that will be used in the "IN" 
                    // if $unapprovedIds is not blank, add a comma to format corrctly for SQL 

     } 
     $allIDs .= ($allIDs === '' ? '' : ', ').$idValue; // using this in the single SQL query, remove it if you not going to use it 
    } 
    // update all the approved ones 
    // single quotes 
    // format you SQL in a easy to read way 
    $sql = 'UPDATE application 
      SET apply_status = \'APPROVED\' 
      WHERE apply_id IN ('.$approvedIds.')' ; 
    $result = mysqli_query($con, $sql) or die(mysqli_error($con)); 
    // update all the unaproved ones 
    // format you SQL in a easy to read way 
    $sql = 'UPDATE application 
      SET apply_status = \'UNAPROVED\' 
      WHERE apply_id IN ('.$unapprovedIds.')' ; 
    $result = mysqli_query($con, $sql) or die(mysqli_error($con)); 

    ///////////////// 
    // 
    // worth a try as a single query UNTESTED : 
    // 
    ////////////////////////////////////////////// 
    $sql='UPDATE application 
      SET apply_status = 
           CASE WHEN apply_id IN ('.$approvedIds.') THEN \'APPROVED\' 
            ELSE \'UNAPPROVED\' 
           END 
      WHERE apply_id IN ('.$allIDs.')'; 
} 

Я добавил некоторые основные принципы для вас, так что вы можете применить их в будущем

+0

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

+0

посмотреть на мое редактирование, должно помочь –

+0

извините за поздний ответ. Я пробовал ур редактировать код и СПАСИБО СМОТРЕТЬ СВОЮ РАБОТУ !!! я удалил $ allIds и $ unapprovedIds. –

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

  • Нет связанных вопросов^_^