2016-02-16 22 views
0

我是一個PHP的初學者。我看了一個教程來創建一個修改我的wamp創建的mysql數據庫表的表單。首先複製視頻,但後來從頭開始創建自己的桌面,並試圖升級它。初學者形式與「更新」和「刪除」按鈕

我的添加行工作正常,但更新和刪除沒有。我認爲WHERE條款不正確,參考reg_id

我創建了一個唯一的主鍵,它自動遞增並且不能修改;這是我想在更改時引用(因爲它不能更改)。

if (isset($_POST['update'])){ 
$UpdateQuery = "UPDATE register SET First_Name='$_POST[first_name]', Last_Name='$_POST[last_name]', Breed='$_POST[breed]', Weight='$_POST[weight]', Age='$_POST[age]', Sex='$_POST[sex]' WHERE '$_POST[reg_id]'='$_POST[reg_id]'"; 
mysqli_query($con,$UpdateQuery);}; 

if (isset($_POST['delete'])){ 
$DeleteQuery = "DELETE FROM register WHERE reg_id='$_POST[reg_id]'"; 
mysqli_query($con,$DeleteQuery);}; 

這裏是它的其餘部分在窗體位於:

while($record=mysqli_fetch_array($myData)){ 
    echo "<form action=register.php method=post>"; 
    echo "<tr>"; 
    echo "<td>" . $record['reg_id'] . " </td>"; 
    echo "<td>" . "<input type=text name=first_name value=" . $record['First_Name'] . " </td>"; 
    echo "<td>" . "<input type=text name=last_name value=" . $record['Last_Name'] . " </td>"; 
    echo "<td>" . "<input type=text name=breed value=" . $record['Breed'] . " </td>"; 
    echo "<td>" . "<input type=int name=weight value=" . $record['Weight'] . " </td>"; 
    echo "<td>" . "<input type=int name=age value=" . $record['Age'] . " </td>"; 
    echo "<td>" . "<input type=text name=sex value=" . $record['Sex'] . " </td>"; 
    echo "<td>" . "<input type=submit name=update value=update" . " </td>"; 
    echo "<td>" . "<input type=submit name=delete value=delete" . " </td>"; 
    echo "</tr>"; 
    echo "</form>"; 
} 

請幫我解決這個問題。

enter image description here

+1

現在是一個好時機的習慣得到引用你的輸入屬性值,即。 '... name ='first_name'value ='「。$ record ['First_Name']。」'...'。未引用的屬性值將很快導致您頭痛。另外,你並沒有關閉你的'name = update' /'name = delete'輸入。他們錯過了'/>'。 – Sean

+1

您應該使用預準備語句,這對SQL注入是開放的。你where where子句中缺少你想檢查列的id的列也應該是反引號,而不是引號。 – chris85

+1

你的'reg_id'不在輸入中,所以沒有'$ _POST ['reg_id']'>'echo「​​」。 $ record ['reg_id']。 「」;' – Sean

回答

0
if (isset($_POST['update'])){ 
$UpdateQuery = "UPDATE register SET First_Name='".$_POST['first_name']."',Last_Name='".$_POST['last_name']."', Breed='".$_POST['breed']."', Weight='".$_POST['weight']."', Age='".$_POST['age']."', Sex='".$_POST['sex']."' WHERE reg_id ='".$_POST['reg_id']."'"; 
mysqli_query($con,$UpdateQuery); 
}; 

if (isset($_POST['delete'])){ 
$DeleteQuery = "DELETE FROM register WHERE reg_id='".$_POST['reg_id']."'"; 
mysqli_query($con,$DeleteQuery); 
}; 

封閉,即optional.add隱藏會更加美好

echo "<td><input type='hidden' name='reg_id' value='".$record['reg_id']."'></td>"; 
echo "<td><input type='submit' name='update' value='update'></td>"; 
echo "<td><input type='submit' name='delete' value='delete'></td>"; 
+0

正如其他人提到的那樣,'$ _POST ['reg_id']'存在問題,因爲OP有'回聲'​​「。 $ record ['reg_id']。 「」;'。 – Sean

+0

@肖恩哦,我明白了,編輯它。 –

+0

看起來更好,雖然關於你對'value ='的改變'。$ record ['reg_id']。「'''的解釋會有幫助。 – Sean

0

您正在使用$_POST沒有'

試試這個:{$_POST['first_name']}並根據這個替換全部$_POST

所以,你的更新查詢會是這樣:

"UPDATE register SET First_Name='{$_POST['first_name']}', Last_Name='{$_POST['last_name']}', Breed='{$_POST['breed']}', Weight='{$_POST['weight']}', Age='{$_POST['age']}', Sex='{$_POST['sex']}' WHERE reg_id='{$_POST['reg_id']}'"; 

沒有與名稱reg_id沒有外地,所以你$_POST['reg_id']不會work.Also請改變你的WHERE條件。你在哪裏條件匹配相同的值。

而且你刪除查詢將是:

"DELETE FROM register WHERE reg_id='{$_POST['reg_id']}'"; 

您所查詢的是開放的SQL注入攻擊。請參閱此:How can I prevent SQL injection in PHP?

+1

還有很多其他問題。 – chris85

+0

裏面的雙引號'「$ _POST [first_name]」',鍵不需要引用。但是,如果引用它們,則括號{}是必需的。 – Sean

+0

@ chris85。對,那是正確的。謝謝。 –

0

顯示頁面

while($record = mysqli_fetch_array($myData)) { 
      echo "<table>"; 
      echo "<tr>"; 
      echo "<td>".$record['reg_id']."</td>"; 
      echo "<td>".$record['First_Name']."</td>"; 
      echo "<td>".$record['Last_Name']."</td>"; 
      echo "<td>".$record['Breed']."</td>"; 
      echo "<td>".$record['Weight']."</td>"; 
      echo "<td>".$record['Age']."</td>"; 
      echo "<td>".$record['Sex']."</td>"; 
      echo "<td><a href='edit.php?reg_id=".$record['reg_id']."'>EDIT</a></td>"; 
      echo "<td><a href='delete.php?reg_id=".$record['reg_id']."'>DELETE</a></td>"; 
      echo "</tr>"; 
      echo "</table>"; 
     } 

delete.php

<?php 
    if (isset($_POST['delete'])){ 
    $DeleteQuery = "DELETE FROM `register` WHERE `reg_id`={$_GET['reg_id']}'"; 
    mysqli_query($con,$DeleteQuery); 
    header("Location: your display page"); 
}; 
    ?> 

編輯表單

while($record = mysqli_fetch_array($myData)) { 
    echo '<form action="edit.php" method="Post"> 
      <input type="text" name="First_Name" value="'.$record['reg_id'].'"/> 
      <input type="text" name="First_Name" value="'.$record['First_Name'].'"/> 
      <input type="text" name="Last_Name" value="'.$record['Last_Name'].'"/> 
      <input type="text" name="Breed" value="'.$record['Breed'].'"/> 
      <input type="text" name="Weight" value="'.$record['Weight'].'"/> 
      <input type="text" name="Age" value="'.$record['Age'].'"/> 
      <input type="text" name="Sex" value="'.$record['Sex'].'"/> 
      <imput type="submit" value="save" name="submit" /> 
     </form>'; 
    } 

edit.php

 if (isset($_POST['update'])){ 
     $UpdateQuery = "UPDATE `register` SET `First_Name`='{$_POST['first_name']}', `Last_Name`='{$_POST['last_name']}', `Breed`='{$_POST['breed']}', Weight='{$_POST['weight']}', `Age`={$_POST['age']}, Sex='{$_POST['sex']}' WHERE `reg_id`={$_GET['reg_id']}"; 
     mysqli_query($con,$UpdateQuery); 
     header("Location: your display page"); 
}; 
+0

大問題在於'$ _POST ['reg_id']'不存在,因爲沒有'reg_id'的輸入元素。 – Sean

+0

@Sean,對不起更新到$ _GET –

+0

這更糟。 OP如何從'

'獲得'$ _GET'?另外,爲什麼你在'UPDATE'中執行'$ _GET',但在'DELETE'中仍然有'$ _POST'? – Sean