2010-08-14 8 views
0

Hey les gars, la première fois en utilisant stackoverflow.MySQL ne tire pas toutes les lignes

pouvez-vous les gars m'aider à déboguer?

Voici le problème, cette requête sélectionne toutes les lignes de ma base de données, elle émet deux fois le premier pour une raison quelconque.

$top10_query = "SELECT * FROM kicks"; 
    $result = mysqli_query($cxn, $top10_query) or die("Couldn't execute query."); 
    $row = mysqli_fetch_assoc($result); 

    $rating = $row['rating']; 
    $description = $row['description']; 
    $completed = $row['completed']; 
    $userid = $row['userid']; 
    $posted = $row['posted']; 

    while($row = mysqli_fetch_assoc($result)) { 
    echo "<tr>"; 
    echo "<td class='rating'>" . $rating . "</td>"; 
    echo "<td class='description'>" . $description . " </td>"; 
    echo "<td class='completed_" . $completed . "'>" . $completed . "</td>"; 
    echo "<td class='author'>"; 
    echo "Posted by: <a href='profile?userid=" . $userid . "'>" . $userid . "</a><br />"; 
    echo "on "; echo $posted; 
    echo "</td>"; 
    echo "</tr>"; 
    } 

Répondre

2

Vous parcourez le jeu de lignes en boucle, mais ne récupérez jamais sa valeur plus d'une fois. Vous avez retiré toutes les valeurs de la première ligne, et les mises en cache ici:

$rating = $row['rating']; 
$description = $row['description']; 
$completed = $row['completed']; 
$userid = $row['userid']; 
$posted = $row['posted']; 

Déplacer ce code dans la boucle, et de supprimer la première fetch.

0

Les variables $rating etc. ne sont pas "liées" aux expressions $row['rating'] etc. Une fois définies, elles prendront ces valeurs pour toujours, sauf si vous les modifiez à nouveau.

Voir PHP: Assignment Operators pour les détails.

Essayez de les récrire comme:

$top10_query = "SELECT * FROM kicks"; 
    $result = mysqli_query($cxn, $top10_query) or die("Couldn't execute query."); 

    while($row = mysqli_fetch_assoc($result)) { 
    $rating = $row['rating']; // <-- use the new value every time a row is fetched. 
    $description = $row['description']; 
    $completed = $row['completed']; 
    $userid = $row['userid']; 
    $posted = $row['posted']; 

    echo "<tr>"; 
    echo "<td class='rating'>" . $rating . "</td>"; 
    echo "<td class='description'>" . $description . " </td>"; 
    echo "<td class='completed_" . $completed . "'>" . $completed . "</td>"; 
    echo "<td class='author'>"; 
    echo "Posted by: <a href='profile?userid=" . $userid . "'>" . $userid . "</a><br />"; 
    echo "on "; echo $posted; 
    echo "</td>"; 
    echo "</tr>"; 
    } 
+0

Cela a fait l'affaire, merci! –

2

Vous devez mettre à jour $rating, $description, etc. dans la boucle while:

<?php 

    $top10_query = "SELECT * FROM kicks"; 
    $result = mysqli_query($cxn, $top10_query) or die("Couldn't execute query."); 

    while($row = mysqli_fetch_assoc($result)) { 
    $rating = $row['rating']; 
    $description = $row['description']; 
    $completed = $row['completed']; 
    $userid = $row['userid']; 
    $posted = $row['posted']; 

    echo "<tr>"; 
    echo "<td class='rating'>" . $rating . "</td>"; 
    echo "<td class='description'>" . $description . " </td>"; 
    echo "<td class='completed_" . $completed . "'>" . $completed . "</td>"; 
    echo "<td class='author'>"; 
    echo "Posted by: <a href='profile?userid=" . $userid . "'>" . $userid . "</a><br />"; 
    echo "on "; echo $posted; 
    echo "</td>"; 
    echo "</tr>"; 
    } 

?> 

Ou, bien sûr, vous pouvez inline $rating, etc. ., en écrivant $row['rating'] à la place.

Remarque: vous souhaitez probablement exécuter vos variables via htmlspecialchars avant de les insérer dans le code HTML. Sinon, une description comme <script>alert('hacked');</script> pourrait exécuter un script, vous ouvrant aux attaques XSS.

Vous pouvez également utiliser extract. Je ne vous recommande pas de faire cela, cependant, car il peut causer des problèmes et de la confusion pour les autres développeurs:

<?php 

    $top10_query = "SELECT * FROM kicks"; 
    $result = mysqli_query($cxn, $top10_query) or die("Couldn't execute query."); 

    while($row = mysqli_fetch_assoc($result)) { 
    extract($row); 

    echo "<tr>"; 
    echo "<td class='rating'>" . $rating . "</td>"; 
    echo "<td class='description'>" . $description . " </td>"; 
    echo "<td class='completed_" . $completed . "'>" . $completed . "</td>"; 
    echo "<td class='author'>"; 
    echo "Posted by: <a href='profile?userid=" . $userid . "'>" . $userid . "</a><br />"; 
    echo "on "; echo $posted; 
    echo "</td>"; 
    echo "</tr>"; 
    } 

?> 
+0

maintenant il ne montre que les lignes 2/3 et 3/3 et saute la première ligne de données. –

+0

@rickbross, quoi? Je ne suis pas sûr de ce que tu veux dire. Pouvez-vous donner un exemple ou reformuler votre problème? – strager

Questions connexes