2015-09-27 68 views
0

我一直在尋找表單和其他網站上的最後3天解決方案的問題,當一個複選框沒有點擊,它不會傳遞一個值時提交。在發佈之前,有很多使用javascript的解決方案來檢查該框是否被選中,但我不確定如何使其正確工作。還有很多解決方案使用與複選框相同名稱的隱藏文本字段,但是作爲其他人在這些帖子中指出的以及我發現的內容,這兩個值都已發佈,因此在我的情況下它不起作用。PHP複選框,如果您取消選中該框,則不會發布任何內容。可能的解決方案

這是我想出的,我想知道是否有巨大的問題。它可以工作,但是解決方案會以某種方式效率低下。

我也有一個獲得$ _POST []數組的消毒問題,也許有人可能知道爲什麼在in_array()中消毒的值不起作用。

所以這就是我做到的。

首先,當我創建我的表單時,我動態地創建了它,併爲數據庫分配了複選框的現有值。

include('connect.php'); 

    $sql = "SELECT * FROM scholarships WHERE schools='both' OR schools='Rankin'"; 
    $result = $conn->query($sql); 

    if ($result->num_rows > 0) { 
// output data of each row 
while($row = $result->fetch_assoc()) { 
    echo "<tr>"."<td>".$row['sch_name']."</td>"."<td>".$row['category']."</td>"."<td>".$row['date']."</td>"."<td>".$row['activate']."</td>"."<td>"; 

    ?> 

    <li><input type="checkbox" name="keywords[]" value="<? echo $row['id']; ?>" title="option1" 
    <? 

    // this puts a check in the box if it is in the database 

     if($row['activate']=="Yes") 
     { 
      echo "checked"."="."\"Checked\""; 
     } 
     else 
     { 
     // allows for not check value 
     } 

    ?> 
    /></li><br /> 

    <? 
    echo "</td>"."</tr>"; 
} 
    } else { 
echo "0 results"; 
    } 
    $conn->close(); 

接下來我貼這個的地方,我創建了兩個迴路一個在數據庫中讀取現有的值的處理頁面,另一個比較,爲$ _ POST [「關鍵字」]數組。我再次知道我必須對此進行消毒。

以下是流程頁面的代碼。

// sanitize the restults from the form 

$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 


// conect to the database 
include('connect.php'); 

// check to see what values were actually check 
foreach($_POST['keywords'] as $keyword) 
{ 
echo $keyword."<br>"; 
} 
echo "<hr>"; 


// get the list of values from database table to compare 

$sql = "SELECT * FROM scholarships WHERE schools='both' OR schools='Rankin'"; 
    $result = $conn->query($sql); 

    if ($result->num_rows > 0) { 

    // output data of each row 
    while($row = $result->fetch_assoc()) { 
    $key=$row['id']; 
     if (in_array($key, $_POST['keywords'], TRUE)) 
    { 
      echo $row['id']." "."Match found<br>"; 
       $id = $row['id']; 

    // update records if a match is found to value Yes 

      $sql2 = "UPDATE scholarships SET activate='Yes' WHERE id=$id"; 

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


    } 
else 
    { 
      echo $row['id']." "."Match not found<br>"; 
      $id = $row['id']; 
      $sql2 = "UPDATE scholarships SET activate='0' WHERE id=$id"; 

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

    } 


    } 


} else { 
    echo "0 results"; 
} 
echo "<hr>"; 





mysqli_close($conn); 

我已經包括數學和不匹配,所以你可以檢查代碼是否正常工作,它似乎做。我的大問題是:

答:這是一個體面的方式來做到這一點,或者這是一個真正的服務器密集型過程。

B.我怎樣才能獲得$ _POST陣列進行消毒並在in_array()搜索部分使用,你可以看到我試圖用已消毒的字符串,但我就不會現在工作,所以我使用$ _POST,我知道這不是一個好主意。

對不起,這是非常長的,但如果這是一個有效的方法來做到這一點,我希望別人有一個很好的解釋如何讓這個工作。如果沒有,我會刪除它。

謝謝。

PS

這裏是通知消息時,我用的是$ _ POST從消毒字符串。

注意:未定義的變量:email_notice在/usr/local/apache/htdocs/scholarship/rankin/includes/activate_process.php上線77

回答

1

我會專注於讓客戶端js正常工作。避免在選中的複選框上重複發佈是絕對有可能的,並使您的通信更加明確。

您的代碼詳細說明了一種暗示關鍵字丟失的方法。這兩種方法都很好,但如果您的關鍵字列表有可能在請求表單和提交之間發生變化,則不推薦使用隱式方法。

+0

感謝您的建議,我可以問清楚我的通信是什麼意思。其次,我的關鍵字列表如何在請求和提交之間發生變化,我會認爲它必須是是或否,或者這是否適合注入其他信息?我對這個愚蠢的問題表示歉意,但我是一名培訓輔導員,這是一種愛好。 – Vincent

+0

指定A =是,B =是,C =否比A =是更明確,B =是+查找關鍵字= A,B,C。當用戶填寫表單時,C關鍵字可能已被別人添加到數據庫中。所以他們沒有機會選擇C,但是數據庫保存了C = no,這可能是一個錯誤的否定。 – Phil

+0

好吧,是的,現在我明白了,這是合乎邏輯的。再次感謝您的幫助和信息。 – Vincent

0

問題答:複選框取消選中,並沒有得到公佈,可以通過集複選框上的disabled屬性未選中,則在提交表單時,禁用的表單元素將不會將其值發送到服務器。

您能否提供更多有關問題B的調試信息(var_dump $_POST['keywords']等等)?根據你的守則現在,確定導致問題的原因非常微妙。

+0

嗨,對不起,我出去了。該代碼現在可以工作,但我的問題是兩部分, – Vincent

+0

A)這是一個正確的方法來做到這一點,而不是服務器密集型或內在錯誤。我沒有看到這樣做,這就是爲什麼我問。和B)有沒有嘗試清理數組的方法有問題。我會把錯誤信息放在上面的文章中。 – Vincent

相關問題