bon voila, je suis nouveau dans le monde du PHP et je me retrouve devant un problème que j'ai du mal a comprendre. j'ai un formulaire html qui recupère des champ et les transmet vers une base de données, mais mon problème est que les donnée ne s'enregistre pas, je ne trouve pas mon erreur, quelqu'un pourrai m'aider?

je poste le code de mon formulaire. Pour information, j'arrive a me connecter a ma base de données mais mes données ne sont pas prise en compte...

<html>
<form action="<?php echo $_SERVER'PHP_SELF'];?>" method="post" enctype = "application/x-www-form-urlencoded">
<fieldset>
<center>
    Civilité: <input type="text" name="civilite" size="40" value="" maxlength="35"> Nom: <input type="text" name="nom" size="40" value="" maxlength="35"><br>
    <br/>Prénom: <input type="text" name="prenom" size="40" value="" maxlength="70"> Secteur: <input type="text" name="secteur" size="40" value="" maxlength="70"><br>
    <br/>Statut: <input type="text" name="statut" size="40" value="" maxlength="70"> Mail: <input type="text" name="mail" size="40" value="" maxlength="255"><br>
    <br/>Fixe: <input type="text" name="fixe" size="40" value="" maxlength="70"> Mobile: <input type="text" name="mobile" size="40" value="" maxlength="255"><br/>  
    <br/>adresse : <input type="text" name="adresse" size="40" value="" maxlength="70"> ville: <input type="text" name="ville" size="40" value="" maxlength="255"><br>      
    <br/>code postal: <input type="text" name="CP" size="40" value="" maxlength="70"> Commentaire: <textarea name="commentaire" row="4" value="" maxlength="255"></textarea><br>
    <br/><input type="submit" value="Envoyer" name="envoyer">
</center>
</fieldset>
</form>
<?php
//--incusion des parametre et de la classe connex--
    include ("Classes/connex.inc.php") ;

//--verification des saisies--  

    if(!empty($_POST'civilite'])&& !empty($_POST'nom'])&& !empty($_POST'prenom'])&& !empty($_POST'secteur'])&& !empty($_POST'statu'])&& !empty($_POST'mail'])&& !empty($_POST'fixe'])&& !empty($_POST'mobile'])&& !empty($_POST'adresse'])&& !empty($_POST'ville'])&& !empty($_POST'CP'])&& !empty($_POST'commentaire']))
    {
        $civilite = ($_POST'civilite']) ;
        $nom = ($_POST'nom']) ;
        $prenom = ($_POST'prenom']) ;
        $secteur = ($_POST'secteur']) ;
        $statut = ($_POST'statut']) ;
        $mail = ($_POST'mail']) ;
        $fixe = ($_POST'fixe']) ;
        $mobile = ($_POST'mobile']) ;
        $adresse = ($_POST'adresse']) ;
        $ville = ($_POST'ville']) ;
        $CP = ($_POST'CP']) ;
        $com = ($_POST'commentaire']) ;

//--requette SQL d'entré de base--
    $requete ="INSERT INTO client VALUES(" .$civilite . ",".$nom.",".$prenom.",".$secteur.",".$statut.",".$mail.",".$fixe.",".$mobile.",".$adresse.",".$ville.",".$CP.",".$com.")" ;
    $idcom=connex ('adigit','myparam');
    $result=mysql_query($requete.$idcom) ;
    mysql_close($idcom);

        if (!$result) {
            echo "<h2>erreur d'insertion \n n°",mysql_errno(),':',mysql_error()."</h2>" ;
        }
        else {
            echo "<script type=\"text/javascript\">
            alert('vous êtes enregistré, votre numeros de client est:".mysql_insert_id()."')</script>";
        }
    }
else {
    echo "<br/><br/><h2><center>formulaire a compléter en entier</h2></center>";
}
?>
</html>

11 réponses


Defy
Auteur
Réponse acceptée

si notre id est en autoincrémente et en index, doit-on le rentré quand meme dans notre requête? j'ai pensé à ca, j'ai pas mit mon ID parceque je pensai qu'en autoincrémente il y avait pas besoin de le mettre

Déjà ta requête n'est pas bonne, pour faire un insert, tu dois d'abord spécifié les champs à remplir .
ex :

$sql = "INSERT INTO table (field1, field2) VALUES ($name, $nickname)";
Defy
Auteur

Hu!! super rapide ^^ ça fait plaisir!! merci de la réponse :-)

edit: je viens de tester et ça ne rentre toujours pas les données.

Peux tu éditer ton premier message et mettre ton code dans la balise code qu'on y voit mieux stp ?
De plus , à quoi correspond cette instruction :

$idcom=connex ('adigit','myparam');
Defy
Auteur

c'est l'appel de ma function connex avec en paramètre ma page qui contient toute mes infos sur mes bases de donnée

Peux tu faire un echo $requete et nous montrer le résultat ? Il est possible que se sois un problème de concaténation

A chaque valeur dans "values", ajoutes des simples guillements .
ex :

$requete ="INSERT INTO client (field ...)VALUES
('" .$civilite ."','".$nom."','".$prenom."','".$secteur."','".$statut."','".$mail."','".$fixe."','".$mobile."','".$adresse."','".$ville."','".$CP."','".$com."')" ;

Ou bien utiliser les requêtes préparées, avec "prepare" et "bind" ( doc])

Autrement, je te conseil d'utiliser l'extention PDO ou mysqli , qui sont des outils d'accès aux bases de données orientées objets, et beaucoup sur que mysql, qui au passage, est totalement obselete maintenant, et viendra à disparaître dans les années à venir

Defy
Auteur

merci pour le conseil, j'ai tenté d'utiliser PDO en premier mais seulement mon serveur MAMP a quelque problème avec PDO, j'ai des messages d'erreurs de tout les cotés et je ne me connecte pas a ma base.

edit: j'ai essayé avec la modification mais ca n'as rien fait... j'ai toujours aucune données qui s'insère dans ma base de donnée...

SQL INSERT INTO
L’insertion de données dans une table s’effectue à l’aide de la commande INSERT INTO. Cette commande permet au choix d’inclure une seule ligne à la base existante ou plusieurs lignes d’un coup.

Insertion d’une ligne à la fois

Pour insérer des données dans une base, il y a 2 syntaxes principales :

1 - Insérer une ligne en indiquant les informations pour chaque colonne existante (en respectant l’ordre)

Insérer une ligne en spécifiant les colonnes que vous souhaiter compléter. Il est possible d’insérer une ligne en renseigner seulement une partie des colonnes
Insérer une ligne en spécifiant toutes les colonnes
La syntaxe pour remplir une ligne avec cette méthode est la suivante :

INSERT INTO table VALUES ('valeur 1', 'valeur 2', ...)

Cette syntaxe possède les avantages et inconvénients suivants :

  • Obliger de remplir toutes les données, tout en respectant l’ordre des colonnes
    Il n’y a pas le nom de colonne, donc les fautes de frappe sont limitées. Par ailleurs, les colonnes peuvent être renommées sans avoir à changer la requête
    L’ordre des colonnes doit resté identique sinon certaines valeurs prennent le risque d’être complétée dans la mauvaise colonne

2 - Insérer une ligne en spécifiant seulement les colonnes souhaitées

Cette deuxième solution est très similaire, excepté qu’il faut indiquer le nom des colonnes avant « VALUES ». La syntaxe est la suivante :

  • La première consiste à indiquer les colonnes que l’ont souhaite renseigner :

    INSERT INTO table (nom_colonne_1, nom_colonne_2, ...
    VALUES ('valeur 1', 'valeur 2', ...)

A noter : il est possible de ne pas renseigner toutes les colonnes. De plus, l’ordre des colonnes n’est pas important.

Insertion de plusieurs lignes à la fois

Il est possible d’ajouter plusieurs lignes à un tableau avec une seule requête. Pour ce faire, il convient d’utiliser la syntaxe suivante :

INSERT INTO client (prenom, nom, ville, age)
 VALUES
 ('Rébecca', 'Armand', 'Saint-Didier-des-Bois', 24),
 ('Aimée', 'Hebert', 'Marigny-le-Châtel', 36),
 ('Marielle', 'Ribeiro', 'Maillères', 27),
 ('Hilaire', 'Savary', 'Conie-Molitard', 58);

A noter : lorsque le champ à remplir est de type VARCHAR ou TEXT il faut indiquer le texte entre guillemet simple. En revanche, lorsque la colonne est un numérique tel que INT ou BIGINT il n’y a pas besoin d’utiliser de guillemet, il suffit juste d’indiquer le nombre.

Non pas besoins

Defy
Auteur

Oki, ça ne fonctionne toujours pas... le problème est peut-être dans ma fonction de connexion. Peut-être qu'il y as une erreur.

<?php
    function connex($base,$param)
    {
        include_once ($param.".inc.php");
        $idcom=@mysql_connect(MYHOST ,MYUSER ,MYPASS) ;
        $idbase=@mysql_selet_db($base);
        if(!$idcom | !$idbase)
            {
                echo "<script type=text/javascript>" ;
                echo "alert('connexion impossible a la base de données')</script>" ;
            }
        return $idcom;
    }
?>

alors pour information j'ai une page qui s'appel paramètre.inc.php. Cette page contient les paramètre de mes deux bases de données connecté sur l'application. Ces paramètre sont récupérés par $param et le nom de ma base est récupéré par $base, voilà pour les infos.

edit: je le place ou mon echo $requete au faite?

Edit 2: Merci à tous pour l'aide, j'ai enfin réussi a me connecter. j'ai change de version de MAMP, je suis passé a MAMP pro et je suis passé aussi a PDO pour la connexion, ça fonctionne du mieux du coup