2013-03-28 41 views
0

我有一個問題,試圖通過php填充下拉菜單更新我的數據庫中的多個條目。下面是填充表顯示我的所有條目目前在我的數據庫在我的網頁代碼:mysql php通過填充下拉菜單更新多個條目

$result = mysqli_query($con,"SELECT * FROM Submissions"); 

echo "<table border='1'> 
<tr> 
<th>First name</th> 
<th>Last name</th> 
<th>Email</th> 
<th>Title</th> 
<th>Text</th> 
<th>Public Post OK?</th> 
<th>Date/Time Submitted</th> 
<th>Approved?</th> 
<th>Test Approved</th> 
</tr>"; 

while($row = mysqli_fetch_array($result)) 

    { 

    echo "<tr>"; 

    echo "<td>" . $row['fname'] . "</td>"; 

    echo "<td>" . $row['lname'] . "</td>"; 

    echo "<td>" . $row['email'] . "</td>"; 

    echo "<td>" . $row['title'] . "</td>"; 

    echo "<td>" . nl2br($row['text']) . "</td>"; 

    echo "<td>" . $row['publicpost'] . "</td>"; 

    echo "<td>" . $row['time'] . "</td>"; 

    echo "<td><select name=\"approved\"><option value=\"" . $row['approved'] . "\">" .      $row['approved'] . "</option><option value=\"yes\">Yes</option><option value=\"no\">No  Again</option></select></td>"; 

    echo "<td>" . $row['approved'] . "</td>"; 

    echo "</tr>"; 

    } 

echo "</table>"; 

?> 

<br><br> 

<form action="update.php" method="post"> 

<input type="submit" name="SubmitButton" value="Update" class="submit"   style="cursor:pointer;"> 

    </form> 

    <?php 

    mysqli_close($con); 

?> 

這是「update.php」 PHP代碼:

$approved = $_POST['approved']; 

mysqli_query($con,"UPDATE Submissions SET approved = $approved"); 

$update_query= "UPDATE Submissions SET approved = '$approved'"; 

if(mysqli_query($con,$update_query)){ 
echo "updated";} 
else { 
echo "fail";} 
?> 

<form action="approvesubmissions.php"> 

<input type="submit" value="Approve Submissions page"> 

</form> 

的目標是有能力使用下拉菜單將「批准」字段更新爲「否」至「是」,反之亦然。相反,此查詢發生的事情是,它正在擦除「已批准」字段中的數據,而不是更新它。我對PHP有些新鮮感,並且對此進行了研究並沒有提出任何解決方案。任何幫助是極大的讚賞!

+0

首先,批准/未批准的選擇框不在表單標籤內。 其次,您似乎沒有將任何標識符與表單一起傳遞,您怎麼知道哪些行必須更新。你所描述的將是我期望在這段代碼中發生的事情。 – DickieBoy

回答

0

首先,我們假設'approved'是一個TINYINT(1)或其他東西。

您選擇的html應該更像這樣。它會根據DB值自動填充。其次,您的表單位於表格的底部,但您需要的輸入位於表格中。當你提交表單時,沒有$ _POST ['approved'],因爲這在技術上並不是一種形式。要解決這個問題,您需要將表單標籤放在頂部。然後,在將表格回顯後,您需要將提交按鈕和關閉表單標記放在最後。

第三,你的post.php頁面不應該直接將用戶輸入帶入查詢。但是,只要做到這一點:

// Convert input to boolean answer, then int (for the query). 
$approved = isset($_POST['approved']) ? (int)!!$_POST['approved'] : 0; 
mysqli_query($con,"UPDATE Submissions SET approved = '$approved'"); 

雖然我們的話題,這將是一個偉大的時刻跳進爲您的項目準備語句。這聽起來很可怕,但它可以幫助您避免SQL注入。

// Make the prepared statement 
$query = mysqli_prepare("UPDATE Submissions SET approved = ?"); 
// Safely bind your params 
mysqli_stmt_bind_param($query, "i", $approved); 
// Run it 
mysqli_stmt_execute($query); 
// "close" the statement (hint: it's reusable for things like bulk updates, etc) 
mysqli_stmt_close($query); 
+0

非常感謝您的回覆。不幸的是,這正在改變我的「while」表中的所有「已批准」字段,而不僅僅是一兩個。這是可能的,我目前的設置? –

+0

如果我明白了,你會想要做一些事情,如「更新提交設置批准=?WHERE電子郵件=?」。當你綁定時,你會調用mysqli_stmt_bind_param($ query,「is」,$ approved,$ email); ('是'表示第一個問號將是一個整數,第二個問號將是一個字符串) – methai