PHP - Image, liens et ID manquants

Fermé
Izrafelus - 25 oct. 2008 à 01:06
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 25 oct. 2008 à 02:22
Bonsoir à tous !

J'ai besoin de vos lumières si éclairées soit elles.

Bon, mon soucis : Je suis en train de mettre au point un "Picture Viewer", voyez par la un album photo en PHP, si on clique sur une des photos, ca rembale sur une autre page en PHP qui affichera la photo en grand, affichera des boutons vers l'image suivante et précédente et qui fera "fi" des ID qui sont vides.

Exemple : je suis sur l'image qui a l'ID 13, je clique sur le suivant, qui incrementera 1 dans l'ID et ira la chercher sur le serveur et sur la bdd par requete SQL, mais "ho damned", il n'y a pas d'ID 14 ! Ma page affichera alors une page vide un peu bete ...

Comment faire ?

Je me suis tenté a faire comme décrit plus haut :

Je fait un count qui me liste le nombre d'ID de photos dan la base, ensuite je fait un select avec l'ID de l'image cliquée, et deux bouton avec un

$IDPrec = $row[ID]-1;
$IDSuiv = $row[ID]+1;

et les boutons qui sont echo '<a href="picviewer.php?ID='.$IDPrec.'"></a>"; et idem pour le suivant ...

ce qui n'arrange pas mon soucis en cas d'ID qui n'existent pas !.

Voici l'album photo sur lesquel je bosse : http://www.stephane-delcol.be/album2.php

Merci d'avance pour vos douces idées ;)
A voir également:

5 réponses

pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 01:15
Premièrement, un conseil : redimensionne tes images afin d'en avoir une version plus petite à utiliser sur les pages où elles sont en miniatures, ça accélèrera grandement le chargement !

Deuxièmement, il faudrait expliquer un peu mieux ton problème, je ne comprends pas vraiment ce que tu attends de nous.
0
Je bosse sur un Thumbnail déjà, on m'a déjà fait plusieurs fois la remarque sur la lourdeur des images.

Ce qui me pose probleme en clair, c'est le cas des ID manquants. Dans le Picture Viewer, j'aimerais quand je clique sur suivant (ou précédent) qu'il aille me chercher l'ID suivante qui existe. Et pas une simple incrémentation de l'ID de un.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 01:21
Et tu veux quel résultat si l'id n'existe pas ?
0
Qu'il ne m'affiche pas une page vide tout simple.

Si l'id 13 existe => il affiche l'image de l'id 13. clique sur suivant, si l'id 14 exite => il affiche l'image de l'id 14, si n'existe pas on passe directement a l'id 15 pour voir si il existe, si oui affiche l'image sinon passe a l'id suivante. etc.

Celon moi c'est la meilleure méthode.

Je me suis renseigné aussi aupres d'autres amis webmaster et m'ont dit qu'une autre solution serait de faire un select * sur la base et de stocker ca dans un tableau, ainsi il aurait une liste des ID qui existent. Mais je ne sais pas comment mettre cela en application.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 01:49
Au lieu de faire un SELECT * FROM table WHERE id=n, tu fais juste un SELECT * FROM table. Ensuite, ton lien pour passer d'une photo à l'autre pourrait être un bouton de validation de formulaire, formulaire qui passerait le tableau obtenu précédemment et l'id de la photo courante (voire son indice dans le tableau).

Cette méthode à de nombreux avantages puisqu'elle permet de ne faire qu'une requête sur la base et de gérer les cas où les id ne sont pas consécutives. En retour, elle implique de passer une quantité de données importante si le nombre de photos est grand.
0
Izrafelus > pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010
25 oct. 2008 à 02:02
D'accord je vois plus ou moins ce que tu veux dire par la, je me disait aussi que ma methode devait etre bouffe mémoire a en crever, j'ai deja fait ca en orienté objet et ca à été la cata ^^ .

dans les <input type=button>, je devrait lui mettre précisément quoi en argument pour qu'il renvoie le tableau précédement généré ?

De plus, pour la requete SQL, je passe par un mysql_num_row ou un mysql_fetch_array pour créer le tableau ?

Merci de ton aide en tout cas ...
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 02:06
Le formulaire pourrait ressembler à ça :
<?php
$tableau_photos = unserialize( stripslashes( $_POST['photos'] ) );

if ( isset( $_POST['precedent'] ) ) {
  $indice = intval( $_POST['indice'] - 1 );
}
elseif ( isset( $_POST['suivant'] ) ) {
  $indice = intval( $_POST['indice'] + 1 );
}
?>

// Tu affiches l'image qui se trouve à l'indice $indice dans $tableau_photos

<form method="post">
  <input type="hidden" name="indice" value="<? echo $indice; ?>" />
  <input type="hidden" name="photos" value='<? serialize( $tableau_photos ); ?>' />
  <input type="image" name="precedent" src="images/precedent.png" />
  <input type="image" name="suivant" src="images/suivant.png" />
</form>

Bien sûr sur la première page, il faut interroger la base de données pour récupérer tableau_photos.
Il faut aussi penser à vérifier que l'indice ne descende pas en dessous de zéro et ne dépasse pas l'indice maximum du tableau.
0
D'accord, je prend note de tout cela et je testerais ... demain matin ^^

Je suis un poil crevé. Mais je te remercie énormement de ton aide. De toute facon, je posterais demain matin si j'ai un quelconque soucis :)
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135 > Izrafelus
25 oct. 2008 à 02:22
Je pense que je dormirai demain matin, donc ne t'inquiètes pas si je ne réponds pas avant tard...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 oct. 2008 à 02:21
<?php
function listePhotos() {
  // Connexion au serveur
  $handler = mysql_connect( $host, $user, $pass );
  // Choix de la base
  $database = mysql_select_db( "ma_base", $handler );
  // Requête
  $req = "SELECT * FROM table_photos";
  $resultat = mysql_query( $req, $handler );
  
  // On stocke le résultat dans un tableau associatif avec pour clé le champs id
  $i = 0;
  $tableau = array();
  while ( $row = mysql_fetch_array( $resultat, MYSQL_ASSOC ) ) {
    $tableau["$i"] = $row;
    ++$i;
  }

  return $tableau;
}
?>

Et ensuite, en fonction du schéma de ta table, tu récupèreras l'url de l'image à afficher par $tableau[$indice]['url'], si c'est le champs url de ta table qui contient l'adresse de l'image.

Cette fonction ne doit être appelée que lorsque l'utilisateur clique sur une miniature pour afficher le zoom.
0