通过textarea在数据库中发送文本

时间:2015-06-09 22:01:33

标签: php html mysql

我在页面上有一个带有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 "&lt;h3&gt;Moulin&lt;/h3&gt;" !</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并发送它,我的表的字段信息和文本被清除..所以我不明白!

谢谢!

2 个答案:

答案 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的插入声明。