2014-09-04 150 views
0

早上好,更改單個複選框的多行復選框屬性

我正在一個較大的項目工作,但我試圖做一個簡單的頁面,以檢查我的工作。 php/mysql newb在這裏。抱歉! :)

即時通訊工具試圖完成的是最終有一個用戶頁面顯示與表中的任務行和單個複選標記,以便說出用戶是否已完成任務或沒有通過檢查或取消選中框。

爲了測試的目的,我建立了一個帶有testid,testdata和testcheck行的表格。 testid INT(2)AutoIncrement和Primary和Unique,testdata是VARCHAR(30),testcheck是TINYINT(1)。自動增量並不重要,因爲我手動填充所有行。我有5行(爲了數組的緣故)由1-5個testid組成,「testdata1-5」用於測試數據,以及用於testcheck的0或1。該表運行正常,可以查詢數據庫。

下面是PHP的開始頁面的代碼:

<html> 

<?php 

include_once('init.php'); 

$query = mysql_query("SELECT testid, testdata, testcheck FROM testtable"); 

?> 
<h1>Test form for checkmarks</h1> 
<form method="POST" action="testover.php"> 
<table border="1"> 
    <tr> 
     <td> 
      Test ID 
     </td> 
     <td> 
      Test Data 
     </td> 
     <td> 
      Checked 
     </td> 
     <td> 
      Test Check 
     </td> 
    </tr> 
<?php 
    while ($row = mysql_fetch_assoc($query)) { 
?>    
    <tr> 
     <td> 
      <?php echo $row['testid']; ?> 
     </td> 
     <td> 
      <?php echo $row['testdata']; ?> 
     </td> 
     <td> 
      <center><input type="checkbox" name="<?php $row['testid'] ?>" value="<?php $row['testcheck']; ?>" <?php if($row['testcheck']=='1'){echo 'checked';} ?>></center> 
     </td> 
     <td> 
      <center><?php echo $row['testcheck']; ?></center> 
     </td> 
    </tr> 
<?php } ?> 

</table> 
      <input type="submit" name="confirm" value="Confirm Details"> 
      <a href="testcheck.php"><input type="button" value="Home"></a> 
</form> 
</html> 

我一直來回試圖使用輸入名稱的數組(名稱=「一些[]」)或「isset」參數,但這是我的知識失敗的地方。我在這裏和其他網站上閱讀了無數的文章,我似乎找不到合適的代碼來使用。大多數網站的行具有多個複選框或表格的不同佈局。

我在這裏發佈,希望能指出一些方向,以便如何使用這些複選標記的值更新數據庫。

+0

您缺少'

'標籤。提交按鈕需要一個表單才能工作,並將數據發送到您想要的頁面或刷新並使用該數據。即使它只是一個簡單的複選框。之後,您可以使用'if(isset())'部分,因爲您的提交按鈕不知道要提交什麼。 – Dorvalla 2014-09-04 16:04:23

+0

我編輯它,讓他們更容易看到,但他們在原來的。 – DJR 2014-09-04 17:34:38

回答

0

我想弄清楚你想要的代碼的意義,如果我理解正確的話,你想讓這5行輸出正確嗎?

<?php 
echo '<form action=''>; 
while ($row = mysql_fetch_array($query)) { 
echo "<tr>"; 
echo "<td>".$row['testid']."</td>"; 
echo "<td>".$row['testdata']."</td>"; 
echo "<td><input='checkbox' name='".$row['testid']."' value='".$row['testcheck']."' ".if($row['testcheck']=='1'){echo 'checked';}."></td>"; 
echo "<td>".$row['testcheck']."</td>"; 
echo "</tr>"; 
} 
echo "<input type='submit' name='confirm'>"; 
echo "</form>"; 
?> 

然後更新。由於表單沒有任何操作,它會返回到自身。所以現在你可以在你的頁面上添加新的php和更新代碼。

<?php 
if(isset($_POST['confirm'])){ // the name of your submit button 
    // your update code here. 
?> 

- 編輯 -

Checkbox looping in php while posting to database

我有一段時間以前同樣的問題你。我需要通過複選框循環發佈。請檢查這個主題的相關信息。

+0

5行輸出正確。他們從表格中顯示包含複選標記的testid,testdata和testcheck列。我希望提交過程更新表格中相應行中複選標記的更改。 – DJR 2014-09-04 17:46:38

+0

沒問題,就像我在回答中說的那樣,它需要在一個'form'中,所以當你按下提交按鈕時,它就知道它必須在表單中發佈數據。在'form'的'action'屬性中,您可以指定腳本的位置(空白位於同一頁面上)。然後添加一個isset,正如我在上述調用更新時所述。 – Dorvalla 2014-09-04 18:06:56

+0

我用你的代碼(必須從PHP中取出輸入行; netbeans根本不喜歡它),但我可能搞亂了更新行。我也不知道如何在這裏添加代碼評論...呃 – DJR 2014-09-04 18:10:52

0

這是我的新代碼。我知道我在正確的軌道上。在編寫isset語句等方面需要一些指導。

<?php 

include_once('init.php'); 

$query = mysql_query("SELECT testid, testdata, testcheck FROM testtable"); 

$checkedarray = $_POST['isChecked']; 

if(isset($_POST['confirm'])) { 
if(isset($checkedarray)){ // the name of your submit button 
    foreach ($checkedarray as $value) 
mysql_query("UPDATE testtable SET testcheck = '{$value}' WHERE testid = {$_POST['testid']}"); } } 
?> 

<h1>Test form for checkmarks</h1> 
<table border="1"> 
    <tr> 
<td> 
      Test ID 
     </td> 
     <td> 
      Test Data 
     </td> 
     <td> 
      Checked 
     </td> 
     <td> 
      Test Check 
     </td> 
    </tr> 
<?php 
echo '<form action="">'; 
while ($row = mysql_fetch_array($query)) { 
echo "<tr>"; 
echo "<td>".$row['testid']."</td>"; 
echo "<td>".$row['testdata']."</td>"; ?> 
<td><input type="checkbox" name="isChecked[]" value="<?php $row['testcheck']; ?>" <?php if($row['testcheck']=='1'){echo 'checked';} ?>></td> 
<?php 
echo "<td>".$row['testcheck']."</td>"; 
echo "</tr>"; 
} 
echo "<input type='submit' name='confirm'>"; 
echo "</form>"; 
?> 
      <a href="testcheck.php"><input type="button" value="Home"></a> 
</form> 
</html>