Upload de fichiers+insertion SQL

Eléphant du PHP | 75 Messages

17 juin 2008, 20:10

Salut à toutes et à tous,

Voilà, j'ai un gros problème que je n'arrive pas à résoudre.

J'ai un script d'upload de fichier qui balance le fichier sélectionné précédemment dans un formulaire sur mon serveur. Jusque là tout va bien. Là où est le problème c'est au moment d'enregistrer toutes les informations concernant le fichier uploadé dans la BDD... Aucun enregistrement n'est fait. Et pourtant, aucune erreur n'est affichée, il n'y a aucun problème, l'upload se passe bien.

Voilà mon code:
<?php

	  $titre = addslashes($_POST['titre']);
	  $fichier = addslashes(basename($_FILES['fichier']['name']));
	  $type = $_FILES['fichier']['type'];
	  $date = date("d-m-Y");
	  $email = $_POST['email'];
	  
	  
        if ( !strstr($type, 'jpg') && !strstr($type, 'jpeg') && !strstr($type_fichier, 'png') && !strstr($type, 'gif') && !strstr($type, 'text') && !strstr($type, 'pdf') && !strstr($type, 'docapplication') && !strstr($type, 'psdapplication') ) {

?>
<script language="JavaScript">
document.location.href="../index.php4?error=Formats de fichier refusé!";
</script> 
<?php
        }
		else
		{
	  // on se connecte à MySQL
$db = mysql_connect('lblougiboulga', 'ignition', 'aleluia');

// on sélectionne la base
mysql_select_db('mabase',$db);

$result = mysql_query("SELECT id FROM fichier_tbl", $db);
$num_rows = mysql_num_rows($result);
	  	  
	  

      $dest_dossier = '../upload/';
     
      $dest_fichier = "f$num_rows".addslashes(basename($_FILES['fichier']['name']));
      move_uploaded_file($_FILES['fichier']['tmp_name'], $dest_dossier . stripslashes($dest_fichier));

$sql = "INSERT INTO fichier_tbl (id,nom,url,type,email,date) VALUES ('','$dest_fichier','upload/$dest_fichier','$type','$email','$date')";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// Insertion des données concernant le fichier uploadé (id, nom, url, type, ...). Mais c'est là que ça coince.
}
      ?>
	  <script language="JavaScript">
document.location.href="../index.php4?error=Envoi réussi!";
</script>
Voilà, si quelqu'un a une idée d'où vient le problème, je suis preneur, parce que là... J'en perd la boule. Et avec les épreuves du BAC, ça ne simplifie pas les choses. :)

Merci et à bientôt, Volkow.

ViPHP
ViPHP | 2291 Messages

17 juin 2008, 22:45

A premiere vue (rapide) il y a au moins une faute dasn ta requete d'insertion

il ne faut pas faire comme cela :
'upload/$dest_fichier'

Mais quelque chose du genre :
$cheminfichier = $dest_dossier.$dest_fichier

//et alors l'insert devient
'$cheminfichier'   et pas 'upload/$dest_fichier'
Proposition de correction :
$dest_dossier = '../upload/';

      $dest_fichier = $num_rows.addslashes(basename($_FILES['fichier']['name']));
      move_uploaded_file($_FILES['fichier']['tmp_name'], $dest_dossier . stripslashes($dest_fichier));

      $CheminFichier = $dest_dossier.$dest_fichier;

$sql = "INSERT INTO fichier_tbl (id,nom,url,type,email,date)
        VALUES ('','".$dest_fichier."','".$CheminFichier."','".$type."','".$email."','".$date."')";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

Eléphant du PHP | 75 Messages

17 juin 2008, 22:55

Finalement ça ne marche toujours pas. Il n'enregistre rien dans la table... :(

ViPHP
ViPHP | 2291 Messages

17 juin 2008, 23:06

Et comme ceci ?
$dest_fichier = $num_rows['id'].addslashes(basename($_FILES['fichier']['name'])); 

Eléphant du PHP | 75 Messages

17 juin 2008, 23:09

Toujours aucun enregistrement...

Mais le pire dans tout cela, c'est le fait que dans ma requête de comptage du nombre d'enregistrement il est à chaque fois augmenté de un, même si aucun enregistrement n'est fait dans ma BDD...

Je deviens cinglé!

^^

EDIT: il y a également un truc qui m'étonne, même si dans mon script je remplace les variables présentes dans ma requête SQL (en les remplacant par "lol" par exemple), ma requête ne fonctionne quand même pas. Aucun enregistrement n'est fait... -.-
Modifié en dernier par Volkow le 17 juin 2008, 23:13, modifié 1 fois.

ViPHP
ViPHP | 2291 Messages

17 juin 2008, 23:12

Pourrais tu nous montrer ta table :?:

Eléphant du PHP | 75 Messages

17 juin 2008, 23:14

La voilà:

Code : Tout sélectionner

-- phpMyAdmin SQL Dump -- version 2.11.6 -- http://www.phpmyadmin.net -- -- Serveur: localhost -- Généré le : Mar 17 Juin 2008 à 23:13 -- Version du serveur: 5.0.51 -- Version de PHP: 4.4.8 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- Base de données: `vkxfreec_foxhoster` -- -- -------------------------------------------------------- -- -- Structure de la table `fichier_tbl` -- CREATE TABLE `fichier_tbl` ( `id` int(11) NOT NULL auto_increment, `nom` text NOT NULL, `url` varchar(250) NOT NULL, `type` varchar(250) NOT NULL, `email` varchar(250) NOT NULL, `date` varchar(250) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- -- Contenu de la table `fichier_tbl` -- INSERT INTO `fichier_tbl` VALUES(1, 'bhfgh', 'vbnvbn', 'vbnvbn', 'vbnvbn', 'vnvn');

ViPHP
ViPHP | 2291 Messages

17 juin 2008, 23:18

Si tu fait un print_r de ta requete que reçois tu ?

Eléphant du PHP | 75 Messages

17 juin 2008, 23:21

echo $req donne: 1.
echo $sql donne: INSERT INTO fichier_tbl (id,nom,url,type,email,date) VALUES ('','f35allopass.txt','../upload/f35allopass.txt','text/plain','Votre e-mail','17-06-2008')

ViPHP
ViPHP | 2291 Messages

17 juin 2008, 23:26

echo $req donne: 1.
echo $sql donne: INSERT INTO fichier_tbl (id,nom,url,type,email,date) VALUES ('','f35allopass.txt','../upload/f35allopass.txt','text/plain','Votre e-mail','17-06-2008')
Donc sa fonctionne tu à des données :?: :!:

Eléphant du PHP | 75 Messages

17 juin 2008, 23:27

Bah apparement oui mais le truc c'est qu'aucun enregistrement n'est fait dans la table. Et comme dit avant, le pire c'est que le num_rows compte une incrémentation à chaque envoi de fichier.

Exemple: allez ici ==> http://www.vkxfree.com/vkxhosting/index.php4 et envoyez plusieurs fichiers, l'incrémentation au niveau du ...VALUES ('','f42allopass.txt','upload/f42allopass.txt'...

Vous pouvez même actualiser la page du script et vous verrez l'incrémentation est bien effectuée. Pourtant aucun enregistrement n'existe dans la BDD. ^^

EDIT: c'est bon j'ai trouvé l'erreur. Cela provenait de mon hébergeur qui m'avait changé de serveur sans me prévenir... -.-

Merci pour ton aide tout de même. :)