Page 1 sur 1

perte de variables

Posté : 24 mars 2006, 23:41
par lebreton22
bonsoir
Je m'interroge sur la manière d'enregistrer le nom du fichier uploadé dans ma BDD.
En début de fichier, la vatiable $_post['nom'] fonctionne bien mais au moment de mettre à jour la bdd,plus rien ! Est-ce que quelqu'un aurait une idée ? Merci
i-dessous le code :

<?php require_once('Connections/perso.php'); ?>
<?php
$colname_liaison = "1";
if (isset($_POST['nom'])) {
$colname_liaison = (get_magic_quotes_gpc()) ? $_POST['nom'] : addslashes($_POST['nom']);
}
mysql_select_db($database_perso, $perso);
$query_liaison = sprintf("SELECT * FROM pe2 WHERE NOM_USUEL = '%s'", $colname_liaison);
$liaison = mysql_query($query_liaison, $perso) or die(mysql_error());
$row_liaison = mysql_fetch_assoc($liaison);
$totalRows_liaison = mysql_num_rows($liaison);


if(isset($_FILES['photo']))
{
// params
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
$taille_max = 100000;
$dest_dossier = '/trombi2/';
// vérifications
if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
{
$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
}
elseif( file_exists($_FILES['photo']['tmp_name'])
and filesize($_FILES['photo']['tmp_name']) > $taille_max)
{
$erreur = 'Votre fichier doit faire moins de 500Ko !';
}
// copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES['photo']['name']);
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);

//Mise à jour du champ photo
$photo = '\''.mysql_escape_string($photo).'\''; //On place un antislashes davant les caractères spéciaux de MySQL
mysql_query("UPDATE pe2 SET champ_photo=$photo WHERE NOM_USUEL = '$colname_liaison'", $perso); //Mise à jour de la ligne
//Fin mise à jour du champ photo
}
}

?>



<html>
<body>
<!-- Erreur ? -->
<?php
if(isset($erreur)){
echo '<p>', $erreur ,'</p>';
}
?>
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
Envoi de fichiers
<form method="POST" action="" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 500Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<fieldset>
<legend></legend>
<!-- champs d'envoi de fichier, de type file -->
<p>Nom :
<input name="textfield" type="text" value="<?php echo $row_liaison['NOM_USUEL']; ?>">
Prénom :
<input name="textfield2" type="text" value="<?php echo $row_liaison['PRENOM']; ?>">
</p>
<p>
<label for="photo">Photo :</label>
<input type="file" name="photo" />
</p>
<p><label for="photo_2"></label>
</p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>
</body>
</html>
<?php
mysql_free_result($liaison);
?>

Posté : 25 mars 2006, 00:04
par Arno76
Salut meme si je connais pas grand chose j avouerai que c est toujours mieux pour comprendre quand c est comme ca:
<?php require_once('Connections/perso.php'); ?>
<?php
$colname_liaison = "1";
if (isset($_POST['nom'])) {
$colname_liaison = (get_magic_quotes_gpc()) ? $_POST['nom'] : addslashes($_POST['nom']);
}
mysql_select_db($database_perso, $perso);
$query_liaison = sprintf("SELECT * FROM pe2 WHERE NOM_USUEL = '%s'", $colname_liaison);
$liaison = mysql_query($query_liaison, $perso) or die(mysql_error());
$row_liaison = mysql_fetch_assoc($liaison);
$totalRows_liaison = mysql_num_rows($liaison);


if(isset($_FILES['photo']))
{
// params
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
$taille_max = 100000;
$dest_dossier = '/trombi2/';
// vérifications
if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
{
$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
}
elseif( file_exists($_FILES['photo']['tmp_name'])
and filesize($_FILES['photo']['tmp_name']) > $taille_max)
{
$erreur = 'Votre fichier doit faire moins de 500Ko !';
}
// copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES['photo']['name']);
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);

//Mise à jour du champ photo
$photo = '\''.mysql_escape_string($photo).'\''; //On place un antislashes davant les caractères spéciaux de MySQL
mysql_query("UPDATE pe2 SET champ_photo=$photo WHERE NOM_USUEL = '$colname_liaison'", $perso); //Mise à jour de la ligne
//Fin mise à jour du champ photo
}
}

?>



<html>
<body>
<!-- Erreur ? -->
<?php
if(isset($erreur)){
echo '<p>', $erreur ,'</p>';
}
?>
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
Envoi de fichiers
<form method="POST" action="" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 500Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<fieldset>
<legend></legend>
<!-- champs d'envoi de fichier, de type file -->
<p>Nom :
<input name="textfield" type="text" value="<?php echo $row_liaison['NOM_USUEL']; ?>">
Prénom :
<input name="textfield2" type="text" value="<?php echo $row_liaison['PRENOM']; ?>">
</p>
<p>
<label for="photo">Photo :</label>
<input type="file" name="photo" />
</p>
<p><label for="photo_2"></label>
</p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>
</body>
</html>
<?php
mysql_free_result($liaison);
?>

Posté : 25 mars 2006, 17:04
par DarkBlue
HEllo ,

Il y a une erreur sur une ligne (tu vas la reconnaitre) , tu devrais mieu l ecrire comme ceci :
mysql_query("UPDATE pe2 SET champ_photo=".$photo." WHERE NOM_USUEL = '".$colname_liaison."' ", $perso); 
Pour la simple et bonne raison que sans cette syntaxe tu demande a la table de modifier la ligne dont le nom usuel est $colname_liaison et non pas la valeur de $colname_liaison , donc une ligne qui n existe pas !

IDem pour $photo

Posté : 25 mars 2006, 19:34
par Ryle
Objection votre honneur !!
C'est vrai que c'est mieux écrit comme ça, mais entre des guillemets, php interprete les variables (alors qu'il ne le fait pas si la chaine est entre guillemets) ;)

Je vois pas trop d'où pourrais provenir la perte de ta valeur, et je ne suis pas certain que tu sois sur la bonne piste.. essaye de faire un echo de la requête..

A priori, le soucis viendrait d'avantage selon moi du update de $photo qui correspond à un champ de type file, et ne contiendra certainement pas les infos que tu peux attendre.. si c'est l'emplacement ou le nom de la photo sur le serveur que tu veux récuperer, c'est ton "$dest_dossier . $dest_fichier" qu'il faut utiliser :)

Posté : 25 mars 2006, 19:42
par DarkBlue
Objection votre honneur !!
C'est vrai que c'est mieux écrit comme ça, mais entre des guillemets, php interprete les variables (alors qu'il ne le fait pas si la chaine est entre guillemets) ;)
Double Objection , t as relu ta phrase ? :D

Php interprete les variables si elles sont entre " pas entre ', et dans son cas elles etaient entre ' .

Re: perte de variables

Posté : 25 mars 2006, 21:03
par Ryle
Je proteste monsieur le juge, il tente d'influencer le témoin !! ;)

bah non c'est bien des guillemets qu'il a mit autour de sa requête.. les apostrophes c'est juste autour de sa chaine :)
mysql_query("UPDATE pe2 SET champ_photo=$photo WHERE NOM_USUEL = '$colname_liaison'", $perso);	//Mise à jour de la ligne

Posté : 25 mars 2006, 21:28
par lebreton22
le problème vient surtout du champ NOM_USUEL qui me semble être vide. Est-ce un pb de session ? Ou autre chose ?

Re: perte de variables

Posté : 25 mars 2006, 22:24
par DarkBlue
Je proteste monsieur le juge, il tente d'influencer le témoin !! ;)

bah non c'est bien des guillemets qu'il a mit autour de sa requête.. les apostrophes c'est juste autour de sa chaine :)
mysql_query("UPDATE pe2 SET champ_photo=$photo WHERE NOM_USUEL = '$colname_liaison'", $perso);	//Mise à jour de la ligne
Mea Culpa ! J'etais persuadé que les ' (dans ce cas aussi) empechait l'evaluation !

Posté : 25 mars 2006, 22:26
par DarkBlue
le problème vient surtout du champ NOM_USUEL qui me semble être vide. Est-ce un pb de session ? Ou autre chose ?
ça vient surement de la requete , tu l'as essayé dans phpMyAdmin pour savoir si elle renvoyait un resultat ?