perte de variables

Eléphanteau du PHP | 16 Messages

24 mars 2006, 23:41

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);
?>

Eléphant du PHP | 136 Messages

25 mars 2006, 00:04

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);
?>

Eléphant du PHP | 440 Messages

25 mars 2006, 17:04

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
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 mars 2006, 19:34

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 :)

Eléphant du PHP | 440 Messages

25 mars 2006, 19:42

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 ' .
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 mars 2006, 21:03

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

Eléphanteau du PHP | 16 Messages

25 mars 2006, 21:28

le problème vient surtout du champ NOM_USUEL qui me semble être vide. Est-ce un pb de session ? Ou autre chose ?

Eléphant du PHP | 440 Messages

25 mars 2006, 22:24

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 !
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Eléphant du PHP | 440 Messages

25 mars 2006, 22:26

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 ?
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !