2014-11-21 72 views
0

基本上,我想更新每個複選框對應的MySql表。這裏是我的要求的架構:如何在php中檢查和取消選中複選框來更新mysql表?

我已經在sql中上傳了文件,並在從數據庫[顯示在網絡上](讀取,寫入,下載,共享)中拾取的每個文件旁邊放置了四個複選框。另外,我在數據庫中有四個額外的列(readFlag,WriteFlag,DownloadFlag,ShareFlag)。我想要的是,假設我檢查特定文件旁邊的「讀取」複選框,我想更新該特定文件名旁邊的readFlag,而不是其他任何文件。對於其他複選框和文件也是如此。

我已經編寫了一個手動更新readflag的代碼,該代碼工作正常,但在使用複選框時不起作用。任何建議都會有很大的幫助。謝謝。

這是我迄今爲止寫的代碼:我已經手動將readFlag設置爲1,只是爲了在assignMainPage.php中檢查incase。

PHP:

<?php 

$host = 'localhost'; 
$user = ''; 
$password= ''; 
$db = 'user_information'; 

@$conn = mysql_connect($host, $user, $password) or die(mysql_error()); 
mysql_select_db($db, $conn); 

if(!$conn) { 
    echo "Connection to the database failed"; 
} 


$result = mysql_query("SELECT * FROM user_files ORDER BY id ASC"); 
?> 

的Jquery:

<script> 

$(function() { 
    $(".assign").click(function() { 

     var check = $(this).closest('tr').find('input:checkbox'); 
     var fileID = $(this).closest('tr').find('.file_id').val(); 

     var element = $(this); 
     var assign_id = element.attr("id"); 
     var assigninfo = 'id=' +assign_id; 

     if(confirm("assign")) { 
      $.ajax({ 
       type: "POST", 
       url: "assignMainPage.php", 
       data: assigninfo, 
       success: function(){ 

       } 
      }); 

      alert("file id : " + fileID); 
     } 
    }); 
}); 

assignMainPage.php

<?php 

$host = 'localhost'; 
$user = ''; 
$password= ''; 
$db = 'user_information'; 

@$conn = mysql_connect($host, $user, $password) or die(mysql_error()); 
mysql_select_db($db, $conn); 

if(!$conn) { 
    echo "Connection to the database failed"; 
} 

if($_POST['id']) { 

$id = mysql_real_escape_string($_POST['id']); 


$assign = "UPDATE user_files SET readFlag = 1 where id = '$id'"; 

mysql_query($assign); 
} 

?> 

HTML:

<div class="container"> 


<?php 

while($row = mysql_fetch_array($result)){ 

    $id1 = $row['id']; 
    $name = $row['user_file_name']; 
?> 

<?php 

if(isset($_POST['assign']) && $_POST['assign'] == '$id1') { 
    echo("success"); 
} 

?> 

<div class="show"> 


<table width = "80%" align = "center"> 


<tr class="trclass"> 



<td width= "15%"><span class="name"><?php echo $name; ?> <> <?php echo $id1;?>  </span></td> 

<input type="hidden" value="<?php echo $id1; ?>" class="file_id" /> 



<td width="15%"> 
    <span class="action"><input type="button" id="<?php echo $id1; ?>" class="delete" title="Delete" value="Delete <> <?php echo $id1;?>"></span> 
</td> 



<td width= "10%"><span class="action"> 
    <input type="checkbox" id="<?php echo $id1; ?>" class="read" title="read">Read <> <?php echo $id1;?></span> 
</td> 



<td width= "15%"><span class="action"><input type="checkbox" id="<?php echo $id1; ?>" class="write" title="write">Write <> <?php echo $id1;?></span></td> 



<td width= "15%"><span class="action"><input type="checkbox" id="<?php echo $id1; ?>" class="download" title="download">Download <> <?php echo $id1;?></span></td> 



<td width= "15%"><span class="action"><input type="checkbox" id="<?php echo $id1; ?>" class="share" title="share">Share <> <?php echo $id1;?></span></td> 



<td width= "15%"> 
    <span class="action"> 
     <input type="submit" id="<?php echo $id1; ?>" name="assign" class="assign" title="assign" value="Assign <> <?php echo $id1; ?>"> 
    </span> 
</td> 


</tr> 

<table> 

</div> 


<?php 

} 

?> 

回答

0

看:Testing if a checkbox is checked with jQuery

在你的ajax調用你的數據時不包括複選框的值。 還你不使用ajax的數據值作爲數組,這是比較容易

添加類似

$chk_value = check.is(':checked'); 
$assigninfo = array('id'=>assign_id, 'val'=>$chk_value); 

您在代碼中有以上幾種HTML錯誤。最值得注意的是你用相同的ID命名你所有的複選框。然後試圖以一個數組的形式訪問它們,這需要一個$ .each構造,或者在你的情況下可能比單獨列出四個例子更簡單。少一個問題需要使用<和>。

我在修改時採取了一些措施,以遵循我爲類似情況推薦的編碼風格。我沒有機會運行它,所以我道歉,如果有小的語法錯誤。

幾個設計建議 - 我用輸入元素(例如chk-read和btn-assign)記錄我的輸入元素的類。
- 我認爲該行是您點擊的大對象。所以這是核心元素。那麼你需要的所有東西都是在其本身的數據屬性中,或者在範圍內的類標識標籤中。 - 我使用行上的數據屬性來提供有關正在處理的記錄的信息。沒有必要在範圍內的所有項目上覆制該項目,或者使用隱藏的輸入。 - 未完成:在html5中,您不需要使用輸入類型=按鈕,您可以直接使用。

<div class="container"> 
    <?php 
    while ($row = mysql_fetch_array($result)) { 
     $id1 = $row['id']; 
     $name = $row['user_file_name']; 
     if (isset($_POST['assign']) && $_POST['assign'] == $id1) { 
      // this isn't going to work 
      echo("success"); 
     } 
    ?> 
     <div class="show"> 
      <table width="80%" align="center"> 
       <tr class="trclass" id='<?php echo $id1; ?>' data-name='<?php echo $name?>'> 
        <td width= "15%"> 
         <span class="name"><?php echo $name; ?> &lt;&gt; <?php echo $id1;?></span> 
        </td> 
        <td width="15%"> 
         <span class="action"> 
          <input type="button" class="btn-delete" title="Delete" value="Delete &lt;&gt; <?php echo $id1;?>"> 
         </span> 
        </td> 
        <td width= "10%"><span class="action"> 
         <span class="action"> 
          <input type="checkbox" class="chk-read" title="read">Read &lt;&gt; <?php echo $id1;?> 
         </span> 
        </td> 
        <td width= "15%"> 
         <span class="action"> 
          <input type="checkbox" class="chk-write" title="write">Write &lt;&gt; <?php echo $id1;?> 
         </span> 
        <td width= "15%"> 
         <span class="action"> 
          <input type="checkbox" class="chk-download" title="download">Download &lt;&gt; <?php echo $id1;?> 
         </span> 
        </td> 
        <td width= "15%"> 
         <span class="action"> 
          <input type="checkbox" class="chk-share" title="share">Share &lt;&gt; <?php echo $id1;?> 
         </span>      
        </td> 
        <td width= "15%"> 
         <span class="action"> 
          <input type="submit" class="btn-assign" title="assign" value="Assign &lt;&gt; <?php echo $id1; ?>"> 
         </span> 
        </td> 
       </tr> 
      <table> 
     </div> 
    <?php } ?> 
</div> 

<script> 
$(function() { 
    $(".btn-assign").click(function() { 

     var $element = $(this).closest('tr'); 
     var data  = { 
      id   : $element.attr('id'), 
      name  : $element.attr('data-name'), 
      read  : $element.find('.chk-read').is(':checked'), 
      write  : $element.find('.chk-write').is(':checked'), 
      download : $element.find('.chk-download').is(':checked'), 
      share  : $element.find('.chk-share').is(':checked'), 
     } 

     if (confirm("assign "+data.name)) { 
      $.ajax({ 
       type: "POST", 
       url: "assignMainPage.php", 
       data: data, 
       success: function() { 
        alert("assignment complete for: file id : " + data.id); 
       } 
      }); 

     } 
    }); 
}); 
</script> 
相關問題