我使用它的唯一方法是使用空的.但是,这不是我想要的.如果必须的话,我希望能留下一些空的东西.有谁知道我应该如何更改代码才能工作?
编辑页面:
<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.