使用表单进行MySQL搜索和更新

3

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

我正在尝试创建一个表单,用于从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个回答

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`);
}

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


我不确定irhm真正想要什么。 - faq
抱歉,如果我没有表达得很清楚。我有一个表单,在其中键入用户的电子邮件地址,然后将该信息提交到MySQL数据库表以检索相关记录的名字和姓氏。我希望检索到的名字和姓氏值可以填充同一搜索表单中的名字和姓氏文本框。然后,我将在此基础上使用相同的表单对用户记录进行更改,并将修改后的信息保存回数据库表中。希望这可以帮到您。祝好。 - IRHM
你在查询中将变量名更改为“$email”了吗? - user542603
为了方便起见,我把所有东西都称作“emailaddress”,这样我就可以希望让它工作并花些时间来理解这个过程。 - IRHM

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

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

    <input name="surname" type="text" id="surname" value="<?php echo isset($surname) ? htmlentities($surname) : null; ?>" />
    
您可以将上面的代码理解为:姓氏是否已设置?如果是,则应用 htmlentities 并输出结果。否则,返回 null。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接