2013-03-15 71 views
0

我已被示出在下面foreach循環插入所有的複選框(選中和未選中)

<p><form name="university" action="/university_handler" method="post"> 
    <fieldset> 
    <table class="table"> 
     <thead> 
     <tr> 
      <th><span class="help-block">University Department</span></th>        
     </tr> 
     </thead> 
     <tbody> 
     <tr> 
      <td><?php 
      $query = mysqli_query($db, "SELECT university_department FROM university WHERE university_id = '$university_id'") 
       or die ("Could not search!"); 
      while($row = mysqli_fetch_array($query)){ 
       $university_department = $row['university_department']; 
       $_SESSION['university_department'] = $university_department; 
       $universityDepartment = $_SESSION['university_department']; 
       echo "<label><input type='checkbox' name='university_department[]' value='{$universityDepartment}'>$universityDepartment</label><br><input type='text' value='' name='professor_name[{$universityDepartment}]' placeholder='Professor-Name'><input type='text' value='' name='class_name[{$universityDepartment}]' placeholder='Class-Name'>";} 
      ?></td> 
     </tr> 
     </tbody> 
    </table> 
    <button type="submit" name="Submit"class="btn btn-info">Submit</button> 
    </fieldset> 
</form></p> 

現在,當使用我university_handler將這些值插入到數據庫中的所有的生成使用PHP HTML複選框形式複選框正在插入,而不僅僅是已被選中的複選框。我一直在嘗試一系列的事情,似乎沒有任何工作。這是處理程序。

<?php 
session_start(); 
include("connect.php"); 

$university_id = $_SESSION['university_id']; 

// check if share_form is submitted and not empty 
$error_message = ""; 
if(is_array($_POST['university_department']) && !empty($_POST['university_department'])){ 
    $error = array(); 
    $universityDepartment = $_POST['university_department']; 
    if (count($universityDepartment)>0){ 
    foreach (str_replace('#', '', $_POST['class_name']) as $departmentName => $stripid){ 
     $class_name_backslash = $stripid . '/'; 
     $class_name = mysqli_real_escape_string($db, $stripid); 
     print_r($class_name); 
    } 
    $query_uni = ("INSERT INTO temp_list(departmentName, class_name, professor_name) VALUE ('$departmentName','$class_name', '$professor_name')"); 
    $q_u = mysqli_query($db, $query_uni) or die ('Error posting data'); 
} 
}?> 
+0

爲什麼只設置三個不同的變量使用最後一個? '$ university_department = $ row ['university_department'];' '$ _SESSION ['university_department'] = $ university_department;' '$ universityDepartment = $ _SESSION ['university_department'];' – Pete 2013-03-15 14:47:05

+0

只是一個小提示:當你通過'include'或'require'包含文件時,你應該使用'include_once()'或'require_once()',以便在包含包含其他文件的路上,你不會被定義爲函數2次或導致更長的加載時間。 – Mic1780 2013-03-15 14:58:11

回答

1

我喜歡@ Martin的回答。我想改變的唯一的事情是$_REQUEST

當使用$_REQUEST你說嘿看看帖子或變量並使用任一值。那麼如果你同時使用$_POST$_GET變量,會發生什麼?一個會被使用,而另一個則不會。

因此,讓我們以不同的方式使用相同的代碼。

$checkBoxName = (isset($_POST['checkBoxName']) ? $_POST['checkBoxName'] : (isset($_GET['checkBoxName']) ? $_GET['checkBoxName'] : '')); 
if ($checkBoxName != '') { 
    //do stuff here 
} 

這種方式,因爲你看不到,而無需使用像谷歌鉻合金的開發工具的信息後,最好做這個順序,這樣你檢查什麼什麼,你可以看到之前沒有見過。

希望這有助於=)

編輯:

基於你給我的信息,我能想出一個辦法只插入你檢查過的類。隨意做改變這一點,但這個應該工作

<?php 
$departList = ($_POST['university_department'] ? $_POST['university_department'] : ($_GET['university_department'] ? $_GET['university_department'] : array())); 
$classList = ($_POST['class_name'] ? $_POST['class_name'] : ($_GET['class_name'] ? $_GET['class_name'] : array())); 
$profList = ($_POST['professor_name'] ? $_POST['professor_name'] : ($_GET['professor_name'] ? $_GET['professor_name'] : array())); 
if (count($departList) > 0) { 
    foreach ($departList as $key => $val) { 
     $class = $classList[$val]; 
     $professor = $profList[$val]; 
     $query_uni = ("INSERT INTO temp_list(departmentName, class_name, professor_name) VALUE ('$val','$class', '$professor')"); 
     $q_u = mysqli_query($db, $query_uni) or die ('Error posting data'); 
    } 
} 

?> 

好運=)

+0

嗨!它在if語句中打印$ checkBoxName時有效。我現在所做的是'如果($ checkBoxName!= ''){的foreach(str_replace函數( '#', '',$ _ POST [ 'checkBoxName'])爲$名稱=>的$ id){\t \t \t \t \t \t print_r($ checkBoxName); \t \t \t \t \t打印 '
';}'它打印的所有複選框..... – Nerdia 2013-03-15 15:23:40

+0

可以請你給我你的整個'$ _POST'陣列的'print_r'或'var_dump'。這將幫助我找出通過 – Mic1780 2013-03-15 15:30:58

+0

你的循環是什麼重讀你的問題我想我明白後,但讓我想澄清。你問的是爲什麼插入的所有表單信息,而不是隻有複選框被選中的表單信息。它是否正確? – Mic1780 2013-03-15 15:39:14

0

您可以使用isset函數來檢查複選框是否被選中。

if (isset($_REQUEST['checkBoxName'])); 
    { 

    $variable = $_REQUEST['checkBoxName']; 
    } 

使用此方法,您只會獲得具有值的複選框。

希望這會有幫助

相關問題