使用现有数据填充文本区域/字段

时间:2009-04-20 03:45:56

标签: php html

我有一个用于编辑用户信息的页面,我希望显示当前信息并允许其进行编辑,以避免覆盖现有信息。

目前,我正在获取数据并将其显示在文本区域中,如下所示:

$usernameQuery = "select username, firstname from USERS where username = '" . $con->escape_string($username) . "'";     

$xblah = $con->query($usernameQuery);
  while ($row = mysqli_fetch_assoc($xblah))
  {
    $checkUsername = $row['username'];
    $checkFirstName = $row['firstname'];
   }


echo "<form name=\"userForm\">
<h1>Editing information for: ".$username."</h1>
<p>
First name:
<textarea rows=\"1\" id=\"firstname\">".$checkFirstName."</textarea>
<br />
</form>"

此文本区域在firefox中无法正确显示,因为bug在指定一行时显示两行。有没有办法用input type = text做同样的事情?

另外,目前,数据库中firstname的内容是我的testrecord的john,但是var_dump($ checkFirstName)只显示s。我该怎么做以获得该领域的实际内容?

5 个答案:

答案 0 :(得分:2)

  

有没有办法用input type = text做同样的事情?

<input type="text" name="firstname" value="<?= $checkFirstName ?>" />

至于你的另一个问题,是否有另一个名字为's'的用户,但是用户名与'john'的名字相同?我之所以这样说是因为您使用while循环来获取数据,因此如果有多个匹配项,您将留下与查询匹配的最后一行。

解决此问题的可能方法包括不使用while循环(这意味着您要获取/处理多行数据)并确保所有用户名都是唯一的。

除此之外,我不明白为什么从'firstname'获取的值与数据库中的值不匹配。

答案 1 :(得分:0)

使用输入标记的'value'属性。

First name: <input type=\"text\" name=\"name\" value=\"$checkFirstName\"/><br />

答案 2 :(得分:0)

如果使用input type = text输入,默认情况下会显示您在value属性中放置的任何内容。

echo '<input type="text" value="' . $checkFirstName . '">';

当然,为了以防万一,您需要确保在将$ checkFirstName输出到该字段之前对其进行一些卫生处理。

至于获取你的字段的值,在你的while循环之前尝试var_dumping $ row,看看你是否可以弄清楚它出了什么问题。如果它没有显示任何有用的东西,也许var_dump在你的while循环中有一个很好的&lt; hr&gt;在每次迭代之间?这应该可以让您全面了解查询中完整返回的内容。另外,如果var_dump对您来说有点太多信息,请查看:

print_r($var)

print_r documentation

答案 3 :(得分:0)

textareas旨在显示带有换行符的多行文字。用户名和第一名通常不包含这些名称,因此最好使用input元素

<?php
    echo '<input type="text" name="name" value="' . htmlentities($checkFirstName) . '">';
?>

不要忘记htmlentitieshtmlspecialchars(取决于编码 - 如果您的编码是unicode,htmlspecialchars应该足够,否则它的htmlentities)。不要仅仅为表单字段使用htmlentities,而是在打印用户提供的数据时使用cross site scripting。否则有人可以通过提供像

这样的用户名注入xss(<script type="text/javascript">execute_evil_code();</script> )攻击或者至少生成错误的html
var_dump($variable);

至于只显示一个char而不是一个完整的字符串:通常,如果你认为你正在使用一个数组而不是一个字符串,就会发生这种情况。使用$username查看变量的类型。

另外,正如htw所说,检查echo $usernameQuery;是否真的是唯一的,并且你得到的是正确的行。在phpmyadmin(或您正在使用的任何工具)中运行生成的查询(var_dump)。如果返回多行,你的用户名不是唯一的(可能是一个bug本身),你获得的行也不是第一行,而是最后一行。这很奇怪,因为's'不是“john”的一部分,所以也许mysql结果集完全不同。调试更高级别,{{1}}整个$行。

答案 4 :(得分:0)

尝试将所有的PHP代码放在这里:

   <textarea id="firstname" rows="1">
        <?php
              //connect to database
              //Select data
            if(mysql_num_rows($sql)) {
                 $row = mysql_fetch_row($sql);
                  echo nl2br($row['0']);
            }
        ?>
   </textarea>