我正在尝试制作更新表单。更新部分已经在运行,但如果我要放置一个视图按钮以便用户不会再次输入数据只是为了更新它会更好。
我正在处理这段代码,html表单中有一个按钮,下面的代码作为表单操作。它的工作是根据输入的电话号码用适当的数据填充文本框。
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("hospital", $con);
$result = mysql_query("SELECT * FROM t2 WHERE TELNUM='{$_POST["telnum"]}'");
while ($row = mysql_fetch_array($result))
{
<form>
<input name="lname" type="text"<?php echo $result["lname"];">
</form>
?>
我的代码出了什么问题?我还是PHP的初学者。
答案 0 :(得分:8)
您的HTML看起来不正确;使用value
属性指定文本输入字段的值,例如
<input name="lname" type="text" value="<?php echo( htmlspecialchars( $row['lname'] ) ); ?>" />
行数据将出现在$row
哈希中; $result
只是指向MySQL结果缓冲区的指针。此外,您在?>
语句后缺少echo
标记,而最终的?>
放错地方。 while
循环似乎没有右括号
请注意使用htmlspecialchars()
来转义文本中的HTML实体。这样可以防止数据库中的文本无意中关闭标记并在整个HTML上喷出垃圾(并防止用户的恶意输入产生任何影响)。
总的来说,正确的解决方案可能类似于:
<?php
$con = mysql_connect( 'localhost', 'root', '' );
if( !$con ) {
die( 'Could not connect: ' . mysql_error() );
} else {
mysql_select_db( 'hospital', $con );
$result = mysql_query( "SELECT * FROM t2 WHERE TELNUM='{$_POST["telnum"]}'" );
while( $row = mysql_fetch_array( $result ) ) {
?>
<form>
<input name="lname" type="text" value="<?php echo( htmlspecialchars( $row['lname'] ) ); ?>" />
</form>
<?php
}
}
?>
最后,不要再猜测你,但要注意从用户提供的数据(如$_GET
和$_POST
)中插入任意值到SQL查询中 - 恶意用户可以故意使用它构建您不想执行的查询,或者非恶意用户可以合理地提供无意中破坏SQL的数据,从而导致意外错误(或者某种形式的未知破坏行为)。请查看PHP网站上的SQL injection page作为了解更多相关信息的良好起点。
答案 1 :(得分:5)
应该是:
<input name="lname" type="text"<?php echo $row['lname'];
不
<input name="lname" type="text"<?php echo $result['lname'];
$ result就是 - mysql_query()调用的布尔结果。
$ row是循环每次迭代的实际数据。
答案 2 :(得分:4)
这里有很多问题。
您正在打开和关闭PHP标记不匹配。你可以在开头打开它们,然后像你一样在底部关闭它们,你只需要在这样做时回显HTML。
输入采用值属性,您可以使用该属性来预设其值。
您要从中提取MySQL取出数组的数组是$row
,而不是$result
。
关闭你的while循环会有所帮助。
根据输出的内容,退出输出会很好。
while($ row = mysql_fetch_array($ result)){ 回声“ “; }
答案 3 :(得分:0)
为什么htmlspecialchars而不是htmlentities,我总是使用htmlentities。