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...';
}
?>
gaerebut
Messages postés1017Date d'inscriptionmardi 30 octobre 2007StatutMembreDernière intervention22 novembre 2013171 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.