2015-06-09 35 views
1

我在頁面上有一個帶有textarea的窗體,我希望textarea可以用我想更新的文本(在數據庫中)進行初始化,所以我可以修改它而不是改寫一切..我不知道,我很清楚。我很抱歉,我是法國人^^通過textarea在數據庫中發送文本

所以,這裏是我的代碼:

<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."; 
} 
?> 

我敢肯定,我沒有問題的連接在數據庫中,我確信我可以在textarea中獲取文本,但是當我嘗試在已經存在於textarea中的文本末尾寫入其他內容併發送它時,我的字段信息和文本桌子被清除了,所以我不明白!

謝謝!

+1

該函數需要db連接的'mysqli_real_escape_string'作爲第一個參數傳遞。另外你也可以一口氣做你的查詢。 –

+0

如果($ _POST ['moulin_text']!=「」&& $ _POST ['moulin_infos']!=「」){'到一行。可以對您的代碼進行大量改進,將其大小縮小約40-50%。 –

回答

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到您的文件(S)的頂部,這將有助於找到錯誤。

<?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{...}

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的插入語句。