我有一个用于编辑用户信息的页面,我希望显示当前信息并允许其进行编辑,以避免覆盖现有信息。
目前,我正在获取数据并将其显示在文本区域中,如下所示:
$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。我该怎么做以获得该领域的实际内容?
答案 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)
答案 3 :(得分:0)
textareas旨在显示带有换行符的多行文字。用户名和第一名通常不包含这些名称,因此最好使用input
元素
<?php
echo '<input type="text" name="name" value="' . htmlentities($checkFirstName) . '">';
?>
不要忘记htmlentities
或htmlspecialchars
(取决于编码 - 如果您的编码是unicode,htmlspecialchars应该足够,否则它的htmlentities)。不要仅仅为表单字段使用htmlentities
,而是在打印用户提供的数据时使用cross site scripting
。否则有人可以通过提供像
<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>