我是一个真正的新手用PHP和MySQL。现在我正在研究下面的代码,它应该搜索数据库,例如。所有住在利物浦的Lennons。
1)如果没有搜索结果,如何修改“get.php”以显示“无结果”文本。
2)我应该如何修改“index.php”以直接从数据库中获取选项值(city和lastname),而不必逐个输入?
3)我是否正确使用mysql_real_escape_string?
4)代码中的任何其他错误?
的index.php:
<form action="get.php" method="post">
<p>
<select name="city">
<option value="Birmingham">Birmingham</option>
<option value="Liverpool">Liverpool</option>
<option value="London">London</option>
</select>
</p>
<p>
<select name="lastname">
<option value="Lennon">Lennon</option>
<option value="McCartney">McCartney</option>
<option value="Osbourne">Osbourne</option>
</select>
</p>
<p>
<input value="Search" type="submit">
</p>
</form>
get.php:
<?php
$city = $_POST['city'];
$lastname = $_POST['lastname'];
$conn = mysql_connect('localhost', 'user', 'password');
mysql_select_db("database", $conn) or die("connection failed");
$query = "SELECT * FROM users WHERE city = '$city' AND lastname = '$lastname'";
$result = mysql_query($query, $conn);
$city = mysql_real_escape_string($_POST['city']);
$lastname = mysql_real_escape_string($_POST['lastname']);
echo $rowcount;
while ($row = mysql_fetch_row($result))
{
if ($rowcount == '0')
echo 'no results';
else
{
echo '<b>City: </b>'.htmlspecialchars($row[0]).'<br />';
echo '<b>Last name: </b>'.htmlspecialchars($row[1]).'<br />';
echo '<b>Information: </b>'.htmlspecialchars($row[2]);
}
}
mysql_close($conn);
?>
答案 0 :(得分:1)
您必须先使用mysql_real_escape字符串 向数据库发送查询。
答案 1 :(得分:0)
1)未定义$ rowcount变量。做这样的事情:
$zerorows=true;
while ($row = mysql_fetch_row($result))
{
$zerorows=false;
echo '<b>City: </b>'.htmlspecialchars($row[0]).'<br />';
echo '<b>Last name: </b>'.htmlspecialchars($row[1]).'<br />';
echo '<b>Information: </b>'.htmlspecialchars($row[2]);
}
if($zerorows) echo "no results";
2)从数据库中选择它们并将其写入HTML
<select><?php
$q=mysql_query(...);
while($row=mysql_fetch_row($q))
echo "<option>".$row[0]."</option>";
?></select>
3)您必须在查询之前使用该功能:
$query = "SELECT * FROM users WHERE city = '".mysql_real_escape_string($_POST['city'])."' AND lastname = '".mysql_real_escape_string($_POST['lastname'])."'";
4)尝试代码。没有测试就很难找到错误。
答案 2 :(得分:0)
你在get.php中遇到了一些错误。这是修改后的正确版本。
<?php
$city = mysql_real_escape_string($_POST['city']);
$lastname = mysql_real_escape_string($_POST['lastname']);
$conn = mysql_connect('localhost', 'user', 'password') or die("Connection failed");
mysql_select_db("database", $conn) or die("Switch database failed");
$query = "SELECT * FROM users WHERE city = '$city' AND lastname = '$lastname'";
$result = mysql_query($query, $conn) or die("Query failed");
$rowcount = mysql_num_rows($result);
if ($rowcount == 0)
{
echo 'no results';
}
else
while (($row = mysql_fetch_row($result)) !== false)
{
echo '<b>City: </b>'.htmlspecialchars($row[0]).'<br />';
echo '<b>Last name: </b>'.htmlspecialchars($row[1]).'<br />';
echo '<b>Information: </b>'.htmlspecialchars($row[2]);
}
}
mysql_close($conn);
?>
$rowcount
未定义 - 我已将此结果从结果集中拉出$rowcount
- 如果没有返回任何行,则while循环将不会运行,因此不会进行此检查$rowcount
)与字符串('0'
)进行比较 - 由于PHP数据类型的处理方式,这可能会有效,但如果您获取数据,则会更好-types right 另一个建议是使用mysql_fetch_assoc代替mysql_fetch_row - 它允许您按名称引用结果字段 - 例如$row['city']
因此,如果您重新订购表格中的列,则不会破坏您的应用。
答案 3 :(得分:0)
由于您的用户提交了City和Lastname,因此在每次循环迭代中回应这一点有点浪费。因此,更好的方法是让sql查询返回“无结果”,如果没有结果,并只打印循环上方的city / lastname:
<?php
$city = mysql_real_escape_string($_POST['city']);
$lastname = mysql_real_escape_string($_POST['lastname']);
$conn = mysql_connect('localhost', 'user', 'password');
mysql_select_db("database", $conn) or die("connection failed");
$query = "SELECT COALESCE(information,"No Results") AS information FROM users
WHERE city = '$city' AND lastname = '$lastname'";
$result = mysql_query($query, $conn);
while ($row = mysql_fetch_row($result))
{
echo '<b>Information: </b>'.htmlspecialchars($row[0]);
}
mysql_close($conn);
?>
答案 4 :(得分:-2)