Page 1 sur 2

Le script n'inserre aucune données dans la bdd...

Posté : 27 oct. 2005, 22:26
par phylis
Bonjour,
Le script que j'ai créer ci-dessous (qui récupère les données d'un formulaire pour les insérer dans la bdd), ne m'affiche aucun message d'erreur, cependant il ne m'inserre aucunes données dans la bdd ! 8-[
(Dans le formulaire il y notament a des cases à cocher.)
<?

\\connexion a la base
*************
*************

$semaine = $_POST['semaine'];
$jour = $_POST['jour'];
$num_jour = $_POST['num_jour'];
$mois = $_POST['mois'];
$annee = $_POST['annee'];
$minimes = $_POST['Minimes'];
$benjamins = $_POST['Benjamins'];
$poussins = $_POST['Poussins'];
$minipoussins = $_POST['Mini-Poussins'];
$type = $_POST['type'];
$l_rdv = $_POST['lieu_rdv'];
$rdv_h = $_POST['rdv_heure'];
$rdv_min = $_POST['rdv_minutes'];
$commentaires = $_POST['commentaires'];

$date = "'.$jour.' '.$num_jour.' '.$mois.' '.$annee.'";
$h_rdv = "'.$rdv_h.'h'.$rdv_min.'"; 

for ($i = 0; $i < count($categorie); $i++)
{
    echo "$categorie[$i] . ";
}


mysql_query("INSERT INTO matchmail(id,semaine,date,type,h_rdv,l_rdv,commentaires) 

VALUES('', '$semaine', '$date', '$type', '$h_rdv', '$l_rdv', '$commentaires')");

print("<center><br><br> $type ajouté avec succès !</center>");

?>
Merci d'avance ! :wink:

Posté : 27 oct. 2005, 22:41
par Invité
2 début de piste :
voir htmlentities
voir stripslashes
voir ENT_QUOTES

si magic_quotes_gpc sont a "on" :

$semaine = stripslashes(htmlentities($_POST['semaine']));

Posté : 27 oct. 2005, 23:01
par phylis
??
J'ai chercher dans le manuel PHP la signification de ce que tu as écrit, mais je ne vois pas où est le problème dans mon script ? 8-[

Posté : 27 oct. 2005, 23:16
par Truc
Salut, 1 autre piste ... le nom de ton champ date !!

"date" étant un nom réservé par mysql, échange le par date_mail ou dte ou autre encore, et refait un test.

De plus c'est quoi ce format de date ?
$date = "'.$jour.' '.$num_jour.' '.$mois.' '.$annee.'";
qui d'ailleur a des guillemets de trop

Posté : 27 oct. 2005, 23:21
par Pieterjan
Ce qui est drôle c'est que tu dis que la requete est effectuée avec succès, sans le vérifier d'abord :D
rajoute un truc de ce genre, pour voir si une erreur est apparue:
$requete = "INSERT INTO etc...";
$resultat = mysql_query($requete) 
or die("Une grosse erreur est survenue : <br> requete: " . $requete . "<br> erreur: (" . mysql_errno() . ") " . mysql_error());
ainsi, tu verras pour de vrai si tout c'est bien passé ou pas .

Posté : 27 oct. 2005, 23:22
par phylis
Salut, 1 autre piste ... le nom de ton champ date !!

"date" étant un nom réservé par mysql, échange le par date_mail ou dte ou autre encore, et refait un test.
J'ai testé avec $date_match mais ca ne change rien ! :(
De plus c'est quoi ce format de date ?
PHP:
$date = "'.$jour.' '.$num_jour.' '.$mois.' '.$annee.'";

qui d'ailleur a des guillemets de trop
Jeudi 27 Octobre 2005
Ou sont les guillemets en trop O:)

Posté : 27 oct. 2005, 23:23
par Cyrano
Si dans les données il y a du texte comportant par exemple des apostrophes, elles vont créer un conflit avec les apostrophes encadrant les valeurs à insérer. il faut donc les protéger. L'utilisation de addslashes() (et non stripslashes() qui les enlève)

Ensuite, ton code aurait besoin d'un peu de ménage:
<?
/*
connexion a la base
*************
*************
*/
$semaine      = $_POST['semaine'];
$jour         = $_POST['jour'];
$num_jour     = $_POST['num_jour'];
$mois         = $_POST['mois'];
$annee        = $_POST['annee'];
$minimes      = $_POST['Minimes'];
$benjamins    = $_POST['Benjamins'];
$poussins     = $_POST['Poussins'];
$minipoussins = $_POST['Mini-Poussins'];
$type         = $_POST['type'];
$l_rdv        = $_POST['lieu_rdv'];
$rdv_h        = $_POST['rdv_heure'];
$rdv_min      = $_POST['rdv_minutes'];
$commentaires = $_POST['commentaires'];

$date  = $jour." ".$num_jour." ".$mois." ".$annee;
$h_rdv = $rdv_h."h".$rdv_min;

for ($i = 0; $i < count($categorie); $i++)
{
    echo "$categorie[$i] . ";
}
mysql_query("INSERT INTO matchmail(semaine,date,type,h_rdv,l_rdv,commentaires) ".
            "VALUES('". $semaine ."', '". $date ."', '". $type ."', '". $h_rdv ."', '". $l_rdv ."', '". $commentaires ."')");

print("<center><br><br>". $type ." ajouté avec succès !</center>");
?>
-1- c'est plus lisible comme ça;
-2- les concaténation, c'est pas n'importe comment pour la création des heures et dates ou les valeurs dans la requête SQL;
-3- dans la requête d'insertion, préciser un champ pour mettre une valeur vide ne sert à rien: on enlève le champ et les apostrophes vides tout simplement.

Posté : 27 oct. 2005, 23:33
par phylis
Cyrano, j'ai remplacé ton code par le mien, effectivement ca marche ! :D

Par contre dans la bdd, dans le champ categorie il y a marqué NULL, ce qui est logique puisque lorsque le script insère les données dans la bdd il n'y insère pas le champ catégorie, mais comment faire pour insérer le résultat de cette boucle

Code : Tout sélectionner

for ($i = 0; $i < count($categorie); $i++) { echo "$categorie[$i] . "; }
dans le champ categorie de la bdd ?


Encore merci à vous tous pour votre aide ! :wink:

Posté : 27 oct. 2005, 23:45
par Truc
Je m'explique mieux
Salut, 1 autre piste ... le nom de ton champ date !!

"date" étant un nom réservé par mysql, échange le par date_mail ou dte ou autre encore, et refait un test.
J'ai testé avec $date_match mais ca ne change rien ! :(
Je parlais du nom du CHAMP pas de la variable, ton champ s'appel "date" c'est lui qu'il faut changer ... ça peut éviter des problemes :wink:
De plus c'est quoi ce format de date ?
PHP:
$date = "'.$jour.' '.$num_jour.' '.$mois.' '.$annee.'";

qui d'ailleur a des guillemets de trop
Jeudi 27 Octobre 2005
Ou sont les guillemets en trop O:)

oui bien sur comme ça c'est plus clair si ton champ est en varchar , mais ça ne va pas etre évident de faire des traitement sur la date :?

Pour ton autre probleme ... il n'y a pas de champ catégorie proposé dans la requete !?

c'est ce champ qui doit contenir les valeurs des cases cochées ?

ou as tu plusieurs champ... un pour chaque valeur de case cochée ?

la variable $catégorie n'est pas initialisée avec la variable POST correspondant au cases cochées !

Posté : 27 oct. 2005, 23:57
par Pieterjan
c'est quoi $categorie ? un tableau ?
sinon tu imploses le tout dans une chaîne de caractères, et tu l'exploses quand t'en as besoin, c'est tranquille.

$cat=implode("|", $categorie);

*****
$categorie=explode("|", $cat);

Posté : 28 oct. 2005, 00:05
par phylis
Les cases à cocher sont de ce type:
[ ] otpion 1
[ ] option 2
[ ] option 3
[ ] option 4

Et ce que je veux c'est:
par exemple on a cette situation:
[x] otpion 1
[x] option 2
[ ] option 3
[x] option 4
eh bien il faudrait que le script m'insère au niveau du champ 'categorie' ceci:
option 1, option 2, option 4:

Posté : 28 oct. 2005, 00:14
par Truc
je suppose que tu as des cases a cocher avec comme attribut "name" quelque chose comme ça .... name="categorie[]"... avec des [].
$categorie= $_POST['categorie'];
$categorie=implode (",",$categorie);
et tu poura ainsi inserer $categorie dasn le champ prévu.

Posté : 28 oct. 2005, 00:16
par phylis
Voici les cases à cocher:

Code : Tout sélectionner

<input type="checkbox" name="categorie[]" value="Minimes"> Minimes<br> <input type="checkbox" name="categorie[]" value="Benjamins"> Benjamins<br> <input type="checkbox" name="categorie[]" value="Poussins"> Poussins<br> <input type="checkbox" name="categorie[]" value="Mini-Poussins"> Mini-Poussins<br>

Posté : 28 oct. 2005, 00:19
par Truc
oui oui , merci (impecable comme ça):lol:

tu n'a plus qu'a mettre en place ce que je viens de dire, avec une requete comme tu l'a deja :wink:

Posté : 28 oct. 2005, 00:27
par phylis
Super, ca marche !! 8)

Merci à vous tous pour votre aide ! :wink: