使用php更新到数据库

我使用它的唯一方法是使用空的.但是,这不是我想要的.如果必须的话,我希望能留下一些空的东西.有谁知道我应该如何更改代码才能工作?

编辑页面:

<form name="homePage" action="update.php" method="POST">
<Strong>Change home title:</Strong>
<p>
    <input style="width: 300px;" type="text" name="homeTitleChange" value="<?php echo $homeTitle ?>">
    <input type="hidden" name="rowHomeID" value="<?php echo $getHomeID?>">
</p>

<Strong>Change home subtitle:</Strong>
<p>
    <input style="width: 600px;" type="text" name="homeSubtitleChange" value="<?php echo $homeSubtitle ?>">
    <input type="hidden" name="rowHomeID" value="<?php echo $getHomeID?>">
</p>
<input type="submit" class="btn btn-skin" name="homepage" value="save" />
</form>

查询页面: –

include("../conn.php");
include("../conn.php");
if(isset($_POST['homepage'])){
    if(
        !empty($_POST["homeTitleChange"])&& 
        !empty($_POST["homeSubtitleChange"]) &&  
        !empty($_POST["rowHomeID"])
    ){
        $homeTitleUpdate = $_POST["homeTitleChange"];
        $homeSubtitleUpdate = $_POST["homeSubtitleChange"]; 
        $homeEditRow = $_POST["rowHomeID"];
        $query = "UPDATE Home SET 
            title = '$homeTitleUpdate', 
            subtitle ='$homeSubtitleUpdate' 
            WHERE homeID = '$homeEditRow' ";
        $result = mysqli_query($conn, $query) or die(mysqli_error($conn));

        if ($result) {
            echo "<p> - Success!</p>";
        }else{
            echo "<p> - Something went wrong</p>";
        }
    }
}

谢谢!

最佳答案 前体:

>您已将连接脚本包含两次.
>您正在包含隐藏的表单字段< input type =“hidden”name =“rowHomeID”value =“<?php echo $getHomeID?>”>两次.这是低效的.
>您的表单应具有enctype =’multipart / form-data’. Read Here

没有看到你的MySQL错误我们无法绝对诊断你的问题,所以相反我会给你我知道需要修复的部分:

默认情况下,PHP字符串类型将保留空字符串”而不是NULL值,因此我认为您的问题不是错误地插入空值(至少,不是您的问题中描述的).

$homeEditRow是唯一需要的值.因为UPDATE表SET列=值WHERE列= 将导致错误(或至少,没有更新).

因此替换:

if(
    !empty($_POST["homeTitleChange"])&& 
    !empty($_POST["homeSubtitleChange"]) &&  
    !empty($_POST["rowHomeID"])
 )

有:

if(!empty($_POST["rowHomeID"]){
     //run MySQL Update query.
}

此外,如果该值是一个整数,您可以简单地执行此操作:

$homeEditRow = (int)$_POST['rowHomeID']; //force to int.
if($homeEditRow > 0 ){
  //run MySQL Update query.
}

如果您愿意,您的其他两个值可以为空,那很好.

但是这些值不能包含的是MySQL中未转义的特殊字符,通常(但绝不是唯一的)`,’, – ,#字符.

因此,最好从用户输入中清除不安全的字符.

从未相信用户输入是“安全的”

$homeTitleUpdate = mysqli_real_escape_string($conn,$_POST["homeTitleChange"]);
$homeSubtitleUpdate = mysqli_real_escape_string($conn,$_POST["homeSubtitleChange"]); 
//assuming to be integer required
$homeEditRow = (int)$_POST["rowHomeID"];

这意味着任何单引号或其他不安全字符都不会干扰您的查询执行.使用Prepared语句比这种方法更安全,并且是推荐的做这些方法的方法,你可以使用PDO or MySQLi,这些系统的Stack Overflow上有许多很好的例子.

如果达到这一点并且您仍然遇到问题,那么您需要阅读MySQL错误输出对您说的内容:

 //after your query regardless of outcome:
var_dump(mysqli_error($conn));

您可能遇到一些问题,例如您有一个主索引列,其中包含两个非唯一值(等等).但是在您输出MySQL错误之前我们不会确定.

最后,要小心你的IF语句检查是否执行了更新查询,因为如果没有任何更改,则没有更新更新,MySQL将不会运行查询,因此当事实上一切正常运行时可能会返回false.

点赞