搜索&使用表单更新MySQL

时间:2011-10-28 14:22:55

标签: php mysql

我想知道是否有人可以帮助我。

我正在尝试整理一个表单,我可以用它来搜索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>&nbsp;  </p>
</form> 
</body>
</html>

我正在使用电子邮件地址搜索所需的记录,但我遇到的问题是检索了所有记录而不是我输入的详细信息,结果不会出现在表格上的名字和姓氏字段中。

也许有人可以告诉我我做错了什么

亲切的问候

3 个答案:

答案 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)

  1. 您应该在使用之前转义POST输入。如果您使用的是MySQL,则可以使用mysql_real_escape_string()函数:

    $emailaddress = mysql_real_escape_string($_POST['email'])
    
  2. 您可以使用检索到的值填充表单,在每个表单输入中设置value参数。出于安全原因,请确保输出将转换HTML实体:

    <input name="surname" type="text" id="surname" value="<?php echo isset($surname) ? htmlentities($surname) : null; ?>" />
    
  3. 您可以阅读上述行:是$ surname set?如果是这样,请应用htmlentities和输出。否则,返回null。

相关问题