Page 1 sur 3

Récupération de variable dans un Formulaire

Posté : 27 nov. 2006, 01:24
par dunbar
Bonjour,

Quelqu'un pourrais t'il me dire si il voie l'erreur dans mon script, car mon problème est qu'il s'arrete à la deuxième requette et je ne voie pas pourquoi ?
function corps() {
	if ($_GET['action'] == 'add') {
		$rights = "0777";
		$type = $_POST['type'];
		$prix = $_POST['prix'];
		$codepostal = $_POST['codepostal'];
		$chambres = $_POST['chambre'];
		$garages = $_POST['garage'];
		$photo = $_POST['photo'];
//==========================================================
//
//         Connexion à la base
//===========================================================
		$connection = mysqli_connect(SQL_SERVER, SQL_LOGIN, SQL_PW) or die(mysqli_error());
		mysqli_select_db($connection, SQL_DB);
		$req = "select max(id_annonce) from annonce;";
		$res = mysqli_query($connection, $req) or die(mysqli_error());
		$id = 0;
		while ($row = mysqli_fetch_row($res)){
			$id = $row[0]++;
		}
		if ($id == null){
			$id = 0;
		}
		$folder_path = 'clients/'.$id;
		if(!@mkdir($folder_path, $rights)){
			echo("Impossible de créer le dossier \"$folder_path\".");
			exit(0);
		}

		echo $req = "INSERT INTO directory (name) values ('$folder_path');";
		$res = mysqli_query($connection, $req) or die("Impossible de se connecter à la base (1) : " . mysql_error());
		echo $req = "INSERT INTO annonce (id_directory, type, prix, codepostal, nb_chambre, nb_garage, nb_file) values ('$id', '$type', '$prix', '$codepostal', '$chambres', '$garages', '$photo');";
		$res = mysqli_query($connection, $req) or die("Impossible de se connecter à la base (2) : " . mysql_error());

		if ($photo > 0){
			$i = 0;
			while ($i < $photo){
				$i++;
				$name = 'file'.$i;
				$tmp_file = $_FILES['$name']['tmp_name'];

				if( !is_uploaded_file($tmp_file) )
				{
					echo("Le fichier est introuvable");
					exit(0);
				}

				// on vérifie maintenant l'extension
				$type_file = $_FILES['$name']['type'];

				if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
				{
					echo("Le fichier n'est pas une image");
					exit(0);
				}

				// on copie le fichier dans le dossier de destination
				$name_file = $_FILES['$name']['name'];

				if( !move_uploaded_file($tmp_file, $folder_path . $name_file) )
				{
					echo("Impossible de copier le fichier dans $content_dir");
					exit(0);
				}
				$req = "insert into file (id_directory, name) values ('$id', '$name_file');";
				$res = mysqli_query($connection, $req) or die(mysqli_error());
			}
		}
	}
	echo '<form action="createAnnonce.php?action=add" method="post" enctype="multipart/form-data" ><center>&nbsp;</p>';
	echo '<table border=0 cellspacing=10><tr><td class="corps">Type de bien * :</td><td><SELECT NAME="type"><OPTION>Maison
																									<OPTION>Appartement
																									<OPTION>Terrain
																									</SELECT></td></tr>';
	echo '<tr><td class="corps">Prix * :</td><td><INPUT TYPE="text" name="prix" maxlength="10"></td></tr>';
	echo '<tr><td class="corps">Code Postal * :</td><td><INPUT TYPE="text" name="codepostal" maxlength="5"></td></tr>';
	echo '<tr><td class="corps">Nbre Chambres * :</td><td><SELECT NAME="chambre"><OPTION>0
																			  <OPTION>1
																			  <OPTION>2
																			  <OPTION>3
																			  <OPTION>4
																			  <OPTION>5</SELECT></td></tr>';
	echo '<tr><td class="corps">Nbre Garage * :</td><td><SELECT NAME="garage"><OPTION>0
																			  <OPTION>1
																			  <OPTION>2
																			  <OPTION>3
																			  <OPTION>4
																			  <OPTION>5</SELECT></td></tr>';
	echo '<tr><td class="corps">Commentaire Sur le bien * :</td>';
	echo '<td class="corps"><textarea  name="commentaire" cols=34 rows=4></textarea></td></tr>';
	echo '<tr><td class="corps">Nbre Photos * :</td><td><SELECT NAME="photo"><OPTION>0
																			  <OPTION>1
																			  <OPTION>2
																			  <OPTION>3
																			  <OPTION>4
																			  <OPTION>5</SELECT></td></tr>';
	echo '<tr><td class="corps">Fichier 1 :</td><td><INPUT TYPE="file" name="file1"></td></tr>';
	echo '<tr><td class="corps">Fichier 2 :</td><td><INPUT TYPE="file" name="file2"></td></tr>';
	echo '<tr><td class="corps">Fichier 3 :</td><td><INPUT TYPE="file" name="file3"></td></tr>';
	echo '<tr><td class="corps">Fichier 4 :</td><td><INPUT TYPE="file" name="file4"></td></tr>';
	echo '<tr><td class="corps">Fichier 5 :</td><td><INPUT TYPE="file" name="file5"></td></tr>';
	echo '<tr><td colspan=2 align=center><INPUT TYPE="submit" VALUE="Enregistrer l\'annonce"><INPUT TYPE=reset NAME=Effacer VALUE="Effacer le formulaire" ></td></tr><br><br>';
	echo "<tr><td colspan=2 align=center class='corps'>Les champs marqu&eacute; d'une * sont obligatoires</td></tr></table></center></form><br><br>";


}
?>
D'avance merci

Posté : 27 nov. 2006, 01:30
par DocType
Bonjour,

j'ai un soucis sur ma voiture, réparez là !
Tu crois que la garagiste va se taper le démontage de toute la voiture pour tout véridier pièce par pièce ou te demander plus de précisions ?
Donne-nous l'erreur générée, si il n'y en a pas, force l'affichage des erreurs via
ini_set('display_errors', 'on'); 
ini_set('error_reporting', E_ALL); 
dans ton fichier php en cours d'éxecution, en premier de tout.

Une fois cela affiché, corrige et si tu n'y arrive pas, reviens nous voir.

Mais stp, sois plus précis :roll:

Posté : 27 nov. 2006, 01:34
par dunbar
Bonjour,

j'ai un soucis sur ma voiture, réparez là !
Tu crois que la garagiste va se taper le démontage de toute la voiture pour tout véridier pièce par pièce ou te demander plus de précisions ?
Donne-nous l'erreur générée, si il n'y en a pas, force l'affichage des erreurs via
ini_set('display_errors', 'on'); 
ini_set('error_reporting', E_ALL); 
dans ton fichier php en cours d'éxecution, en premier de tout.

Une fois cela affiché, corrige et si tu n'y arrive pas, reviens nous voir.

Mais stp, sois plus précis :roll:
Bonsoir,

Je sais que le garagiste ne............... etc.... :wink:
Et je n'ai aucune erreur proprement dit je repère la même chose que dans mon premier poste il s'arrête à la deuxième requette
echo $req = "INSERT INTO annonce (id_directory, type, prix, codepostal, nb_chambre, nb_garage, nb_file) values 
('$id', '$type', '$prix', '$codepostal', '$chambres', '$garages', '$photo');"; 
        $res = mysqli_query($connection, $req) or die("Impossible de se connecter à la base (2) : " . mysql_error()); 
Donc m'affiche : Impossible de se connecter à la base (2)
Et je ne sais toujours pas pourquoi :!:
Et l'erreur 12039
Merci d'avance

Posté : 27 nov. 2006, 01:42
par Ajoloca
Bonsoir,

Tu ne devrais pas suivre ta devise.
Chaque chose a sa place et doit respecter cetaines régles. La programmation n'y échape pas!.

Sépare tes variables PHP de toute autre, les litérals de variables, etc...

Une requête plante (ou fait planter un script) fais afficher la requête, teste-la directement, etc...

Posté : 27 nov. 2006, 01:44
par DocType
Egalement, avant que tu revienne nous voir, nettoie ton code
echo $req = "INSERT INTO directory (name) values ('$folder_path');"; 
        $res = mysqli_query($connection, $req) or die("Impossible de se connecter à la base (1) : " . mysql_error()); 
        echo $req = "INSERT INTO annonce (id_directory, type, prix, codepostal, nb_chambre, nb_garage, nb_file) values ('$id', '$type', '$prix', '$codepostal', '$chambres', '$garages', '$photo');"; 
        $res = mysqli_query($connection, $req) or die("Impossible de se connecter à la base (2) : " . mysql_error()); 
n'est pas correct !
<?
echo $req = "INSERT INTO directory (name) VALUES ('".$folder_path."')"; 
$res = mysqli_query($connection, $req) or die("Impossible de se connecter à la base (1) : ".mysql_error()); 
echo $req = "INSERT INTO annonce (id_directory, type, prix, codepostal, nb_chambre, nb_garage, nb_file) VALUES ('".$id."', '".$type."', '".$prix."', '".$codepostal."', '".$chambres."', '".$garages."', '".$photo."');"; 
$res = mysqli_query($connection, $req) or die("Impossible de se connecter à la base (2) : ".mysql_error()); 
est mieux

A toi de retrouver les différences. Pense également à vérifier tes magic_quotes, car là s'ils sont desactivés, y'a des personnes qui vont s'amuser sur ton site :roll:

[MODE="pensée du soir || Espoir ?"]
Vivement PHP6. Le code php sera plus strict, et nous verrons pas mal de sites fermer à cause des injections SQL, magic_quotes étant appelé à disparaitre. Et là, ce sera la zone sur phpfrance "oué chui vn'u ya 5 en sur l'fofo, voo mavé filé un script ki ojordui a amné un hak 2 mon sit. c dvot fote !". Sérieusement messieurs les (futurs) programmeurs, codez proprement où ne codez pas svp (ou apprenez, c'est le must ça). Mais par pitié, ne nous dites plus "oué g pas ltemps", "c un ptit site" ou la phrase magique "j'y connais rien". Apprenez à bien le faire ou faites les faire par des professionnels.
LHDN92, pour un code plus propre, strict et correct.

(note: aucune attaque personnelle n'est faite, je ne cite personne. Si une personne se sent visé, elle ne pourrait que suivre mes conseils, c'est le plus bénéfique qu'il puisse lui arriver.)
[/MODE]

Posté : 27 nov. 2006, 01:47
par dunbar
Bonsoir,

Tu ne devrais pas suivre ta devise.
Chaque chose a sa place et doit respecter cetaines régles. La programmation n'y échape pas!.

Sépare tes variables PHP de toute autre, les litérals de variables, etc...

Une requête plante (ou fait planter un script) fais afficher la requête, teste-la directement, etc...
J'ai déjà fait afficher mes requette et elle semble fonctionner en tout elle m'affiche les bonne valeurs mais elle ne les introduit pas dans la TABLE
La première requette introduit bien les données , mais pas la deuxième.

Posté : 27 nov. 2006, 01:56
par DocType
J'ai déjà fait afficher mes requette et elle semble fonctionner en tout elle m'affiche les bonne valeurs mais elle ne les introduit pas dans la TABLE
La première requette introduit bien les données , mais pas la deuxième.
Ce n'est parce qu'un script fonctionne bancale qu'il fonctionne. Il insère bien ta première requête, mais c'est sale, très sale. Tu devrais revoir ton code et ta méthode, plutôt que d'essayer de faire foncitonner. Il y a des règles en PHP.
Arf, plus de joint de culasse. Bof, j'vais mettre des joints de robinet côte à côte, ca va faire pareil
Conseil supplémentaire : relire les remarques de Ajoloca et de moi-même te serait plus que bénéfique pour ton apprentissage :wink:

Posté : 27 nov. 2006, 02:05
par dunbar
J'ai déjà fait afficher mes requette et elle semble fonctionner en tout elle m'affiche les bonne valeurs mais elle ne les introduit pas dans la TABLE
La première requette introduit bien les données , mais pas la deuxième.
Ce n'est parce qu'un script fonctionne bancale qu'il fonctionne. Il insère bien ta première requête, mais c'est sale, très sale. Tu devrais revoir ton code et ta méthode, plutôt que d'essayer de faire foncitonner. Il y a des règles en PHP.
Arf, plus de joint de culasse. Bof, j'vais mettre des joints de robinet côte à côte, ca va faire pareil
Conseil supplémentaire : relire les remarques de Ajoloca et de moi-même te serait plus que bénéfique pour ton apprentissage :wink:

Bon ok je vous remercie pour votre aide, mais pour info c'est un script que j'ai fait faire par UN PROGRAMMEUR D ICI UN PROFESSIONNEL qui lui aussi fait beaucoup de belle remarques etc.. et pour lequel j'ai payer 60 € j'ai fait cela parce que j'ai besoin de ce script demain et comme je n'avais pas le temps de le faire moi même je me suis dit que j'allais payer pour le faire faire, mais evidament une fois le payement reçu plus de nouvelle et son script plante alors c'est sympa vos remarque (justifier) mais bon.............

Posté : 27 nov. 2006, 02:09
par DocType
Bon ok je vous remercie pour votre aide, mais pour info c'est un script que j'ai fait faire par UN PROGRAMMEUR D ICI UN PROFESSIONNEL qui lui aussi fait beaucoup de belle remarques etc.. et pour lequel j'ai payer 60 € j'ai fait cela parce que j'ai besoin de ce script demain et comme je n'avais pas le temps de le faire moi même je me suis dit que j'allais payer pour le faire faire, mais evidament une fois le payement reçu plus de nouvelle et son script plante alors c'est sympa vos remarque (justifier) mais bon.............
On fait des remarques pour montrer ce qu'il ne va pas, et ce programmeur j'espère qu'il n'est pas ViPHP, sinon, il y a des questions à élucider entre nous ^^
Nos remarques sont là pour t'aider à résoudre ton soucis en commencant par le début, la base de la prog. C'est en aucun cas des attaques personnelles. Maintenant, pour en revenir à ton "programmeur", demande lui un jour ce qu'est son "vrai" taff... :roll:

Posté : 27 nov. 2006, 02:19
par dunbar
"programmeur", demande lui un jour ce qu'est son "vrai" taff... :roll:
Boulanger peut-être :?:
Mais pour en revenir à mon soucis


Ma première requette fonctionne elle me crée bien mon dossier
echo $req = "INSERT INTO directory (name) VALUES ('".$folder_path."')";
        $res = mysqli_query($connection, $req) or die("Impossible de se connecter à la base (1) : ".mysql_error());
        echo $req = "INSERT INTO annonce (id_directory, type, prix, codepostal, nb_chambre, nb_garage, nb_file) VALUES ('".$id."', '".$type."', '".
        $prix."', '".$codepostal."', '".$chambres."', '".$garages."', '".$photo."');";
        $res = mysqli_query($connection, $req) or die("Impossible de se connecter à la base (2) : ".mysql_error());


Mais la deuxième ne fonctionne pas et avec un echo elle affiche ceci qui est correct :!:
12039INSERT INTO directory (name) VALUES ('clients/0')INSERT INTO annonce (id_directory, type, prix, codepostal, nb_chambre, nb_garage, nb_file) VALUES ('0', 'Maison', '', '', '0', '0', '0');Impossible de se connecter à la base (2) :
Je comprend pas :?

Posté : 27 nov. 2006, 02:21
par Ajoloca
Une question idiotte.

C'est la même personne qui t'a fait le script de création des tables que le script PHP utilise ?
Ou bien c'est QQ de l'autre site où tu as demandé de l'aide au même temps que je me cassai les r...eins pour t'aider et finalemet te trouver les erreurs?

C'est une accusation grâve que tu lances là !

Posté : 27 nov. 2006, 02:25
par Ajoloca
Autrement

Quand tu regardes ta requête, tu trouves quelle est correcte ?

Moi j'ai une autre impression. C'est une concaténation qui n'a pas de sense.

Posté : 27 nov. 2006, 02:26
par DocType
 $req = "select max(id_annonce) from annonce;"; 
        $res = mysqli_query($connection, $req) or die(mysqli_error()); 
        $id = 0; 
        while ($row = mysqli_fetch_row($res)){ 
            $id = $row[0]++; 
        } 
        if ($id == null){ 
            $id = 0; 
        } 
Ici, pas besoin de while() : le MAX() renvoie un seul champ...
J'ai pour proposition que tu affiches te requetes lors de l'affichage de ta page, et que tu les execute sous phpmyadmin pour voir si cela fonctionne :wink:

Posté : 27 nov. 2006, 02:29
par Ajoloca
Une autre remarque,

Si tu utilises mysqli pour tes queries, pourquoi utiliser mysql pour les messages d'erreur?

C'est normal que tu n'ais pas de messages d'erreur.

Là c'est la charrue avant les boeufs!

Posté : 27 nov. 2006, 02:33
par dunbar
Une autre remarque,

Si tu utilises mysqli pour tes queries, pourquoi utiliser mysql pour les messages d'erreur?

C'est normal que tu n'ais pas de messages d'erreur.

Là c'est la charrue avant les boeufs!
Oui je me pose la même question depuis qu'il ma envoyer le fichier je suis en train de corriger, et vérifier ta solution je revient ds 10 minutes