MySQL ve php ile Newbie sorunları

4 Cevap php

Ben php ve MySQL ile gerçek bir acemi değilim. Şimdi ben eg veritabanı aramak gerekir aşağıdaki kod üzerinde çalışıyorum. Liverpool yaşayan tüm Lennons.

1) Nasıl metni hiçbir arama sonucu varsa görünmesini "hiçbir sonuç" elde etmek için "get.php" değiştirmek gerekir.

2) nasıl yerine bunları tek tek yazmak zorunda düz veritabanından seçenek değerlerini (şehir ve soyadı) almak için "index.php" değiştirmek gerekir?

3) Ben doğru yolu mysql_real_escape_string kullanıyor muyum?

4) kod Başka hatalar?

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);
?>

4 Cevap

1) $ Rowcount değişkeni tanımlı değil. Yerine böyle bir şey yapın:

$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) db onları seçin ve HTML bunları yazmak

<select><?php
$q=mysql_query(...);
while($row=mysql_fetch_row($q))
echo "<option>".$row[0]."</option>";
?></select>

3) Bu sorgudan önce fonksiyonunu kullanmak zorunda:

$query = "SELECT * FROM users WHERE city = '".mysql_real_escape_string($_POST['city'])."' AND lastname = '".mysql_real_escape_string($_POST['lastname'])."'";

4) kodu deneyin. Bu test olmadan hataları bulmak zor.

Sen before Eğer veritabanına bir sorgu göndermek mysql_real_escape dize kullanmak zorunda.

Sen get.php birkaç hata var. İşte değiştirilmiş doğru versiyonu.

<?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 tanımsız oldu - Ben bu sonuç kümesinden satırların sayısını çekme yaptık
  • Eğer sorguyu yapmıştı SONRA kadar POST değişkenleri kaçan değildi - daha önce bunları yapmanız gerekir
  • Sen ise sorgusu içinde $rowcount kontrol edildi - tüm satırlar iade olmasaydı, while döngüsü için bu onay meydana olmaz çalıştırmak olmaz
  • Daha fazla kayıt alınır eğer doğru yürütülmesini durdurmak için mysql_fetch_row çağrısının sonucunu kontrol edildi değildir
  • Sen bağlantısı ve sorgu aslında başarılı olduğunu kontrol edildi değildir
  • Sen ($rowcount) ('0') bir dize ile bir tamsayı karşılaştırarak - nedeniyle bu yolu PHP veri tipleri, ancak ele alırsanız daha iyi okur oldukları çalışmış olurdu senin veri tipleri-sağ

Bu ada göre sonuç alanlara başvurmak için izin verecek - - Başka bir öneri mysql_fetch_row yerine mysql_fetch_assoc kullanmaktır, örneğin $row['city'] böylece tablodaki sütunları-Düzende iseniz, bu uygulama kırmak olmaz.

Kullanıcı Şehir ve Soyad sunulan bu yana, her döngü tekrarında o echo bir atık biraz. Yani gitmek için daha iyi bir yolu sql sorgu dönüş var olacaktır "hiçbir sonuç" hiçbir sonuç vardır, ve sadece döngü üzerinde şehir / lastname yazdırmak istiyorsanız:

<?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);
?>