[RESOLU] annonce avec photo membre ou pas no_photo

Eléphant du PHP | 257 Messages

06 janv. 2017, 14:59

re moogli cela fonction le seul soucis c'est la photo ne s'affiche pas j'ai le petit logo comme quoi elle est la mais ne s'affiche pas.
<?PHP
 
$annonce_sql = "SELECT * FROM annonce AN LEFT JOIN photo_profil PP ON AN.id_membre = PP.id_membre";
$res = $connection->query($annonce_sql);
while ($result = $res->fetch(PDO::FETCH_ASSOC)) {
 
	$id_annonce =	$result['id_annonce'];
    $id_membre = $result['id_membre'];	
    $pseudo = $result['pseudo'];
    $sexe = $result['sexe'];
    $jours = $result['jours'];
    $time_temp = $result['timestamp'];
    $annonce = $result['annonce'];
    $image_profil =  $result['chemin'];
 
    $im_src = ( !empty($image_profil) )? 'MINI11image_profil/'.miniature('image_profil/'.$image_profil.'', 150, 100) : 'imdesign/no_photo.png';
	echo'<img src="'.$im_src.'" border="0" />';
 
$tab_choix = array();
$annonce_sortie_choix  = $connection->prepare('SELECT * FROM choix_annonce WHERE id_annonce=:id_annonce AND jours=:jours');
$annonce_sortie_choix->execute(array('id_annonce'=>$id_annonce,'jours'=>$jours));
while($result_choix = $annonce_sortie_choix->fetch(PDO::FETCH_OBJ)){
$tab_choix[] = $result_choix->choix;	
$list_choix = (!empty($tab_choix))? implode(', ',$tab_choix) : '';
 
}
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 janv. 2017, 13:28

il y a quoi dans le source html ?

est ce que tu peux partager un jeux de données (même bidon le tout c'est qu'il soit cohérent) ?

@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 janv. 2017, 14:06

j'ai repris les tables indiqué plus haut (au passage dans les tables tu as mis id_membres et dans la requête SQL id_membre. cela ne peux pas fonctionner.

je me suis créé un jeux de test bidon
-- tables
CREATE TABLE `annonce` (
	`id_annonce` INT(11) NOT NULL AUTO_INCREMENT,
	`ID_membres` INT(11) NOT NULL,
	`pseudo` CHAR(30) NOT NULL,
	`sexe` CHAR(30) NOT NULL,
	`choix` VARCHAR(255) NOT NULL,
	`jours` CHAR(10) NOT NULL,
	`timestamp` VARCHAR(255) NOT NULL,
	`annonce` INT(3) NOT NULL,
	PRIMARY KEY (`id_annonce`),
	UNIQUE INDEX `id_annonce_2` (`id_annonce`),
	INDEX `id_annonce` (`id_annonce`)
)ENGINE=InnoDB;

CREATE TABLE `photo_profil` (
	`id_photo_profil` INT(4) NOT NULL AUTO_INCREMENT,
	`ID_membres` INT(15) NOT NULL,
	`sexe` CHAR(12) NOT NULL,
	`gal` TINYTEXT NOT NULL,
	PRIMARY KEY (`id_photo_profil`),
	UNIQUE INDEX `id_photo_profil_2` (`id_photo_profil`),
	INDEX `id_photo_profil` (`id_photo_profil`)
)ENGINE=InnoDB;

-- données bidons
insert into annonce (id_annonce,ID_membres,pseudo,sexe,choix,jours,`timestamp`,annonce) values(1,1,'p1','1','1','jours','timestamp c pas un varchar',1);
insert into annonce (id_annonce,ID_membres,pseudo,sexe,choix,jours,`timestamp`,annonce) values(2,1,'p1','1','1','jours','timestamp c pas un varchar',1);
insert into annonce (id_annonce,ID_membres,pseudo,sexe,choix,jours,`timestamp`,annonce) values(3,2,'p1','1','1','jours','timestamp c pas un varchar',1);
insert into annonce (id_annonce,ID_membres,pseudo,sexe,choix,jours,`timestamp`,annonce) values(4,3,'p1','1','1','jours','timestamp c pas un varchar',1);
J'ai réduit le code php au nécessaire (j'ai viré la fonction miniature que je n'ai pas et dont je ne connais pas l'utilité).
<?php
// connexion avec PDO parce que sinon je peu pas tester :)
try {
// set de l'encodage
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
$connection = new PDO('mysql:host=localhost;dbname=test','test','test',$options);
// assure les erreurs en exception
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Liste des champs parce qu'au moins on sais ce que l'on utilise et l'on évite les problème du genre tien on cherche à utiliser un index "chemin" mais il existe pas dans les tables !!!
// normalisation / simplification de la jointure SQL ;)
$annonce_sql = 'SELECT id_annonce,id_membres, pseudo, an.sexe,jours,timestamp, annonce,gal as chemin FROM annonce AN LEFT JOIN photo_profil PP using(id_membres)';
$res = $connection->query($annonce_sql);
while ($result = $res->fetch(PDO::FETCH_ASSOC)) {
// cas par défaut
    $im_src = 'MINI11image_profil/'.$result['chemin'] ;
// si pas de chemin c'est que le membre n'as pas de photo on utilise la photo standard
    if(empty($result['chemin']) ){
      $im_src = 'imdesign/no_photo.png';
    }
// on affiche la photo. une classe CSS serait pas mal pour l'affichage. 
    echo'<img src="',$im_src,'" style="border : none;" />';
}
// fermer le curseur c'est bien
$res->closeCursor();
}catch(Exception $e){
// pour le cas de test ce n'est pas à utiliser en vrai
  var_dump($e);
}
résultat

Code : Tout sélectionner

<img src="MINI11image_profil/oups" style="border : none;" /><img src="MINI11image_profil/oups" style="border : none;" /><img src="MINI11image_profil/3" style="border : none;" /><img src="imdesign/no_photo.png" style="border : none;" />
ce code fonctionne.
essai le pour voir si cela te va.

ensuite il te faudra ajouter les truc que j'ai virer.

dernière chose, utilise le tableau $result plutôt que de créer des variables elles ne servent à rien et encombre le code pour rien :)


@+
Il en faut peu pour être heureux ......