-1

当我在文本框中键入内容并将其保存在 mysqli 中时,它可以完美运行,但是当我刷新同一页面时,我写的内容会无缘无故消失。我还在该页面中有另一个文本框,它工作得很好。我该如何解决?生物文本框是我遇到的问题。

    $getpro = mysql_fetch_assoc(mysql_query("SELECT * FROM `profile` WHERE username = '".$user_data['username']."'  "));$pro = $getpro;
$bios = $pro["bios"];
$realtionship = $pro["realtionship"];
$impmessage = $pro["impmessage"];
if ($_POST['bio']){
$bio = $_POST['bio'] ;
$query;
}
if ($_POST['impmessage']){
$impmessage = $_POST['impmessage'] ;
$query;
}
$query = mysql_query("UPDATE `profile` SET  bios ='$bio',  impmessage = '$impmessage' WHERE username = '".$user_data['username']."'");<form name="bio"action="" method="post">
<p>Important Message</p> <textarea   cols="50" style="resize:none" name="bio"  rows="7" ><? echo $bios; ?></textarea><br />
<input type="submit" value="change">
</form><hr /><form name="impmessage"action="" method="post">
<p>Important Message</p> <textarea   cols="50" style="resize:none" name="impmessage"  rows="7" ><? echo $impmessage; ?></textarea><br />
<input type="submit" value="change">
</form>
4

2 回答 2

1

我重新排列并删除了一些代码并尝试整理一下:

<?php
    if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) // if form is submitted using POST method
    {
        if ( isset( $_POST['bio'] ) ){
            $bio = mysql_real_escape_string( $_POST['bio'] ); // escape special characters is user input
            $query = mysql_query("UPDATE `profile` SET  bios ='$bio' WHERE username = '".$user_data['username']."'"); //update bios
        }

        if (isset( $_POST['impmessage'] ) ){
            $impmessage = mysql_real_escape_string( $_POST['impmessage'] ); // escape special characters is user input
            $query = mysql_query("UPDATE `profile` SET impmessage = '$impmessage' WHERE username = '".$user_data['username']."'"); //update impmessage
        }
    }

    $pro = mysql_fetch_assoc(mysql_query("SELECT * FROM `profile` WHERE username = '".$user_data['username']."'  "));
?>

<form name="bio" action="" method="post">
    <p>Bios</p>
    <textarea cols="50" style="resize:none" name="bio" id="bio" rows="7" ><?php echo $pro["bios"]; ?></textarea>
    <br />
    <input type="submit" value="change">
</form>
<hr />
<form name="impmessage" action="" method="post">
    <p>Important Message</p>
    <textarea cols="50" style="resize:none" name="impmessage" id="impmessage" rows="7" ><?php echo $pro["impmessage"]; ?></textarea>
    <br />
    <input type="submit" value="change">
</form>

给你的一些注意事项:

  • 首先避免使用 mysql_* 函数。而是使用 mysqli 或 PDO
  • 我总是更喜欢在页面的开头编写处理用户输入的代码,即。在输出任何东西之前。因为,如果用户输入对输出进行了任何更改,它会很容易地显示更新,因为我们在输出任何内容之前进行处理。因此,当我们查询数据库时,它会获取更新的数据。此外,如果我们想重定向到另一个页面或必须向浏览器发送一些其他标题,我们可以这样做,因为标题应该始终在输出任何内容之前发送。
  • 另一件事是,总是逃避用户输入。否则,容易发生sql注入。最好的办法是使用 mysqli 和 PDO 中可用的准备好的语句。
  • 当您id在 HTML 中命名元素时,请确保它是唯一的。因为没有相同的 id 可以出现两次。但是类名可以出现任意次数。
  • 还要确保您的 PHP 代码不会与 HTML 混淆。<?php用&标签正确地包含 PHP 代码?>。我总是更喜欢避免速记。
  • 由于您使用两种形式,因此输入都不会到达服务器端。只有一个。如果您希望同时访问两个输入,请使用单个表单。
  • 我还避免了从获取的数据到其他变量的不需要的赋值操作。
  • 此外,您应该始终正确缩进代码以获得更好的可读性。

我希望这会有所帮助。祝您好运。:)

于 2012-09-02T06:11:24.973 回答
0

看起来您在每次页面加载时都在运行更新查询。如果未填充帖子值并且您刷新它将使用空值进行更新。Ps sberry 是正确的,在它投入生产之前还有很多其他的事情需要解决。

于 2012-09-02T05:51:32.523 回答