IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Commande (INSERT *) ne fonctionne pas


Sujet :

Langage PHP

  1. #1
    Membre à l'essai Avatar de v4lUs
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2019
    Messages : 22
    Points : 20
    Points
    20
    Par défaut Commande (INSERT *) ne fonctionne pas
    Salut à tous,

    Pour faire bref, je rencontre un problème sur l'édition de mon code PHP.

    J'ai beau ré-éditer le script, je ne vois pas ce qui ne va pas...

    L'objectif du script : une simple nouvelle entrée dans une table en fonction d'une formulaire.

    Voici le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    <?php
    //Connecting to database
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=bdd;charset=utf8', 'user', 'mdp');
    }
    catch (Exception $e)
    {
        die('Erreur : ' . $e->getMessage());
    }
    $bdd = new PDO('mysql:host=localhost;dbname=bdd;charset=utf8', 'user', 'mdp');
    //Setting values
    $cliname = $_POST['client']; //Client
    if (isset($_POST['tel'])) //Telephone
    {
    	if ($_POST['tel'] !== "")
    	{
    		$clitel = $_POST['tel'];
    	}
    	else
    	{
    		$clitel = "Non défini";
    	}
    }
    else
    {
    	$clitel = "Non défini";
    }
    $climail = $_POST['atmail']; //Adresse mail
    $clidate = $_POST['date']; //Date souhaitee
    if (isset($_POST['time'])) //Heure souhaitee
    {
    	if ($_POST['time'] !== "")
    	{
    		$clitime = $_POST['time'];
    	}
    	else
    	{
    		$clitime = "Non défini";
    	}
    }
    else
    {
    	$clitime = "Non d?ni";
    }
    $formule = $_POST['formule']; //Formule
    //Calculating $servvalue
    function ServCalc($g, $l, $e, $f)
    {
    	$serv_ans = $g + $l + $e + $f;
    	return $serv_ans;
    }
    if (isset($_POST['gonflage']))
    {
    	$serv_g = 1 ;
    }
    else
    {
    	$serv_g = 0 ;
    }
    if (isset($_POST['lustrage']))
    {
    	$serv_l = 2 ;
    }
    else
    {
    	$serv_l = 0 ;
    }
    if (isset($_POST['essuigla']))
    {
    	$serv_e = 5 ;
    }
    else
    {
    	$serv_e = 0 ;
    }
    if (isset($_POST['flocage']))
    {
    	$serv_f = 9 ;
    }
    else
    {
    	$serv_f = 0 ;
    }
    $services = ServCalc($serv_g, $serv_l, $serv_e, $serv_f);
    $marque = $_POST['marque'];
    $modele = $_POST['modele'];
    //Posting
    $bdd->exec('INSERT INTO reserva(client, tel, mail, date, time, formule, services, marque, modele) VALUES(\''.$cliname.'\', \''.$clitel.'\', \''.$climail.'\', \''.$clidate.'\', \''.$clitime.'\', \''.$formule.'\', \''.$services.'\', \''.$marque.'\', \''.$modele.'\')');
    //Leaving
    header ('Location: reserv.php');
    ?>
    Voilà, j'éspere que vous avez une idée de ce qui flanche...

    See ya !

    PS : Les variable $_POST['*'] sont correctes, je précise...

  2. #2
    Membre actif
    Inscrit en
    Août 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 191
    Points : 263
    Points
    263
    Par défaut
    Salut,

    si tu affiche les erreurs PDO ça donne quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?php
    //Connecting to database
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=bdd;charset=utf8', 'user', 'mdp');
    }
    catch (Exception $e)
    {
        die('Erreur : ' . $e->getMessage());
    }
    $bdd = new PDO('mysql:host=localhost;dbname=bdd;charset=utf8', 'user', 'mdp');
    //Setting values
    $cliname = $_POST['client']; //Client
    if (isset($_POST['tel'])) //Telephone
    {
    	if ($_POST['tel'] !== "")
    	{
    		$clitel = $_POST['tel'];
    	}
    	else
    	{
    		$clitel = "Non défini";
    	}
    }
    else
    {
    	$clitel = "Non défini";
    }
    $climail = $_POST['atmail']; //Adresse mail
    $clidate = $_POST['date']; //Date souhaitee
    if (isset($_POST['time'])) //Heure souhaitee
    {
    	if ($_POST['time'] !== "")
    	{
    		$clitime = $_POST['time'];
    	}
    	else
    	{
    		$clitime = "Non défini";
    	}
    }
    else
    {
    	$clitime = "Non d?ni";
    }
    $formule = $_POST['formule']; //Formule
    //Calculating $servvalue
    function ServCalc($g, $l, $e, $f)
    {
    	$serv_ans = $g + $l + $e + $f;
    	return $serv_ans;
    }
    if (isset($_POST['gonflage']))
    {
    	$serv_g = 1 ;
    }
    else
    {
    	$serv_g = 0 ;
    }
    if (isset($_POST['lustrage']))
    {
    	$serv_l = 2 ;
    }
    else
    {
    	$serv_l = 0 ;
    }
    if (isset($_POST['essuigla']))
    {
    	$serv_e = 5 ;
    }
    else
    {
    	$serv_e = 0 ;
    }
    if (isset($_POST['flocage']))
    {
    	$serv_f = 9 ;
    }
    else
    {
    	$serv_f = 0 ;
    }
    $services = ServCalc($serv_g, $serv_l, $serv_e, $serv_f);
    $marque = $_POST['marque'];
    $modele = $_POST['modele'];
    //Posting
    $bdd->exec('INSERT INTO reserva(client, tel, mail, date, time, formule, services, marque, modele) VALUES(\''.$cliname.'\', \''.$clitel.'\', \''.$climail.'\', \''.$clidate.'\', \''.$clitime.'\', \''.$formule.'\', \''.$services.'\', \''.$marque.'\', \''.$modele.'\')');
    var_dump("\nPDO::errorCode(): ", $bdd->errorCode(), $bdd->errorInfo());
    //Leaving
    header ('Location: reserv.php');
    ?>

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour avoir les erreurs PDO, tu peux activer les exceptions au niveau de la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $bdd = new PDO('mysql:host=localhost;dbname=bdd;charset=utf8', 'user', 'mdp');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Au passage, tu fais 2 fois la connexion à la base et ta requête n'est pas protégée du tout contre les injections vu que tu injectes directement dedans les données issues de $_POST.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ta "gestion d'erreur" est abérrante.

    On n'enregistre pas en BDD "non défini" !

    Fais une VRAIE "Gestion d'erreurs"

    Au lieu de :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    //Setting values
    $cliname = $_POST['client']; //Client
    if (isset($_POST['tel'])) //Telephone
    {
    	if ($_POST['tel'] !== "")
    	{
    		$clitel = $_POST['tel'];
    	}
    	else
    	{
    		$clitel = "Non défini";
    	}
    }
    else
    {
    	$clitel = "Non défini";
    }
    écris :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // Gestion d'ERREURS
    $errors = array();
     
    $cliname = ( isset($_POST['client'] )? $_POST['client'] : '';
    if( empty($cliname) ){ $errors[] = 'Nom du client requis'; } // champ obligatoire
     
    $clitel = ( isset($_POST['tel'] )? $_POST['tel'] : '';
    if( empty($clitel) ){ $errors[] = 'Numéro de téléphone requis'; } // champ obligatoire
     
    $climail = ( isset($_POST['atmail'] )? $_POST['atmail'] : '';
    // if( empty($climail) ){ $errors[] = 'Adresse Email requise'; } // (si champ obligatoire)
    if( !empty($climail)  && !filter_var($climail, FILTER_VALIDATE_EMAIL) ){ $errors[] = 'Adresse Email invalide !'; } // (si champ obligatoire)
     
    ...
     
    // --------------
    // PAS d'erreur ?
    if( empty($errors) )
    {
       // OK, on continue ...
    ...

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    ta "gestion d'erreur" est abérrante.

    On n'enregistre pas en BDD "non défini" !
    Si le champ n'est pas obligatoire, on enregistre la colonne à vide, et à l'affichage, si le champ est vide, on affiche "non défini".
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre à l'essai Avatar de v4lUs
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2019
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    C'est bon, problème résolu !

    Ça venait de ma table dans la BDD, l'un des champs devait se passer le CURRENT_TIMESTAMP comme valeur pas défaut; et je ne l'avais pas paramétré...

    Showie, merci pour m'avoir montré la voie.
    Celira, Merci des conseils, au top ! Je vais me renseigner un peu plus sur la sécurité, ça ne peut qu'être utile et ça fournira toujours du travail plus soigné.
    En effet jreaux64, stocker les erreurs dans une constante semble être une excellente possibilité.

    Merci à tous, IL EST VIIIVAAAAANT !

  7. #7
    Invité
    Invité(e)
    Par défaut
    jreaux64...

    J'ai pris..2 départements !
    Pourtant, je n'ai pas déménagé !...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [la commande ppm ne fonctionne pas ? ]
    Par modesty12 dans le forum Alimentation
    Réponses: 1
    Dernier message: 31/05/2007, 16h35
  2. [WB9] Une commande Webdev ne fonctionne pas
    Par Tina51 dans le forum WebDev
    Réponses: 4
    Dernier message: 16/03/2007, 22h24
  3. Boutons de commande qui ne fonctionnent pas
    Par Shakti dans le forum IHM
    Réponses: 4
    Dernier message: 24/11/2006, 16h29
  4. La commande cd ne fonctionne pas
    Par keiserjo dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 06/10/2006, 22h53
  5. Réponses: 2
    Dernier message: 12/05/2006, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo