Besoin d'aide pour un UPDATE ... SET

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Besoin d'aide pour un UPDATE ... SET

Re: Besoin d'aide pour un UPDATE ... SET

par Ryle » 24 avr. 2011, 00:39

Alors à vu de nez, si ton chemin est bon et que tu n'as pas de message d'erreur, si le fichier n'est pas présent, c'est que php ne rentre pas dans la portion de code qui contient le move_upload_file... vérifies que les conditions qui permettent d'arriver jusque là sont bien toutes remplies (affiche tes variables au besoin pour en vérifier les valeurs le temps de débuger :))

Re: Besoin d'aide pour un UPDATE ... SET

par Romuald632 » 23 avr. 2011, 20:48

Merci pour ta réponse :
- NON je n'ai pas de message d'erreur
- NON l'image n'est pas copiée dans le répertoire de destination
- OUI le chemin est bon
- En revanche j'ai remplacé $content_dir . $banniere par $content_dir / $banniere mais ça ne change pas

Re: Besoin d'aide pour un UPDATE ... SET

par Ryle » 23 avr. 2011, 11:49

En fait c'est une question d'algorithme... actuellement tu fais ceci :

Code : Tout sélectionner

SI l'utilisateur envoi le formulaire SI aucun fichier n'a été uploadé renvoi un message d'erreur FIN SI SI l'extension du fichier n'est pas reconnue renvoi un message d'erreur FIN SI SI la copie du fichier sur le serveur ne fonctionne pas renvoi un message d'erreur FIN SI FIN SI met à jour la bannière dans la base de donnée affiche le message de confirmation
La logique (du moins, ma logique ;)) voudrait que la mise à jour en base et le message de confirmation soient également dans le tout premier SI (puisque si le formulaire n'a pas été envoyé, il ne devrait pas y avoir de mise à jour en base ou de confirmation ?)

Code : Tout sélectionner

SI l'utilisateur envoi le formulaire ... SI la copie du fichier sur le serveur ne fonctionne pas renvoi un message d'erreur FIN SI met à jour la bannière dans la base de donnée affiche le message de confirmation FIN SI
Bon, mais ceci étant, ça va pas forcément résoudre ton problème d'upload pour autant.. donc déjà première question au moment de l'upload as-tu des messages d'erreur ? Si ce n'est pas le cas, il faut débugger :
- au niveau de ton formulaire il te faut un enctype multipart (à priori ça c'est bon).
- d'après ton code, le formulaire doit être envoyé avec un methode POST, contenir un input dont le nom est "upload", et un input de type file dont le nom est "banniere"
- il faut faire attention également à la taille du fichier, par défaut je crois que php bloque l'upload de fichiers dont la taille est supérieure 2Mo (modifiable dans le php.ini)
- le fichier uploadé est-il copié dans le répertoire de destination ? si ce n'est pas le cas, est-ce que le chemin vers le répertoire est correct ? (à priori, quand tu fais $content_dir . $banniere, il semble manquer un "/" entre les deux, il y a donc de grande chance que tes fichiers soient copiés dans le répertoire du script et pas dans le dossier bannière)
- ...

Re: Besoin d'aide pour un UPDATE ... SET

par Romuald632 » 23 avr. 2011, 10:43

Salut,
Excuse pour mon manque d'explication, mais j'ai beau essayé dans tous les sens, rien ne fonctionne, c'est à dire que mon image ne s'enregistre pas pans mon fichier 'banniere' et que mon image ne s'enregistre pas dans ma BDD.

Par contre je comprends pas quand tu dis que ma requête devrait être dans if( isset($_POST['upload']) )

Merci de ton aide

Re: Besoin d'aide pour un UPDATE ... SET

par Ryle » 22 avr. 2011, 12:24

En fait, je pense que ton soucis venait du fait que la mise à jour en bdd ne devait se faire que lors de l'envoi du formulaire. Ton update et l'exécution de la requête devrait donc se trouver dans ton if( isset($_POST['upload']) ) et non après celui-ci..

Par contre quand tu dis que plus rien ne fonctionne dans le formulaire de destination, faudrait donner un peu plus de précision si tu veux que l'on parvienne à t'aider :)

Re: Besoin d'aide pour un UPDATE ... SET

par Romuald632 » 22 avr. 2011, 10:02

Rebonjour,

Je viens de m'apercevoir que dans mon formulaire de départ j'ai oublié de mettre <enctype="multipart/form-data">

Mais depuis que j'ai mis ça c'est à nouveau la panique, plus rien ne marche dans le formulaire de destination...

Re: Besoin d'aide pour un UPDATE ... SET

par Romuald632 » 22 avr. 2011, 09:25

Petite modification :
$banniere = $_POST['banniere'];
if( isset($_POST['upload']) )
{
    $content_dir = 'banniere';
Le nom du fichier apparait dans ma BDD, mais pas dans mon fichier de destination...

Re: Besoin d'aide pour un UPDATE ... SET

par Romuald632 » 22 avr. 2011, 09:14

Salut,
J'ai donc modifié le code comme tu me l'a ecris.
Je n'ai plus de message d'erreur, mais je n'ai toujours pas de bannière qui s'affiche.

Qu'est ce que tu mets entre les '' . J'ai tenté : banniere, publicite, mais c'est ce nom là qui s'enregistre dans MySql.
J'ai essayé differentes choses, mais jamais mon image ne s'est enregistrée dans mon fichier.
$banniere = '';
if( isset($_POST['upload']) )
{
    $content_dir = 'banniere';

    $tmp_file = $_FILES['banniere']['tmp_name'];

    if( !is_uploaded_file($tmp_file) )
    {
        exit("Vous n'avez pas mis de bannière");
    }

    $type_file = $_FILES['banniere']['type'];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif') )
    {
        exit("Votre fichier n'est pas une image !");
    }

$banniere = $_FILES['banniere']['name'];
if( !move_uploaded_file($tmp_file, $content_dir . $banniere) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }
}
  
$sql='UPDATE publicite SET lien_redirection="'.$lien_redirection.'",banniere="'.$banniere.'" WHERE id_publicite="'.$_POST['id_publicite'].'"';

Re: Besoin d'aide pour un UPDATE ... SET

par Ryle » 21 avr. 2011, 22:57

Tu peux la définir n'importe où du moment qu'elle soit définie avant que tu ne l'utilises...

En l'occurrence, tu définis ta variable $banniere dans le if( isset($_POST['upload']) ), mais que l'on soit rentré ou non dans ce bloc tu l'utilises ensuite dans ton update... du coup, si tu n'est pas passé par le if, tu fais appel à une variable non définie et php t'affiche ce message.

Pour éviter cela, tu peux déclarer ta variable dans un else (pour être sur que dans un cas comme dans l'autre elle sera définie), ou le plus simple c'est de définir une valeur par défaut en amont dans ton code, par exemple :
$banniere = ''; // définition et valeur par défaut
if (...) { 
   ...
    $banniere = $_FILES['banniere']['name'];
  ...
}

$sql='UPDATE publicite SET lien_redirection="'.$lien_redirection.'",banniere="'.$banniere.'" WHERE id_publicite="'.$_POST['id_publicite'].'"';

Re: Besoin d'aide pour un UPDATE ... SET

par Romuald632 » 21 avr. 2011, 22:36

Salut,
mon problème c'est OU qu'on l'a définie cette variable
Merci

Re: Besoin d'aide pour un UPDATE ... SET

par misterflo » 21 avr. 2011, 12:51

Salut,
y a juste à lire le message d'erreur, la variable $banniere n'est déclarée nul part !

Re: Besoin d'aide pour un UPDATE ... SET

par Romuald632 » 21 avr. 2011, 11:49

Voilà le message d'erreur complet :
Notice: Undefined variable: banniere in D:\..\..\mon_image_update.php on line 54

Re: Besoin d'aide pour un UPDATE ... SET

par Maskime » 21 avr. 2011, 11:43

Hello,

Est ce que tu pourrais poster le message d'erreur complet ?

Besoin d'aide pour un UPDATE ... SET

par Romuald632 » 21 avr. 2011, 11:36

Bonjour,
Je voudrai updater une image.
J'ai repris le code de mon formulaire initial, mais ça ne onctionne pas.
Ca supprime l'image du compte que veux mettre à jour, mais elle ne s'enregistre pas dans mon fichier de destination et elle ne s'enregistre pas non plus dans MySQL !!!
Mon fromulaire :
$compte = mysql_query("SELECT * FROM publicite WHERE login='".$_SESSION['login']."'") or die(mysql_error());

while ($affichage = mysql_fetch_assoc($compte)) 
{ 
	mb_internal_encoding("UTF-8");
	echo '<div id="mon_compte_titre">';
	echo 'Modifier la bannière publicitaire de '.$affichage['societe'].'
<form action="mon_image_update.php" method="post">
<table id="tableau_general" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td class="td_mon_compte_centre" colspan="2">Votre bannière publicitaire actuelle<br /><img src="banniere/'.$affichage['banniere'].'" border="0"></td>
  </tr>
  <tr>
    <td class="td_mon_compte_centre" colspan="2"><br />Pour insérer une nouvelle bannière remplissez le champ ci-dessous :<br />ATTENTION ! La nouvelle bannière remplacera définitivement la précédente.<br / ><input type="file" name="banniere" size="40"></td>
  </tr>
  <tr>
    <td class="td_mon_compte_gauche">Lien vers votre site web :</td>
    <td class="td_mon_compte_droite"><input name="lien_redirection" size="40" type="text" value="'.$affichage['lien_redirection'].'" /></td>
  </tr>
  <tr>
    <td class="td_mon_compte_centre" colspan="2"><input type="hidden" name="id_publicite" value="'.$affichage['id_publicite'].'" /><input name="Envoyer" type="submit" value="Mettre à jour votre Bannière"/></td>
  </tr>
</table>
</form>
'
;
echo '</div>';
}
Mon fichier de récupération :
if(isset($_SESSION['login']))
{
$sql=mysql_query("SELECT * FROM publicite WHERE login='".$_SESSION['login']."'");
?>
<br />
<?php include('menu.php'); ?>
<br/>
<?php 
if(isset($_POST['id_publicite']))      $id_publicite=$_POST['id_publicite'];
else      $id_publicite="";
if(isset($_POST['lien_redirection']))      $lien_redirection=$_POST['lien_redirection'];
else      $lien_redirection="";

if( isset($_POST['upload']) )
//if( isset($_POST['banniere']) )
{
    $content_dir = 'banniere/';

    $tmp_file = $_FILES['banniere']['tmp_name'];

    if( !is_uploaded_file($tmp_file) )
    {
        exit("Vous n'avez pas mis de bannière");
    }

    $type_file = $_FILES['banniere']['type'];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif') )
    {
        exit("Votre fichier n'est pas une image !");
    }

// on copie le fichier dans le dossier de destination
    $banniere = $_FILES['banniere']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $banniere) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }
}
  
$sql='UPDATE publicite SET lien_redirection="'.$lien_redirection.'",banniere="'.$banniere.'" WHERE id_publicite="'.$_POST['id_publicite'].'"';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

mysql_query("SET NAMES 'utf8'"); 

	echo '<div id="mon_compte_titre">';
	echo '<img src="ok_01.png">';
	echo ' Votre nouvelle bannière a été enregistrée avec succès !';
	echo '</div>';
	echo '<br />';
Message d'erreur : Ligne 52 Varible indefinie

Merci d'avance pour votre aide