2015-08-25 64 views
1

我在StackOverflow上發現了一些主題,並且讀了一些關於如何將複選框中的數據插入MySQL數據庫的內容。我讀了關於使用數組將值插入數據庫。現在的問題是,只要按下提交按鈕(除了複選框值),我的表單中的所有數據都會包含在內。所以表單就像它應該的那樣工作,只有複選框值不會被插入到我的數據庫中。下面是我做的:PHP/MySQL - 數據庫中的複選框

我的表單中的一部分:

<form method="post" action="add_schulen.php" class="form-horizontal form-label-left"> 

<div class="form-group"> 
    <label class="control-label col-md-3 col-sm-3 col-xs-12">Name Schule: </label> 
<div class="col-md-9 col-sm-9 col-xs-12"> 
    <input type="text" name="schulname" class="form-control" placeholder="Namen der Schule"> 
</div> 
</div> 

    <div class="col-md-3 col-sm-3 col-xs-12 profile_left"> 
     <input type="checkbox" name="schulen[]" value="1A"> 1A <br /> 
     <input type="checkbox" name="schulen[]" value="1B"> 1B <br /> 
     <input type="checkbox" name="schulen[]" value="1C"> 1C <br /> 
     <input type="checkbox" name="schulen[]" value="1D"> 1D <br /> 
     <input type="checkbox" name="schulen[]" value="1E"> 1E <br /> 
     <input type="checkbox" name="schulen[]" value="1F"> 1F <br /> 
     <input type="checkbox" name="schulen[]" value="1G"> 1G <br /> 
     <input type="checkbox" name="schulen[]" value="1H"> 1H <br /> 
    </div> 
<div class="col-md-3 col-sm-3 col-xs-12 profile_left"> 

     <input type="checkbox" name="schulen[]" value="2A"> 2A <br /> 
     <input type="checkbox" name="schulen[]" value="2B"> 2B <br /> 
     <input type="checkbox" name="schulen[]" value="2C"> 2C <br /> 
     <input type="checkbox" name="schulen[]" value="2D"> 2D <br /> 
     <input type="checkbox" name="schulen[]" value="2E"> 2E <br /> 
     <input type="checkbox" name="schulen[]" value="2F"> 2F <br /> 
     <input type="checkbox" name="schulen[]" value="2G"> 2G <br /> 
     <input type="checkbox" name="schulen[]" value="2H"> 2H <br /> 
</div> 
    <button type="submit" name="addschulen" value="addschulen" class="btn btn-warning btn-lg pull-right">Schule anlegen</button> 
</form> 

我add_schulen.php頂我的完整的PHP代碼:

<?php 
include 'inc/database.php';  

// Check if form is submitted 
if (isset ($_POST['addschulen'])) { 
    $schulname = mysqli_real_escape_string ($connect, $_POST['schulname']); 
    $ansprechperson = mysqli_real_escape_string ($connect, $_POST['ansprechperson']); 
    $schulstrasse = mysqli_real_escape_string ($connect, $_POST['schulstrasse']); 
    $schulplz = mysqli_real_escape_string ($connect, $_POST['schulplz']); 
    $schulort = mysqli_real_escape_string ($connect, $_POST['schulort']); 
    $schultelefon = mysqli_real_escape_string ($connect, $_POST['schultelefon']); 
    $klassen = mysqli_real_escape_string ($connect, $_POST['schulen']); 

     // Setting up a blank variable to be used in the coming loop. 
     $alleKlassen = ""; 

     // For every checkbox value sent to the form. 
     foreach ($klassen as $klasse) { 
     // Append the string with the current array element, and then add a comma and a space at the end. 
     $alleKlassen .= $klasse . ", "; 
     } 

     $query_insert_schule = mysqli_query($connect,"INSERT INTO `schule` (`schulname`, `ansprechperson`, `schulstrasse`, `schulplz`, `schulort`, `schultelefon`, `klasse`) 
      VALUES ('$schulname', '$ansprechperson', '$schulstrasse', '$schulplz', '$schulort', '$schultelefon', '$alleKlassen')"); 

if (mysqli_affected_rows($connect) == 0) //<-- 
{ 
    die('Could not update data: ' . mysql_error()); 
} else { 
    $msg_success= '<strong>Gratulation!</strong> Die Schule wurde erfolgreich hinzugefügt. Zur <a href="schulverwaltung.php"><span style="color:#fff;">Übersicht aller Schulen >></span></a>'; 
}  

}   
?> 

正如我所說的所有的數據都包括只要我點擊提交按鈕,除了複選框的值。有沒有人有一個想法,爲什麼?我做錯了什麼?這是我第一次嘗試將複選框值插入到我的數據庫中。

謝謝, 克里斯

+0

嘗試'$克拉森= mysqli_real_escape_string($連接時,$ _ POST [ 'schulen []']);' – RamRaider

+0

謝謝你的幫助,但仍是同樣的問題。一切進入我的數據庫,除了複選框的值 –

+0

什麼'var_dump($ klassen);'給(在任何修改之前)? – Qirel

回答

1

以及我試了一下,它只是沒有插入數據庫,但我只是打印出來。嘗試從$_POST['schulen']中刪除字符串轉義,因爲它已經清除/預定義數據。並使用substr()刪除數組末尾的最後一個逗號。

試試這個:

<?php 
// Check if form is submitted 
if (isset ($_POST['addschulen'])) { 
    $schulname = $_POST['schulname']; 
    $ansprechperson =$_POST['ansprechperson']; 
    $schulstrasse = $_POST['schulstrasse']; 
    $schulplz =$_POST['schulplz']; 
    $schulort = $_POST['schulort']; 
    $schultelefon =$_POST['schultelefon']; 
    $klassen = $_POST['schulen']; 

     // Setting up a blank variable to be used in the coming loop. 
     $alleKlassen = ""; 

     // For every checkbox value sent to the form. 
     foreach ($klassen as $klasse) { 
     // Append the string with the current array element, and then add a comma and a space at the end. 
     $alleKlassen .= $klasse . ", "; 
     } 
    $alleKlassen = substr($alleKlassen , 0, -2); 
    print_r($alleKlassen); 

}else{ 
    echo '<form method="post" action="" class="form-horizontal form-label-left"> 

<div class="form-group"> 
    <label class="control-label col-md-3 col-sm-3 col-xs-12">Name Schule: </label> 
<div class="col-md-9 col-sm-9 col-xs-12"> 
    <input type="text" name="schulname" class="form-control" placeholder="Namen der Schule"> 
</div> 
</div> 

    <div class="col-md-3 col-sm-3 col-xs-12 profile_left"> 
     <input type="checkbox" name="schulen[]" value="1A"> 1A <br /> 
     <input type="checkbox" name="schulen[]" value="1B"> 1B <br /> 
     <input type="checkbox" name="schulen[]" value="1C"> 1C <br /> 
     <input type="checkbox" name="schulen[]" value="1D"> 1D <br /> 
     <input type="checkbox" name="schulen[]" value="1E"> 1E <br /> 
     <input type="checkbox" name="schulen[]" value="1F"> 1F <br /> 
     <input type="checkbox" name="schulen[]" value="1G"> 1G <br /> 
     <input type="checkbox" name="schulen[]" value="1H"> 1H <br /> 
    </div> 
<div class="col-md-3 col-sm-3 col-xs-12 profile_left"> 

     <input type="checkbox" name="schulen[]" value="2A"> 2A <br /> 
     <input type="checkbox" name="schulen[]" value="2B"> 2B <br /> 
     <input type="checkbox" name="schulen[]" value="2C"> 2C <br /> 
     <input type="checkbox" name="schulen[]" value="2D"> 2D <br /> 
     <input type="checkbox" name="schulen[]" value="2E"> 2E <br /> 
     <input type="checkbox" name="schulen[]" value="2F"> 2F <br /> 
     <input type="checkbox" name="schulen[]" value="2G"> 2G <br /> 
     <input type="checkbox" name="schulen[]" value="2H"> 2H <br /> 
</div> 
    <button type="submit" name="addschulen" value="addschulen" class="btn btn-warning btn-lg pull-right">Schule anlegen</button> 
</form>'; 
} 
?> 
+0

非常感謝你!而已!這是因爲字符串逃脫!我不知道 :)!還有最後一件事:當我現在想要將這些複選框從數據庫輸出到下拉列表中時,您還可以告訴我我的代碼應該是什麼樣子?因此,在另一個頁面上,用戶可以從下拉列表中選擇每個已包含在我的數據庫中的複選框? –

+0

ohkk我希望這可以幫助,當你有一個像php這樣的字符串'$ checkbox =「1A,2C,7N」'''你可以使用['explode()'](http://php.net/manual /en/function.explode.php)函數來單獨獲取它們,以便將其放入下拉菜單中。試試這個或看看[這裏](http://codepad.org/t0z1W3Vg) – Mystro

+0

謝謝!我看了一下鍵盤鏈接,我會試試看。再一次感謝你! –

0

由於您使用的HTML數組必須foreach所他們像數組:

$schulen= $_POST['schulen']; 
foreach($schulen as $s){ 
    //code 
} 
現在

,如果你寫:回聲$ S; (下//代碼),將打印用戶進行了檢查,該複選框的值...所以現在應該很容易的爲您解決;) 例如,如果你想逃避:

$schulen= $_POST['schulen']; 
for($i=0; $i< count($schulen); $i++){ 
    $schulen[ $i ]= mysqli_real_escape_string($schulen[ $i ]); 
} 

如果你想放入數據庫你需要一個合適的提交(例如:一個文本字段將是好的) 然後你必須使用implode &爆炸... 把數組:$ todatabase = implode($ schulen,'| '); 獲取數組:$ schulen = explode('|',$ fromdatabase);

+0

我現在寫了:foreach($ klassen as $ klasse){echo $ klasse; }一旦我提交我的表單,它是一樣的...一切都插入我的數據庫,除了複選框的值 –

+0

閱讀我的編輯,使用內爆和爆炸;) –

+0

他不必使用'implode'或'explode',他正在從'foreach'的數組中構建一個字符串。 – Qirel