【问题标题】:$_POST not getting value from form post for select field [closed]$_POST 没有从选择字段的表单帖子中获取价值[关闭]
【发布时间】:2012-11-20 03:20:23
【问题描述】:

我已经为此困扰了将近一天,我无法弄清楚这里有什么问题。我在此处的 SQL 语句中需要$_POST['brand'],但我得到一个空白。

// sql for getting nearby stores
$sql = "SELECT *, ( 3959 * ACOS( COS( RADIANS(".$_POST['lat'].") ) * COS( RADIANS( latitude ) ) * COS( RADIANS( longitude ) - RADIANS(".$_POST['lng'].") ) + SIN( RADIANS(".$_POST['lat'].") ) * SIN( RADIANS( latitude ) ) ) ) AS distance
FROM stores
WHERE brand='".$_POST['brand']."'
HAVING distance <= ".$_POST['distance']."
ORDER BY distance";

这是 PHP 文件中的表单。

<form method="post" action="./index.php" id="store_locator">
    <fieldset>
        <legend>Store Locator</legend>
        <div class="input">
            <label>Address/Postcode: <span class="required">*</span></label>
            <input type="text" class="texta" name="address" id="address" value="<?php if(isset($_POST['address'])){ echo $_POST['address'];} ?>" />
            <span>e.g: "Sydney", "Magill Road"</span>
        </div>
        <div class="input">
            <label>Brand: <span class="required">*</span></label>
            <select name="brand" id="brand">
                <option selected="selected" value="bmw">BMW</option>
                <option value="fiat">Fiat</option>
                <option value="ford">Ford</option> 
            </select>

            <label>Distance: <span class="required">*</span></label>
            <select name="distance" id="distance">
                <?php
                // populate selected option
                $selected = 1;
                if(isset($_POST['distance'])) {
                        $selected = $_POST['distance'];
                }
                ?>
                <?php foreach($distances as $k=>$v): ?>
                <option value="<?php echo $k; ?>" <?php if($selected == $k){ echo 'selected="selected"';} ?>><?php echo $v; ?></option>
                <?php endforeach; ?>
            </select>
        </div>
        <div class="input buttons">
            <button type="submit" name="find" id="find">Find</button>
        </div>
        </br>
        <input type="button" value="Reset Map" onclick="reset2();" />
    </fieldset>
</form>

我在这里缺少什么?奇怪的是$_POST['distance'] 正在获得价值。请帮忙。 如果我回显 SQL,我会在 SQL 语句中看到 brand =''

这是正在执行的 SQL 代码:

SELECT *, ( 3959 * ACOS( COS( RADIANS(-31.9530044) ) * COS( RADIANS( latitude ) ) * COS( RADIANS( longitude ) - RADIANS(115.85746930000005) ) + SIN( RADIANS(-31.9530044) ) * SIN( RADIANS( latitude ) ) ) ) AS distance FROM stores WHERE brand='' HAVING distance <= 30 ORDER BY distance

$_POST 的内容

array(5) {
    ["ajax"]=> string(1) "1"
    ["action"]=> string(17) "get_nearby_stores"
    ["distance"]=> string(1) "5"
    ["lat"]=> string(11) "-31.9530044"
    ["lng"]=> string(18) "115.85746930000005"
}

【问题讨论】:

  • 是的,你也很容易受到 sql 注入的影响。可能希望通过白名单来清理您的输入。
  • 打印 $_POST,品牌显示是空的,还是不在数组中?
  • 你的代码很脆弱.....坏人会杀死你的数据库
  • 你能帮我 var_dump($_REQUEST) 吗?
  • @AJ。您能否也向我们展示mysql_query() 部分?如果您使用的是 Firebug / Chrome 开发者工具,您是否可以在“网络”选项卡中检查 $_POST['brand'] 是否已设置?

标签: php sql forms


【解决方案1】:

评论线程太长了。

["ajax"]=> 字符串(1) "1"

您似乎正在使用 ajax 发布。我们需要查看您连接到提交按钮的 javascript。

您可能忘记告诉 jQuery(或您正在使用的任何函数)序列化 brand 选择。

【讨论】:

  • 是的,如果您使用 jquery 提交,您需要确保发送选定的值而不是全部内容
  • @EyalAlsheich 您的评论毫无意义。如果使用 jQuery,只需使用 serialize() 函数即可。不管是什么情况,其他的东西就是拦截提交事件并操纵数据。 +1
猜你喜欢
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
相关资源
最近更新 更多