从数据库填充的下拉列表未使用PHP记录所选选项

时间:2019-03-03 06:12:33

标签: php mysql mysqli

下面的代码有什么问题? 我不知道如何对我的SQL INSERT记录下拉菜单的所选选项。 我已经编辑了问题,以便有人可以在此方面提供更多帮助。 预先感谢您的帮助。

<?php
    $usuarioLogado = $_SESSION['email'];
    $etapa = "semana1";
    $showModal = false;

    $query = "SELECT * FROM campeonato WHERE usuario = '$usuarioLogado' AND etapa = '$etapa'";
    $ref = $select_db->query($query);
    $row = mysqli_fetch_assoc($ref);

    if(isset($_POST['time']) && isset($_SESSION['email'])) {
        $showModal = true;
        $times = $_POST["time"];
        $dobrada = $_POST["dobrada"];
        $sobrevivente = $_POST["sobrevivente"];
        if ($row) {
            $sql = "UPDATE campeonato SET ";
            foreach ($times as $time => $valor) {
                if ($valor != null) {
                    $sql .= "$time = $valor,";
                }
            }
            $sql .= " dobrada = $dobrada, sobrevivente = $sobrevivente, datahora = now() WHERE usuario = '$usuarioLogado' AND etapa = '$etapa'";

            if ($select_db->query($sql) === TRUE) {
                //echo "Dados atualizados com sucesso";
            } else {
                //echo "Error: " . $sql . "<br>" . $select_db->error;
            }
        } else {
            $sql = "INSERT INTO campeonato (datahora, usuario, etapa, dobrada, sobrevivente,";
            foreach ($times as $time => $valor) {
                if ($valor != null) {
                    $sql .= "$time,";
                }
            }
            $sql = substr_replace($sql ,"", -1);
            $sql .= ") VALUES (now(), '$usuarioLogado', '$etapa', $dobrada, $sobrevivente,";
            foreach ($times as $time => $valor) {
                if ($valor != null) {
                    $sql .= "$valor,";
                }
            }
            $sql = substr_replace($sql ,"", -1);
            $sql .= ")";
            if ($select_db->query($sql) === TRUE) {
                //echo "Dados cadastrados com sucesso";
            } else {
                //echo "Error: " . $sql . "<br>" . $select_db->error;
            }
        }
    }
    $query = "SELECT * FROM campeonato WHERE usuario = '$usuarioLogado' AND etapa = '$etapa'";
    $ref = $select_db->query($query);
    $row = mysqli_fetch_assoc($ref);
?>

<form method="post">
    <div class="form-group">
        <table>
            <tr>
                <td class="quantity">
                    <input name="time[time1]" type="number" min="0" max="99" step="1" value="<?=$row["time1"]?>" required />
                    <input name="time[time2]" type="number" min="0" max="99" step="1" value="<?=$row["time2"]?>" required />
                </td>
            </tr>
            <tr>
                <td class="text-center" colspan="6">
                    <select name="dobrada" required style="color: #000;">
                        <option value=""> - Selecione A - </option>
                        <?php
                            for ($i = 1; $i <= 16; $i++) {
                                if ($row["DOBRADA"] == $i) {
                                    echo "<option value='$i' selected=selected>Jogo $i</option>";
                                } else {
                                    echo "<option value='$i'>Jogo $i</option>";
                                }
                            }
                        ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td class="text-center" colspan="6">
                    <select name="sobrevivente" required style="color: #000;">
                        <option value=""> - Selecione B - </option>
                        <?php
                            $queryS = "SELECT * FROM lista_times";
                            $resultS = $select_db->query($queryS);
                            while ($list = $resultS->fetch_array(MYSQLI_ASSOC)){
                                echo "<option value='".$list['times']."'>".$list['times']."</option>";
                            }
                        ?>
                    </select>
                </td>
            </tr>
            <tr class="full-area">
                <td class="text-center" colspan="6">
                    <input type="submit" value="Enviar" style="color: #000;" />
                </td>
            </tr>
        </table>
    </div>
</form>

朋友您好,下面的代码有什么问题? 我不知道如何对我的SQL INSERT记录下拉菜单的所选选项。 我已经编辑了问题,以便有人可以在此方面提供更多帮助。 预先感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

PHP代码在客户端(例如浏览器)发出请求时运行。从下拉列表中选择一个元素不会发出任何请求(页面已加载),因此,没有任何PHP代码可以在页面处于当前状态时实现此目的。

您有两个选择:

  • 在页面上添加一些JavaScript代码,这些代码将在选择新元素时触发,从而在发生新请求时向您的服务器发出AJAX请求;或
  • 添加一个按钮以提交表单。提交表单将向服务器发送您在POST元素中指定的任何页面的请求(通常为<form>请求)。您必须使用表单提交的数据来处理该页面上的INSERT

后一种选择似乎更适合您的用例。在这一阶段,我建议您对表单如何工作以及如何从PHP处理表单进行一些研究。

答案 1 :(得分:0)

无论何时在选择框上发生更改事件,您都可以使用Ajax调用将数据发送到服务器并从中获取响应。

您可以使用Jquery库进行Ajax调用。

添加ID以选择标签

<select name="sobrevivente" id="sobrevivente" required style="color: #000;">
<option value=""> - Selecione 1 time sobrevivente - </option>
<?php
    $queryS = "SELECT * FROM libertadores_times";
    $resultS = $select_db->query($queryS);
    while ($list = $resultS->fetch_array(MYSQLI_ASSOC)){
        echo "<option value='".$list['times']."'>".$list['times']."</option>";
    }
?>

<!-- Jquery CDN Link (Jquery Library)-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
    // based on the change event this section will be triggered
    $("body").on('change', '#sobrevivente', function() {
       var sobrevivente = $(this).val();
      var post_data = {
         sobrevivente: sobrevivente
      }
      var url = 'https://someurl.com/filename'
      $.ajax({
            type : "POST",
            dataType: 'json',
            url : url,
            data : post_data,
            success: function(response){
                // Handling the response                
            }
        })
   });
</script>

url:https://someurl.com/filename -您可以在其中编写过程以插入数据并以json格式回显结果过程的地方。

<?php
    $category_id = $_POST['sobrevivente'];

    // your code to insert it into the database

    if($success){
        $ajax_response = "success";
    }
    else
    {
        $ajax_response = "failed";
    }
    echo json_encode($ajax_response);
?>

答案 2 :(得分:0)

感谢所有答案,但没有人是正确的。 我做到了!问题在于缺少报价。