Je suis nouveau à PHP, j'espère que quelqu'un peut m'aider. J'ai une table contenant "ID", "IMG", "LINK" et "DESC" dans la base de données MySQL. Je veux que cela écho à quelque chose comme ça:
<?php
require_once "./dbconfig.php";
opendb();
$sql = "SELECT * FROM images ORDER BY id DESC";
$query = querydb($sql);
?>
<div id="featured">
<?php
while($row = mysql_fetch_array( $query )){
echo "<a target='_blank' href='$row[link]'><img src='$row[img]' title='$row[desc]'/></a>";
}
?>
</div>
<div id="cap">
<?php
while($row = mysql_fetch_array( $query )){
echo "<span class='desc' id='$row[id]'>$row[desc]</span>";
}
closedb();
?>
</div>
10 Réponses :
fromt the docs pour retourne un tableau qui correspond à la ligne extraite et déplace le pointeur de données interne à venir. P>
blockQuote>
Le point de données interne est toujours à la fin strong> lorsque vous essayez d'utiliser votre seconde en boucle. Vous n'avez rien fait pour le réinitialiser. P>
Vous pouvez le déplacer vers le début avec mysql_data_seek a> p> mysql_fetch_array code> p>
Utilisez-le avant votre seconde tandis que la boucle
mysql_data_seek($query,0);
mysql_fetch_array code> sera vide car vous avez déjà récupéré toutes les lignes de la base de données. Vous devrez réinitialiser le pointeur à l'aide de mysql_data_seek code>. <?php
mysql_data_seek( $query, 0 );
while($row = mysql_fetch_array( $query )){
echo "<span class='desc' id='$row[id]'>$row[desc]</span>";
}
... rest of code
La référence de base de données ( Par conséquent, après la boucle, le pointeur pointera à La fin du jeu d'enregistrements, il renvoie donc Donc, de sorte que ce que vous devez faire est de réinitialiser le pointeur au début du jeu de données avant de pouvoir en faire la boucle une seconde fois. P> < p> La fonction de faire ceci est Par conséquent, vous auriez besoin de la ligne de code suivante immédiatement avant votre deuxième boucle: p> espère que cela aide. p> p> $ € code>) agit comme un pointeur sur le prochain enregistrement non lu; Lorsque vous appelez mysql_fetch_array () code>, il reçoit l'enregistrement en cours de pointe et déplace le pointeur à la position suivante. false code> lorsque vous demandez le prochain enregistrement. Finition La boucle ne fait rien d'autre au pointeur; Il reste à la fin de l'ensemble d'enregistrements. P> mysql_data_seek (); code> p>
avec retourne un tableau qui correspond à
la rangée extraite et déplace l'interne
pointeur de données à venir. P>
blockQuote> Cela signifie que vous devez commencer de nouveau. Ainsi, utilisez-le avant votre deuxième fois: P> mysql_fetch_array () code> Vous traversez les résultats étape par étape, jusqu'à ce que vous soyez à la fin. Ou comme les documents PHP disent:
mysql_data_seek($query,0);
Vous pouvez utiliser Il indique à PHP d'exécuter la ou les instructions imbriquées à plusieurs reprises, tant que l'expression tandis que l'expression est évaluée vers true. P>
blockQuote> une fois que mysql_fetch_array n'a plus de lignes à récupérer, il retournera false sur chaque appel ultérieur em> - donc votre premier Que faire: Si vous souhaitez boucler sur les résultats à plusieurs reprises, je suggérerais de stocker les lignes de résultat dans un tableau d'abord, puis de la boucle. Exemple simplifié: p> pendant code> deux fois, mais voir quoi il fait :
tandis que cod> boucle arrêtera de boucler, comme le expression mysql_fetch_array ($ requis) code> est faux; Et puisque c'est la même expression dans le second tandis que code>, cette boucle n'exécutera jamais (comme l'expression évalue vers false code>). p>
La première boucle consomme déjà toutes les données de MySQL, il n'y a donc plus rien dans la deuxième boucle. Vous pouvez stocker les données des lignes dans le même temps, cependant, puis réutiliser ce magasin.
<div id="featured">
<?php
$rows = array();
while($row = mysql_fetch_array( $query )){
$rows[] = $row;
echo "<a target='_blank' href='$row[link]'><img src='$row[img]' title='$row[desc]'/></a>";
}
?>
</div>
<div id="cap">
<?php
foreach($rows as $row){
echo "<span class='desc' id='$row[id]'>$row[desc]</span>";
}
closedb();
?>
</div>
Oui, c'est la réponse en remercie et merci pour ceux qui ont répondu. Passez une bonne journée tout le monde.
Cela semble être un gaspillage de mémoire.
@edward: N'oubliez pas d'encoder correctement le HTML que vous produisez.
@JLEVETT: Question: PHP est copie sur l'écriture, alors combien de mémoire ces déchets?
Essayez ceci
$ str_res1 = ''; $ str_res2 = ''; tandis que ($ rang = mysql_fetch_array ($ requis)) { $ str_res1. = "une cible = '_ blank' href = '$ ligne [link]' 'img src =' $ ligne [img] 'title =' $" A "; $ str_res2. = "span class = 'desc' id = '$ ligne [ID]'> $ ligne [DESC] span>"; } p>
Désolé, je n'ai pas pu compléter les balises HTML dans ma réponse car elle disparaît de la poste si j'écris "<" ou "/>" p>
Par ceci, vous pouvez prendre toutes les valeurs dans PHP Strings et vous pouvez l'écho à tout ce que vous souhaitez. P>
$stuff = mysql_query("SELECT * FROM tbl");
while($s = mysql_fetch_array($stuff)){
//ur code
}
// add this line
mysql_data_seek( $stuff, 0 );
while($r = mysql_fetch_array($stuff)){
//ur code
}
Veuillez indenter votre code source correctement.
Désolé, veuillez séparer le code HTML avec le code PHP ci-dessous, je ne peux pas le modifier. :(
@edward: Oui, vous pouvez - voir ce lien "Modifier" sous votre question?