2017-08-27 5 views
0

J'ai cette boucle tout fonctionne bien, sauf pour la dernière ligne de la table où je ne peux pas obtenir l'id pour passer correctement. Il ne me donne pas d'erreur, mais lorsque je survole le lien "Modifier", il montre l'ID correct et juste après tout le code html de la table. Il semblerait que la concaténation ne soit pas correcte.Passer l'ID via href à l'intérieur tandis que php loop

Il y a le code:

while ($row = mysqli_fetch_assoc($result)){ 
    echo "<table><tr><td>" . $row["id"] . "</td>" . 
     "<td>" . $row["product_name"] . "</td>" . 
     "<td>" . $row["visible"] . 
     "<td><a href=\"modify.php?id=" . $row["id"] . ">Modify</a>" . 
     "</td></tr></table>"; 
} 
+0

votre 'href' ne ferme pas –

+0

Afficher les journaux d'erreur PHP pour les erreurs de débogage , et (pas toujours utile, mais mérite d'être attaché) voir le code source pour voir les erreurs HTML :) – James

Répondre

1

Vous utilisez echo pour chaque enregistrement, ce qui est bien, mais chaque fois que vous l'écho d'une table de marque nouvelle. Ce que vous voulez probablement dire est de ne faire écho qu'à une nouvelle rangée. Comme d'autres l'ont suggéré, votre href est également mal fermé

faire quelque chose comme:

echo '<table>'; 
while($row = mysqli_fetch_assoc($result)){ 
    echo "<tr> 
      <td> $row[id] </td> 
      <td> $row[product_name] </td> 
      <td> $row[visible] </td> 
      <td><a href='modify.php?id=$row[id]'>Modify</a></td> 
     </tr>"; 
} 
echo '</table>'; 

Notez que parce que vous écrivez HTML, vous ne avez pas besoin de concaténer plusieurs chaînes. Vous pouvez avoir une longue chaîne multiligne. Le navigateur affichera la table correctement même si vous avez des sauts de ligne dans votre chaîne. De plus, PHP peut analyser les chaînes entre guillemets et substituer des variables pour leurs valeurs de chaînes, donc vous n'avez pas besoin de faire "<td>" . $row["id"]; cela fonctionne très bien:

+0

Merci beaucoup! Fantastique !! Cela fonctionne premier !! Non seulement résolu mon problème (ne pouvait pas trouver le href de fermeture), mais aussi fait beaucoup plus simple !! – Willian

+0

@Willian c'est bien. N'oubliez pas de sélectionner ma réponse si cela vous a aidé – BeetleJuice

0

Il semble que vous manquiez un " et ne pas fermer votre href. Ci-dessous, je l'ai corrigé en ajoutant le " manquant. En outre, j'ai échangé la plupart des guillemets doubles pour les guillemets simples. C'était ma préférence parce que c'était plus facile à lire; Je suppose que vous avez eu du mal à identifier la citation manquante en raison de l'utilisation de doubles seulement.

while ($row = mysqli_fetch_assoc($result)){ 
     echo '<table><tr><td>' . $row["id"] . '</td>' . 
      '<td>' . $row["product_name"] . '</td>' . 
      '<td>' . $row["visible"] . 
      '<td><a href="modify.php?id=' . $row["id"] . '">Modify</a>' . 
      '</td></tr></table>'; 
    } 
+0

Merci Dave! Tu as raison! Trop salissant avec trop de doubles quotes! Des guillemets simples l'ont rendu lisible. – Willian

0

Vous semblez avoir oublié de fermer l'attribut href dans votre boucle while.

En outre, comme les autres notes de réponse, vous utilisez echo | print pour imprimer une nouvelle table chaque fois que vous exécutez cette boucle, ce qui peut provoquer des résultats bizarres.

Voici un exemple où vous ajoutez tout à un nom de chaîne $table et imprime quand vous avez terminé avec la boucle:

<?php 
//Create start of table: 
$table = '<table><tbody>'; 

//Fetch rows: 
while ($row = mysqli_fetch_assoc($result)) { 

    //append to the table: 
    $table .= '<tr><td>' . $row['id'] . '</td>' . 
      '<td>' . $row['product_name'] . '</td>' . 
      '<td>' . $row['visible'] . //You forgot the " under here 
      '<td><a href="modify.php?id=' . $row['id'] . '">Modify</a>' . 
      '</td></tr>'; 
} 

//Append end of table: 
$table .= '</tbody></table>'; 

//print table: 
print $table; 
+1

Merci Kristian! Une table avec plusieurs rangées au lieu de plusieurs tables! – Willian