Récupération de variable dans un Formulaire

ViPHP
ViPHP | 2291 Messages

27 nov. 2006, 01:24

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
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 1776 Messages

27 nov. 2006, 01:30

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:

ViPHP
ViPHP | 2291 Messages

27 nov. 2006, 01:34

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
Modifié en dernier par dunbar le 27 nov. 2006, 01:44, modifié 1 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1961 Messages

27 nov. 2006, 01:42

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...
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 1776 Messages

27 nov. 2006, 01:44

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]

ViPHP
ViPHP | 2291 Messages

27 nov. 2006, 01:47

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.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 1776 Messages

27 nov. 2006, 01:56

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:

ViPHP
ViPHP | 2291 Messages

27 nov. 2006, 02:05

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.............
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Mammouth du PHP | 1776 Messages

27 nov. 2006, 02:09

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:

ViPHP
ViPHP | 2291 Messages

27 nov. 2006, 02:19

"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 :?
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1961 Messages

27 nov. 2006, 02:21

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à !
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 1961 Messages

27 nov. 2006, 02:25

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 1776 Messages

27 nov. 2006, 02:26

 $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:

ViPHP
ViPHP | 1961 Messages

27 nov. 2006, 02:29

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!
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 2291 Messages

27 nov. 2006, 02:33

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
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.