Erreur php : "Notice: Undefined index: "

Fermé
dqni - Modifié par dqni le 3/05/2011 à 14:45
 dqni - 3 mai 2011 à 16:06
Bonjour,
Je planche sur une partie admin en php, où l'on crée un article, ça se passe bien, mais maintenant, je voudrais également ajouter une image qui sera liée a cet article, je fais mon code php, je définis les variables nécessaires et fait les requêtes nécessaires aussi, mais quelque chose a du m'échapper puisque lors de l'ajout de ma variable de l'id de l'image sans la ma requête sql, j'obtiens une erreur d'index non définis...
J'ai une page de création de la news et ensuite une autre page qui récupéré et liste les infos et fait l'ajout, pouvez vous m'aider a trouver les ou l'erreur?


Voici ma bdd:

-- Structure de la table 'image' 
-- 

CREATE TABLE IF NOT EXISTS 'image' ( 
  'id_img' int(10) unsigned NOT NULL AUTO_INCREMENT, 
  'nom' varchar(100) NOT NULL, 
  'lienimage' varchar(100) NOT NULL, 
  'id_news' int(11) NOT NULL, 
  PRIMARY KEY ('id_img') 
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=68 ; 

-- Structure de la table 'description' 
-- 

CREATE TABLE IF NOT EXISTS 'description' ( 
  'id_description' int(11) NOT NULL AUTO_INCREMENT, 
  'titre' varchar(500) NOT NULL, 
  'contenu' text NOT NULL, 
  'date' bigint(20) NOT NULL, 
  'id_image' int(11) NOT NULL, 
  PRIMARY KEY ('id_description') 
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; 


Voici ma page ajout_annonce:

<!DOCTYPE HTML> 
   <head> 
       <title>Rédiger une annonce</title> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
 <link rel="stylesheet" href="css/admin.css" type="text/css" media="screen, projection" /> 
 <script type="text/javascript" src="ckeditor/ckeditor.js"></script> 

    </head> 
     
    <body> 
<h3>Ajout d'une annonce</h3> 
<?php 

include('params.inc.php'); 
$moi = $_SERVER["PHP_SELF"]; 
session_start(); 
header('Content-type: text/html; charset=UTF-8'); 
$log=$_SESSION["login"]; 
if (isset($_SESSION["login"])) // présence d'une session déjà active 
 { 
  echo 'Bonjour  '.$log.'<br/>'; 
  echo '<div id="menu">'; 
  echo '<ul>'; 
  echo '<li><A href="admin.php">Acceuil</A></li>'; 
  echo '<li><A href="liste_image.php">Liste des images</A></li>'; 
  echo '<li><A href="liste_news.php">Liste des annonces</A></li>'; 
  echo '<li><A href="ajout_news.php">Ajouter une annonce</A></li>'; 
  echo '<li><A href="deco_admin.php">Se déconnecter</A></li>'; 
  echo '</ul>';   
  echo '</div>';;  

if (isset($_GET['modifier_news'])) // Si on demande de modifier une news 
{ 

    // On récupère les infos de la news correspondante 
 $connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');  
 mysql_select_db(MYDB) or die ('erreur de connexion à la base');  
    $retour = ('SELECT * FROM description WHERE id_description=\'' . $_GET['modifier_news'] . '\''); 
 $retour2 = ('SELECT * FROM image WHERE id_news=\'' . $_GET['modifier_news'] . '\''); 
 mysql_query($retour,$retour2)  or die ('impossible d effectuer la selection de l ID pour la modification') ; 
   $donnees = mysql_fetch_array($retour,$retour2); 
     
    // On place les données dans des variables  
    $titre = stripslashes($donnees['titre']); 
    $contenu = stripslashes($donnees['contenu']); 
    $id_news = $donnees['id_description']; // Cette variable va servir pour se souvenir que c'est une modification 
 $id_image= $donnees['id_img']; 
} 
else // C'est qu'on rédige une nouvelle news 
{ 
    // Les variables $titre, $nom et $contenu sont vides, puisque c'est une nouvelle news 
    $titre = ''; 
    $contenu = ''; 
 $nom=''; 
    $id_news = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification 
  
 /*   $req_id_img= "SELECT * FROM image WHERE id_news='".$id_news."'"; 
 mysql_query($req_id_img)  or die ('impossible d effectuer la selection de l ID img') ; 
 $result = mysql_fetch_array($req_id_img); 
 $id_image= $result['id_img'];  */ 
  
 $id_image= 0; 
} 
?> 
<br/> 
<br/> 
<br/> 

<br/> 
<form action="liste_news.php" method="post" enctype="multipart/form-data"> 

<p>Titre :<br/> 
 <input type="text" size="30" name="titre" value="<?php echo $titre; ?>" /></p> 
<fieldset> 
       <legend>Ajout d'une image</legend> 
       <label for="nom">Nom</label> 
       <input type="text" id="nom" name="nom"/> 
       <label for="image1">Image</label> 
       <input type="file" id="image1" name="image1"/> 
       <label for="image2">Miniature</label> 
       <input type="file" id="image2" name="image2"/> 
       <input type="hidden" id="id_image" value="<?php echo $id_image; ?>" /> 
        
</fieldset> 
    Contenu :<br /> 
    <textarea cols="80" name="contenu" rows="10"><?php echo $contenu; ?></textarea> 
   <script type="text/javascript"> 
   //<![CDATA[ 

    CKEDITOR.replace( 'contenu',{ 
     filebrowserBrowseUrl : 'ckfinder/ckfinder.html', 
     filebrowserImageBrowseUrl : 'ckfinder/ckfinder.html?type=Images', 
     filebrowserFlashBrowseUrl : 'ckfinder/ckfinder.html?type=Flash', 
     filebrowserUploadUrl : 'ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files', 
     filebrowserImageUploadUrl : 'ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images', 
     filebrowserFlashUploadUrl : 'ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash' 

     
          } 
    ); 

   //]]> 
   </script> 
<br /> 
     
    <input type="hidden" name="id_news" value="<?php echo $id_news; ?>" /> 
    <input type="submit" value="Envoyer" /> 

</form> 
</body> 
</html> 
<?php 
 } 
 else //Pas de session on propose de se logguer            
 { 
  echo 'Veuillez vous connecter par la page <a href="admin.php">admin</a> pour atteindre ce service...'; 
 }  

?> 


Voici la page cible, qui realise le listage et l'ajout des news:

  
<!DOCTYPE HTML> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > 
   <head> 
       <title>Liste des annonces</title> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<link rel="stylesheet" href="css/admin.css" type="text/css" media="screen, projection" /> 
    </head> 
     
    <body> 

<h2>Liste des annonces</h2> 
<?php 
include('params.inc.php'); 
$moi = $_SERVER["PHP_SELF"]; 
session_start(); 
header('Content-type: text/html; charset=UTF-8'); 
$log=$_SESSION["login"]; 
if (isset($_SESSION["login"])) // présence d'une session déjà active 
 { 
  echo 'Bonjour  '.$log.'<br/>'; 
  echo '<div id="menu">'; 
  echo '<ul>'; 
  echo '<li><A href="admin.php">Acceuil</A></li>'; 
  echo '<li><A href="liste_image.php">Liste des images</A></li>'; 
  echo '<li><A href="liste_news.php">Liste des annonces</A></li>'; 
  echo '<li><A href="ajout_news.php">Ajouter une annonce</A></li>'; 
  echo '<li><A href="deco_admin.php">Se déconnecter</A></li>'; 
  echo '</ul>';   
  echo '</div>';  

    //si on veut poster une news.. 

    if (isset($_POST['titre']) AND isset($_POST['contenu']) AND isset($_POST['nom'])) 
    { 
     $titre = addslashes($_POST['titre']);//rajoute des \, ce qui épargnera d'avoir des "bugs" (MySQL n'aime pas trop les apostrophes en particulier). 
     $contenu = addslashes($_POST['contenu']); 
     $erreurs = array(); //initialise un tableau d'erreurs  
     $nom = mysql_escape_string(trim($_POST['nom'])); //enleve les espaces de chaque coté de la variable 
     $lienimage = ''; 
     $typesacceptes = array('image/jpeg','image/jpg','image/png','image/gif'); 
     //vérifie si les images existent et qu'elles sont au bon format 
     if(!empty($_FILES['image1']['name']) && //pour récupérer un fichier d'un formulaire la variable $_FILES  est indispensable. Celle ci est en fait comme $_POST, un tableau associatif avec comme clé la valeur de l'attribut "name" de notre formulaire (ici "image1" par exemple). Cette variable est assez intéressante car elle nous propose aussi plusieurs propriétés de l'élément uploadé disponible  
     !empty($_FILES['image2']['name']) &&  
     in_array($_FILES['image1']['type'],$typesacceptes) &&  
     in_array($_FILES['image2']['type'],$typesacceptes)){ 
     $lienimage = mysql_escape_string($_FILES['image1']['name']); 
     copy($_FILES['image1']['tmp_name'],'images/'.$lienimage); 
     copy($_FILES['image2']['tmp_name'],'images/miniatures/'.$lienimage); 
     // On vérifie si c'est une modification de news ou pas 
     if ($_POST['id_news'] == 0 AND $_POST['id_image'] == 0) 
     { 
      // Ce n'est pas une modification, on crée une nouvelle entrée dans la table 
      //connexion à la BDD 
      $connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');  
      mysql_select_db(MYDB) or die ('erreur de connexion à la base'); 
      $requeteinsert = 'INSERT INTO image VALUES(\''.$nom.'\',\''.$lienimage.'\',\''. $_POST['id_news'].'\')';       
      $requeteinsert2 ='INSERT INTO description VALUES(\''.$titre.'\',\''.$contenu.'\',\''.time().'\',\''.$_POST['id_image'].'\')'; 
      mysql_query($requeteinsert)  or die ('impossible d effectuer l ajout image') ; 
      mysql_query($requeteinsert2)  or die ('impossible d effectuer l ajout de l annonce') ; 
      echo '<p class="success">Votre article a bien été enregistrée!</p>'; 
      } 
     } 
     else 
     { 
      // On protège la variable "id_news" pour éviter une faille SQL 
      $_POST['id_news'] = addslashes($_POST['id_news']); 
      // C'est une modification, on met juste à jour le titre et le contenu 
      $connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');  
      mysql_select_db(MYDB) or die ('erreur de connexion à la base');  
      mysql_query("UPDATE description SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id_description='" . $_POST['id_news'] . "'"); 
     } 
    } 

    if (isset($_GET['supprimer_news'])) // Si on demande de supprimer une news 
    { 
     // Alors on supprime la news correspondante 
     // On protège la variable "id_news" pour éviter une faille SQL 
     $_GET['supprimer_news'] = addslashes($_GET['supprimer_news']); 
     $connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');  
     mysql_select_db(MYDB) or die ('erreur de connexion à la base');  
     mysql_query('DELETE FROM description WHERE id_description=\'' . $_GET['supprimer_news'] . '\''); 
    } 
?> 
    </br> 
    </br> 
     
    <table><tr> 

    <th>Id_news</th> 
    <th>Titre</th> 
    <th>Id_image</th> 
    <th>Nom_image</th> 
    <th>Date</th> 
    <th>Modifier</th> 
    <th>Supprimer</th> 
     
    </tr> 
    <?php 
     
     $connect=mysql_connect(MYHOST,MYUSER,MYPASS) or die ('erreur de connexion');  
     mysql_select_db(MYDB) or die ('erreur de connexion à la base');  
     $retour = mysql_query('SELECT * FROM description ORDER BY id_description DESC'); 
      
     while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news 
     { 
      
     $req_image= mysql_query("SELECT nom FROM image WHERE id_img='".$donnees['id_image']."'"); 
     while ($Nom_image = mysql_fetch_array($req_image)) 
     {  
    ?> 
    <tr> 

    <td><?php echo ($donnees['id_description']); ?></td> 
    <td><?php echo stripslashes($donnees['titre']); ?></td> 
    <td><?php echo ($donnees['id_image']); ?></td> 
    <td><?php echo $Nom_image['nom']; ?></td> 
    <td><?php echo date('d/m/Y', $donnees['date']); ?></td>     
    <td><?php echo '<a href="ajout_news.php?modifier_news=' . $donnees['id_description'] . '">'; ?>Modifier</a></td> 
    <td><?php echo '<a href="liste_news.php?supprimer_news=' . $donnees['id_description'] . '">'; ?>Supprimer</a></td> 
     
    </tr> 
    <?php 
   } } // Fin de la boucle qui liste les news 
    ?> 
</table> 
</body> 
</html> 
<?php 
 } 
 else //Pas de session on propose de se logguer            
 { 
  echo 'Veuillez vous connecter par la page <a href="admin.php">admin</a> pour atteindre ce service...'; 
 } 

?> 


Merci d'avance pour votre aide


A voir également:

2 réponses

gaerebut Messages postés 1017 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 22 novembre 2013 171
3 mai 2011 à 15:37
Bonjour,

il serait plus judicieux de mettre l'erreur plutôt que le code !
En effet, dans l'erreur tu pourra voir quelle variable n'est pas définie (causant l'erreur) et sur quelle page.

A+
Gaerebut
0
L'erreur arrive lorsque on ajoute un article, sur la page cible j'ai ceci :

Notice: Undefined index: id_image in liste_news.php on line 50

et
Notice: Undefined index: id_image in liste_news.php on line 57


Donc j'ai mal definit ma variable $id_image dans mon formulaire, et du coup dans ma page cible l'ajout ne se fait pas du a l'erreur index.
0