Erreur dans formulaire

seb844501
Invité n'ayant pas de compte PHPfrance

14 janv. 2010, 01:12

Bonjour, tout marchais bien jusqu'à présent et d'un coup j'ai une erreur. Je m'explique, j'ai créé un genre de livre d'or pour la classe de neige d'une classe à l'aide de tuto du site.
Je l'ai modifié pour y insérer des images en les retaillant pour qu'elles soient insérer dans un dossier spécifique et que le chemin d'accés à cette image soit insérer dans la BDD. Tout tournait bien et ce soir en voulant tester avant le départ dans 2 jours, il me mets une erreur lorsque je veux insérer unenews sans mettre d'image.
Voilà l'erreur
<citation>Warning: Division by zero in /homez.109/tcsorgua/www/classedeneigequintine/admin/listenews.php on line 50

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /homez.109/tcsorgua/www/classedeneigequintine/admin/listenews.php on line 53
Erreur</citation>

Je laisse mon code ici:

J'ai noté l'emplacement de la ligne 50.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Liste des news</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
        h2, th, td
        {
            text-align:center;
        }
        table
        {
            border-collapse:collapse;
            border:2px solid black;
            margin:auto;
        }
        th, td
        {
            border:1px solid black;
        }
        .style1 {
			font-size: 20pt;
		}
        </style>
    </head>
    
    <body background="http://www.alpha-sierra.org/aramis/images/stories/galeries_photos/stSorlin/chalets-arvan-i-01.jpg" background-attachment: "fixed" link="white" vlink="white" alink="white">
<div align="left"><a href="http://neigequintine2010.c.la" target="_blank">Retour à l'accueil</a></div> 
<h2><a href="redigernews.php">Ajouter une news</a></h2>
<?php
mysql_connect("", "", "");
mysql_select_db("");
//-----------------------------------------------------
// Vérification 1 : est-ce qu'on veut poster une news ?
//-----------------------------------------------------
if (isset($_POST['titre']) AND isset($_POST['contenu']) AND isset($_POST['prenom']))

	{if (isset($_FILES['image']) AND $_FILES['image']['error'] == 0); //Vérification que l'image existe et a été upload
//S'il y a une image alors on vérifie la taille de l'image
		{ if ($_FILES['image']['size'] <= 5000000)
		{
                              $ImageNews = getimagesize($_FILES['image']['tmp_name']);
                               $ExtensionPresumee = strrchr('.', $ImageNews);
                            $ExtensionPresumee = 'jpg';
              
                                              $ImageChoisie = imagecreatefromjpeg($_FILES['image']['tmp_name']);
                                              $TailleImageChoisie = getimagesize($_FILES['image']['tmp_name']);
                                              $NouvelleLargeur = 700; //Largeur choisie à 350px mais modifiable
 
                                              $Reduction = ( ($NouvelleLargeur * 100)/$TailleImageChoisie[0] );  ///ligne 50 ici
                                              $NouvelleHauteur = ( ($TailleImageChoisie[1] * $Reduction)/100 );
 
                                              $NouvelleImage = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");
 
                                              imagecopyresampled($NouvelleImage , $ImageChoisie  , 0,0, 0,0, $NouvelleLargeur, $NouvelleHauteur, $TailleImageChoisie[0],$TailleImageChoisie[1]);
                                              imagedestroy($ImageChoisie);
                                              $NomImageExploitable = time();
                                              
                                              imagejpeg($NouvelleImage , 'images/'.$NomImageExploitable.'.'.$ExtensionPresumee, 100);
                                              $link_img = $NomImageExploitable.'.'.$ExtensionPresumee;}}

	$prenom = addslashes ($_POST['prenom']); //recuperation du prenom
	$titre = addslashes($_POST['titre']); // on récupère le titre dans une variable simple
    $contenu = addslashes($_POST['contenu']); // On récupère le contenu dans une variable simple
	
	 // On vérifie si c'est une modification de news ou pas
    if ($_POST['id_news'] == 0)
    {
        // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
        mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "', '". $link_img . "', '" . $prenom . "')");
    }
    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
        mysql_query("UPDATE news SET titre='" . $titre . "', contenu='" . $contenu . "', link_img='" . $link_img . "', prenom='" . $prenom ."' WHERE id='" . $_POST['id_news'] . "'");
    }
}

	
	
 
//--------------------------------------------------------
// Vérification 2 : est-ce qu'on veut supprimer une 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']);
    mysql_query('DELETE FROM news WHERE id=\'' . $_GET['supprimer_news'] . '\'');
}
?>
<table cellpadding="5" border="3"><tr>
<th><font size="6">Modifier</font></th>
<th><font size="6">Supprimer</font></th>
<th><font size="6">Qui a posté?</font></th>
<th><font size="6">Titre</font></th>
<th><font size="6">Date</font></th>
<th><font size="6">Image</font></th>
</tr>
<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id ASC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr><font size="5"></font>
<td><?php echo '<a href="redigernews.php?modifier_news=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="listenews.php?supprimer_news=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><b><?php echo stripslashes($donnees['prenom']); ?></b></td>
<td><?php echo stripslashes($donnees['titre']); ?></td>
<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
<td><?php if ($donnees['link_img'] == '') echo "Non";
		else echo "Oui" ;?></td>
</font></tr>
<?php
} // Fin de la boucle qui liste les news
?>
</table>
</body>

En fait je pense que l'erreur se fait au moment de vérifier si on a insérer une image. Quoiqu'il arrive, il considère qu'il y a une image et comme elle n'existe pas, la variable $TailleImageChoisie n'existe pas et on aboutie à une erreur.
Ce que je voudrais c'est qu'il vérifie si une image a été insérer et si ce n'est pas le cas, passer la partie du code correspondant au redimensionnement de l'image pour n'insérer que le nom, le titre et la news dans la BDD.

J'espère avoir été clair.

Merci

Mammouth du PHP | 672 Messages

14 janv. 2010, 10:42

Bonjour, tout marchais bien jusqu'à présent et d'un coup j'ai une erreur. Je m'explique, j'ai créé un genre de livre d'or pour la classe de neige d'une classe à l'aide de tuto du site.
(...)
En fait je pense que l'erreur se fait au moment de vérifier si on a insérer une image. Quoiqu'il arrive, il considère qu'il y a une image et comme elle n'existe pas, la variable $TailleImageChoisie n'existe pas et on aboutie à une erreur.
Ce que je voudrais c'est qu'il vérifie si une image a été insérer et si ce n'est pas le cas, passer la partie du code correspondant au redimensionnement de l'image pour n'insérer que le nom, le titre et la news dans la BDD.

J'espère avoir été clair.

Merci
Bonjour.

On vérifie bien l'existence d'une image. Mais c'est à la ligne 38. Et comme il y a un ";" à la fin de la ligne elle est interprétée comme :
SI on a uploadé une image ALORS on ne fait rien;
Ce qu'il faudrait c'est :
SI on a uploadé une image ALORS { on exécute le bloc qui gère les images }

seb844501
Invité n'ayant pas de compte PHPfrance

14 janv. 2010, 11:44

Bonjour, je ne vois pas de quelle ligne tu parles.
La ligne 38 est la suivante:
border:1px solid black;

}
Je ne vois pas le rapport avec l'image.

Et puis quand il y a une image, cela fonctionne trés bien. C'est quand on insère pas d'image que cela bugue puisque le script continue comme si il y en avait une et renvoie une erreur?

Merci

seb844501
Invité n'ayant pas de compte PHPfrance

14 janv. 2010, 12:10

J'ai enlevé le ; à la ligne 75:
	{if (isset($_FILES['image']) AND $_FILES['image']['error'] == 0); //Vérification que l'image existe et a été upload
devenu ça:
	{if (isset($_FILES['image']) AND $_FILES['image']['error'] == 0) //Vérification que l'image existe et a été upload
Mais maintenant j'ai cette erreur:
Notice: Undefined variable: link_img in C:\wamp\www\admin\listenews.php on line 139
la ligne 139 est la suivante:
        mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "', '". $link_img . "', '" . $prenom . "')");
donc apparemment quand il n'y a pas d'image, la vérification première se fait bien mais du coup $link_img n'existe pas et il ne sait pas quoi mettre dans la case.

Je pense qu'une vérification de l'existence de la variable $link_img et faisable mais je ne vois pas comment faire ni où le mettre.

Merci pour votre aide.

Mammouth du PHP | 672 Messages

14 janv. 2010, 12:52

J'ai enlevé le ; à la ligne 75:
	{if (isset($_FILES['image']) AND $_FILES['image']['error'] == 0); //Vérification que l'image existe et a été upload
Tu as modifié ton script, depuis ton premier message ?
Parce que la ligne 50 est après la ligne 75 :shock:
Mais c'est bien à cette ligne qu'il y avait un problème...
Je pense qu'une vérification de l'existence de la variable $link_img et faisable mais je ne vois pas comment faire ni où le mettre.
Il faut TOUJOURS initialiser ses variables, ça évite pas mal de problèmes...

Ici, en début de script tu peux définir la valeur par défaut de $link_img.
$link_img = "NULL";