如果 $_POST 值仍然相同,PHP 表单将拒绝发送

Posted

技术标签:

【中文标题】如果 $_POST 值仍然相同,PHP 表单将拒绝发送【英文标题】:PHP form refuse to send if $_POST value are still the same 【发布时间】:2020-01-16 23:26:14 【问题描述】:

我正在使用Range Sliders jQuery (picture),如果我不是每次都更改所有值,则表单不会发送,我不知道为什么。如果有人知道如何解决这个问题,即使通过修改单个值,表单也会发送。谢谢:))

send_settings.php

<?php
if(isset($_POST['submit_range']))

    $temp_min_php=$_POST['temp_min_field'];
    $temp_max_php=$_POST['temp_max_field'];
    $hum_min_php=$_POST['hum_min_field'];
    $hum_max_php=$_POST['hum_max_field'];
    $eau_min_php=$_POST['eau_min_field'];
    $eau_max_php=$_POST['eau_max_field'];
    $lum_min_php=$_POST['lum_min_field'];
    $lum_max_php=$_POST['lum_max_field'];

    $conn = mysqli_connect("localhost", "root", "toor", "db");
    $query = "UPDATE settings SET temp_min = '$temp_min_php',temp_max = '$temp_max_php',hum_min = '$hum_min_php',hum_max = '$hum_max_php',eau_min = '$eau_min_php',eau_max = '$eau_max_php',lum_min = '$lum_min_php',lum_max = '$lum_max_php'";
    $result = mysqli_query($conn, $query);

?>

settings.php

            <script type="text/javascript">
            $(function() 
              $( "#temp-range" ).slider(
                range: true,
                min: 0,
                max: 500,
                values: [ <?php echo $row['temp_min']; ?>, <?php echo $row['temp_max']; ?> ],
                slide: function( event, ui ) 
                  $( "#temp_amount" ).html( ui.values[ 0 ]+ " °C" + " - " + ui.values[ 1 ]+ " °C" );
              $( "#temp_min_field" ).val(ui.values[ 0 ]);
              $( "#temp_max_field" ).val(ui.values[ 1 ]);
                
              );
              $( "#temp_amount" ).html( $( "#temp-range" ).slider( "values", 0 )+ " °C" +
               " - " + $( "#temp-range" ).slider( "values", 1 )+ " °C" );
            );
            </script>

              <div class="form-group">
                <label for="field-1" class="col-sm-3 control-label">Température (<span id="temp_amount"></span>)</label>
                <input type="hidden" id="temp_min_field" name="temp_min_field">
                <input type="hidden" id="temp_max_field" name="temp_max_field">

                <div class="col-sm-5">
                <div id="temp-range"></div>

                </div>
              </div>

【问题讨论】:

您的代码容易受到SQL injection 攻击。不要使用字符串连接构建查询,而是始终使用prepared statementsbound parameters。请参阅 this pagethis post 了解一些很好的示例。 【参考方案1】:

隐藏输入的“值”属性仅在滑块移动时设置。您需要在此处设置初始值:

<input type="hidden" id="temp_min_field" name="temp_min_field">
<input type="hidden" id="temp_max_field" name="temp_max_field">

像这样:

<input type="hidden" id="temp_min_field" name="temp_min_field" value="<?php echo $row['temp_min']; ?>">
<input type="hidden" id="temp_max_field" name="temp_max_field" value="<?php echo $row['temp_max']; ?>">

【讨论】:

以上是关于如果 $_POST 值仍然相同,PHP 表单将拒绝发送的主要内容,如果未能解决你的问题,请参考以下文章

php怎么获取表单中提交的数据?

PHP 处理程序中的表单 $_POST 变量为空

php页面刷新,从表单中获取post值

PHP如何不用表单进行POST传递

重定向处理时如何通过 $_POST 将表单错误发送回表单

php中按钮怎么提交数据到数据库中?