[RESOLU] upload et stockage en base de donnée

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 10:52

bonjours à tout j'ai une petite question en faite c'est tout bête mais j'ai ce formulaire
<html>
    <head>
        <title>Ajout d'un fichier</title>
        <link rel="icon" href="./image/icone.ico" />
    </head>
  <body>
  <center>
  <img src="./image/cooltext163306792130411.png"/>
  <form enctype="multipart/form-data" name="fichiers" action="upload.php" method="POST" >
    <div style="text-align:justify;">
    <center>
    <label for="service">Nom du service auquel ce fichier appartient :</label>
    </br>
    <select name="service">
	<option>service1</option>
	<option value="1">service2</option>
</select>
      </br>
      </br>
	  
<input type="hidden" name="MAX_FILE_SIZE" value="524288000">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Choisissez votre document ici : <input type="file" name="fichier" />
    </center>
    </div>
      </br>
      </br>
      <input type="reset" value="Annuler" />&nbsp;&nbsp;&nbsp;<input type="submit" />
    </form>
    </center>
  </body>
</html>
qui utilise cette page pour uploader
<html>
<body>
<?php
include('head.php');
include('fonctionupload.php');
$service = $_POST['service'];
$date = date('jS  F Y');
$repertoire = "./upload";  
//connection au serveur:
  $connexion = mysqli_connect( "localhost", "root", "", "base_de_fichier") ;
 
		
if (!file_exists($repertoire))
        
	{
                
		mkdir ($repertoire,0700);
                
		echo " -=> Création du repertoire $repertoire réussi<br>";
        
	}
if(isset($_FILES['fichier'])) // si formulaire soumis
{
    $content_dir = 'upload/'; // dossier où sera déplacé le fichier
  
    $tmp_file = $_FILES['fichier']['tmp_name'];
  
    if( !is_uploaded_file($tmp_file) )
    {
        exit("Le fichier est introuvable");
    }
     
    // on vérifie maintenant l'extension
    $filename = $_FILES['fichier']['name'];
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    if($ext != 'pdf')
    {
        exit("Le fichier n'est pas un PDF,veuillez le convertir en PDF s'il vous plais!!!!!!!!!!");
    }
    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];
    if(preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
    {
    exit("Nom de fichier non valide");
    }
    else if(!move_uploaded_file($tmp_file, $content_dir . $name_file))
    {
    exit("Impossible de copier le fichier dans $content_dir");
    } 
    echo "Le fichier a bien été uploadé";

	$chemin = ($content_dir . $name_file . $ext );
	if (verifUpload($chemin, $service)==1)
	{
					$req = mysqli_query($connexion,"INSERT INTO file (chemin, service, date) VALUES ('$chemin','$service', '$date')");
					if ($req)
					{
						include("head.php");
					echo "Ajout à la base de donnée effectu&eacute;";
					echo"</br>";
					echo"</br>";
					echo "<A HREF='AjouterUnDocForm.php'>Ajouter un autre document</A>";
					}
	}
	else
	{
		include("head.php");
		echo"l'ajout à la base de donnée à échoué";
	}
}			
				
?>
</body>
</html>
et cette page est sensé faire une requête pour ajouter le chemin du fichier le service choisi (service de l'entreprise) et la date à une base de donnée après avoir uploader le fichier dans un dossier et pour vérifier si le fichier n'est pas déjà dans la base de donnée elle utilise le code suivant
<?php
function verifUpload($chemin, $service)
{
if ($connexion = mysqli_connect('localhost','root','','base_de_fichier'))
	{
		$resultat = mysqli_query($connexion, "SELECT * FROM file WHERE chemin = '$chemin' AND service = '$service'");
			if (mysqli_num_rows($resultat)==0)
				{
					return 1;
				}
			else
			{
				return 0;
			}
	}				
}
?>


or la quand je fait l’opération pour ajouter un fichier (obligatoirement des pdf) bin il se dépose juste dans le dossier et la requête SQL pour stocker les info dans la base de donnée (pour afficher ces fichiers pdf dans d'autre pages du site et pour les rendre consultable et téléchargeable (même si je sais pas comment on rends téléchargeable un fichier que l'on affiche ) ne s'effectue pas et donc rien ne se mets dans ma base de donnée pouvez vous me venir en aide? je ne trouve pas du tout la solution (oui je débute dans l'upload excusez moi j'y connais pratiquement rien )

Mammouth du PHP | 1967 Messages

05 févr. 2016, 11:07

A priori je dirais bien que le problème est ici
$chemin = ($content_dir . $name_file . $ext );
$name_file contient déjà l'extension donc pas besoin de l'ajouter.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 11:09

oui mais j'ai essayé en enlevant l’extension et le problème y est toujours :?

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 11:40

donc voilà je suis bloqué :?

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 12:23

serai-ce possible d'avoir de l'aide je peut pas avancer dans mon projet sans ça

Mammouth du PHP | 1967 Messages

05 févr. 2016, 16:12

Alors tu dois chercher du coté de ta fonction verifupload

vérifie ta requète, affiche la, affiche le résultat complet de ta requète, test la dans phpmyadmin,
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 16:22

sauf que dans ma base y'a rien et le but du script c'est de la remplir

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 17:09

donc comment on fait si y'a rien dans ma base?

Mammouth du PHP | 1967 Messages

05 févr. 2016, 17:10

Alors tu dois chercher du coté de ta fonction verifupload

vérifie ta requète, affiche la, affiche le résultat complet de ta requète, test la dans phpmyadmin,
Est-ce que mysqli_num_rows($resultat)==0 renvoie bien TRUE ?
pourquoi ne pas mettre des echo un peu partout pour suivre la valeur de tes variables et voir si cela correspond a ce qu'il faudrait ?

Fais ce que je te propose de faire, dis nous ce que cela a donné et on pourra continuer à t'aider

Ce forum n'est pas un tchat, laisse le temps au gens de lire et de t'aider, reposter ne fera pas avancer les choses plus vite
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 17:12

désolé j'ai tendance à trop m'enflammer je vais faire ce que tu me dit

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 17:20

quand je fait
<?php
function verifUpload($chemin, $service)
{
if ($connexion = mysqli_connect('localhost','root','','base_de_fichier'))
	{ echo $chemin;
	  echo $service;
		$resultat = mysqli_query($connexion, "SELECT * FROM file WHERE chemin = '$chemin' AND service = '$service'");
			if (mysqli_num_rows($resultat)==0)
				{
					return 1;
				}
			else
			{
				return 0;
			}
	}				
}
?>
ça retourne

Le fichier a bien été uploadéupload/126.pdf1

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 17:37

un echo $resultat me pète une erreur du style Catchable fatal error: Object of class mysqli_result could not be converted to string in C:\Program Files (x86)\EasyPHP-Devserver-16.1-RC5\eds-www\intranet\fonctionupload.php on line 7

Eléphanteau du PHP | 22 Messages

05 févr. 2016, 17:52

je pense pas que ce sois grand chose j'ai juste l'impression que il passe pas dans le if qui est après le
echo "Le fichier a bien été uploadé";

  $chemin = ($content_dir . $name_file . $ext );

Mammouth du PHP | 1967 Messages

05 févr. 2016, 17:58

Un echo $resultat ne retourne rien d'interessant,
mais un echo mysqli_num_rows($resultat); serait bien mieux

d'après le retour, oui en effet il test ta fonction verifupload mais il n'a pas le bon retour.

un petit echo "ici"; permet de voir le résultat d'un if
<?php
function verifUpload($chemin, $service)
{
if ($connexion = mysqli_connect('localhost','root','','base_de_fichier'))
	{ echo $chemin;
	  echo $service;
		$resultat = mysqli_query($connexion, "SELECT * FROM file WHERE chemin = '$chemin' AND service = '$service'");
			 echo mysqli_num_rows($resultat);
			 if (mysqli_num_rows($resultat)==0)
				{
					echo "ici1";return 1;
				}
			else
			{
				echo "ici0";return 0;
			}
	}				
}
?>
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 févr. 2016, 18:03

Modération :
Les "up" (plusieurs messages à la suite d'un même auteur dans un temps très court) sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Quand tout le reste a échoué, lisez le mode d'emploi...