- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的网站表单一直存在问题。表单值等于它们对应的 $_POST 值,这是用于更新数据库的参数。
我不想更新空的表单值。但是,我不希望任何输入区域是强制性的。
这意味着我将能够只更新特定内容,而不需要在我不想更新的输入区域中键入值。但是,我对此有疑问。正在上传空表单值,因此数据库中的值正在更改为空值。我在 SO 和互联网上寻找教程,唯一的(功能性的)教程是那些将输入框变成强制性的。这不是我想要的工作方式,所以它不适合。
我认为最好的方法(我不确定)是通过 javaScript,在设置提交按钮时将输入区域的“名称”属性更改为空白,如果值等于空或 null。我不知道该怎么做,也不知道这是否可行或最佳方法。
这是我目前关于此事的代码:
(首先,表单和 javascript)
<script>
function validade(){
var formId = document.getElementById("configForm");
var allInputs = formId.getElementsByTagName("input");
var input, i;
for (i=0; input = allInputs[i]; i++){
if (input.value == null || input.value == "") {
input.name = "";
}
}
}
<form method="post" action="" id="configForm">
<label for="home">Home:</label>
<br>
<input type="text" id="home" name="home">
<br>
<label for="apendix">Apêndice:</label>
<br>
<input type="text" name="apendix">
<br>
<label for="about">Sobre:</label>
<br>
<input type="text" name="sobre">
<br>
<label for="contato">Contato:</label>
<br>
<input type="text" name="contato">
<br><br>
<input type="submit" value="Carregar" name="submit">
</form>
<?php require_once('editaForma.php'); ?>
(其次,数据库查询和$_POST值:)
<?php //credentials
if (isset($_POST["submit"])){
$server = 'hypotetical';
$user = 'hypotetical';
$pw = 'hypotetical';
$BD = 'hypotetical';
//estabelece a conexão
$conn = mysqli_connect($server, $user, $pw, $BD);
if (!$conn) {
die ('<span style="color: #FF0000;">"connection failed: "</span>' . mysqli_connect_error());
}
$home = $_POST["home"];
$apendix = $_POST["apendix"];
$sobre = $_POST["sobre"];
$contato = $_POST ["contato"];
$query = "UPDATE form SET
home= '$home',
apendix= '$apendix',
sobre= '$sobre',
contato= '$contato'
WHERE id='1'";
//$query = "INSERT INTO form (home, apendix, sobre, contato) VALUES ('$home', '$apendix', '$sobre', '$contato')";
if (mysqli_query($conn, $query)){
echo "Alterações feitas com sucesso";
} else {
echo "ERRO!" . $query . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
}
?>
是的,我知道数据库很容易受到 SQL 注入(inject)。我会先尝试让一切正常运行,一旦所有这些都准备就绪,我会在网站上线之前检查安全问题。
我已经遇到这个问题一个多星期了,想不出解决办法。
提前感谢您的时间和关注。
编辑
我希望我可以选择两个答案来解决问题。他们俩都直接引导我解决了问题,每个人都帮助我看到了代码中的漏洞。由于我不能两者都选,所以我选择了帮助我解决最后一个问题的那个。非常感谢大家!
最佳答案
通过跳过空值动态构建查询
$p = &$_POST; //make $p refer to $_POST
$query = "UPDATE from SET ";
if($p['home']) $query .= " home = '$p[home]' ,";
if($p['apendix']) $query .= " apendix = '$p[apendix]' ,";
if($p['sobre']) $query .= " sobre = '$p[sobre]' ,";
if($p['contato']) $query .= " concato = '$p[contato]' ,";
$query = trim($query, ','); //remove any trailing comma
$query = "WHERE id = 1";
然后您可以执行查询。哦,不要忘记检查至少有 1 个变量可用。如果都为空,则不执行。
是的,您的代码极易受到攻击。
关于javascript - 如果 $_POST 值为空,如何不更新数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39111167/
PHP If 语句 if (!$_POST) - !$_POST 是什么意思? 例如,在我正在查看的一些遗留代码中,代码如下: '; if (
这个问题在这里已经有了答案: What is the use of the @ symbol in PHP? (11 个答案) 关闭 8 年前。 我正在寻找在用户刷新浏览器后将用户输入保存在表单中的
我有一个简单的表单,如下所示: 当我尝试通过 if($_POST) 接收从该表单发送的数据时,我失败了,但是当尝试使用 isset 时,我成功了。 if($_POST){ echo
我目前正在从一次严重的 XSS 攻击中恢复过来,并且意识到我从未对网站上多个表单的输入进行过清理。我使用 Notepad++ 的“在文件中查找”功能在我所有的 PHP 文件中搜索 $_POST,得到了
我已经为客户端创建了一个 Yii 应用程序,它在本地和测试期间使用的我的服务器上都运行良好,没有任何问题。客户端已将应用程序移动到他们的服务器,这是它将托管的地方,并且当输入一个表单上的一个变量(只有
我正在尝试将此表格用于: 如果任何 $_POST 变量等于任何其他 $_POST 变量抛出错误。 如果只有几个,那不是问题,但我有大约 20 个左右所以如果我想这样做,我将不得不像这样 但这
首先我要说的是,我在 Google 上无休止地搜索帮助,并且在过去的 x 小时内确实花费了调试相同的错误,但我就是无法弄清楚。 我正在关注this tutorial关于如何为我的 Android 应用
应该这样用if(isset($_POST['submit'])) { } 提交表单时 if($_POST[submit])与 if(isset($_POST[submit])
这是我的代码: if(isset($_POST['make']) && isset($_POST['year']) && isset($_POST['mileage'])) {
如果我使用此代码将数字作为输入,它可以正常工作 Hours: Hours: Minutes: Hours: Minutes
因此,我获取 jquery 日期选择器和下拉选择菜单的状态,并尝试使用 AJAX 将这两个变量发送到另一个 php 文件。 var_dump($_POST); 网页上的结果: array(0)
我想将数据附加到已有的表单中。单击“提交”按钮时使用 JQUERY,如下所示。 $('#submit-buildaboat').click(function(){ console.log(
我目前正在编写一个使用表单和 PHP $_POST 数据的 Web 应用程序(到目前为止是标准的!:))。但是,(这可能是一个菜鸟查询)我刚刚意识到,从理论上讲,如果有人将 HTML 文件与假表单放在
我发现自己现在正在研究很多其他人的代码。我注意到某些代码中的 if (isset($_POST)) 并确保修复它。 (它将始终评估 true)。然后我开始看到这个: if ($_POST) 经过深思熟
如果我将数据发布到我的 Web 服务器上的测试脚本(来自远程源),则 $_POST 数组为空,但 HTTP_RAW_POST_DATA 具有发布的信息。 使用表单在本地发布的数据可以正常工作。 服务器
我遇到了一个非常奇怪的行为。假设我有以下两个 (src 属性等于 name 属性): 我的问题是:为什么第一个输入提交而第二个不提交?我正在使用 CakePHP,如果我点击第二张图片,$this
我可能有点厚,但我似乎找不到这个问题的答案。我正在从一台启用了注册全局变量的服务器转移到一台关闭它的服务器。这是一件好事,但不幸的是,多年来我一直习惯于使用注册全局变量,这导致我编写了草率的代码。我现
我无法弄清楚以下 $_POST 请求的问题所在。问题是我通过 AJAX $_POSTing 一个包含 855 条记录的数组,但我的 AJAX Controller 只接收 833。它总是接收到相同的记
这个问题已经有答案了: passing POST array to php function (3 个回答) 已关闭10 年前。 我一直在开发一个游戏项目(所以你会明白我无法发布实际的脚本),并且我正
有人知道为什么$_POST没有被设置吗? 这是一些代码。 class="even" doID; ?>"/> 我一定是忽略了一些东西。 最佳答案 如果
我是一名优秀的程序员,十分优秀!