PHP更新数据库的麻烦

时间:2018-06-14 09:28:10

标签: php mysql

我可以帮助解决一个问题,我正在用PHP更新mysql数据库 我很遗憾地问了一个之前被问过很多次的问题,这只是让我有点疯狂,而且我已经查看了类似的问题,但答案对我的问题似乎没有帮助。

我正在使用两个文件,一个管理页面(admin.php)来编辑内容,以及一个更新文件,用于在按下提交按钮时更新数据库。
一切似乎工作正常,值被发布到update.php页面(当我回显它时我可以看到它们)但它不会更新数据库。

如果有人能指出我正确的方向或告诉我我做错了什么我会非常感激!

非常感谢:)

这是我的admin.php页面;

<head>
<?php

/*
Check to see if the page id has been set in the url. 
If it has, set it as the $pageid variable,
If it hasn't, set the $pageid variable to 1 (Home page)
*/
if (isset($_GET['pageid'])) {
$pageid = $_GET['pageid'];
}
else { 
$pageid = '1';
}

//Database connection variables
$servername = "localhost";
$username = "root";
$password = "";
$database = "cms";

// Create connection
$conn = new mysqli($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

//Get information from the database
$sql = "SELECT title, sub_title, tab1, tab2, tab3, content FROM data WHERE id='$pageid'";
$result = $conn ->query($sql);

if ($result->num_rows > 0)
{
while($row = $result->fetch_assoc()) {
$conn->close();

//Store database information in variables to display in the form
$title = $row["title"];
$sub_title = $row["sub_title"];
$tab1 = $row["tab1"];
$tab2 = $row["tab2"];
$tab3 = $row["tab3"];
$content = $row["content"];
}
} else {
echo "0 results";
}
?>
</head>
<body>

//basic navigation
<a href="admin.php?pageid=1">Page 1</a>  |  <a href="admin.php?pageid=2">Page 2</a>  |  <a href="admin.php?pageid=3">Page 3</a>

<form action="update.php" method="post" name="adminform">
<input type="hidden" name="pageid" value="<?php echo "$pageid";?>">
NAME:<br>
<input type="text" name="title" value="<?php echo $title;?>"><br><br>
EMAIL:<br>
<input type="text" name="sub_title" value="<?php echo $sub_title;?>"><br><br>
CONTENT:<br>
<input type="text" name="tab1" value="<?php echo $tab1;?>"><br><br>
CONTENT:<br>
<input type="text" name="tab2" value="<?php echo $tab2;?>"><br><br>
CONTENT:<br>
<input type="text" name="tab3" value="<?php echo $tab3;?>"><br><br>
CONTENT:<br>
<textarea rows="4" cols="50" name="content">
<?php echo $content;?>
</textarea>
<br><br>
<input type="submit">
</form>         

</body>

这是update.php页面;

<?php
/*Values passed from the admin form, to be used as update variables*/
if (isset($_POST['adminform'])) 
{  
$pageid = $_POST["pageid"];
$titleu = $_POST["title"];
$sub_titleu = $_POST["sub_title"];
$tab1u = $_POST["tab1"];
$tab2u = $_POST["tab2"];
$tab3u = $_POST["tab3"];
$contentu = $_POST["content"];      
}
?>

<?php
if(isset($_POST['adminform']))    
{      
// Create connection
$conn = new mysqli($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

//Update the database
$sql = "UPDATE data SET title='$titleu', sub_title='$sub_titleu', tab1='$tab1u', tab2='$tab2u', tab3='$tab3u', content='$contentu' WHERE id =='$pageid'";
$result = $conn ->query($sql);   
$conn->close();
}
?>

3 个答案:

答案 0 :(得分:0)

您在where子句中使用==而不是=。 另一方面,如果您不想受到SQL注入攻击,请不要将用户值传递给查询而不进行验证和清理。

$sql = "UPDATE data SET title='" . $conn->real_escape_string($titleu) . "', sub_title='" . $conn->real_escape_string($sub_titleu) . "', tab1='" . $conn->real_escape_string($tab1u) . "', tab2='" . $conn->real_escape_string($tab2u) . "', tab3='" . $conn->real_escape_string($tab3u) . "', content='" . $conn->real_escape_string($contentu) . "' WHERE id = " . (int)$pageid;

这会起作用,但不是很优雅的解决方案。您可以使用prepared statements来传递正确的类型并阻止sql注入。

答案 1 :(得分:0)

非常感谢所有回答和评论的人,非常感谢您花时间帮忙! 我经历了尝试并提出了建议,问题是更新文件未按照sree的建议连接到数据库。 它甚至没有发生在我身上,我想因为管理页面查询工作我认为更新查询也应该连接。

感谢您建议错误报告,添加验证和清理,以及举例 - 我正在自学,所以每个人的帮助都非常感谢!

再次感谢你们:)

答案 2 :(得分:-1)

检查数据库连接并测试您是否已连接到数据库。

更改您的查询,如下所示

$sql = "UPDATE data SET title='".$titleu."', sub_title='".$sub_titleu."', tab1='".$tab1u."', tab2='".$tab2u."', tab3='".$tab3u."', content='".$contentu."' WHERE id ='$pageid'";