Problème d'envoi de fichiers par formulaire

Fermé
tteze Messages postés 2 Date d'inscription jeudi 16 janvier 2014 Statut Membre Dernière intervention 10 mars 2015 - 10 mars 2015 à 15:28
 Utilisateur anonyme - 10 mars 2015 à 16:05
Bonjour j'ai un problème avec mon formulaire lorsque j'envoi des vidéos il me dit que toutes les autres variables ne sont pas défini alors que sans cela fonctionne. J'avais déjà regardé d'autres topics qui parlaient de ce sujet et qu'il fallait modifier le php.ini ce que j'ai fait mais ce cela n'a pas répondu au problème :/ De plus mon ajout de photos multiple de marche pas correctement non plus >< serait-il possible d'avoir un petit coup de pouce :)

Voici le formulaire:

<?php
$nom='Ajout';
require('head.php');
require('header.php');
require('requetes.php');

echo'
<section id="ajout">
<form method="POST" action="upload.php" enctype="multipart/form-data">	
	<li>Nom: <input type="text" name="nom" required/>*</li>
	<li>Prénom: <input type="text" name="prenom" required/>*</li>
	<li>Sexe: <input type="radio" name="sexe" value="homme" checked/>Homme <input type="radio" name="sexe" value="femme"/>Femme</li>
	<li>Date de naissance: <input type="date" name="naissance" required/>*</li>
	<li>Adresse: <input type="text" name="adresse" required/>*</li>
	<li>Photo de profil: <input type="hidden" name="MAX_FILE_SIZE" value="10000000"/>
    <input type="file" name="profil" required/>*</li>
	<li>Video (Interview ou Biographie): <input type="hidden" name="MAX_FILE_SIZE" value="300000000"/>
    <input type="file" name="video"/></li>
	<li>Photos : <input type="hidden" name="MAX_FILE_SIZE" value="10000000"/>
    <input type="file" name="photos[]" multiple="true"/></li>
	<li>Story: <br><textarea name="story" id="story" rows="20" cols="100" required></textarea>*</li>
	<li>Votre e-mail : <input type="email" name="email"/></li>
	<li><br>Les champs succèdés de * doivent-être obligatoirement remplis.</li>
	<li><input type="submit" name="envoyer" value="Soumettre le portrait"></li>
	
	
</form> 

</section>
';

require('footer.php');
require('fin.php');
?>


Voici mon code qui traite le formulaire :

<?php
require('requetes.php');
$nom=addslashes($_POST['nom']);
$prenom=addslashes($_POST['prenom']);
$sexe=addslashes($_POST['sexe']);
$naissance=addslashes($_POST['naissance']);
$adresse=addslashes($_POST['adresse']);
$story=addslashes($_POST['story']);
if(isset($_POST['email']) && !empty($_POST['email'])){
	$email=addslashes($_POST['email']);
}else{
	$email=NULL;
}

/*********************************upload photo de profil****************************************/

$dossier_photo = 'upload/photos/';

$taille_maxi = 1000000;
$taille = filesize($_FILES['profil']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['profil']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, ou jpeg';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $id_profil=id_photo_free();
	 $profil = ''.$id_profil.$extension;
     if(move_uploaded_file($_FILES['profil']['tmp_name'], $dossier_photo . $profil)){
			//réussite de l'upload
		 
     }else{
          $profil=NULL;
     }
}else{
     $profil=NULL;
}

/*********************************upload photos****************************************/
if(isset($_FILES['photos'])){
	$id_photo=id_photo_free()+1;
	for ($i = 0; $i < count($_FILES['photos']['name']); $i++){
		$taille_maxi = 1000000;
		$taille = filesize($_FILES['photos']['tmp_name'][$i]);
		$extensions = array('.png', '.gif', '.jpg', '.jpeg');
		$extension = strrchr($_FILES['photos']['name'][$i], '.'); 
		//Début des vérifications de sécurité...
		if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
		{
			$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, ou jpeg';
		}
		if($taille>$taille_maxi)
		{
			$erreur = 'Le fichier est trop gros...';
		}
		if(!isset($erreur) || empty($erreur)) //S'il n'y a pas d'erreur, on upload
		{
			//On formate le nom du fichier ici...
			$photos[$i] = ''.$id_photo.$extension;
			if(move_uploaded_file($_FILES['photos']['tmp_name'][$i], $dossier_photo . $photos[$i])){
					//réussite de l'upload
				
			}else{
				$photo[$i]=NULL;
				$id_photo--;
			}
		}else{
			$photo[$i]=NULL;
			$id_photo--;
		}
		$id_photo++;
	}
}else{
	$photos=NULL;
}

/*********************************upload video****************************************/
if(isset($_FILES['video'])){
$dossier_video = 'upload/videos/';


$taille_maxi = 500000000;
$taille = filesize($_FILES['video']['tmp_name']);
$extensions = array('.mp4', '.avi');
$extension = strrchr($_FILES['video']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)){
		$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, ou jpeg';
}
if($taille>$taille_maxi){
	 $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)){
	$id_video=id_video_free();
     //On formate le nom du fichier ici...
     $video = ''.$id_video.$extension;
     if(move_uploaded_file($_FILES['video']['tmp_name'], $dossier_video . $video)){
		  //réussite de l'upload
     }
     else{
          $video=NULL;
     }
}else{
     $video=NULL;
}


}else{
	$video=NULL;
}
/**************************ajout à la base de donnée**************************************/
$id_portrait=id_portrait_free();
ajout_portrait($nom,$prenom,$sexe,$naissance,$adresse,$story,$email);
ajout_photo($id_portrait,$dossier_photo.$profil,$photos);
if(!empty($video)){
	ajout_video($id_portrait,$dossier_video.$video);
}

include('fin.php');

?>



puis les requetes sql que j'utilisent :
function id_portrait_free(){
	global $mysqli;
	$resultat = mysqli_query($mysqli, 'SELECT MAX(id) FROM portrait') ;
	$donnees = mysqli_fetch_assoc($resultat);
	$id=$donnees['MAX(id)']+1;
	mysqli_free_result($resultat);
	return $id;
}

function id_photo_free(){
	global $mysqli;
	$resultat = mysqli_query($mysqli, 'SELECT MAX(id) FROM photos') ;
	$donnees = mysqli_fetch_assoc($resultat);
	$id=$donnees['MAX(id)']+1;
	mysqli_free_result($resultat);
	return $id;
}

function id_video_free(){
	global $mysqli;
	$resultat = mysqli_query($mysqli, 'SELECT MAX(id) FROM video');
	$donnees = mysqli_fetch_assoc($resultat);
	$id=$donnees['MAX(id)']+1;
	mysqli_free_result($resultat);
	return $id;
}

function ajout_portrait($nom,$prenom,$sexe,$naissance,$adresse,$story,$email){
	global $mysqli;
	$id_quartier=1;
	$position_x=1;
	$position_y=1;
	$query='INSERT INTO portrait (id,nom,prenom,sexe,date_de_naissance,adresse,id_quartier,story,position_x,position_y,mail_envoyeur,valide)
			VALUES("NULL","'.$nom.'","'.$prenom.'","'.$sexe.'","'.$naissance.'","'.$adresse.'","'.$id_quartier.'","'.$story.'","'.$position_x.'","'.$position_y.'","'.$email.'","0")';
	if(mysqli_query($mysqli,$query)) ;
}

function ajout_video($id_portrait,$adresse){
	global $mysqli;
	$query='INSERT INTO videos (id,id_portrait,adresse) VALUES("NULL","'.$id_portrait.'","'.$adresse.'")';
	if(mysqli_query($mysqli,$query));
}

function ajout_photo($id_portrait,$profil,$photos){
	global $mysqli;
	$query='INSERT INTO photos (id,id_portrait,adresse,type) VALUES("NULL","'.$id_portrait.'","'.$profil.'","profil")';
	$resultat=mysqli_query($mysqli,$query) ;
	if(!empty($photos)){
		foreach($photos as $adresse){
			if(!empty($adresse)){
				$query='INSERT INTO videos (id,id_portrait,adresse,type) VALUES("NULL","'.$id_portrait.'","'.$adresse.'","normal")';
				$resultat=mysqli_query($mysqli,$query);
			}
		}
	}
}
A voir également:

1 réponse

Utilisateur anonyme
10 mars 2015 à 15:59
Bonjour

Tu crées plusieurs champs photos[] dans ton formulaire.
Tu récupères donc en PHP photos[0], PHP photos[1], PHP photos[2], etc.

L'élément tmp_name de photos[1] s'appelle photos[1]['name'] mais toi dans ton script, tu l'appelles photos['name'][1], idem pour les autres éléments de chaque photo. idem pour les vidéos.
Tu n'as simplement pas mis les indices dans le bon ordre. Tu t'en serais rendu compte tout seul avec un simple print_r($_FILES).
0
Utilisateur anonyme
10 mars 2015 à 16:05
remarques complémentaires : tes "addslashes" sont une grosse erreur, il faut utiliser mysqli_real_escape_string pour échapper correctement les caractères spéciaux dans les requêtes.
Et ce grand 'echo' dans ton formulaire ne rime à rien, il faut fermer la balise php, écrire simplement le html et rouvrir plus loin la balise php quand tu en as besoin à nouveau.
Et tes SELECT MAX(id) sont une autre horreur, avec risque de création de doublon : pourquoi n'utilises-tu pas les champs auto-incrémentés ?
0