8722 sujets

Développement web côté serveur, CMS

Hello les génies

j aurai besoin d un petit coup de pouce j ai une fonction qui me sert a afficher les albums mais ca beugue j ai cette erreur
Undefined offset: 29 in C:\wamp\www\Visio-coquin\outils\affichages.php one line 163
la fonction :
function afficher_albums($requete, $connexion, $id_album)
{
$resultat=mysqli_query($connexion, $requete);
$liste_albums="<div id=\"albums\">";
$i=0;
while($ligne=mysqli_fetch_object($resultat))
     {
     $tab_album[$i]=$ligne->id_album;
     if(isset($_SESSION['id_album']) AND $ligne->id_album==$_SESSION['id_album'])
       {
       $style=" id=\"album_colore\""; 
       }
     else
       {
       $style="";
       }
		 if($i==0)
		   {
			 $liste_albums.="<div" . $style . ">\n";
			 $liste_albums.="<h3><a href=\"admin.php?action=albums&id_album=" . $ligne->id_album . "\">" . stripslashes($ligne->titre_album) . " (" . $ligne->langue . ")</a>";  
			 $liste_albums.="<span class=\"nav_album\">\n<a href=\"admin.php?action=modifier_albums&amp;id_langue=" . $ligne->id_langue . "&amp;id_album=" . $ligne->id_album . "\"><img src=\"../icones/modifier.png\" title=\"modifier\" alt=\"\" /></a>\n";
			 $liste_albums.="<a href=\"admin.php?action=supprimer_albums&amp;id_langue=" . $ligne->id_langue . "&amp;id_album=" . $ligne->id_album . "\"><img src=\"../icones/supprimer.png\" title=\"supprimer\" alt=\"\" /></a>\n</span>\n</h3>\n";                   
			 $liste_albums.="</div>\n";	
       $liste_albums.="<fieldset " . $_SESSION[$ligne->id_album] . " class=\"affiche_album\">\n";
		   }
		 if($i!=0 && ($tab_album[$i]!=$tab_album[$i-1]))//à chaque changement d'album
		   {
			 $liste_albums.="</fieldset>\n";
			 $liste_albums.="<div" . $style . ">\n";
			 $liste_albums.="<h3><a href=\"admin.php?action=albums&id_album=" . $ligne->id_album . "\">" . stripslashes($ligne->titre_album) . " (" . $ligne->langue . ")</a>";
			 $liste_albums.="<span class=\"nav_album\">\n<a href=\"admin.php?action=modifier_albums&amp;id_langue=" . $ligne->id_langue . "&amp;id_album=" . $ligne->id_album . "\"><img src=\"../icones/modifier.png\" title=\"modifier\" alt=\"\" /></a>\n";
			 $liste_albums.="<a href=\"admin.php?action=supprimer_albums&amp;id_langue=" . $ligne->id_langue . "&amp;id_album=" . $ligne->id_album . "\"><img src=\"../icones/supprimer.png\" title=\"supprimer\" alt=\"\" /></a>\n</span>\n</h3>\n";       
			 $liste_albums.="</div>\n";			 
       $liste_albums.="<fieldset " . $_SESSION[$ligne->id_album] . " class=\"affiche_album\">\n";
		   }                                 
     $liste_albums.="<form href=\"admin.php?action=albums&id_album=" . $ligne->id_album . "\" method=\"POST\" id=\"form_album\">\n"; 
     if($tab_album[$i]==$id_album)
       {
       $requete2="SELECT r.*, m.* FROM ranger_medias r, medias m WHERE m.id_media=r.id_media AND r.id_album='" . $tab_album[$i] . "' ORDER BY r.id_ranger_media";
       $resultat2=mysqli_query($connexion, $requete2);
       $liste_photos="";
       while($ligne2=mysqli_fetch_object($resultat2))
            {
            $liste_photos.="<img class=\"img_album [" . $ligne2->id_media . "]\" style=\"width:50px;height:50px;margin:1px\" src=\"../medias/media" . $ligne2->id_media . "_p." . $ligne2->fichier_media . "\" alt=\"\" />";
            }
       } 
     $liste_albums.="<hr />\n<textarea style=\"height:260px\" name=\"album" . $ligne->id_album . "\" placeholder=\"Glisser les photos ici...\">" . $liste_photos . "</textarea>\n<hr />\n";
     $liste_albums.="<input type=\"submit\" name=\"submit2\" value=\"ENREGISTRER\" />\n";   
     $liste_albums.="<hr /></form>\n"; 
     $liste_albums.="<script type=\"text/javascript\">  
                    document.form_album.album" . $ligne->id_album . ".focus();
                    </script>\n";                            
     $i++;
     }
 
$liste_albums.="</div>\n";    
 return $liste_albums;   
}


cette ligne qui pose soucis est celle ci
  $liste_albums.="<fieldset " . $_SESSION[$ligne->id_album] . " class=\"affiche_album\">\n";


je code qui utilise la fonction me met un undefined index id_album a la ligne 1820 qui est l appel a la fonction les 2 chose sont peut etre lié je doi dire que je suis total perdu
le developement qui appel la fonction
 //================== Albums =====================================
      case "albums":
      $contenu="form_albums.php";
      $titre="Gestion des albums";
      $confirm_suppression="vide.php";
      $action_form="albums";
      $bouton_form="CREER UN ALBUM";
      $script="<script type=\"text/javascript\" src=\"../editeur/album.js\"></script>\n";
      $css="<link href=\"../editeur/editeur.css\" rel=\"stylesheet\" type=\"text/css\" />\n";
      $css.="<link href=\"../editeur/editeur_no_toolbar.css\" rel=\"stylesheet\" type=\"text/css\" />\n";       
      
      //on construit la liste déroulante des langues
      $requete="SELECT * FROM langues ORDER BY symbole";
      $resultat=mysqli_query($connexion, $requete);
      $ld_langues="<option value=\"\">Sélectionner la langue</option>\n"; 
      while($ligne=mysqli_fetch_object($resultat))
           {
           if(isset($_POST['id_langue']) && $ligne->id_langue == $_POST['id_langue'])
             {
             $selected[$_POST['id_langue']]=" selected=\"selected\"";
             $selection=$selected[$ligne->id_langue];    
             }                  
           else
             {
             $selection="";
             }                     
          $ld_langues.="<option value=\"" . $ligne->id_langue . "\"" . $selection . ">" . $ligne->symbole . " - " . $ligne->pays . "</option>\n";          
          } 
            
      if(isset($_SESSION['id_album']))
        { 
        unset($_SESSION['id_album']); 
        }                 
      if(isset($_POST['submit']))
        {
        $tab_champ=array("id_langue"=>"Langue", "titre_album"=>"Titre album");
        $tab_vide=array();  
        
        while(list($key, $value) = each($tab_champ)) 
             {            
             if(empty($_POST[$key]))
               {
               $color_champ[$key]=" class=\"color_champ\"";
               array_push($tab_vide, $value);
               }
             }        
        
        if(!empty($tab_vide))
          {
          $avertissement="<label id=\"avertissement\">" . champs(count($tab_vide), "debut") . implode(", ", $tab_vide) . champs(count($tab_vide), "fin") ."</label>\n";              
          }         
        else
          {
          //on teste si l'album existe deja dans cette langue
          $requete1="SELECT titre_album FROM albums WHERE titre_album='" . $_POST['titre_album'] . "' AND id_langue='" . $_POST['id_langue'] . "'";
          $resultat1=mysqli_query($connexion, $requete1);
          $nb_lignes=mysqli_num_rows($resultat1);
          if($nb_lignes!=0)
            {
            $avertissement="<label id=\"avertissement\">L'album <strong>'" . $_POST['titre_album'] . "'</strong> existe déjà dans cette langue</label>\n";                      
            }
          else
            {
            $requete2="INSERT INTO albums SET id_langue='" . $_POST['id_langue'] . "',
                                              titre_album='" . addslashes($_POST['titre_album']) . "',
                                              date_album='" . date("Y-m-d") . "'";
            $resultat2=mysqli_query($connexion, $requete2);            
            }
          }
        }           
      if(isset($_GET['id_album']))
        {
        $_SESSION[$_GET['id_album']]=" id=\"affiche_fieldset\"";
        } 
      if(isset($_POST['submit2']))
        {
        //détection des medias insérés
        $re= '/\[([^\]]*)\]/';// expression régulière permettant de récupérer tout ce qui se trouve entre les crochets
         
        // on met à jour la liste des photos de l'album en supprimant d'abord toutes les photos rangées
        $requete3="DELETE FROM ranger_medias WHERE id_album='" . $_GET['id_album'] . "'";
        $resultat3=mysqli_query($connexion, $requete3);
       
        preg_match_all($re, $_POST['album' . $_GET['id_album']], $tab_medias);// on recherche toutes les expressions entre crochets
        if(sizeof($tab_medias[1])>0)// si il y a des médias présents dans la zone
          {
          for($j=0;$j<sizeof($tab_medias[1]);$j++) //[1] pour le résultat sans le séparateur [] et [0] avec séparateur
             {
             // on met à jour la liste des photos de l'album en insérant la nouvelle liste de photos                          
             $requete4="INSERT INTO ranger_medias SET id_album='" . $_GET['id_album'] . "', id_media='" . $tab_medias[1][$j] . "'";
             $resultat4=mysqli_query($connexion, $requete4);
             }                         
          }          
        }  
         
      // affichage des albums présents dans la table avec leurs médias
      $requete5="SELECT a.*, l.* FROM albums a, langues l 
                WHERE a.id_langue=l.id_langue ORDER BY l.langue, a.titre_album ASC";                            
      $affichage=afficher_albums($requete5, $connexion, $_GET['id_album']);
        
      // toujours affichage des médias présentes dans la table
      $requete6="SELECT * FROM medias WHERE press_book='oui' ORDER BY fichier_media, titre_media";
      $affichage_centre=afficher_medias($requete6, "album", $connexion);                      
      break; 


et cette fameuse ligne 1820
 $affichage=afficher_albums($requete5, $connexion, $_GET['id_album']);


bon ca fait beraucoup de choses mais c est pour être le plus cler possible ca fait des semaine que sa me rend dingues
merci a vous
Bonsoir,

J'ai fait qu'en diagonale, c'est trop dur de te lire.

Pour "débeuhguer" je te conseille d'utiliser var_dump sur tes variables notamment sur $ligne ; çà te dira si tu es bien en objet où en array et si cet index existe vraiment ou pas.

Bon courage.
hello merci pour t'as réponse et oui effectivement le cas est complexe :s
j ai fait le var dump qui me retourne ceci

<pre class='xdebug-var-dump' dir='ltr'>
<b>object</b>(<i>stdClass</i>)[<i>4</i>]
  <i>public</i> 'id_album' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'29'</font> <i>(length=2)</i>
  <i>public</i> 'id_langue' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'1'</font> <i>(length=1)</i>
  <i>public</i> 'titre_album' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'test'</font> <i>(length=4)</i>
  <i>public</i> 'date_album' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'2014-07-15'</font> <i>(length=10)</i>
  <i>public</i> 'pays' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'France'</font> <i>(length=6)</i>
  <i>public</i> 'langue' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'français'</font> <i>(length=9)</i>
  <i>public</i> 'symbole' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'FR'</font> <i>(length=2)</i>
</pre><br />


j ai un peu du mal la :s