Insertion de donnees dans mySQL (php)

Résolu/Fermé
P@mela - 27 juil. 2009 à 17:29
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 28 juil. 2009 à 19:32
Bonjour @ tous,
mon but cest d'insérer les infos personnelles que les usagers auront remplis d'un formulaire php dans une table mySQL.
J'arrive déjà a me connecter a la bd et au serveur.
Le code de l'insertion, je lai deja fait. Ca ne maffiche aucune erreur quand je l'exécute mais mon tableau dans mySQL ne se rempli pas..ca ecrit que ca na recu aucun enregistrement et je ne peu pas afficher les resultats parce quil ny a aucune donnee dans la table..
Donc voila, je vais copier/coller mon code
Merci bcp pour l'aide!

CODE PHP (formulaire.php)
<?php
// CONNECTION A MYSQL ET A LA BASE DE DONNEES
mysql_connect("localhost","root","") or die("<br>IMPOSSIBLE DE SE CONNECTER A MYSQL");
echo "Connection établie avec mySQL <br/>";
mysql_select_db("participantscolloque") or die("<br>IMPOSSIBLE DE SE CONNECTER A LA BASE DE DONNEES");
echo "Connection établie avec la base de données";
?>
<?php
if (isset($_POST['Submit']))
{
if(isset($_POST['prenom']) && isset($_POST['nom']) && isset($_POST['telephone']) && isset($_POST['courriel']) && isset($_POST['organisme']) && isset($_POST['fonction']) && isset($_POST['ordre']))
{
if(!empty($_POST['prenom']) && !empty($_POST['nom']) && !empty($_POST['telephone']) && !empty($_POST['courriel']) && !empty($_POST['organisme']) && !empty($_POST['fonction']) && !empty($_POST['ordre']))
{
echo '<div><p class="titres"><b>Merci d\'avoir rempli le formulaire!</p> </b><br>
<p class="texte"><i>Vos informations sont les suivantes: </i></p><br>
<p class="textePetit"><u><b>Prénom</b></u>: ' .$_POST['prenom']. ' <br><br>
<u><b>Nom</b></u>: ' .$_POST['nom']. ' <br><br>
<u><b>Téléphone (bureau)</b></u>: ' .$_POST['telephone']. ' </p><br><br>';
if(!empty($_POST['telecopieur']))
{
echo '<div><p class="textePetit"><u><b>Télécopieur</b></u>:' .$_POST['telecopieur']. ' </p> <br>';
}
echo '<div><p class="textePetit"><u><b>Courriel</b></u>: ' .$_POST['courriel']. ' <br><br>
<u><b>Organisme</b></u>: ' .$_POST['organisme']. ' <br><br>
<u><b>Fonction</b></u>: ' .$_POST['fonction']. ' <br><br>
<u><b>Ordre d\'enseignement</b></u>: ' .$_POST['ordre']. ' </p><br><br>';

}
else
{
echo '<div><p class="texte"><b> Veuillez remplir tous les champs marqués d\'une astérisque (*) afin de pouvoir continuer </b></p>';
}
}
else
{
echo '<div> Les variables n\'existent pas';
}
}
else { }
?>


<?php
// INSERTION DE DONNEES DANS LA BD
// recuperation des valeurs des champs
// est-ce quil faut faire une cnx avant la recuperation des donnees? ou bien une seule fois cest assez? je lai fait au debut du code...
//$id=$_POST['id'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$fonction=$_POST['fonction'];
$org=$_POST['organisme'];
$tel=$_POST['telephone'];
$telecopieur=$_POST['telecopieur'];
$courriel=$_POST['courriel'];
$ordre=$_POST['ordre'];
//$date=$_POST['date'];

if(isset($_POST['prenom']) && isset($_POST['nom']) && isset($_POST['telephone']) && isset($_POST['courriel']) && isset($_POST['organisme']) && isset($_POST['fonction']) && isset($_POST['ordre']))
{
if(!empty($_POST['prenom']) && !empty($_POST['nom']) && !empty($_POST['telephone']) && !empty($_POST['courriel']) && !empty($_POST['organisme']) && !empty($_POST['fonction']) && !empty($_POST['ordre']))
{
mysql_query("INSERT INTO participantsformations(nom,prenom,tel,telecopieur,courriel,organisme,fonction,ordre) VALUES ('$nom','$prenom','$tel','$telecopieur','$courriel','$org','$fonction','$ordre')"); // creation de la requete sql
//echo '<center>'.$sql.'<br>'; //affichage de la requete sql
//echo "Data Inserted :)";
//$query=odbc_do($cnx,$sql) or die (odbc_error());
//if($query)
//echo '<center>L\'insertion a été correctement effectuee</center>';
//else
//echo '<center>L\'insertion a échouee</center>';

//odbc_close($cnx);
}
else
{
echo '<div><p class="texte"><b> Erreur </b></p>';
}
}
else
{}
?>
A voir également:

7 réponses

okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
27 juil. 2009 à 19:07
INSERT INTO participantsformations(nom,prenom,
Ta table s'appelle bien participantsformations?
met un espace entre participantsformations et la parenthèse.

Je ne vois pas à quoi sert odbc_do et odbc_close. Tu m'expliques?
Pour terminer, que contient $cnx ? elle n'est déclarée nul part.

ps : 2 petits trucs dans ton code, cela ne sert a rien de faire un isset juste avent un !empty.
empty regarde si la variable est vide. !empty fait l'inverse.
isset regarde si la variable existe qu'elle soit vide ou non.
donc si tu fais juste un !empty, cela fonctionnera car si la variable n'existe pas, c'est comme si elle était vide.

Ensuite, tu ne vérifie pas ce que les visiteurs entrent dans les champs de ton formulaire. C'est très dangereux car premièrement, le visiteur peut mettre n'importe quoi.
par exemple, pour le téléphone, il pourrait mettre "bouh"
et dexièmement, c'est très facile de pirater ton site car tu ne le protège pas.
fais attention ;)
1
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
28 juil. 2009 à 11:18
tu met 2 fois mysql_query. une seule fois c'est assez.
$result = mysql_query("INSERT INTO participantsformations (nom,prenom,tel,telecopieur,courriel,organisme,fonction,ordre) VALUES ('$nom','$prenom','$tel','$telecopieur','$courriel','$org','$fonction','$ordre') ");


rajoute ceci après ta requete :
if (!$result)
{
echo 'Requete invalide : ' . mysql_error;
}

çela affichera ton erreur détaillé s'il y a une erreur sql.

j'ai relu ton code et ceci, ne sert a rien, tu peux l'enlever ;)
else { }


S'il n'y a pas d'erreur sql, je ne vois pas ce qui cloche :(
montre moi alors la structure de ta table.
1
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
28 juil. 2009 à 16:14
Ta clé primaire est importante, c'est ce qui te permet d'identifier chaque ligne.
Tu dois donc effectivement mettre un auto incrémentation.
C'est à dire que sql va automatiquement incrémenter le nombre précédent de ta base et la mettre comme nouvelle valeur.
En clair, tu aura une suite de nombre commencent par 1.
Puisque sql gère cette colone, tu ne dois pas la mettre dans ton insert.
Tu ne dois pas mettre de valeur par défaut. juste dire que cette colonne contient uniquement des chiffres donc choisit par exemple INT et comme taille, met 10 (sincèrement, je ne sais pas ce que sa change si tu met 5 ou 100 :p )

Pour la date, tu as différent format.
le timestamp (temps en seconde depui le 1/1/1970)
DATE (date au format YYYY-dd-mm)
DATETIME (date et heure au format YYYY-dd-mm HH:ii:ss)
TIME c'est juste l'heure.

Si tu veux utiliser les dates "concrètes" (pas le temps unix (timestamp)), tu met dans l'insert NOW() au lieu de '$date' (le NOW() ne doit pas être entre guillemets)

SQL ajoutera alors la date et l'heure à la quelle la page à été chargé soit la date actuel.

et en bonus, lorsque tu fais un select d'une date, écrit ce qui suit au lieu de simplement ta date :
DATE_FORMAT(nom_de_la_colone_date, '%d/%m/%Y à %H:%i') as date
lorsque tu affichera date, tu aura alors une date au format dd/mm/YYYY à HH:ii. (Tu peux bien sur adapter ton code.
voilà, je crois que après ça, tu ne devrais plus avoir d'erreur :)
1
Salut! :)

1) oui le nom de mon tableau cest bien participantsformations. Jai rajouté lespace entre le nom et la parenthese!
2)odbc_do et odbc_close sont mis en commentaires parce que avant jutilisais des fonctions odbc_connect etc.. a la place de mysql_connect etc..
mais ils sont inutiles et je vais les enlever :)
ah et cnx cetait une ancienne variable de connection kan jutilisais la methode avec odbc
3)merci pour la mise en garde p/r a la protection de mon application! jy avait pas penser mais en +, il y a des gens qui peuvent mettre des bouts de code dans les champs et effacer les donnees de ma bd! :S eskil y a une commande ki peut prevenir ca?
4)mon probleme est pas enko resolu puiske mes donnees ne rentre pas dans ma table mySQL.. :(
Ca maffiche (dans phpmyadmin) kil ny a eu aucun enregistrement et je ne peu pas afficher le contenu du tableau (je peu seulement voir sa structure..)

Eske tu saurais cest koi le probleme? eske cest un probleme de syntaxe ou bien cest + ke ca?

p.s jai modifier une partie et elle est rendu comme ca:

$query=mysql_query("INSERT INTO participantsformations (nom,prenom,tel,telecopieur,courriel,organisme,fonction,ordre) VALUES ('$nom','$prenom','$tel','$telecopieur','$courriel','$org','$fonction','$ordre')");

$result=mysql_query($query);

A la place de :
mysql_query("INSERT INTO participantsformations (nom,prenom,tel,telecopieur,courriel,organisme,fonction,ordre) VALUES ('$nom','$prenom','$tel','$telecopieur','$courriel','$org','$fonction','$ordre')");

Merci :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut! :)
Bon alors finalement jai modifier ma ligne de requete iinsert pour:
$query="INSERT INTO participantsformations (nom,prenom,tel,telecopieur,courriel,organisme,fonction,ordre)VALUES('$nom','$prenom','$tel','$telecopieur','$courriel','$org','$fonction','$ordre')"; // creation de la requete sql

$result=mysql_query($query) or die( mysql_error() );

donc comme ca, je nai qu'un seul mysql_query!

Aussi, j'ai rajouter ce que tu ma dit (pour trouver lerreur) er jai effectivement eu une erreur. Au debut, ca ma mis: Field 'No' doesn't have a default value
Or, le champ No est ma clé primaire mais je ne linclut pas dans mon code parce que je sais pas comment l'écrire..je veux dire, est-ce qu'il y a une manière spéciale pour écrire le code d'une variable pour que ça l'identifie comme étant une clé primaire?
Bref, pour régler le problème, jai cocher Auto-Increment pour le champ No (dans mySQL)..je sais pas si cest la bonne chose ou bien il fallait mettre une valeur par defaut..

Et mtn ke jai regler ce probleme, il y a ce message derreur loll:
Field 'DateInscription' doesn't have a default value

Mais pour la date, je ne sais pas lequel mettre, jai essayer de sélectionner current_timestamp pour la valeur de defaut mais ca ma dit que je pouvais pas faire ca...

Donc voila!
0
Ouiii merci bcp bcp! :)
Ca marche très bien! mes données sont mtn stockées dans ma table mySQL et la date et l'heure s'affichent aussi!!! :D

Merci de ton aide! :)

Pamela
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
28 juil. 2009 à 19:32
Pas de soucis :)
Tu as mon pseudo si tu veux me contacter :)
0