PHP - 编辑用户个人资料页面

4

我目前正在尝试制作一个个人资料编辑页面。 我正在使用php和MySQL进行数据库操作,但是对php和MySQL不是很熟悉。 我的问题是:当我点击提交按钮时,会得到一个空白页面,没有任何错误或成功信息。 有没有什么解决方法呢?这是我的php代码:

<?php
  session_start();
  include_once 'dbconfig.php';
  if(!isset($_SESSION['user'])) {
    $userRow=mysql_fetch_array($res);
    $username= $userRow["user_name"];
    $useremail= $userRow["user_email"];
    $userabout= $userRow["user_about"];

    $results = $mysqli->query("UPDATE users SET user_name='$username', user_email='$useremail', user_about='username' WHERE user_id=user");    

    if($results){
      print 'Success! record updated'; 
    } else {
      print 'Error : ('. $mysqli->errno .') '. $mysqli->error;
    }
  }
?>

以下是更新用户信息的表单代码:

<?php
  session_start();
  include_once 'dbconfig.php';

  if(!isset($_SESSION['user'])) {
    header("Location: index.php");
  }
  $res=mysql_query("SELECT * FROM users WHERE user_id=".$_SESSION['user']);
  $userRow=mysql_fetch_array($res);
?>

<div class="main">
  <form action="change.php" method="post">
    <div>
      <label for="uname"><a>User Name:</a></label>
      <input type="text" name="username"  value="<?php echo $userRow['user_name'];?>"/>
    </div>

    <div>
      <label for="email"><a>Email:</a></label>
      <input type="text" name="useremail"  value="<?php  echo $userRow['user_email'];?>"/>
    </div>

    <div>
      <label for="about"><a>About me:</a></label>
      <textarea name="userabout" rows="10" cols="30" value="<?php echo $userRow['user_about'];?>"/></textarea>
    </div>

    <input type="submit"  value="Submit">

  </form>
</div>

2
你有一些问题:混合使用 API 以及在 WHERE 子句中未加引号。此外,<textarea> 元素没有 value 属性。 - Funk Forty Niner
我可以使用什么替代<textarea>? - AutoTester213
你不必用其他东西替换你的文本区域,只需删除value属性并将php echo <textarea>{over here}</textarea>放置在此处即可。 - Barry Michael Doyle
1个回答

2

不是

<textarea name="userabout" rows="10" cols="30" value="<?php echo $userRow['user_about'];?>"/></textarea>

使用

<textarea name="userabout" rows="10" cols="30"><?php echo $userRow['user_about'];?></textarea>

此外,这一端是不正确的:

。该段落缺少内容。
/></textarea>

然而,问题出在这一部分:
user_id=user

user未被识别,导致出现错误。由于您的服务器不显示PHP错误,因此您看不到任何内容。但是,如果您查看日志,您会发现MySQL中有语法错误的问题。您想在那里使用$_SESSION['user']而不是user

最后,您的代码容易受到SQL注入和XSS注入攻击。请转义您的查询或使用PDO来防止SQL注入预防XSS注入

在许多项目中,我都有一个名为Common的PHP类,其中包含常见功能之一:

public static function protectArrayAgainstXSS(&$arr) {
    $changed = false;
    foreach ($arr as $index => $a) {
        if (is_array($a)) {
            $changed = $changed || Common::protectArrayAgainstXSS($arr[$index]);
        } else if ($a !== null) {
            $changed = $changed || ($arr[$index] === strip_tags($a));
            $arr[$index] = strip_tags($a);
        }
    }
    return !$changed;
}   

例如,您可以通过调用Common::protectArrayAgainstXSS($_POST)来使用此功能来保护您的项目免受XSS注入攻击。


所以,我只需要使用user而不是$_SESSION['user']吗?我不太明白你的意思。 - AutoTester213

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接