Fatal error

Résolu
Bonjour
S'ils vous plait pouvez-vous m'aider, J'ai une erreur que je n'arrive pas à résoudre, lors d'une requète pour l'affichage de photos.
C'est très sympa, merci beaucoup
Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

	$rid_album = isset($_GET['id_photo']);

		$sql = "SELECT id_photo, lieu_photo, date_photo, nom_photo
				FROM tb_photo
				WHERE id_photo = $rid_album";
		$requete = $bdd->prepare($sql);
		$requete->execute();
		
		while($donnees = $requete->fetch()) {
			
			$lieu_photo 	= $donnees['lieu_photo'];
			$date_photo 	= $donnees['date_photo'];
			$nom_photo 	= $donnees['nom_photo'];

12 réponses

  1. Bonjour,

    Je pense que l'erreur se situe au niveau de la variable $rid_album :
    $sql = "SELECT id_photo, lieu_photo, date_photo, nom_photo FROM tb_photo WHERE id_photo = $rid_album";

    Et qu'il faudrait corriger la requête comme ceci :
    $sql = "SELECT id_photo, lieu_photo, date_photo, nom_photo FROM tb_photo WHERE id_photo=".$rid_album;

    Cordialement.
    0
    1. Bonjour
      Merci pour ton aide, malheureusement j'ai toujours cette erreur, oui tu as raison cela vient bien de la variable $rid_album
      Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
      

      Il y a plusieurs jours que je suis dessus je ne vois pas du tout.
      Merci beaucoup de votre aide.
      0
      1. Contributeur
        'lut,
        isset
        renvoie juste un booléen disant si la variable est définie ou non.
        Dans ta requête SQL, ce que tu veux, c'est le contenu de la variable elle-même, qu'on ne met absolument jamais directement dans la requête; on se sert de requêtes préparées:
        if (isset($_GET['id_photo'])) {
        	$rid_album = $_GET['id_photo'];
        
        	$sql = "SELECT id_photo, lieu_photo, date_photo, nom_photo
        			FROM tb_photo
        			WHERE id_photo = :rid_album";
        	$requete = $bdd->prepare($sql);
        	$requete->execute(array(
        		":rid_album" => $rid_album
        	));
        
        	while($donnees = $requete->fetch()) {
        		
        		$lieu_photo 	= $donnees['lieu_photo'];
        		$date_photo 	= $donnees['date_photo'];
        		$nom_photo 	= $donnees['nom_photo'];
        0
        1. Bonjour
          Maintenant lors de l'affichage des photos, la page est blanche aucun affichage et aucune erreur retournée, c'est vraiment incroyable.
          dans l'url l'id de la photo est correct
          index.php?body=nos_photos&type=public&id_photo=1
          


          J'ai bien fait copie/collé ta correction.

          Dans ma BDD j'ai bien inséré 1 photo dans 1 dossier pourtant
          et dans mon dossier d'arborescence j'ai bien la photo



          je te met le script complet
           <?php
          if (isset($_GET['id_photo'])) {
           $rid_album = $_GET['id_photo'];
          
           $sql = "SELECT id_photo, lieu_photo, date_photo, nom_photo
             FROM tb_photo
             WHERE id_photo = :rid_album";
           $requete = $bdd->prepare($sql);
           $requete->execute(array(
            ":rid_album" => $rid_album
           ));
          
           while($donnees = $requete->fetch()) {
            
            $lieu_photo  = $donnees['lieu_photo'];
            $date_photo  = $donnees['date_photo'];
            $nom_photo  = $donnees['nom_photo'];
           ?>
           
           <div id="Nos_Photos">
            <img src="galerie_photo/<?php echo $nom_photo; ?>" />
            <br/>
            <b><?php echo $lieu_photo ?></b>
            <br/>
            <b><?php echo dateFR($date_photo) ?></b>
           </div>
          <?php
            }
          }
          ?>
          

          Merci encore de ton aide très précieuse
          0
          1. Contributeur
            Hum, étrange... La requête ne renverrait donc rien? À en juger par le nom des colonnes de ta table, il y a peut-être un mélange des noms de paramètres: j'ai nommé
            $rid_album
            le contenu de
            $_GET['id_photo']
            , en soi c'est sans incidence, mais soit on utilise la mauvaise variable GET, soit on filtre selon le mauvais champ de ta table.
            Après, comme je n'ai pas le fonctionnement du formulaire et ce que c'est censé faire, dur de trouver ce qui cloche...
            0
          2. Bonjour,

            Dans l'url tu fais passer l'id_photo 1
            index.php?body=nos_photos&type=public&id_photo=1

            Et si je regarde l'extrait de la table mysql que tu nous présentes, il n'y a pas d'id_photo = 1 mais un id_photo = 17. J'ai comme l'impression que tu mélanges dans ta tête la colonne id_photo avec celle de rid_album qui elle, comporte bien 1 mais dans la requête SQL tu fais la clause WHERE sur l'id_photo! Tu vois où je veux en venir...
            Cordialement.
            0
        2. Bonjour
          oui je vais regarder ça et je te redis
          Merci en attendant
          0
          1. Bonjour
            Veuillez m'excuser je suis toujours dans une impasse total, impossible de comprendre mon soucis.
            Pouvez-vous m'aider s'ils vous plait.
            Je vous remercie.
            Voici mes 2 tables tb_album et tb_photo et mon dossier de l'arborescence où il y a la photo





            fichier pour l'affichage des albums
            <div id="NosAlbums">
            <?php
             $sql = "SELECT id_album, annee_album
               FROM tb_album
               ORDER BY annee_album ASC";
             $requete = $bdd->prepare($sql);
             $requete->execute();
             
             while ($donnees = $requete->fetch()) {
              
              $rid_album   = $donnees['id_album'];
              $annee_album  = $donnees['annee_album'];
             
              $sql2 = "SELECT *
                FROM tb_photo
                WHERE id_photo = $rid_album";
              $requete2 = $bdd->prepare($sql2);
              $requete2->execute();
            ?>
             <a href="./index.php?body=nos_photos&type=public&id_album=<?php echo $rid_album; ?>">
             <div id="Nos_Albums">
              <img src="image/dossier.png" />
              <br/>
              <b><?php echo $annee_album ?></b>
             </div>
             </a>
            <?php
             }
            ?>
             <div class="clear"></div>
            </div>
            

            fichier pour l'affichage des photos lequel me génére une erreur
             <?php
            if (isset($_GET['id_photo'])) {
             $rid_album = $_GET['id_photo'];
            
             $sql = "SELECT id_photo, lieu_photo, date_photo, nom_photo
               FROM tb_photo
               WHERE id_photo = :rid_album";
             $requete = $bdd->prepare($sql);
             $requete->execute(array(
              ":rid_album" => $rid_album
             ));
            
             while($donnees = $requete->fetch()) {
              
              $lieu_photo  = $donnees['lieu_photo'];
              $date_photo  = $donnees['date_photo'];
              $nom_photo  = $donnees['nom_photo'];
             ?>
             
             <div id="Nos_Photos">
              <img src="galerie_photo/<?php echo $nom_photo; ?>" />
              <br/>
              <b><?php echo $lieu_photo ?></b>
              <br/>
              <b><?php echo dateFR($date_photo) ?></b>
             </div>
            <?php
              }
            }
            ?>
            
            

            l'erreur retournée
            Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
            

            par contre pour l'ajout des albums et l'ajout des photos tout marche bien
            0
            1. Modérateur
              Bonjour.

              As tu testé ta requête en direct dans ta BDD pour voir si elle fonctionne correctement ?
              c'est à dire.. en remplaçant la variable par un ID existant (le 17 par exemple)
              SELECT id_photo
                          , lieu_photo
                          , date_photo
                          , nom_photo
              FROM tb_photo
              WHERE id_photo = 17
              

              NB : J'ai bien dit en DIRECT DANS LA BDD (c'est à dire .. via phpmyadmin et non dans le code PHP ! )
              0
          2. Bonjour
            Je n'avais pas pensé à le faire, mais oui la requète me retourne bien le résultat.
            Merci pour de votre aide.

            0
            1. Bonjour
              Je vous envoie une requète qui devrais me retourner une photo, c'est également lié avec mes posts plus haut.
              Pourquoi à votre avis cela ne m'affiche rien.
              Merci
              Ci-dessous la requète.
              		$sql2 = "SELECT url
              				FROM tb_photo2";
              		$requete2 = $bdd->prepare($sql2);
              		$donnees2 = $requete2->execute();
              		
              		$resultat = $donnees2['url'];
              ?>
              	<div id="Nos_Albums">
              		<img src="galerie_photo/<?php echo $resultat; ?>" />
              		<br/>
              	</div>
              
              0
              1. Modérateur
                Il manque le FETCH
                ... et une boucle.
                0
            2. Bonjour
              Si je fait ça l'affichage c'est pareil aucune image n'est retournée
              Merci
              <div id="NosAlbums">
              <?php
              	$sql = "SELECT id, name
              			FROM tb_album2";
              	$requete = $bdd->prepare($sql);
              	$requete->execute();
              	
              	while ($donnees = $requete->fetch()) {
              		
              		$album_id 		= $donnees['id'];
              		$album_name 	= $donnees['name'];
              	
              		$sql2 = "SELECT url
              				FROM tb_photo2
              				WHERE album_id = $album_id";
              		$requete2 = $bdd->prepare($sql2);
              		$donnees2 = $requete2->execute();
              		
              		$resultat = $donnees2['url'];
              ?>
              	<a href="./index.php?body=nos_photos2&type=public&id=<?php echo $album_id; ?>">
              	<div id="Nos_Albums">
              		<img src="galerie_photo/<?php echo $resultat; ?>" />
              		<br/>
              		<b><?php echo $album_name ?></b>
              	</div>
              	</a>
              <?php
              	}
              ?>
              	<div class="clear"></div>
              </div>
              
              0
              1. Modérateur
                Pourquoi avoir ajouté ce SQL2 ???
                Tu dois juste boucler sur ta première requête c'est tout..
                0
            3. Modérateur
              Essayes donc ça :
              - Utilisation d'une jointure dans la requête (pour n'en faire qu'une)
              - Création des DIV / IMG .. dans un echo ..(pour éviter d'ouvrir fermer des balises PHP partout dans le code html...)
              - Mise en place d'un id unique pour les div créés dans la boucle (car l'intérêt d'un ID .. c'est d'être UNIQUE ! )

              <div id="NosAlbums">
              <?php
               $sql = "SELECT A.id
                              , A.name
                              , P.url
                        FROM tb_album2  A
                        LEFT JOIN tb_photo2 P ON P.album_id = A.id";
               $requete = $bdd->prepare($sql);
               $requete->execute();
               
               while ($donnees = $requete->fetch()) { 
                 $album_id   = $donnees['id'];
                 $album_name = $donnees['name'];
                 $img        = $donnees2['url'];
                  
                 echo "<a href='./index.php?body=nos_photos2&type=public&id=".$album_id."'>
                         <div id='Albums_".$album_id."'>
                          <img src='galerie_photo/".$img."' alt='".$img."'></img>
                          <br/>
                          <b>".$album_name."</b>
                        </div>
                       </a>";
              
                  }
              ?>
               <div class="clear"></div>
              </div>
              


              Cordialement,
              Jordane
              0
              1. Bonjour,
                J'ai essayé tel quel ta requète avec jointure, malheureusement la page est blanche aucun affichage.
                J'ai fait la try=>catch et rajouter le "WHERE id = $album_id";" l'erreur est la même
                Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6
                

                C'est tout de même incroyable, je ne sais plus quoi faire j'ai utilisé tout ce que je pouvais faire.
                les photos sont bien présentent dans le dossier "galerie_photo" à la racine du site.
                Si tu as encore un peu de temps pour m'aider.
                Je te remercie.
                0
                1. Bonjour
                  Ne tiens pas compte de mon précédent post, ça y est ta requète fonctionne l'image s'affiche bien.
                  Je te remercie nickel
                  Cordialement.
                  0
                  1. Modérateur
                    Par contre.. n'oublie pas ...
                    Si la question est résolue..
                    Merci de ne pas oublier de clôturer le sujet
                    (en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

                    Cordialement,
                    Jordane
                    0