gpt4 book ai didi

php - 无论我在表单中提交什么数字,MySQL 只存储 "1"(作为一个值)

转载 作者:行者123 更新时间:2023-11-30 23:11:57 26 4
gpt4 key购买 nike

我正在尝试在 php 和 mysql 中创建一个简单的 Bootstrap 表单(我使用默认设置的 xampp)。一切都在 1 个名为 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);

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

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

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

最佳答案

您的问题出现在这里:

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

此 block 正在分配 isset(...) 的真值至 $longti$lati而不是来自 $_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;

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

关于php - 无论我在表单中提交什么数字,MySQL 只存储 "1"(作为一个值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19465195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com