Modifier des données dans une BDD (UPDATE)

Eléphant du PHP | 109 Messages

04 nov. 2008, 15:31

Bonjour
Voilà j'ai un petit soucis sur un code, j'ai une table dont je peux modifier les enregistrements (texte et photos) j'ai donc un formulaire de modification avec autant de champs que de champs dans ma table.Le probleme vient du champs photo de mon formulaire.Quand j'envoi mon formulaire de modif si je n'ai pas rechargé une photo avec le champ type="file" et bien ca m'efface le nom de fichier precedemment enrgistré dans la table.
Je ne sais pas trop comment faire, est ce que ca doit ressembler a ca
if ($_FILES['photo']['name']==""){
...}

mais là que mettre???
merci
Nadege

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 1136 Messages

04 nov. 2008, 16:02

Salut,

Je pense , que tu peux vérifier si une nouvelle photo a été posté .. si c'est la cas tu update sinon , tu ne fais rien ...

if( !empty( $_FILES['photo']['name'] ))
{
... // tu complétes ta requete pour mettre à jour la photo
}

Ainsi , si tu ne donne pas une nouvelle photo a enregistrer , il ne va pas écraser l'ancien enregistrement ....
Si tu ne vérifie pas ce champ $_FILES , quoi qu'il y est dedans , il va mettre à jour le champ photo de ta base , donc s'il n'y a rien , il va effacer l'ancien enregistrement .

Eléphant du PHP | 109 Messages

04 nov. 2008, 16:13

merci de ta reponse
mais en fait j'avais déjà un /if (isset($_FILES['photo'])){
et ensuite ma fonction d'upload d'images et ensuite j'update dans la table
mais ca me vide tjrs mon champs photos si j'ai rien dedans

je mets en dessous ma fonction upload
if( !empty( $_FILES['photo']['name'] )) {

	//extensions acceptées
	$extension_ok = array('doc','xls','pdf');
	$taille_max=500000;
	$dest_dossier= "../img/info/";

	//vérification de l'extension du fichier a uploader
	if (!in_array( substr(strchr($_FILES['photo']['name'],'.'),1), $extension_ok) ){
		$erreur="il ne s'agit pas d'une extension autorisée";
	}
	elseif ($_FILES['photo']['error']==2){
		$erreur = " Le fichier est trop lourde, il doit etre inférieur à 500ko";
	}


	//copie du fichier

	if (!isset($erreur)){
		$dest_fichier = basename($_FILES['photo']['name']);

		//on enleve les accents du nom de fichier
		$dest_fichier = strtr($dest_fichier,
		'àéèùöôüäâëêîï',
		'aeeuoouaaeeii');
		//remplacement des caracteres speciaux
		$dest_fichier = preg_replace('/([^.a-z0-9]+)/i','_',$dest_fichier);


		//copie du fichier dans le dossier de destination
		move_uploaded_file($_FILES['photo']['tmp_name'],$dest_dossier.$dest_fichier);
		//pour faciliter la recup
		$nom_fichier=$dest_fichier;
			}else {
		echo $erreur;
		echo '<br/><a href="infoaccueil.php">retour</a>';
		exit();
	}
}

$ajout=ajouter_info($_POST['id'],$_POST['titre'],$_POST['texte'],$nom_fichier);
if ($ajout){
	echo "Votre info s'est bien ajoutée, félicitation<br>";
	echo "<a href='infoaccueil.php'> retour à l'index</a>";
	
}else{
	echo "probleme d'insertion";
}
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 1136 Messages

04 nov. 2008, 16:25

Montres nous comment tu crées ta requête d'update

ViPHP
AB
ViPHP | 5818 Messages

04 nov. 2008, 16:29

Et bien ça doit venir de ton code qui permet la mise à jour ...

Or tu nous montre le code de l'upload, pas celui de la modification des infos dans la bdd...

EDIT j'avais pas vu le message de stopher qui va dans le même sens

Eléphant du PHP | 109 Messages

04 nov. 2008, 16:33

quelqu'un a une idée parce que là je vois pas le probleme!!!

maintenant avec le !empty j'ai une erreur qui s'affiche
extension non autorisée

a croire que le !empty ne sert à rien

voilàle code de l'update
function modifier_info($id_info,$ordre_info,$titre_info,$texte_info,$nom_fichier){
	//vérification des paramètres passés
	$tab_erreur = array();
	
	if(is_null($titre_info)){
		$tab_erreur["titre_info"] = $titre_info;
	}
	if(is_null($texte_info)){
		$tab_erreur["texte_info"] = $texte_info;
	}
	
	
	//affichage du tableau d'erreurs si elles existent
	$nb_erreur = count($tab_erreur);
	if($nb_erreur > 0){
		echo $tab_erreur;
exit();
	}
	$up="UPDATE info SET ordre='$ordre_info',titre='$titre_info',texte='$texte_info',photo='$nom_fichier' WHERE id=$id_info";
	echo $up;
	$resultat=mysql_query($up);
	if ($resultat){
		return true;
	}
	else {
		return false;
	}
}

ViPHP
AB
ViPHP | 5818 Messages

04 nov. 2008, 20:25

Et le résultat de echo $up donne quoi ?

Eléphant du PHP | 109 Messages

04 nov. 2008, 20:26

le resultat c'est photo''
mais ca ne fonctionne pas si je mets isset($_FILES['photo']) seulemtn si c'est empty

ViPHP
ViPHP | 1136 Messages

04 nov. 2008, 20:37

Il faut tester ta variable $nom_fichier , pour adapter ta requete ...
(string)$maj_photo  =  "";
if( !empty($nom_fichier) )
{
   $maj_photo  =  ",photo='$nom_fichier'";
}


$up = "UPDATE info SET ordre='$ordre_info',titre='$titre_info',texte='$texte_info' $maj_photo WHERE id=$id_info";
ainsi la photo sera mise à jour si il y a une mise à jour à faire , sinon , on laisse tel quel ...