Requête erronée : PHP me renvoie un "false", syntaxe ?

Fermé
MyGoi Messages postés 4 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 26 avril 2016 - Modifié par jordane45 le 25/04/2016 à 20:45
 Utilisateur anonyme - 3 mai 2016 à 00:59
Bonjour à vous !

C'est mon tout premier message sur CCM alors j'espère que vous ne m'en voudrez pas si, par inadvertance, j'ai manqué à quelques codes du Forum :)

Je développe actuellement une application de facturation pour mon projet de fin d'année. Je m'occupe notamment de la partie de création de facture. Ainsi, j'ai donc crée un formulaire en PHP qui envoie les données requises pour créer une facture dans la table "facture" de la base de données.

Je travaille donc sur WAMP 3.0.0.

Les informations sur les champs de la table "facture" sont les suivants : (cf screenshot que j'ai joint)


et ma requête d'insertion la suivante:

(Tous les champs de ma requête qui seront précédés d'un $ sont des variables que j'ai stocké en préalable en PHP, pour ceux qui ne savent pas, et sont intégralement vérifiées tant au niveau du type qu'au niveau de la longueur)

"INSERT INTO facture VALUES (
                        '', 
   $Em_id, 
   $Cl_id, 
   '$Em_nom',
   '', 
   '$Cl_nom', 
   '', 
   $Fac_date_Em, 
   'Facture', 
   $Fac_dateEch,
   'gaga', 
   12/06/1993, 
   'Attente', 
   4, 
   'C', 
   $Fac_totalHT, 
   'gfdfg',
   '$Fac_numAv', 
   '$Fac_numBon', 
   6 ,
   'ga', 
   'traate', 
   0, 
   $Fac_tauxTVA, 
   $Fac_totalTTC, 
   '$Cl_nom')";


Je suis un novice en ce qui concerne SQL. En effet, je pense qu'il doit y avoir une erreur de syntaxe quelque part la dedans mais je n'ai aucune idée d'où elle se trouve.

En espérant n'avoir rien oublié, bien expliqué mon problème et vous remerciant d'avance pour votre aide !

Anthony aka. MyGoi, jeune passionné d'informatique et passionné d'informatique depuis tout jeune.

Si l'habit ne fait pas le moine, c'est parce que tu t'es trompé sur la couleur de ta toge.

EDIT : Ajout des balises de code.

4 réponses

jordane45 Messages postés 38175 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 13 mai 2024 4 667
25 avril 2016 à 20:46
Bonjour,

Fais donc un ECHO de ta requête pour voir ce qu'il t'affiche .... et si les valeurs ainsi affichées te paraissent correctes... testes la requête DIRECTEMENT dans ta BDD (via phpmyadmin).
Si ta requête contient une erreur...ça te l'affichera !

Si tu ne trouves pas l'erreur.....
Postes nous le résultat de l'ECHO ... et penses aussi à nous donner le code PHP qui te permet de lancer cette requête.
1
Bonjour

Tu peux déjà corriger le format de la date : 12/06/1993

La date doit être entre apostrophes ou doubles quotes comme un texte, le séparateur est le tiret et l'ordre est année-mois-jour. Tu aurais dû mettre : '1993-06-12'.

Ceci en complément des bons conseils de Jordane.

[edit] : Le format des dates s'applique à tous les champs date, y compris ceux pour lesquels tu fournis des variables comme $Fac_date_Em ou $Fac_dateEch.
0
MyGoi Messages postés 4 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 26 avril 2016
26 avril 2016 à 02:46
Bonjour,

Merci pour vos réponses rapides. Sur tes conseils, Jordane, j'ai fait le echo de la requête et ça tombe juste visiblement : les variables entrées dans la bdd semblent (pour la plupart car je n'ai que vérifié que très grossièrement celles-ci) être celles que j'ai dans le formulaire. Toujours sur tes conseils, j'ai essayé et corrigé via PHPMyAdmin et il en ressort que j'ai dû corriger la syntaxe sur quasiment toute la requête. J'ai aussi suivi les conseils de le père en mettant la bonne syntaxe autour des dates.

Bref, syntaxe corrigée (apostrophes autour des variables, chose qui me parait assez étrange car ça transformerait le contenu de la variable en simple chaine de caractère ?), l'erreur suivante apparait: "#1366 - Incorrect integer value: '' for column 'idFacture' at row 1".

J'ai alors une question qui se soulève: comment remplir cette colonne "idFacture" sachant qu'elle est auto-incrémentée ? (cf le screenshot de mon premier post)

Merci
0
MyGoi Messages postés 4 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 26 avril 2016
26 avril 2016 à 06:55
Une petite recherche sur internet m'a permis de trouver un NULL à insérer là où je devais mettre idFacture.

Cependant, mon problème persiste: je vous envoie mon code PHP dès maintenant dans un message général.
0
MyGoi Messages postés 4 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 26 avril 2016
26 avril 2016 à 06:58
Voici mon code PHP:



<?php include('connect.php');

function VerifierAdresseMail($adresse)
{
$Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';
if(preg_match($Syntaxe,$adresse))
return true;
else
return false;
}

//remplacement de la virgule par un point
function virgule($nombre)
{
$nombre = preg_replace('#(.+),(.+)#','$1.$2',$nombre);
return $nombre;
}

//recuperation des valeurs des champs


//Societe emettrice $EM_champ
if (!empty($_POST["nomEm"]) AND !empty($_POST["adresseMail"]) AND !empty($_POST["telEmetteur"]) AND !empty($_POST["adresse"])
AND !empty($_POST["siretEmettrice"]) AND !empty($_POST["tauxTva"]) AND !empty($_POST["numTVAIntra"]) AND !empty($_POST["numRC"]) AND !empty($_POST["IBAN"])
AND !empty($_POST["BIC"]) AND !empty($_POST["RIB"]) AND !empty($_POST["nomSocFac"]) AND !empty($_POST["adresseFacturation"]) AND !empty($_POST["telFact"]) AND !empty($_POST["dateEch"])


AND ((!empty($_POST["TJM"]) AND !empty($_POST["nbJPrest"])AND !empty($_POST["forfaitOuRegie"]=="Regie" ))
OR (!empty($_POST["pourcent"]) AND $_POST["forfaitOuRegie"]=="Forfait"))){
//controle des champs

$numContrat = $_POST["idContrat"];

//Societe Emettrice
$Em_id = $_POST["idEntiteEm"];
$Em_nom = $_POST["nomEm"]; // à utiliser liste deroulante ?
$mailTemp = $_POST["adresseMail"];
$Em_Mail = $_POST["adresseMail"];
$Em_telephone = $_POST["telEmetteur"];
$Em_Adresse1 = $_POST["adresse"];
$Em_Adresse2 = $_POST["adresse2"]; //facultatif
$Em_Siret = $_POST["siretEmettrice"];
$Em_TVAIntra = $_POST["numTVAIntra"];
$Em_NRC = $_POST["numRC"];
$Em_IBAN = $_POST["IBAN"];
$Em_RIB = $_POST["RIB"];
$Em_BIC = $_POST["BIC"];

//Societe facturée $F_champ
$Cl_id = $_POST["idEntiteCl"];
$Cl_nom = $_POST["nomSocFac"]; // à utiliser liste deroulante
$Cl_adresseFacturation = $_POST["adresseFacturation"];
$Cl_adresseFacturation2 = $_POST["adresseFacturation2"]; //facultatif
$Cl_adresseSociete = $_POST["adresseSocFacturee"]; //facultatif
$Cl_adresseSociete2 = $_POST["adresseSocFacturee2"]; //facultatif
$Cl_telephone = $_POST["telFact"];

//Information facture
$Fac_numBon = $_POST["numBon"]; //facultatif
$Fac_numAv = $_POST["numAv"]; //facultatif
$Fac_nbJ = $_POST["nbJPrest"];
$Fac_date_Em = date("d-m-Y");
$Fac_TJM = $_POST["TJM"];
$Fac_dateEch = $_POST["dateEch"];
$Fac_dateReg = $_POST["dateReglement"];
//$Fac_echJ = date_diff($Fac_dateEch,$Fac_date_Em);
$Fac_tauxTVA = $_POST["tauxTva"];

//pour le debogage

echo $Em_id . ("\n");
echo $Em_nom. ("\n");
echo $mailTemp.("\n");
echo $Em_telephone.("\n");
echo $Em_Adresse1.("\n");
echo $Em_Siret. ("\n");
echo $Em_TVAIntra . ("\n");
echo $Em_NRC.("\n");
echo $Em_NRC . ("\n");
echo $Em_IBAN .("\n") ;
echo $Em_RIB . ("\n");
echo $Em_BIC . ("\n");
echo $Cl_id .("\n");
echo $Cl_nom. ("\n");
echo $Cl_adresseFacturation . ("\n");
echo $Cl_adresseFacturation2 . ("\n");
echo $Cl_adresseSociete . ("\n");
echo $Cl_telephone. ("\n");
echo $Fac_numBon . ("\n");
echo $Fac_numAv . ("\n");
echo $Fac_nbJ . ("\n");
echo $Fac_date_Em .("\n") ;
echo $Fac_TJM . ("\n");
echo $Fac_dateEch .("\n") ;
echo $Fac_dateReg .("\n") ;
echo $Fac_tauxTVA .("\n") ;

if ($_POST["forfaitOuRegie"] == 'Forfait'){

$sql = "INSERT INTO facture VALUES ('',
$Em_id,
$Cl_id,
'$Em_nom',
'',
'$Cl_nom',
'',
$Fac_date_Em,
'Facture',
$Fac_dateEch,
'gaga',
'12-06-1993',
'Attente',
4,
'C',
$Fac_totalHT,
'gfdfg',
'$Fac_numAv',
'$Fac_numBon',
6 ,
'ga',
'traate',
0,
$Fac_tauxTVA,
$Fac_totalTTC,
'$Cl_nom')";

echo $sql;
$requete = mysqli_query($connection,$sql);
}
else {
$Fac_totalTTC = $Fac_TJM * $Fac_nbJ * (1 + $Fac_tauxTVA); //ignorez
$Fac_totalHT = 12; // Ignorez
$sql = "INSERT INTO facture VALUES ( NULL,
$Em_id,
$Cl_id,
'$Em_nom',
'',
'$Cl_nom',
'',
$Fac_date_Em,
'Facture',
$Fac_dateEch,
'gaga',
'12-06-1993',
'Attente',
4,
'C',
$Fac_totalHT,
'nnv',
$Fac_numAv,
$Fac_numBon,
$Fac_nbJ,
'gaga',
'gaga' ,
$Fac_TJM,
$Fac_tauxTVA,
$Fac_totalTTC,
'$Cl_nom')";

echo $sql;

$requete = mysqli_query($connection,$sql);
}

//affichage des résultats, pour savoir si l'insertion a marchée:
if($requete){
echo("L'insertion a été correctement effectuée pour la facturation<br>") ;
}
else
{
echo("L'insertion à échoué<br>") ;
}
}
include('creer.php');
?>



Si vous avez besoin de quelconque information, n'hésitez pas. Je consulte très régulièrement le sujet.

Merci d'avance, MyGoi.
0
Utilisateur anonyme
3 mai 2016 à 00:59
1 - Jordane t'a demandé le résultat du echo de la requête. Où est-il ?
2 - Je t'ai fait une remarque sur le format des champs date (TOUS les champs date) qui doit être aaaa-mm-jj et non pas jj-mm-aaaa. Tu ne sembles pas en avoir tenu compte.
0