Bonjour,

Je suis en train de faire un site où sur la page d'accueil j'ai des liens vers l'id suivant. Le problème est que je démarre à l'id 26 et après j'ai le 28, le 29 et le 34.

Quand je fais $data'id']+1 , ça ne marche donc pas puisque mes numéro d'id ne se suivent pas.

J'ai donc cherché partout sur le web et je vois qu'il peut y avoir une solution en changeant ma requête :

$sql="SELECT * FROM Cindex ORDER BY id ASC";

en

$sql="SELECT * FROM Cindex WHERE id > $currentid ORDER BY id ASC LIMIT 1";

Sauf que cette dernière ne m'affiche plus rien! Puis il y'a une limit à 1 et moi je veux afficher toutes mes entrées de ma BDD.

Voici mon code :

<?php
$sql="SELECT * FROM Cindex ORDER BY id ASC";
$req = mysql_query($sql) or die ('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
while($data=mysql_fetch_assoc($req)){
?>
<div class="section page" data-anchor="section<?php echo $data'id'] ?>" 
style="
z-index:1;
background: url('admin/imgs/original/<?php echo $data'photo'] ?>') center no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;">
  <center><a href="activites.php?id=<?php echo $data'id'] ?>"><h1><?php echo $data'titre'] ?></h1></a></center>
    <center><h2>
      <?php echo $data'texte'] ?>
    </h2></center>
    <center><a href="activites.php?id=<?php echo $data'id'] ?>" class="btn btn-primary btn-lg">Accédez à l'activité</a></center>
    <center><a href="#section<?php echo $data'id']+1?>" class="btn btn-warning btn-xs">SUIVANT</a></center>
</div>
<?php } ?>

Merci d'avance pour votre aide.

Et un grand merci à Grafikart car sans lui je n'en serais pas là où j'en suis.

15 réponses


Donovan
Réponse acceptée

Comment ça peux te sembler correct Vallyan... mysql_query() renvoi une ressource pas un array.

Pour garder, dans les grandes lignes, l'idée,

<?php
$results = array();
$sql = 'SELECT * FROM Cindex ORDER BY id ASC';
$query = mysql_query($sql) or die ('Erreur SQL !<br />' . $sql . '<br />' . mysql_error());
while ($row = mysql_fetch_assoc($query)) {
    $results] = $row;
}
foreach ($results as $key => $result):
    $nextKey = $key + 1;
?>
<div class="section page" data-anchor="section<?php echo $result'id'] ?>" style="z-index:1; background: url('admin/imgs/original/<?php echo $result'photo'] ?>') center no-repeat; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;">
    <center><a href="activites.php?id=<?php echo $result'id'] ?>"><h1><?php echo $result'titre'] ?></h1></a></center>
    <center><h2><?php echo $result'texte'] ?></h2></center>
    <center><a href="activites.php?id=<?php echo $result'id'] ?>" class="btn btn-primary btn-lg">Accédez à l'activité</a></center>
    <?php if (array_key_exists($nextKey, $results)): ?><center><a href="#section<?php echo $results$nextKey]'id']; ?>" class="btn btn-warning btn-xs">SUIVANT</a></center><?php endif; ?>
</div>
<?php endforeach; ?>

Je suis pas sur de comprendre ce qui te pose problème.

En faisant ton "SELECT * FROM Cindex ORDER BY id ASC", tu récupères tout, y compris les id. A partir de ce que te retourne cette requête tu peux donc construire un array des tous les id qui sont dans ta table.
Si tu ne veux pas faire de boucle php (a travers tes résultats de la requête précédente, donc) pour stocker ces id dans un array, tu peux faire une requête sql supplémentaire qui ne te retournera QUE les id:
"SELECT id FROM Cindex"

Bref tu as plusieurs façon de te retrouver avec un array PHP qui contient toutes les id présentes dans ta table.
Ensuite de cela, l'usage que tu veux en faire dépends de toi: tu peux en faire un array JS, par exemple.

mirael86
Auteur

En fait, j'ai mal formulé mon problème!

Ce que je souhaite faire c'est faire un lien vers mon id suivant. Pour que ma page puisse scroller vers l'ancre de mon prochain id.
À la ligne 19 j'ai fais

<a href="#section<?php echo $data'id']+1?>"

mais si dans ma table j'ai :
toto ----> 3
tata ----> 4
titi ----> 8
Alors mon id+1 ne va pas fonctionner pour titi puisque ça va m'afficher 5!

Ce que je souhaite, c'est trouver un code simple pour que je puisse afficher 8!

Comme tu peux le voir, j'ai toujours un problème de lien dans mon code!

++

merci

J'étais parti sur une réponse longue avec une récupération des liens en JS etc, et je me suis rendu compte que non, en réalité il y a une solution bien plus simple : tu fais un foreach.

Plutôt que de faire un while et un mysql_fetch_assoc, tu fais un foreach tout bête.

Cela te permet d'avoir les valeurs, mais également les clés.

Aussi, pour générer ton lien tu n'auras plus qu'à faire $req$key+1]'id'] pour que ça te sorte l'ID de l'enregistrement suivant du tableau.

Bon, si je reformule ton problème tel que je le comprends:

1) Tu as une page qui affiche un truc enregistré en base de donnée. La requête que tu as faite pour avoir les infos de ce truc ne te retourne qu'une seule ligne de ta table, donc tu ne récupères pas l'ensemble des id de toute ta table.

2) Tu voudrais juste connaitre quel est, dans ta table, l'id suivant l'id courant pour faire ton lien "next"

Si l'id courant est 45, tu peux faire la requête suivante:

SELECT `id` FROM `Cindex` WHERE `id` > 45 ORDER BY `id` ASC LIMIT 0 , 1

qui va te retourner le premier id immediatement après 45.

Mais ce que je ne comprends pas c'est que tu as l'air de dire que ta requête initiale est

$sql="SELECT * FROM Cindex ORDER BY id ASC"

auquel cas tu n'as pas besoin de faire de requête supplémentaire spécifiquement pour avoir l'id suivante: toutes les id de ta table sont dans ce que te retourne ton SELECT 8, vu puisque tu ne mets pas de condition. Donc une boucle en PHP comme jele suggérais, ou comme le suggère aussi Pakito devrait fonctionner

mirael86
Auteur

Alors c'est la première fois que je fais un foreach alors pas de moquerie sur mon code svp! :)
En fait, ici je rebloque car je ne sais pas quoi mettre dans mon tableau... Ca vous semble comment ce que je viens de mettre ?

<?php
$array = array($req);
$sql="SELECT * FROM Cindex ORDER BY id ASC";
$req = mysql_query($sql) or die ('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
foreach ($req as $key => $valeur) { 
?>
    <a href="#section<?php echo $req$key+1]'id'] ?>">suivant</a>
<?php } ?>

Voilà... je vais le tester et je vous tiens au courant!

Fait un var_dump($req) pour voir, stp ? Sinon ca me semble correct ;)

mirael86
Auteur

Bon l'heure est grave car ça ne m'affiche rien...

<?php
$array = array($req);
var_dump($req);
$sql="SELECT * FROM Cindex ORDER BY id ASC";
$req = mysql_query($sql) or die ('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
foreach ($req as $key => $valeur) { 
?>
<div class="section page" data-anchor="section<?php echo $req$key]'id'] ?>" 
style="
z-index:1;
background: url('admin/imgs/original/<?php echo $req$key]'photo'] ?>') center no-repeat;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;">
  <center><a href="activites.php?id=<?php echo $req$key]'id'] ?>"><h1><?php echo $req$key]'titre'] ?></h1></a></center>
    <center><h2>
      <?php echo $req$key]'texte'] ?>
    </h2></center>
    <center><a href="activites.php?id=<?php echo $req$key]'id'] ?>" class="btn btn-primary btn-lg">Accédez à l'activité</a></center>

    <center><a href="index.php#section<?php echo $req$key+1]'id'] ?>" class="btn btn-warning btn-xs">SUIVANT</a></center>
</div>

J'suis pas un cas facile parce que je ne comprends pas tout immédiatement!!

Que penses-tu de ce code Vallyan?

Alors en dehors du fait que ton style en plein milieu de ton code html pique un peu les yeux :p, j'ai toujours besoin de voir ton var_dump($req), mais APRES la requête (mets-le en ligne 6, avant le foreach).
Mais sinon je persiste a penser que dans l'idée t'es pas loin.

Ah put*** t'as raison ... :/ je sais plus comment ca marche sans PDO, moi -__-'

mirael86
Auteur

Merci Donovan ça marche nickel!! Je vais enfin pouvoir afficher ma petite flèche pour scroller mes photos. SUPER!
Merci aussi à Vallyan qui m'a aussi soutenu et qui est resté pour m'aider.
Merci vraiment beaucoup pour votre aide.

"Ah put*** t'as raison ... :/ je sais plus comment ca marche sans PDO, moi -__-'"
--> Mais pareil... Nous sommes pathétiques :)

Après la finalité c'est tout de même que Mirael s'en soit sorti !

Absolument ... m'enfin si en plus on peut éviter de passer pour des couillons c'est encore mieux ^^

Dire qu'à une époque mysql représentait une avancée technologie hors du commun ... /snif

mirael86
Auteur

Je ne vous en veux absolument pas! Vous avez bien essayé et franchement ça m'a aussi permis de revoir le foreach (je ne l'avais pas utilisé depuis... ben oui je confirme, je ne l'avais jamais utilisé!!)
Pakito, j'avais oublié de te remercier pour l'aide que tu m'avais apporté alors MERCI!

Je pense qu'il va me falloir du temps avant de passer à PDO, mais je compte m'y mettre en regardant tranquillement les tutos de Grafikart.

<?php
    echo "<h1>MERCI</h1>" ;
?>