2015-01-02 1 views
0

Я новичок в PHP и SQL и пытаюсь выяснить, как я могу заставить кнопку HTML Approve (submit) взаимодействовать с соответствующей записью. В настоящее время при нажатии кнопки «Утверждение» каждое из полей обновляется, но верхняя (первая) запись всегда обновляется. Я хотел бы, чтобы пользователь мог пропустить первую запись и обновить другую запись. Любые предложения и помощь приветствуются.php, sql, html, обновляющий уникальную запись с соответствующей кнопкой

$conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('there was a problem connecting to the database' . mysql_error()); 

$sql = "SELECT Part, Lot, Qty, AnodTemp, Amp, SealTemp, PerformedBy, DateTimePerformed, FinalAnodThickness, QtyPass, FinalSealCheck, CheckedBy, DateTimeChecked, id FROM logs"; 

$result = $conn->query($sql); 




if ($result->num_rows > 0) 
{ 
    while($row = $result->fetch_assoc()) 
{ 
    $unapproved = $row['CheckedBy']; 
    if($unapproved == null) 
    { 

     echo "<br><br><br> Part: " . $row['Part']. "/Lot: " . $row['Lot']. "/Qty: " . $row['Qty']. "/AnodTemp: " . $row['AnodTemp']. "/Amp: " . $row['Amp']. "/SealTemp: " . $row['SealTemp']. "/PerformedBy: " . $row['PerformedBy']. "/ID: " . $row['id']; ?> 

     <form action="adminapproval.php" method="post"> 
     Final Anod Thickness:<br> 
     <input type="text" name="FinalAnodThickness"> 
     <br><br> 
     Qty Pass:<br> 
     <input type="text" name="QtyPass"> 
     <br><br> 
     Final Seal Check:<br> 
     <input type="text" name="FinalSealCheck"> 
     <br><br> 


     <input type="submit" id="submit" value="Approve" name="submit"> 
     <br><br> 
     </form> 
     _____________________________________________________________________<br> 
     <?php 

     if (isset($_POST['submit'])) 
     { 

      $FinalAnodThickness= $_POST['FinalAnodThickness']; 
      $QtyPass= $_POST['QtyPass']; 
      $FinalSealCheck= $_POST['FinalSealCheck']; 
      $CheckedBy= $_SESSION['CheckedBy']; 
      $id = $row['id']; 





      $sql = "UPDATE logs SET FinalAnodThickness = '$FinalAnodThickness', QtyPass = '$QtyPass', FinalSealCheck = '$FinalSealCheck', CheckedBy = '$CheckedBy', DateTimeChecked = now() WHERE id = $id "; 
      $conn->query($sql); 
      break; 
      $conn->close(); 
      echo "Record Updated."; 
      header("Location: adminapproval.php"); 
     } 

     } 
    } 
} 



echo "<br><br> No further items need to be approved at this time."; 


?> 
+1

Вы не ссылается свой идентификатор записи в вашей форме, так это неудивительно, что записи не обновляются должным образом ... Что я предлагаю что вы делаете, переписываете свой код так, чтобы на каждой итерации вашего цикла вы выводили форму, но помещали идентификатор записи «submit» как скрытый элемент INPUT или как параметр URL ('adminapproval.php? id = 2 '). – Kinnectus

+0

Большой Крис, не могли бы вы привести мне пример? Я новичок, когда дело доходит до этого и пытается учиться. Я лучше всего учусь, раздумывая: P, когда я могу посмотреть пример, чтобы я мог видеть, как он должен работать. – CoShark

+0

Я пытаюсь написать ответ, но я смущен вашей части «CheckedBy» ... Если ваш запрос БД возвращает значение null для «CheckedBy», вы используете сеанс, хранящийся «CheckedBy»? (т. е. почему вы пишете механизм «adminapproval») ... – Kinnectus

ответ

1

TWO ФАЙЛЫ

adminapproval.php

<?php 
session_start(); 
$conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('there was a problem connecting to the database' . mysql_error()); 
$sql = "SELECT Part, Lot, Qty, AnodTemp, Amp, SealTemp, PerformedBy, DateTimePerformed, FinalAnodThickness, QtyPass, FinalSealCheck, CheckedBy, DateTimeChecked, id FROM logs"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0){ 
while($row = $result->fetch_assoc()){ 
    $unapproved = $row['CheckedBy']; 
     if($unapproved == null){ 
      echo "<br><br><br> Part: " . $row['Part']. "/Lot: " . $row['Lot']. "/Qty: " . $row['Qty']. "/AnodTemp: " . $row['AnodTemp']. "/Amp: " . $row['Amp']. "/SealTemp: " . $row['SealTemp']. "/PerformedBy: " . $row['PerformedBy']. "/ID: " . $row['id']; ?> 

      <form action="adminapproval-exec.php?id=<?php echo $row['id']; ?>" method="post"> 
       <input type="hidden" name="id" value="<?php echo $row['id']; ?>" /> 
       <input type="hidden" name="checkedby" value="<?php echo $SESSION['CheckedBy']; ?>" /> 
       Final Anod Thickness:<br> 
       <input type="text" name="FinalAnodThickness"> 
       <br><br> 
       Qty Pass:<br> 
       <input type="text" name="QtyPass"> 
       <br><br> 
       Final Seal Check:<br> 
       <input type="text" name="FinalSealCheck"> 
       <br><br> 
       <input type="submit" id="submit" value="Approve" name="submit"> 
       <br><br> 
      </form> 
      <?php 
     } 
    } 
} else { 
    echo "<br><br> No further items need to be approved at this time."; 
} 
?> 

adminapproval-exec.php

<?php 
session_start(); 
if (isset($_POST['submit'])){ 
    $FinalAnodThickness= $_POST['FinalAnodThickness']; 
    $QtyPass= $_POST['QtyPass']; 
    $FinalSealCheck= $_POST['FinalSealCheck']; 
    $CheckedBy= $_POST['CheckedBy']; 
    $id = $_GET['id']; 
    // OR 
    // $id = $_POST['id']; 

    $sql = "UPDATE logs SET FinalAnodThickness = '$FinalAnodThickness', QtyPass = '$QtyPass', FinalSealCheck = '$FinalSealCheck', CheckedBy = '$CheckedBy', DateTimeChecked = now() WHERE id = $id "; 
    $conn->query($sql); 
    $conn->close(); 
    // echo "Record Updated."; 
    header("Location: adminapproval.php"); 
} 
?> 
+0

Большой Крис, спасибо за помощь. Я думал, что мне, возможно, придется написать отдельный файл php, чтобы выполнить его правильно, но я не был уверен, что он нужен, и как именно я должен это делать. Спасибо, что нашли время, чтобы показать мне. Два больших пальца! – CoShark

+0

Вы * можете * написать один файл, как вы изначально сделали, но вы излишне смешиваете свою презентацию и код обработки ... Подумайте о структурах MVC (Model, View, Controller), где все функции разделены, если код является Model («бизнес-процесс»), просмотр (страницы/формы/вывод) и контроллер (обработка между страницами/формами/выводами и бизнес-процессом (база данных и т. д.). – Kinnectus

1
<?php 
$server = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "db"; 

$con = mysqli_connect($server, $username, $password, $dbname); 
if (!$con) { 
    die("Faild: " . mysqli_connect_error()); 
} 

$sql = "UPDATE xxx SET lastname='Jan' WHERE id=2"; // This is importat 

if (mysqli_query($con, $sql)) { 
    echo "Record updated successfully"; 
} else { 
    echo "Error updating record: " . mysqli_error($con); 
} 

mysqli_close($con); 
?> 
+0

Это не сработает, потому что существует цикл, в котором выводятся (потенциально) разные «части» ... – Kinnectus

0
 $CheckedBy= $_SESSION['CheckedBy']; 
     $id = $row['id']; 

Если строка идентификатор выходить из сессии, а? Если нет, то он всегда будет указывать на первый элемент в строке.

+0

Дэвис, идентификатор строки не связан с сеансом. Чтобы лучше объяснить это, пользователь входит в систему, видит, возможно, несколько записей, каждый со своей собственной кнопкой подтверждения. Цель состоит в том, чтобы нажать эту кнопку, чтобы обновить поля, а $ CheckedBy = $ _SESSION ['CheckedBy'] зарегистрирована пользователем в форме, которая также добавлена ​​в запись. Этот сеанс специфичен для этой страницы, но каждая запись имеет уникальный идентификатор, поэтому запись обновляется. Я надеюсь, что в этом есть смысл. – CoShark