2017-10-17 153 views
0

在我搜索這個網站上的這個解決方案後,我沒有發現。這裏是基本的PHP代碼,僅供測試。複選框插入在mysql中,並檢查是否選中

的index.php

<input type="checkbox" name="chk" id="chk" value="1" /> 
<button type="button" name="" id="submit">TEST</button> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script> 
$(document).ready(function(){ 
     $('#submit').click(function(){ 
      var check = $('#chk').val(); 

       $.ajax({ 
        url:"qry.php", 
        method:"POST", 
        data: {check:check}, 
        success:function(data) 
        { 
          //alert(data); 
          window.location.reload(); 

        } 
       }); 

     }); 
}); 
</script> 

qry.php

<?php 

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "check"; 

// Create connection 
$connect = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($connect->connect_error) { 
    die("Connection failed: " . $connect->connect_error); 
} 

if($_REQUEST['chk'] == true){ 
    $stok = '1'; 
} 
elseif ($_REQUEST['chk'] == false) { 
    $stok = '0'; 
} 
     $query = "INSERT INTO test(checked) VALUES('$stok')"; 
     $result = mysqli_query($connect, $query); 
     if ($result === TRUE) { 
      echo "Zahtev je uspešno poslat!"; 

     } else { 
      echo "Error: " . $query . "<br>" . $connect->error; 
     } 

?> 

如何設置選中複選框真或假到MySQL,然後在HTML中如果有回聲?它在mysql中總是被設置爲0。

<input type="hidden" name="chk" id="chk" value="1" <?php if ($checked == '1') {echo 'checked';} else {} ?>/> 

我嘗試了一切從這個網站,沒有任何作品。

+0

您想要將複選框值添加到數據庫,然後將其回顯到「HTML」,稍後是您想要執行的操作嗎? – Sand

+0

你可以在mysql中使用enum'true','false'作爲複選框字段 –

回答

0

試試這個Jquery。這將擺脫你遇到的總是價值1的問題。這段代碼所做的是當你點擊「提交」按鈕時,它會檢查你的複選框的狀態。如果選中該複選框,則代碼將採用選中的複選框值並在未檢查的情況下將其發送到ajax函數中,然後將賦值0並使用ajax發送。

這樣做會減少工作必須由後端PHP完成。我也對PHP代碼做了一些更改。

$(document).ready(function() { 
 
    $(document).on('click', '#submit', function() { 
 
    if ($("#chk").is(":checked")) { 
 
    var chk = $('#chk').val(); 
 
    }else{ 
 
    chk = 0; 
 
    } 
 
    $.ajax({ 
 
     url: "qry.php", 
 
     method: "POST", 
 
     data: { 
 
      check: chk 
 
     }, 
 
     success: function(data) { 
 
      //alert(data); 
 
      window.location.reload(); 
 

 
     } 
 
     }); 
 
    }); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" name="chk" id="chk" value="1" /> 
 
<button type="button" name="" id="submit">TEST</button>

你會看到我在插入數據的方式是從你做的方式略有不同。我正在使用mysqli_準備的語句,這使得SQL注入很難做到。

$query = $connect -> prepare("INSERT INTO test(checked) VALUES (?)"; 
     $query -> bind_param("i", $_REQUEST['check']); 
     if ($query -> execute()) { 
      echo "Zahtev je uspešno poslat!"; 
     } else { 
      echo "Error: " . $query . "<br>" . $connect->error; 
     } 

jsFiddle如果你想測試它。

+0

點擊沒有任何反應,查詢不受支持 – NickCaves

+0

您是否收到任何錯誤?您是否檢查了瀏覽器中的開發人員工具網絡選項卡,以查看查詢是否已提交。 – Sand

+0

我沒有得到任何錯誤,只是我的數據庫沒有得到一些值或阿賈克斯實時窗口不工作。 https://i.imgur.com/xOtyQ9u.png – NickCaves

0

您將值寫入check,但是從$_REQUEST['chk']讀回。這是行不通的。將其更改爲$_REQUEST['check']

您正在使用val()來獲取複選框的狀態,您應該使用checked

此外,您可能打開SQL注入,開始使用準備好的語句。

+0

我犯了一個錯誤,但是當我改爲'$ _REQUEST ['check']'現在它總是值1,選中或取消選中 – NickCaves

+0

應該是因爲你只是檢查值而不管元素的狀態如何。 – Sand

0

發送AJAX請求時添加另一行。

在發送複選框的值時,發送10

這會減少我們在PHP的工作。

所以,代碼應該是:

var check = $('#chk').is(":checked"); 
check = (check) ? 1 : 0; 

最終代碼應該是:

<input type="checkbox" name="chk" id="chk" value="1" /> 
<button type="button" name="" id="submit">TEST</button> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script> 
$(document).ready(function(){ 
$('#submit').click(function(){ 
var check = $('#chk').val(); 
check = (check) ? 1 : 0; 
$.ajax({ 
    url:"qry.php", 
    method:"POST", 
    data: {check:check}, 
    success:function(data) { 
    //alert(data); 
    window.location.reload(); 
    } 
}); 
}); 
}); 
</script> 

和PHP:

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "check"; 
// Create connection 
$connect = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($connect->connect_error) { 
die("Connection failed: " . $connect->connect_error); 
} 
$stok = $_REQUEST['chk']; 
$query = "INSERT INTO test(checked) VALUES('$stok')"; 
$result = mysqli_query($connect, $query); 
if ($result === TRUE) { 
echo "Zahtev je uspešno poslat!"; 
} 
else { 
echo "Error: " . $query . "<br>" . $connect->error; 
} 
?> 
+0

不起作用。價值永遠是0. – NickCaves

+0

它在我的工作結束。請嘗試執行整個代碼。 – Pupil

+0

在你的最終代碼中應該是這樣的'var check =('#chk')。is(「:checked」);檢查=(檢查)? 1:0;'not this'var check =('#chk')。val();檢查=(檢查)? 1:0;'。 – Sand

相關問題