pb requete

donatello
Invité n'ayant pas de compte PHPfrance

01 juin 2005, 13:04

Bonjour,
j'effectue une requete insert en php sur une base mysql.
$query0 ="INSERT INTO corbeille_annonces VALUES('".$ret0['Idannonce']."','".$ret0['Date'] ."','".$ret0['Type']."','".$ret0['Pieces']."','".$ret0['Adresse']."','".$ret0['Cpostal']."','".$ret0['Ville']."','".$ret0['Prix']."','".$ret0['Surface']."','".$ret0['Annonce']."')";

$result0 = mysql_query($query0);
Cette requete marche mais il y a une autre requete qui est effectuée systématiquement sans que je le demande:
INSERT INTO corbeille_annonces VALUES ('','0000-00-00 00:00:00','','','','','','','','');
Je me retrouve donc avec 2 enregistrements alors que je n'en ai de mandé qu'un...je ne comprends pas ce qui se passe!

Invité
Invité n'ayant pas de compte PHPfrance

01 juin 2005, 13:10

et quand je fais
echo $query0;
pour voir ce qui a exécuté, c'est la requete vide qu'il m'est retournée, pourtant l'autre est aussi exécutée!

Mammouth du PHP | 19672 Messages

01 juin 2005, 13:14

Il doit y avoir un copier/coller de la requête sans la modification du nom de variable un peu plus loin dans ton code, vérifie bien
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

01 juin 2005, 13:54

Ben non...
En fait je suis en train de créer une interface qui permet de sélectionner des annonces et de les mettre dans une corbeille.
Voici tout le code de ma page:
//sélection de l'annonce dans sa table
$query0 ="SELECT * FROM $table WHERE Idannonce ='" . $a0 . "'";
$result0 = mysql_query($query0);
$ret0 = mysql_fetch_array ($result0);

//insertion de l'annonce dans la table corbeille
$query1 ="INSERT INTO corbeille_annonces VALUES('".$ret0['Idannonce']."','".$ret0['Date'] ."','".$ret0['Type']."','".$ret0['Pieces']."','".$ret0['Adresse']."','".$ret0['Cpostal']."','".$ret0['Ville']."','".$ret0['Prix']."','".$ret0['Surface']."','".$ret0['Annonce']."')";
$result1 = mysql_query($query1);

//suppression de l'annonce dans sa table
$query2 ="DELETE FROM $table WHERE Idannonce ='" . $a0 . "'";
$result2 = mysql_query($query2);
c'est tout, ya pas d'autre code, ça marche et je n'ai aucun message d'erreur à part cette requete vide qui vient me bousiller une journée qui cometnçait bien.

Invité
Invité n'ayant pas de compte PHPfrance

02 juin 2005, 00:04

personne ne voit ce qui ne va pas?

Mammouth du PHP | 19672 Messages

02 juin 2005, 00:07

Je ne vois rien d'anormal et en tous cas rien qui puisse faire doubler la requête avec des éléments vides. :?
L'erreur doit être ailleurs...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

03 juin 2005, 10:55

j'ai peut e^tre trouvé la source du pb mais je ne saurais l'expliquer:
Ma table annonces contient un champ IdAnnonce qui va de 1 à 10.
Quand j'insère les annonces dans la table corbeille qui est vide, Mysql insère automatiquement une ligne vide dont le champ IdAnnonce vaut 0.

Ensuite, les autres insretions se font correctement.

A quoi est dû ce comportement de Mysql?

Mammouth du PHP | 19672 Messages

03 juin 2005, 11:02

tu fais une insertion en boucle ? Si c,est le cas, fais voir le code complet de la boucle.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

03 juin 2005, 11:09

Si tu ne donnes pas tous tu nous mets dans un contexte restreint, parceque ton erreur est liée au fonctionnement de ta page et non à MYSQL.
Si au démarrage de ta page les deux variables $table et $a0 dont dépondent tes requêtes sont vides et puisqu'aucune condition n'empêche l'exécution de l'INSERT, c'est sûr que tu vas avoir un premier enregistrement vide au début.

Correction:
//Test de validité des variables 
if (isset($table) && trim($table) != "" && isset($a0)) {

//sélection de l'annonce dans sa table 
$query0 ="SELECT * FROM $table WHERE Idannonce ='" . $a0 . "'"; 
$result0 = mysql_query($query0); 
$ret0 = mysql_fetch_array ($result0); 

//Test du résultat
if ($ret0) {

//insertion de l'annonce dans la table corbeille 
$query1 ="INSERT INTO corbeille_annonces VALUES('".$ret0['Idannonce']."','".$ret0['Date'] ."','".$ret0['Type']."','".$ret0['Pieces']."','".$ret0['Adresse']."','".$ret0['Cpostal']."','".$ret0['Ville']."','".$ret0['Prix']."','".$ret0['Surface']."','".$ret0['Annonce']."')"; 
$result1 = mysql_query($query1); 

//suppression de l'annonce dans sa table 
$query2 ="DELETE FROM $table WHERE Idannonce ='" . $a0 . "'"; 
$result2 = mysql_query($query2); 

}//Fin if $ret0
}//Fin if isset

--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène