2009-04-20 64 views
1

我有一个页面来编辑用户信息,我希望显示当前信息并允许它进行编辑,以避免覆盖现有信息。用现有数据填充文本区域/字段

此刻,我获取数据,然后在文本区域像显示它这样:

$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。我必须做些什么来获得该领域的实际内容?

回答

2

有没有办法做输入类型=文本是一回事吗?

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

至于你的其他问题,有没有有“S”的名字另一个用户,但也有相同的用户名与“约翰”的第一个名字的用户?我之所以这样说,是因为你使用了while循环来获取你的数据,所以如果有多个匹配的话,你将剩下与你的查询匹配的最后一行。

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

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

0

使用输入标签的'值'属性。

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

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

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

当然,你要确保你做$ checkFirstName一些卫生输出其分为前场,以防万一。

至于获取字段的值,请在您的while循环之前尝试var_dumping $ row,然后查看是否可以找出问题所在。如果它没有显示任何有用的东西,也许var_dump在你的while循环中,在每次迭代之间有一个很好的< hr>?这应该能够完整地查看从查询中完整返回的内容。另外,如果是的var_dump对你有点太多信息,请上网:

print_r($var) 

print_r documentation

0

textareas旨在显示带换行符的多行文字。用户和名字通常并不意味着包含这些,所以最好使用input元素

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

不要忘了htmlentitieshtmlspecialchars(取决于编码 - 如果你的编码是unicode的,用htmlspecialchars应该是足够,否则它的性质)。不要仅仅为表单域使用htmlentities,但每当您打印用户提供的数据时。否则有人可以注入XSS(cross site scripting)攻击,或者通过提供类似

<script type="text/javascript">execute_evil_code();</script> 

为只显示一个字符,而不是一个完整字符串的用户名至少产生错误的HTML:通常情况下,出现这种情况,如果你认为你的工作与一个数组,而不是一个字符串。使用var_dump($variable);来查看变量的类型。

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

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>