POST值从多个复选框到SQL

时间:2017-11-07 15:42:14

标签: php html mysql arrays sorting

我在mySQL中有两个表。

Table: Player
-----------------------------------------------------------
|  name  | T1 | T2  | T3  | T4  | T5  | id  | weeknumber  | 
|--------|----|-----|-----|-----|-----|-----|-------------|
|        |    |     |     |     |     |     |             |
|        |    |     |     |     |     |     |             |
-----------------------------------------------------------

Table: Teams
-------------------------------------------------------------------------
|  id  | team1name | team2name | team1score  | team2score | weeknumber  | 
|------|-----------|-----------|-------------|------------|-------------|
|      |           |           |             |            |             |
|      |           |           |             |            |             |
-------------------------------------------------------------------------

这个想法是,表“团队”正在通过另一个已经适合我的页面填充。 每周将有13个新团队。

表“播放器”必须从另一个页面填充,其中用户可以获得以下选项:

  • 名称:文字字段
  • 13个复选框(这些复选框需要存储表格中的值ID)

用户应该检查13个团队中的5个(自由选择),并且这些复选框的值(团队ID的ID)应该与文本中的名称一起存储为T1,T2,T3,T4,T5 -field。

<form method="post" action="created.php" class="form-style-7">  
    <h2>Tilmeld en spiller </h2>
    <ul>
        <li>
            <label for="name">Navn</label>
            <input type="text" name="navn" value="<?php echo $navn;?>">
            <span>Indtast spillerens navn</span>
        </li>
        <li>
 <?php


$count = $rows = 0;

$sql = "SELECT * FROM Teams WHERE weeknumber='$WeekNumber' ORDER BY id";
$result = $conn->query($sql); 

if ($result->num_rows > 0) {

    echo '
        <table class=""><tr><th colspan="3">Igangværende - Uge ' . $WeekNumber . '</th></tr>
        <tr class="underhead"><td>#</td><td>Kamp</td><td>Mål</td></tr>
    ';

    // Output af data
    while($row = $result->fetch_assoc()) {
        if ($rows % 1 == 0) {
            $count++;
        }
        $rows++;

        echo '<tr>';
        echo '<td>';
        echo '';
        echo '<input type="hidden" name="ID" value="' . $row['id'] . '" >';
        echo '<input class="btn" type="checkbox" name="" > ';
        echo ' </form>';
        echo '</td>';
        echo '<td>' . $count . '</td>';
        echo '<td>' . $row["team1name"]. ' - ' . $row["team2name"] . '</td>

        </form>';
    } 

    echo '</table>';
}


mysqli_close($conn);
?>

        </li>
        <li id="buttontilmeld">
            <input type="submit" name="submit" value="Tilmeld" >  
        </li>
    </ul>
</form>

编辑: 我的created.php包含以下内容:

if (isset($_POST['navn']) && $_POST['navn'] != "") {
    if (isset($_POST['navn'])) {
        if ($_POST['name'] == "" || $_POST['T1'] == "" || $_POST['T2'] == "" || $_POST['T3'] == "" || $_POST['T4'] == "" || $_POST['T5'] == "") {
            echo 'XX';
        }
    } else {
        require 'config.php';
        $conn    = Connect();
        $name    = $conn->real_escape_string($_POST['navn']);
        $match1  = $conn->real_escape_string($_POST['kamp1']);
        $match2  = $conn->real_escape_string($_POST['kamp2']);
        $match3  = $conn->real_escape_string($_POST['kamp3']);
        $match4  = $conn->real_escape_string($_POST['kamp4']);
        $match5  = $conn->real_escape_string($_POST['kamp5']);
        $WeekNumber = date('W');
        $query   = "INSERT into Spillere (navn,kamp1,kamp2,kamp3,kamp4,kamp5,ugenummer) VALUES('" . $name . "','" . $match1 . "','" . $match2 . "','" . $match3 . "','" . $match4 . "','" . $match5 . "','" . $WeekNumber . "')";
        $success = $conn->query($query);
        if (!$success) {
            die("Couldn't enter data: ".$conn->error);
            echo "Thanks";
        }
    }
}

我需要$_POST['TX']==""将表Player T1填充到T5。

2 个答案:

答案 0 :(得分:2)

未设置复选框的name属性。 PHP无法获取有关已选中复选框的任何信息(除非您应该使用Jquery来做其他一些事情)。重要的是要知道在POST数据中只能看到已选中的复选框。

为您的复选框命名,例如:

echo '<input class="btn" type="checkbox" name="team_checkbox_'.$row['id'].'"> ';

然后在脚本created.php中发布了您的数据,您可以通过运行相同的SQL查询并尝试

来捕获这些值
if(isset($_POST['team_checkbox_'.$row['id']])){
   // $row['id'] is checked
}

或者只检查所有POST数据:

$t = array();
foreach($_POST as $post_param_name => $value){
  if(substr($post_param_name, 0, 14) == 'team_checkbox_'){
    // substr($post_param_name, 14) is the ID of one of the checked groups

    $t[] = substr($post_param_name, 14);

  }
}

现在$ t是一个包含复选框的团队ID的数组。所以你可以保存在你的SQL中:T1 = $ t [1],...

答案 1 :(得分:0)

应该回顾这个答案,但解决方案在另一个答案: https://stackoverflow.com/a/47162431/1589379

遵循良好的编码标准

您发布的代码存在很多小问题。最终,您应始终非常小心地保持所有内容正确缩进,并始终使用括号{},即使它们不需要。

您的原始代码:

while (...) {
    if ($rows % 1 == 0)
        $count++;

应该是:

while (...) {
    if ($rows % 1 == 0) {
        $count++;
    }

这些调整会使您的代码在</form>循环中有两个结束while标记,并且没有开始标记。