Posez votre question Signaler

PHP - Image, liens et ID manquants

Izrafelus - Dernière réponse le 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 ;)
Lire la suite 

PHP - Image, liens et ID manquants »

10 réponses
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
pyschopathe- 25 oct. 2008 à 01:21
Et tu veux quel résultat si l'id n'existe pas ?
Ajouter un commentaire
Réponse
+0
moins plus
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.
pyschopathe- 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.
Izrafelus - 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 ...
Ajouter un commentaire
Réponse
+0
moins plus
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.
Izrafelus - 25 oct. 2008 à 02:14
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 :)
pyschopathe- 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...
Ajouter un commentaire
Réponse
+0
moins plus
<?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.
Ajouter un commentaire
Ce document intitulé « PHP - Image, liens et ID manquants » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?