upload d'images multiple et insertion sql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : upload d'images multiple et insertion sql

Re: upload d'images multiple et insertion sql

par Ryle » 25 mai 2014, 18:43

Quand tu fais un location="upload.php" tu rediriges le navigateur vers la page upload.php sans passer aucun paramètre (que ce soit en get ou en post)

Du coup ton test " if(isset($_FILES["image"])) " est toujours faux :)

upload d'images multiple et insertion sql

par allhambra » 23 mai 2014, 11:36

Bonjour les codeurs,

j'ai un petit soucis avec mon code.
<?php
// Connect to the DB
$link = mysqli_connect("monserveur","mon login","mon mot de pass","ma base de données") or die("Error " . mysqli_error($link));

// store in the DB 
if(!empty($_POST['Créer'])) {	
	// adding new products
	if(!empty($_POST['nom'])) {		
		foreach($_POST['nom'] as $cnt => $nom) {
			$sql = "INSERT INTO galerie (nom, description, image) VALUES ('$nom','".$_POST['description'][$cnt]."','".$_POST['image'][$cnt]."');";
			$link->query($sql);
			print("<script type=\"text/javascript\">setTimeout('location=(\"galerie.php?add=ok\")' ,1000);</script>");
			
			// Upload des images

		}
	}	
}
<form method="POST" name="galerie" id="form">
             
             <fieldset>
   <LEGEND align=top>Ajoutez vos images pour la galerie</LEGEND>
   
   <table width="60%" border="0" cellspacing="0" cellpadding="5">
   <tr><td colspan="2">
    							 <?php if(isset($_GET['del']) && ($_GET['del'] == "ok")) { // Affiche l'erreur  ?>
                        <ul class="states">
                                   <li class="succes">L' (les) image(s)  à(ont) été supprimé(es) avec succès.</li></ul>
                                  <?php } ?>
								
								 <?php if(isset($_GET['add']) && ($_GET['add'] == "ok")) { // Affiche l'erreur  ?>
                                 <ul class="states"><li class="succes">L' (les) image(s)  à(ont) été créé avec succès.</li></ul>
								 <?php } ?>
                                
   </td></tr></table>
    <div id="itemRows">
	
	<p>
    <label for="nom">nom: <input type="text" name="nom"  /></label>
    <label for="description"> Description: <input type="text" name="description" /></label>
    <label for="image"> Image: <input type="file" name="image" multiple accept="image/*" /></label>
    <br />
	</p>
	<p>&nbsp;</p>
	<p>&nbsp;</p>
	<p>&nbsp;</p>
	<p>&nbsp;</p>
	<p>&nbsp;</p>
    <p>&nbsp;</p>
	<p>&nbsp;</p>
	<p>&nbsp;</p>
    
	<p>
	  <input onClick="addRow(this.form);" type="button" value="Ajouter des images" /> 
	  Les valeurs ci dessus ne seront sauvegardées qu'après avois cliqué sur "Ajouter des images.<br />Lorsque vous avez renseigné toutes vos images, cliquez sur le bouton "Créer" en bas du formulaire.</p>
	
	
	</div>
 <p><input name="Créer" type="submit" value="Créer" class="small button"></p>
             </fieldset>
							  </form>
<script type="text/javascript">
var rowNum = 0;
function addRow(frm) {
	rowNum ++;
	var row = '<p id="rowNum'+rowNum+'"><label for="nom">Nom: <input type="text" name="nom[]"  value="'+frm.nom.value+'"></label><label for="description">Description: <input type="text" name="description[]" value="'+frm.description.value+'"></label><label for="image"> Image: <input type="file" name="image[]"  value="'+frm.image.value+'"></label><br /></p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p><input type="button" value="Supprimer" onclick="removeRow('+rowNum+');"></p><br />';
	jQuery('#itemRows').append(row);
	frm.nom.value = '';
	frm.description.value = '';
	frm.image.value = '';
}

function removeRow(rnum) {
	jQuery('#rowNum'+rnum).remove();
}
</script>
L'insertion sql se fait correctement.

Par contre si je remplace
<?php
print("<script type=\"text/javascript\">setTimeout('location=(\"galerie.php?add=ok\")' ,1000);</script>");
par
<?php
print("<script type=\"text/javascript\">setTimeout('location=(\"upload.php\")' ,1000);</script>");
Le script reste bloqué sur upload.php en page blanche, l'insert sql ne se fait pas et les uploads non plus :(.

Fichier upload.php
<?php
//If directory doesnot exists create it.
$output_dir = "../uploads/galerie/";

if(isset($_FILES["image"]))
{
	$ret = array();

	$error =$_FILES["image"]["error"];
   {
    
    	if(!is_array($_FILES["image"]['name'])) //single file
    	{
            $RandomNum   = time();
            
            $ImageName      = str_replace(' ','-',strtolower($_FILES['image']['name']));
            $ImageType      = $_FILES['image']['type']; //"image/png", image/jpeg etc.
         
            $ImageExt = substr($ImageName, strrpos($ImageName, '.'));
            $ImageExt       = str_replace('.','',$ImageExt);
            $ImageName      = preg_replace("/\.[^.\s]{3,4}$/", "", $ImageName);
            $NewImageName = $ImageName.'-'.$RandomNum.'.'.$ImageExt;

       	 	move_uploaded_file($_FILES["image"]["tmp_name"],$output_dir. $NewImageName);
       	 	 //echo "<br> Error: ".$_FILES["image"]["error"];
       	 	 	print("<script type=\"text/javascript\">setTimeout('location=(\"galerie.php?up=ko\")' ,1000);</script>");

	       	 	 $ret[$fileName]= $output_dir.$NewImageName;
    	}
    	else
    	{
            $fileCount = count($_FILES["image"]['name']);
    		for($i=0; $i < $fileCount; $i++)
    		{
                $RandomNum   = time();
            
                $ImageName      = str_replace(' ','-',strtolower($_FILES['image']['name'][$i]));
                $ImageType      = $_FILES['image']['type'][$i]; //"image/png", image/jpeg etc.
             
                $ImageExt = substr($ImageName, strrpos($ImageName, '.'));
                $ImageExt       = str_replace('.','',$ImageExt);
                $ImageName      = preg_replace("/\.[^.\s]{3,4}$/", "", $ImageName);
                $NewImageName = $ImageName.'-'.$RandomNum.'.'.$ImageExt;
                
                $ret[$NewImageName]= $output_dir.$NewImageName;
    		    move_uploaded_file($_FILES["image"]["tmp_name"][$i],$output_dir.$NewImageName );
    		}
    	}
    }
    echo json_encode($ret);
	print("<script type=\"text/javascript\">setTimeout('location=(\"galerie.php?up=ok\")' ,1000);</script>");
 
}

?>
Un petit coup de pouce serait bienvenu :)