2013-03-15 74 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']; 
    } 

使用此方法,您只会获得具有值的复选框。

希望这会有帮助