javascript - 如果 $_POST 值为空,如何不更新数据库?

标签 javascript php database forms

我的网站表单一直存在问题。表单值等于它们对应的 $_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/

相关文章:

javascript - (.+?) 在正则表达式中的用途

php - 如何正确实现字距调整生成的代码

php - Paypal Pro 不在 magento 中显示运输方式

PHP mail() 从命令行工作但不是 apache

mysql - MySql 上的 DELETE 查询速度慢

javascript - Angular js ng-change 事件

javascript - 如何在node.js中重用oracle连接?

javascript - Firefox 中的 WebRTC ICE 候选者

asp.net - 通过将 "userid"类型更改为整数来自定义 asp.net 成员资格

database - 在 Intellij 中的项目之间共享数据库