Page 1 sur 2

galerie photo

Posté : 03 avr. 2006, 22:50
par Chile
Bonjour,
J'en ai bientot terminé de mon projet galerie photo pour mon site :wink: grace a vous.
Il me reste 3 petites choses que je n'arrive pas a regler. Je ne recherche pas la solution de facilité en faisant appel au forum, car j'ai passé un temps incroyable sur le forum et les tutaux :?
bon, voila mes question:
la premiere, c'est ma page galerie elle meme. elle fonctionne au poil. ca m'affiche bien toutes les données de ma table ...mis a part la premiere donnée de ma table ! (j'ai dans cette page, inséré un "modulo").
la deuxieme, c'est mon formulaire je fais une recherche dans une base. J'ai deux champs text de recherche. Pays et site. La premiere etiquette (sans valeur) est "selectionner". Si je laisse un des deux champs sur la position "selectionner", la page d'affichage est vide. :? comment faire pour que dans cette situation, par defaut tout soit selectionner ?
et la derniere: J'ai une base de donnée avec pour chacun des produits dans la base une image. Mais il peut arriver qu'un produit n'ai pas d'image, je voudrais alors que sur la page d'affichage, une image par defaut apparaisse a la place de l'image non presente.
merci

Posté : 03 avr. 2006, 23:32
par Truc
Salut,
1. faut voir les lignes de la requete à l'exécution (boucle).

2.pas compris

3.suffit d'enregistrer un nom d'image par défaut en BD s'il n'y en as pas

Posté : 03 avr. 2006, 23:52
par Chile
salut Truc,
voici mon code au niveau de la boucle:
 <?php 
$i = 0; 
while ($row_photos = mysql_fetch_row($enr_aff_photo)) 
{ 
    if($i % 2 == 0) 
    { 
?>
      <tr>
        <?php 
    } 
    $id = $row_photos[0]; 
    $url_photos = $row_photos[4]; 

    $url = $row_photos[3]; 

    $nom_photos = $row_photos[3]; 
    $pays = $row_photos[1]; 
    $site = $row_photos[2]; 
?>
        <td width='150' align="center"><div align="center">
            <p align="center"><a href='images/<?php echo($nom_photos); ?>' target='_blank'><IMG SRC='images/<?php echo($url); ?>' WIDTH=200 HEIGHT=150 ALT='<?php echo($pays); ?>' border='0'></a> <?php echo($pays);?><br>
                <?php echo($site);?><br><?php echo($url_photos);?><br><?php echo($id);?><br><?php echo($url);?></p>
            <p><br>
            </p>
        </div></td>
        <?php 
    if(($i + 1) % 2 == 0) 
    { 
?>
      </tr>
      <?php 
    } 
    $i++; 
} 
?>
pour lire la premiere ligne de ma table, la variable i, doit etre a zero !? ce qui est le cas !? :?

pour la seconde question, voici un lien ou j'ai installer le code :
http://www.horizo.com/exemple/indexexemple.htm
si tu choisis argentine + amazonie ca t'affiche qlq chose
mais si tu choisis argentine et tu laisse le second champ sur "selectionner", l'affichage ne fonctionnera pas :(

et pour le troisieme, ben je vais suivre la piste :wink:

Posté : 04 avr. 2006, 00:11
par Truc
Toujours dans l'ordre:

1. Fallais aussi montrer les lignes de la requete, tu as peut être déjà un mysql_fetch_row (ou autre mysql_fetch_*) avant la boucle qui lit la 1ère donnée envoyé par la requête.

Le modulo n'as rien à voir la dedans.

2.
Il s'agit de listes pas de champs texte.... :wink:

Tu as certainement une requete avec des LIKE..... donc l'attribut "value" des options par défaut doivent etre => value="" et peut être à jouer sur le ET et OU dans la requete

3.C'est bien :lol:

Posté : 04 avr. 2006, 00:38
par Chile
:wink: tu as raison Truc, j'ai dans ma requete un mysql_fetch_assoc !
quel est l'alternative ?
<?php
mysql_select_db($database_pays, $pays);
$query_enr_aff_photo = "SELECT * FROM bpays WHERE id = id ORDER BY bpays.id";
$enr_aff_photo = mysql_query($query_enr_aff_photo, $pays) or die(mysql_error());
$row_enr_aff_photo = mysql_fetch_assoc($enr_aff_photo);
$totalRows_enr_aff_photo = mysql_num_rows($enr_aff_photo);
?> 

Posté : 04 avr. 2006, 10:06
par Truc
quel est l'alternative ?
L'enlever tout simplement :wink:

Il n'est pas nécessaire de lire les données avant la boucle (sauf en cas d'utilisation d'un boucle do.. while() )

Posté : 10 avr. 2006, 22:57
par Chile
salut,
je suis de retour pour le deuxieme probleme que je n'arrive pas a resoudre :

Code : Tout sélectionner

pour la seconde question, voici un lien ou j'ai installer le code : [url]http://www.horizo.com/exemple/indexexemple.htm [/url] si tu choisis argentine + amazonie ca t'affiche qlq chose mais si tu choisis argentine et tu laisse le second champ sur "selectionner", l'affichage ne fonctionnera pas
malgre l'explication de Truc :

Code : Tout sélectionner

Il s'agit de listes pas de champs texte.... Tu as certainement une requete avec des LIKE..... donc l'attribut "value" des options par défaut doivent etre => value="" et peut être à jouer sur le ET et OU dans la requete
que j'ai suivi...et donc retouché le code de mon formulaire au niveau de value :
<select name="pays" id="pays">
                        <option value="" selected>Selectionner</option>
                        <option value="argentine">Argentine</option>
                        <option value="chili">Chili</option>
                        <option value="bresil">Bresil</option>
                        <option value="france">France</option>
                        <option value="italie">Italie</option>
                        <option value="espagne">Espagne</option>
                      </select>
mais ca ne marche toujours pas
merci de votre aide

Valeur par defaut sur un formulaire

Posté : 15 avr. 2006, 18:27
par Chile
Bonjour,
J'insiste avec cette question, car je n'ai toujours pas trouver de solution :cry:
et voici mon exemple:
http://www.horizo.com/exemple/indexexemple.htm
salut,
je suis de retour pour le deuxieme probleme que je n'arrive pas a resoudre :

Code : Tout sélectionner

pour la seconde question, voici un lien ou j'ai installer le code : [url]http://www.horizo.com/exemple/indexexemple.htm [/url] si tu choisis argentine + amazonie ca t'affiche qlq chose mais si tu choisis argentine et tu laisse le second champ sur "selectionner", l'affichage ne fonctionnera pas
malgre l'explication de Truc :

Code : Tout sélectionner

Il s'agit de listes pas de champs texte.... Tu as certainement une requete avec des LIKE..... donc l'attribut "value" des options par défaut doivent etre => value="" et peut être à jouer sur le ET et OU dans la requete
que j'ai suivi...et donc retouché le code de mon formulaire au niveau de value :
<select name="pays" id="pays">
                        <option value="" selected>Selectionner</option>
                        <option value="argentine">Argentine</option>
                        <option value="chili">Chili</option>
                        <option value="bresil">Bresil</option>
                        <option value="france">France</option>
                        <option value="italie">Italie</option>
                        <option value="espagne">Espagne</option>
                      </select>
mais ca ne marche toujours pas
merci de votre aide
de meme, je ne sais que faire, lorsque suite a une requete, il ni y a pas de données, comment afficher un message: "il ni y'a pas de pays..." ? :roll: je tourne en rond avec ce formulaire !!! :cry:
merci de votre aide

Posté : 15 avr. 2006, 20:28
par Truc
montre nous la requete que tu exécutes.

Posté : 17 avr. 2006, 03:41
par Chile
dac, voici ma page requete/affichage:
<?php
$currentPage = $_SERVER["PHP_SELF"];

// On affecte la valeur de $_POST si elle existe, sinon celle de $_GET si elle existe, sinon on laisse vide : 
$colname_affichageimage = (isSet($_POST['pays'])) ? $_POST['pays'] : ((isSet($_GET['pays'])) ? $_GET['pays'] : ""); 
$colname2_affichageimage = (isSet($_POST['site'])) ? $_POST['site'] : ((isSet($_GET['site'])) ? $_GET['site'] : ""); 


$maxRows_affichageimage = 4;
$pageNum_affichageimage = 0;
if (isset($_GET['pageNum_affichageimage'])) {
  $pageNum_affichageimage = $_GET['pageNum_affichageimage'];
}
$startRow_affichageimage = $pageNum_affichageimage * $maxRows_affichageimage;

mysql_select_db($database_pays, $pays);
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays= '%s' AND bpays.site= '%s' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);
$query_limit_affichageimage = sprintf("%s LIMIT %d, %d", $query_affichageimage, $startRow_affichageimage, $maxRows_affichageimage);
$affichageimage = mysql_query($query_limit_affichageimage, $pays) or die(mysql_error());
$row_affichageimage = mysql_fetch_assoc($affichageimage);

if (isset($_GET['totalRows_affichageimage'])) {
  $totalRows_affichageimage = $_GET['totalRows_affichageimage'];
} else {
  $all_affichageimage = mysql_query($query_affichageimage);
  $totalRows_affichageimage = mysql_num_rows($all_affichageimage);
}
$totalPages_affichageimage = ceil($totalRows_affichageimage/$maxRows_affichageimage)-1;

$queryString_affichageimage = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_affichageimage") == false && 
        stristr($param, "totalRows_affichageimage") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_affichageimage = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_affichageimage = sprintf("&totalRows_affichageimage=%d%s", $totalRows_affichageimage, $queryString_affichageimage);
?>
:? merci...

Posté : 17 avr. 2006, 13:05
par Truc
tu ne peux avoir de résultats si le champ n'est pas renseigné puisque dans la requete tu demandes exactement les tuples qui correspondent aux critères (=).

Utilise un LIKE:
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s' AND bpays.site LIKE '%s' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);

Posté : 17 avr. 2006, 16:22
par Chile
merci de ton aide Truc...mais ca fonctionne pas :(
j'ai inseré les "like" comme tu m'as dit :
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s' AND bpays.site LIKE '%s' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);
et j'ai bien mes options value sur "" :
<select name="site" id="site">
                        <option value="" selected>Selectionner</option>
                        <option value="amazonie">amazonie</option>
                        <option value="desert">desert</option>
                        <option value="chute">chute d'eau</option>
                        <option value="cote">cote</option>
                        <option value="montagne">montagne</option>
                      </select>
j'ai pas de messages d'erreur, mais lorsque je laisse le champ sur selectionner, j'ai toujours rien, au lieu de toute la liste
http://www.horizo.com/exemple/indexexemple.htm
:cry:

Posté : 17 avr. 2006, 16:52
par Lorenzo
ben logique puisque la requete fait une recherche sur une chaine vide !

si tu veux choisir tous les champs de la table MySQL quand l'utilisateur renvoit une valeur vide ou non definit pour le "site", tu vas devoir modifier ton PHP pour creer une autre requete, ex :
if( !isset($_post['site']) || $_post['site'] == '' ){
    // je liste pour tous les sites
    $req = "SELECT * FROM bpays WHERE bpays.pays LIKE '$_post[pays]'  ORDER BY bpays.pays"
}else{
    // je liste pour 1 site
    $req = "SELECT * FROM bpays WHERE bpays.pays LIKE '$_post[pays]' AND  bpays.site LIKE '$_post[site]' ORDER BY bpays.pays"
}

---------
edit :

puisque tu peux avoir les 2 possibilités de choix de l'utilisateur non definit, il faudrait meme faire ca :

$w1 = '';
$w2 = '';
if( isset($_post['site']) && $_post['site'] ){
    $w1 = "bpays.site LIKE '$_post[site]'"
}
if( isset($_post['pays']) && $_post['pays'] ){
    $w2 = $w1 ? " AND bpays.pays LIKE '$_post[pays]'" : "bpays.pays LIKE '$_post[pays]'";
}

if( $w1 || $w2 ){
    $req = "SELECT * FROM bpays WHERE $w1 $w2 ORDER BY bpays.pays";
}else{
    $req = "SELECT * FROM bpays ORDER BY bpays.pays";
}

------------
edit n°2 :

puisque tu proposes un select aux utilisateurs, autant le proposer sous sa forme "multiple", qu'ils puissent selectionner les pays qu'ils veulent et pareil pour les site, ex :

<select name="toto" size="5" multiple="multiple">

Posté : 17 avr. 2006, 17:41
par Chile
Salut Lorenzo, et merci,
j'ai compris le principe, par contre je ne sais pas
ou le placer dans mon script, et si je dois eliminer
une qlq chose ? :oops:
j'ai essayé de rempalcer ici :
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s' AND bpays.site LIKE '%s' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);
mais ca ne marche plus :cry:
si tu peux m'en dire plus

Posté : 17 avr. 2006, 17:57
par Truc
bah j'ai oublié le principal avec l'utilisation de LIKE... le %.

j'ai confondu avec celui de sprintf()

Donc ça donnerait:
$query_affichageimage = sprintf("SELECT * FROM bpays WHERE bpays.pays LIKE '%s%' AND bpays.site LIKE '%s%' ORDER BY bpays.pays", $colname_affichageimage,$colname2_affichageimage);