我想知道是否有人可以帮助我。
我正在尝试整理一个表单,我可以用它来搜索mySQL数据库中的成员详细信息,检索结果,使它们出现在同一表单上的预定文本框中,并进行更新以发送回数据库。
我正在使用的代码如下:
PHP
<?php
require("phpfile.php");
// Opens a connection to a MySQL server
$connection=mysql_connect ("hostname", $username, $password);
if (!$connection) { die('Not connected : ' . mysql_error());}
// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die ('Can\'t use db : ' . mysql_error());
}
$email = $_POST['email'];
$sql = mysql_query("SELECT * FROM userdetails WHERE emailaddress like '%$emailaddress%'");
while($row = mysql_fetch_array($sql))
{
echo $row['forename'];
echo $row['surname'];
echo "<br />";
}
?>
HTML表格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<form action="search.php" method="post">
<p>Search:
<input name="emailaddress" type="text" id="emailaddress" />
<br />
<input type="submit" name="submit" value="Submit" />
</p>
<p>
<label>
<input name="forename" type="text" id="forename" value="<?php echo $forename; ?>" />
</label>
</p>
<p>
<input name="surname" type="text" id="surname" value="<?php echo $surname; ?>" />
</p>
<p> </p>
</form>
</body>
</html>
我正在使用电子邮件地址搜索所需的记录,但我遇到的问题是检索了所有记录而不是我输入的详细信息,结果不会出现在表格上的名字和姓氏字段中。
也许有人可以告诉我我做错了什么
亲切的问候
答案 0 :(得分:2)
...但如果您按提交按钮更新白色电子邮件,它应如下所示:
if(isset($_REQUEST['submit'])) {
$fname = mysql_real_escape_string($_POST['forename']);
$sname = mysql_real_escape_string($_POST['surname']);
$emai= mysql_real_escape_string($_POST['email']);
mysql_query(UPDATE `table` SET `forename` = $fname, `surname` = $sname, `email`=$email WHERE id = `id`);
}
答案 1 :(得分:0)
您已将变量“$ email”称为“$ emailaddress”。将您的查询更改为:
SELECT * FROM userdetails WHERE emailaddress like '%$email%'
以前,您的查询是搜索“%%”这样的电子邮件地址 - 它会找到每个电子邮件地址。
另一方面,您必须研究SQL注入。这是影响Web应用程序的最常见安全风险之一,但却很容易防范。我不会详细解释,但暂时替换你的行:
$email = $_POST['email'];
使用:
$email = mysql_real_escape_string($_POST['email']);
以下是有关SQL注入的更多信息:http://php.net/manual/en/security.database.sql-injection.php
答案 2 :(得分:0)
您应该在使用之前转义POST输入。如果您使用的是MySQL,则可以使用mysql_real_escape_string()函数:
$emailaddress = mysql_real_escape_string($_POST['email'])
您可以使用检索到的值填充表单,在每个表单输入中设置value参数。出于安全原因,请确保输出将转换HTML实体:
<input name="surname" type="text" id="surname" value="<?php echo isset($surname) ? htmlentities($surname) : null; ?>" />
您可以阅读上述行:是$ surname set?如果是这样,请应用htmlentities和输出。否则,返回null。