1

我正在尝试在 php 和 mysql 中创建一个简单的引导表单(我使用带有默认设置的 xampp)。一切都在一个名为 index.php 的文件中完成。

这是我的表格:

<form class="form-horizontal" role="form" method="post" action="index.php" >
                <div class="form-group">
                    <label for="inputLongitude" class="col-lg-2 control-label">Longitude</label>
                    <div class="col-lg-10">
                      <input type="number" class="form-control" id="inputLongitude" placeholder="longitude" name="inputLongitude">
                    </div>
                </div>
                <div class="form-group">
                    <label for="inputLatitude" class="col-lg-2 control-label">Latitude</label>
                    <div class="col-lg-10">
                      <input type="number" class="form-control" id="inputLatitude" placeholder="latitude" name="inputLatitude">
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-lg-offset-2 col-lg-10">
                      <button type="submit" name="submit" class="btn btn-primary">Save</button>
                    </div>
                </div>
                               </form>

表单非常简单,它需要 2 个值并将它们存储在数据库中。这里是我用来在 mysql 中存储值的 php 代码(在同一个文件 - index.php 中):

$conn = mysqli_connect('localhost', 'root', '', 'android_app') or die("bla");

                if (mysqli_connect_errno()){
                    echo "Failed to connect to MySQL: " . mysqli_connect_error();
                }

                $longti = isset($_POST['inputLongitude']); 
                $lati = isset($_POST['inputLatitude']);

    $sql = "INSERT INTO `table`(`key_primary`, `lati`, `longti`) VALUES (`key_primary`,$lati,$longti)";
    mysqli_query($conn,$sql);

到目前为止,几乎一切正常。这两个值都被保存。这是我对 db 的设置:http: //i.imgur.com/hyuNJsj.jpg

现在我的问题:应该保存的值(=我想提交并存储在数据库中)没有存储。所以不是存储例如“50,5” mysql只存储“1” - 总是,无论我以什么形式发送。看看这里http://imgur.com/brjFn5e

真正有趣的是,如果我在 phpmyadmin 中使用 SQL 并在那里插入值(“手动方式”)就可以了。完全没有问题。你知道我该如何解决吗?我的数据库设置错误吗?或者它在代码中的某个地方?

4

3 回答 3

0

您正在使用 isset 功能

$longti = isset($_POST['inputLongitude']);

上面的代码没有设置 $_POST['inputLongitude'] 的值,而是设置 $_POST['inputLongitude'] 是否存在... 1 表示它存在。

您可以简单地使用:

$longti = $_POST['inputLongitude'];
于 2013-10-19T10:53:45.650 回答
0
$lati = isset($_POST['inputLatitude']);

这始终是 0 或 1:isset 与否。如果 isset blah=someotherblah 则使用

if (isset($_POST["inputLatitude"])) {
    $lati = $_POST['inputLatitude'];  
}else{  
    echo "N0, inputLatitude is not set";
}
于 2013-10-19T10:53:57.203 回答
0

您的问题出现在这里:

$longti = isset($_POST['inputLongitude']); 
$lati = isset($_POST['inputLatitude']);

此块分配真值isset(...)to$longti$lati不是您的预期值 from $_POST。如果您完全确信这些 $_POST 值的安全性(您不应该这样做),那么您应该:

$longti = isset($_POST['inputLongitude']) ? $_POST['inputLongitude'] : null; 
$lati = isset($_POST['inputLatitude']) ? $_POST['inputLatitude'] : null;

如果这些值来自不受信任的来源($_POST通常是值),那么您还应该在将它们输出到您的数据库之前对这些值执行一些验证。

编辑:我刚刚注意到$out = isset($in) ? $in : null;模式看起来(并且是)多余的:$out = $in;将执行完全相同。我通常在此步骤中包含基本的验证/过滤。例如,如果您期望/允许的只是一个数值(因为您的<input>类型是“数字”):

$longti = isset($_POST['inputLongitude']) && is_numeric($_POST['inputLongitude'])
    ? $_POST['inputLongitude'] : null;

或仅整数:

$longti = isset($_POST['inputLongitude']) ? (int) $_POST['inputLongitude'] : null;

这些是简单的示例,不包括对无效表单内容的用户的反馈等。

于 2013-10-19T10:53:57.417 回答