8791 sujets

Développement web côté serveur, CMS

Bonjour, j'ai cherché toute la journee à remplacer un apostrophe présent dans le nom de l'image par _ pour pouvoir l'enregistrer dans la BDD. (ex : l'aiguille.jpg => l_aiguille.jpg)
Mais pas moyen est ce que quelqu'un pourrait m'aider ?
j'ai terminé mon site et la je bloque
merci

$extensions_ok = array("jpg","bmp","png"); // Extensions autorisées
$max_size   = 7340032; // Taille max en octets (7 Mo)
$width_min  = 1000; // Largeur 
$height_min = 1000; // Hauteur
$nom_file   = $_FILES['photo']['name'];
$extension  = substr($nom_file,-3); // Récupération de l'extension
$courrier = $_POST['courrier']; 
$clientID = $_SESSION['clientID'];
//-------------------------------------
// UPLOAD DE L'IMAGE ET INSERT DANS BDD
//------------------------------------- 
if ($ajoutArticle=="ok") {
    // Verification si le champ est rempli 
    if(!empty($_FILES['photo']['name'])) {		 		
		// Verification de l'extension de l'image 
        if(in_array(strtolower($extension),$extensions_ok)) {
			// Verification du poids de l'image
			if($_FILES['photo']['size'] <= $max_size) {
			// Recuperation des dimensions de l'image
			$infos_img = getimagesize($_FILES['photo']['tmp_name']);
				// Verification des dimensions de l'image
				if(($infos_img[0] >= $width_min) && ($infos_img[1] >= $height_min)) { 
				$repertoire='../../../image/temporaire/';
				$nom_file = $_FILES['photo']['name'];
				$nom_file = strtr($nom_file, "'", "_"); //REMPLACEMENT DES APOSTROPHES
								  				             move_uploaded_file($_FILES['photo']['tmp_name'],$repertoire.$nom_file);				
				mysql_select_db($database_connexion, $connexion);
				$insertCommande = "INSERT INTO commande (clientID, date) VALUES ('$clientID', NOW())";
				$Result1 = mysql_query($insertCommande, $connexion) or die(mysql_error());
				$commandeID=mysql_insert_id();// Recuperation de l'ID de la commande
				$insertPhoto = "INSERT INTO photo (commandeID, numero, nom, courrier) VALUES ('$commandeID', 'Photo 1', '$nom_file', '$courrier')";
				$Result2 = mysql_query($insertPhoto, $connexion) or die(mysql_error());
				header("Location: format.php"); exit;
				} else {
					erreur ............

Modifié par touti (01 Dec 2009 - 19:08)
Modérateur
Hello,

Juste une petite question par rapport à ton code Heyoan et le transfert de fichier : En le lisant, il y a bien move_uploaded_file(), mais je ne vois pas de test dessus. À plusieurs reprises j'ai lu des scripts où il y a un if et d'autre non (voir la doc en exemple). Il y a t'il une possibilité qu'il y ait un problème de transfert du dossier temp au dossier de destination ? De mon côté, j'ai plutôt tendance à faire un test dessus, mais est ce nécessaire ?

Bonne soirée Smiley smile
Modifié par Nolem (29 Nov 2009 - 20:05)
Merci Heyon
J'ai suivi tes conseils et j'ai ajouté l'apostrophe dans la fonction preg_replace() mais j'ai le meme probleme.
Lorsque je selectionne dans mon formulaire une image nommée : balade l'aiguille.jpg, le nom présent dans la BDD est : aiguille.jpg
je ne comprends pas?

$extensions_ok = array("jpg","bmp","png"); // Extensions
$max_size   = 7340032; // Taille
$width_min  = 1000; // Largeur 
$height_min = 1000; // Hauteur
$nom_file   = $_FILES['photo']['name'];
$extension  = substr($nom_file,-3); // Récupération de l'extension
$courrier = $_POST['courrier']; 
$clientID = $_SESSION['clientID'];
$message = false;
//-------------------------------------
// UPLOAD DE L'IMAGE ET INSERT DANS BDD
//------------------------------------- 
if ($ajoutArticle=="ok") {
    // Verification si le champ est rempli 
    if(!empty($_FILES['photo']['name'])) {		 		
		// Verification de l'extension de l'image 
        if(in_array(strtolower($extension),$extensions_ok)) {
			// Verification du poids de l'image
			if($_FILES['photo']['size'] <= $max_size) {
			// Recuperation des dimensions de l'image
			$infos_img = getimagesize($_FILES['photo']['tmp_name']);
				// Verification des dimensions de l'image
				if(($infos_img[0] >= $width_min) && ($infos_img[1] >= $height_min)) {
					if($_FILES["photo"]["error"] == UPLOAD_ERR_OK) { // Pas d'erreur durant l'upload 
						$repertoire='../../../image/temporaire/';
						$nom_file = preg_replace('#[^A-Za-z0-9\.\']#', '_', $nom_file);				
						move_uploaded_file($_FILES['photo']['tmp_name'],$repertoire.$nom_file);				
						mysql_select_db($database_connexion, $connexion);
						$insertCommande = "INSERT INTO commande (clientID, date) VALUES ('$clientID', NOW())";
						$Result1 = mysql_query($insertCommande, $connexion) or die(mysql_error());
						$commandeID=mysql_insert_id();// Recuperation de l'ID de la commande
						$insertPhoto = "INSERT INTO photo (commandeID, numero, nom, courrier) VALUES ('$commandeID', 'Photo 1', '$nom_file', '$courrier')";
						$Result2 = mysql_query($insertPhoto, $connexion) or die(mysql_error());
					} else {
						$message[] = 'Erreur survenue durant le téléchargement du fichier : '.$_FILES["photo"]["error"];
					}
				} else {
					$erreur_taille=1;	
				}
			} else {
				$erreur...

<form action="<?php echo htmlspecialchars($PHP_SELF); ?>" method="post" enctype="multipart/form-data" name="upload" id="upload">
...
Nolem a écrit :
De mon côté, j'ai plutôt tendance à faire un test dessus, mais est ce nécessaire ?
C'est vrai que c'est mieux ! J'ai modifié le code en conséquence. Smiley cligne
touti a écrit :
J'ai suivi tes conseils et j'ai ajouté l'apostrophe dans la fonction preg_replace()
Mon conseil était de ne pas le faire et de ne garder que les caractères alphanumériques et les points. Smiley smile
Modérateur
Et paf tu es tombé dans le panneau à propos de la pattern :


$nom_file = preg_replace('#[^A-Za-z0-9\.]#', '_', $nom_file);


Cela veut dire, si tu trouves autre choses que ces caractères là, remplacer par un « underscore ». Au passage, ce n'est pas nécessaire d'échapper des caractères spéciaux dans une classe. Sauf 3 :
* #
* ]
* -

++
Oups ! je viens de modifier
J'ai fait un test sur le serveur distant l'image est bien uploadée nommée : balade l'aiguille.jpg mais la table : photo est vide
j'ai un message d'erreur :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'aiguille.jpg', 'Non')'

je ne sais vraiment pas quoi faire pour resoudre le probleme Smiley sweatdrop

merci pour votre aide
Modifié par touti (29 Nov 2009 - 20:56)
Modérateur
Heyoan a écrit :

[...]

D'autre part il faut protéger tes variables lorsque tu veut stocker des données en base : cf. mysql_real_escape_string.


J'ai l'impression que tu n'as pas suivi tous les conseils d'Heyoan. Smiley cligne
Merci beaucoup heyoan et nolem Smiley cligne

Je viens de monter mon site sur le serveur distant, ca marche tres bien

bonne soiree