新手的MySQL和PHP的问题

时间:2010-03-26 08:05:26

标签: php mysql

我是一个真正的新手用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);
?>

5 个答案:

答案 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未定义 - 我已将此结果从结果集中拉出
  • 在您完成查询之前,您没有转义POST变量 - 您必须先执行此操作
  • 您正在检查while查询中的$rowcount - 如果没有返回任何行,则while循环将不会运行,因此不会进行此检查
  • 如果没有检索到更多记录,您没有检查mysql_fetch_row调用的结果以正确停止执行
  • 您没有检查连接和查询是否真正成功
  • 您正在将整数($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)

  1. 将来自while循环的$ rowcount checkinfg。
  2. 从数据库中选择
  3. 不,错误和非常有趣的方式:)