我在页面上有一个带有textarea的表单,我希望textarea用文本(在DB中)初始化我想要更新,所以我可以修改它而不是重写所有内容..我不确定我很清楚..我很抱歉,我是法国人^^
所以,这是我的代码:
<div class="float_left">
<h3>Texte & infos :</h3>
<br />
<form action="text_moulin.php" name="moulin_texte" method="post">
<textarea rows="6" cols="60" name="moulin_text" class="float_left"><?php printf ("%s", $row_moulin["texte"]); ?></textarea><p class="alert alert-danger center"><b>Attention !</b> Laissez "<h3>Moulin</h3>" !</p>
<textarea rows="2" cols="60" name="moulin_infos" class="float_left"><?php printf ("%s", $row_moulin["infos"]); ?></textarea>
<input type="submit" name="submit" value="Envoyer" class="btn btn-success"/>
</form>
</div>
</div>
好的和text_moulin.php:
<?php
if(isset($_POST['moulin_text']) && isset($_POST['moulin_infos'])) {
if ($_POST['moulin_text'] != "" && $_POST['moulin_infos'] != "") {
include 'bdd.php';
$text = mysqli_real_escape_string($_POST['moulin_text']);
$infos = mysqli_real_escape_string($_POST['moulin_infos']);
$request_text = "UPDATE `accueil` SET texte ='$text' WHERE id = 1";
$request_infos = "UPDATE `accueil` SET infos ='$infos' WHERE id = 1";
mysqli_query($base, $request_text);
mysqli_query($base, $request_infos);
mysqli_close($base);
?> <META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://lab.nooco.fr/admin/admin.php"> <?php
} else {
echo "Tous les champs doivent êtres remplis !";
}
} else {
echo "Erreur, veuillez réessayer.";
}
?>
我确信我与DB的连接没有问题,我确信我可以在textarea中获取文本,但是当我尝试在已经存在的文本末尾写入其他内容时在textarea并发送它,我的表的字段信息和文本被清除..所以我不明白!
谢谢!
答案 0 :(得分:3)
mysqli_real_escape_string()
函数要求将db连接作为第一个参数传递。
$text = mysqli_real_escape_string($base, $_POST['moulin_text']);
$infos = mysqli_real_escape_string($base, $_POST['moulin_infos']);
来自manual:
程序风格
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
同时将or die(mysqli_error($base))
添加到mysqli_query()
以检查错误(如果有)。
参考文献:
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
<强>脚注:强>
确保您的数据库连接确实是mysqli_
而不是另一个MySQL API。这些不同的功能不会相互混合。
在mysql_
中,并不总是需要将连接传递给mysql_real_escape_string()
,您可能刚刚开始使用mysqli_
函数,并认为您不必通过连接参数为MySQLi
等价物。
最终说明:
这个区块:
if(isset($_POST['moulin_text']) && isset($_POST['moulin_infos'])) {
if ($_POST['moulin_text'] != "" && $_POST['moulin_infos'] != "") {
可以缩减为
if(!empty($_POST['moulin_text']) && !empty($_POST['moulin_infos']))
{...}
同时摆脱了最后的else{...}
答案 1 :(得分:2)
你说,你肯定有数据库连接而你不知道为什么要替换行数据。
首先,我认为您需要准备错误报告声明。这也很好。 “ bdd.php ”是否已准备好mysqli错误连接报告?
<?php
$con=mysqli_connect("localhost","root","root_password","my_database");
// Check connection if we have issue with database connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
而且“ text_moulin.php ”也应该准备好mysqli错误查询语句报告
<?php
if(isset($_POST['moulin_text']) && isset($_POST['moulin_infos'])) {
if ($_POST['moulin_text'] != "" && $_POST['moulin_infos'] != "") {
include 'bdd.php';
$text = mysqli_real_escape_string($_POST['moulin_text']);
$infos = mysqli_real_escape_string($_POST['moulin_infos']);
$request_text = "UPDATE `accueil` SET texte ='$text' WHERE id = 1";
$request_infos = "UPDATE `accueil` SET infos ='$infos' WHERE id = 1";
// Perform a query and check for error
if (!mysqli_query($base, $request_text)
{
echo("Error description: " . mysqli_error($con));
}
// Perform another query and check for error
if (!mysqli_query($base, $request_infos)
{
echo("Error description: " . mysqli_error($con));
}
mysqli_close($base);
?> <META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://lab.nooco.fr/admin/admin.php"> <?php
} else {
echo "Tous les champs doivent êtres remplis !";
}
} else {
echo "Erreur, veuillez réessayer.";
}
?>
您的SQL查询仅指 ID = 1 。意思是,每次执行sql查询时,ID = 1内的数据都将被替换。
所以我建议你为update语句创建一个动态ID。在更换之前,请确保该ID已存在。我的意思是,之前已经完成了该ID的插入声明。