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 :

mySQL - Mauvaise syntaxe INSERT ? [PHP 7]


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 mySQL - Mauvaise syntaxe INSERT ?
    Bonjour à tous !

    Je rencontres un problème avec l'insertion d'une entrée dans un table.

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    <?php
     
    //Démmarage de la session
    session_start();
     
    //Connexion à la BDD
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=id9488668_newcca;charset=utf8', 'id9488668_user', 'a2d77e96bd1480af', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));
    }
    catch (Exception $e)
    {
        exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
    }
    $bdd = new PDO('mysql:host=localhost;dbname=id9488668_newcca;charset=utf8', 'id9488668_user', 'a2d77e96bd1480af');
     
    //Vérification de la disponibilité de l'heure
    (int)$converted_post_time = (substr($_POST['time'], 0, 2)).(substr($_POST['time'], 3));
    $taken_dates = array ();
    $alltakendates = $bdd->query('SELECT * FROM reserva');
    while ($atakendate = $alltakendates->fetch())
    {
    	if($_POST['date'] == $atakendate['date'])
    	{
    		(int)$mintime_to_allow = (intval(substr($atakendate['time'], 0, 2)) + 1).(substr($atakendate['time'], 3));
    		(int)$maxtime_to_allow = (intval(substr($atakendate['time'], 0, 2)) - 1).(substr($atakendate['time'], 3));
    		if($converted_post_time < $mintime_to_allow)
    		{
    			if($converted_post_time > $maxtime_to_allow)
    			{
    				header('Location: reserv.php?need_latency');
    				exit();
    			}
    		}
    	}
    }
     
    //Création de la fonction servCalc
    function servCalc($g, $l, $e, $f)
    {
    	$serv_ans = $g + $l + $e + $f; //Résultat = SOMME(g, l, e, f)
    	return $serv_ans; //Retour résultat
    }
     
    //Récupération des informations
    $form = $_POST['formule_res']; //Formule
    $client = $_POST['name']; //Client
    $date = $_POST['date']; //Date
    $time = $_POST['time']; //Heure
    $adresse = $_POST['adresse']; //Adresse complète
    $mail = $_POST['mail']; //Adresse mail
    $tel = $_POST['tel']; //Numéro de téléphone
    if (isset($_POST['gonf_check'])) //Service : gonflage
    {
    	$serv_g = 1 ;
    }
    else
    {
    	$serv_g = 0 ;
    }
    if (isset($_POST['lust_check'])) //Service : lustrage
    {
    	$serv_l = 2 ;
    }
    else
    {
    	$serv_l = 0 ;
    }
    if (isset($_POST['essu_check'])) //Service : Installation des essuies-glâce
    {
    	$serv_e = 5 ;
    }
    else
    {
    	$serv_e = 0 ;
    }
    if (isset($_POST['floc_check'])) //Service : Flocage
    {
    	$serv_f = 9 ;
    }
    else
    {
    	$serv_f = 0 ;
    }
    $serv = servCalc($serv_g, $serv_l, $serv_e, $serv_f); //Indice de services
    /* INDICE DE SERVICE : Base numérique conçue sur les chiffres (1, 2, 5, 9) afin d'établir un "octet" de définition*/
    $marque = $_POST['marque'];
    $modele = $_POST['modele'];
    echo $client.' '.$tel.' '.$mail.' '.$adresse.' '.$date.' '.$time.' '.$form.' '.$serv.' '.$marque.' '.$modele.'<br />';
     
    //Création de l'entrée dans la table
    $bdd->exec('INSERT INTO reserva (client, tel, mail, adresse, date_res, time_res, form, serv, marque, modele) VALUES ("'.$client.'", "'.$tel.'", "'.$mail.'", "'.$adresse.'", "'.$date.'", "'.$time.'", "'.$form.'", "'.$serv.'", "'.$marque.'", "'.$modele.'") ');
     
    //Création du lien utilisateur si connecté
    if($_SESSION['type'] !== "guest")
    {
    	$reserva_fetch = $bdd->query("SELECT * FROM reserva WHERE date_res={$date}, time_res={$time}");
    	while ($dat_res = $reserva_fetch->fetch())
    	{
    		echo $dat_res['form'];
    		$last_res_id = $dat_res['ID']; //Récupération de l'ID de la réservation
    	}
    	$bdd->exec("UPDATE {$_SESSION['type']}_accounts SET last_res='{$last_res_id}' WHERE mail='{$mail}'");
    }
     
    //Redirection
    header('Location: ../index.php');
    exit();
     
    ?>
    Pour la table, j'ai vérifié : une entrée directe en requete mySQL depuis phpmyadmin fonctionne, donc ce n'est pas le type des variables qui provoque l'erreur.

    Pour les variables : Aucun souci, elles sont toutes établies juste avant l'insertion de l'entrée dans la table.

    Si vous avez une idée d'où cela peut venir, parce-que là je coince...

    Merci d'avance !

    P.S. : Je sais, c'est pas sécurisé. Mais ça sert à rien de sécuriser une page qui ne fonctionne pas...

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    La classe PDO (et PDOStatement) dispose de deux méthodes: errorCode() et errorInfo(). En les utilisant tu devrais en savoir un peu plus sur la nature du problème. D'autre part, tu devrais utiliser une requête préparée plutôt que d'injecter tes variables dans la requête.

    P.S. : Je sais, c'est pas sécurisé. Mais ça sert à rien de sécuriser une page qui ne fonctionne pas...
    Bien au contraire, car ça fait partie intégrante d'une rigueur qui permet notamment d'écarter des problèmes et de régler ceux qui restent plus rapidement.

  3. #3
    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
    La classe PDO dispose de deux propriétés: errorCode et errorInfo. En les utilisant tu devrais en savoir un peu plus sur la nature du problème.
    Jamais entendu parlé... Et aucune idée de comment les utiliser.

    J'ai préparé ma requête, même soucis.

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    <?php
     
    //Démmarage de la session
    session_start();
     
    //Connexion à la BDD
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=id9488668_newcca;charset=utf8', 'id9488668_user', 'a2d77e96bd1480af', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));
    }
    catch (Exception $e)
    {
        exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
    }
    $bdd = new PDO('mysql:host=localhost;dbname=id9488668_newcca;charset=utf8', 'id9488668_user', 'a2d77e96bd1480af');
     
    //Vérification de la disponibilité de l'heure
    (int)$converted_post_time = (substr($_POST['time'], 0, 2)).(substr($_POST['time'], 3));
    $taken_dates = array ();
    $alltakendates = $bdd->query('SELECT * FROM reserva');
    while ($atakendate = $alltakendates->fetch())
    {
    	if($_POST['date'] == $atakendate['date'])
    	{
    		(int)$mintime_to_allow = (intval(substr($atakendate['time'], 0, 2)) + 1).(substr($atakendate['time'], 3));
    		(int)$maxtime_to_allow = (intval(substr($atakendate['time'], 0, 2)) - 1).(substr($atakendate['time'], 3));
    		if($converted_post_time < $mintime_to_allow)
    		{
    			if($converted_post_time > $maxtime_to_allow)
    			{
    				header('Location: reserv.php?need_latency');
    				exit();
    			}
    		}
    	}
    }
     
    //Création de la fonction servCalc
    function servCalc($g, $l, $e, $f)
    {
    	$serv_ans = $g + $l + $e + $f; //Résultat = SOMME(g, l, e, f)
    	return $serv_ans; //Retour résultat
    }
     
    //Préparation de la requete mySQL
    $prepared_insert = $bdd->prepare("INSERT INTO 'reserva'(client, tel, mail, adresse, date_res, time_res, form, serv, marque, modele) VALUES(:client, :tel, :mail, :adresse, :date_res, :time_res, :form, :serv, :marque, :modele) ");
    $prepared_insert->bindParam(':client', $client);
    $prepared_insert->bindParam(':tel', $tel);
    $prepared_insert->bindParam(':mail', $mail);
    $prepared_insert->bindParam(':adresse', $adresse);
    $prepared_insert->bindParam(':date_res', $date);
    $prepared_insert->bindParam(':time_res', $time);
    $prepared_insert->bindParam(':form', $form);
    $prepared_insert->bindParam(':serv', $serv);
    $prepared_insert->bindParam(':marque', $marque);
    $prepared_insert->bindParam(':modele', $modele);
     
    //Récupération des informations
    $form = $_POST['formule_res']; //Formule
    $client = $_POST['name']; //Client
    $date = $_POST['date']; //Date
    $time = $_POST['time']; //Heure
    $adresse = $_POST['adresse']; //Adresse complète
    $mail = $_POST['mail']; //Adresse mail
    $tel = $_POST['tel']; //Numéro de téléphone
    if (isset($_POST['gonf_check'])) //Service : gonflage
    {
    	$serv_g = 1 ;
    }
    else
    {
    	$serv_g = 0 ;
    }
    if (isset($_POST['lust_check'])) //Service : lustrage
    {
    	$serv_l = 2 ;
    }
    else
    {
    	$serv_l = 0 ;
    }
    if (isset($_POST['essu_check'])) //Service : Installation des essuies-glâce
    {
    	$serv_e = 5 ;
    }
    else
    {
    	$serv_e = 0 ;
    }
    if (isset($_POST['floc_check'])) //Service : Flocage
    {
    	$serv_f = 9 ;
    }
    else
    {
    	$serv_f = 0 ;
    }
    $serv = servCalc($serv_g, $serv_l, $serv_e, $serv_f); //Indice de services
    /* INDICE DE SERVICE : Base numérique conçue sur les chiffres (1, 2, 5, 9) afin d'établir un "octet" de définition*/
    $marque = $_POST['marque'];
    $modele = $_POST['modele'];
    echo $client.' '.$tel.' '.$mail.' '.$adresse.' '.$date.' '.$time.' '.$form.' '.$serv.' '.$marque.' '.$modele.'<br />';
     
    //Création de l'entrée dans la table
    $prepared_insert->execute();
     
    //Création du lien utilisateur si connecté
    if($_SESSION['type'] !== "guest")
    {
    	$reserva_fetch = $bdd->query("SELECT * FROM reserva WHERE date_res={$date}, time_res={$time}");
    	while ($dat_res = $reserva_fetch->fetch())
    	{
    		echo $dat_res['form'];
    		$last_res_id = $dat_res['ID']; //Récupération de l'ID de la réservation
    	}
    	$bdd->exec("UPDATE {$_SESSION['type']}_accounts SET last_res='{$last_res_id}' WHERE mail='{$mail}'");
    }
     
    //Redirection
    header('Location: ../index.php');
    exit();
     
    ?>
    Et toujours rien...

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Jamais entendu parlé... Et aucune idée de comment les utiliser.
    C'est normal, les gens n'en parlent pas (c'est secret), ils regardent directement le manuel PHP.

  5. #5
    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
    Bon bah du coup j'ai été me renseigner sur ce "secret", et ça ne change pas grand chose...

    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    <?php
     
    //Démmarage de la session
    session_start();
     
    //Connexion à la BDD
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=id9488668_newcca;charset=utf8', 'id9488668_user', 'a2d77e96bd1480af', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));
    }
    catch (Exception $e)
    {
        exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
    }
    $bdd = new PDO('mysql:host=localhost;dbname=id9488668_newcca;charset=utf8', 'id9488668_user', 'a2d77e96bd1480af');
     
    //Vérification de la disponibilité de l'heure
    (int)$converted_post_time = (substr($_POST['time'], 0, 2)).(substr($_POST['time'], 3));
    $taken_dates = array ();
    $alltakendates = $bdd->query('SELECT * FROM reserva');
    while ($atakendate = $alltakendates->fetch())
    {
    	if($_POST['date'] == $atakendate['date'])
    	{
    		(int)$mintime_to_allow = (intval(substr($atakendate['time'], 0, 2)) + 1).(substr($atakendate['time'], 3));
    		(int)$maxtime_to_allow = (intval(substr($atakendate['time'], 0, 2)) - 1).(substr($atakendate['time'], 3));
    		if($converted_post_time < $mintime_to_allow)
    		{
    			if($converted_post_time > $maxtime_to_allow)
    			{
    				header('Location: reserv.php?need_latency');
    				exit();
    			}
    		}
    	}
    }
     
    //Création de la fonction servCalc
    function servCalc($g, $l, $e, $f)
    {
    	$serv_ans = $g + $l + $e + $f; //Résultat = SOMME(g, l, e, f)
    	return $serv_ans; //Retour résultat
    }
     
    //Préparation de la requete mySQL
    $prepared_insert = $bdd->prepare("INSERT INTO reserva (client, tel, mail, adresse, date_res, time_res, form, serv, marque, modele) VALUES (:client, :tel, :mail, :adresse, :date_res, :time_res, :form, :serv, :marque, :modele)" or die (mysql_error()));
     
    //Récupération des informations
    $form = $_POST['formule_res']; //Formule
    $client = $_POST['name']; //Client
    $date = $_POST['date']; //Date
    $time = $_POST['time']; //Heure
    $adresse = $_POST['adresse']; //Adresse complète
    $mail = $_POST['mail']; //Adresse mail
    $tel = $_POST['tel']; //Numéro de téléphone
    if (isset($_POST['gonf_check'])) //Service : gonflage
    {
    	$serv_g = 1 ;
    }
    else
    {
    	$serv_g = 0 ;
    }
    if (isset($_POST['lust_check'])) //Service : lustrage
    {
    	$serv_l = 2 ;
    }
    else
    {
    	$serv_l = 0 ;
    }
    if (isset($_POST['essu_check'])) //Service : Installation des essuies-glâce
    {
    	$serv_e = 5 ;
    }
    else
    {
    	$serv_e = 0 ;
    }
    if (isset($_POST['floc_check'])) //Service : Flocage
    {
    	$serv_f = 9 ;
    }
    else
    {
    	$serv_f = 0 ;
    }
    $serv = servCalc($serv_g, $serv_l, $serv_e, $serv_f); //Indice de services
    /* INDICE DE SERVICE : Base numérique conçue sur les chiffres (1, 2, 5, 9) afin d'établir un "octet" de définition*/
    $marque = $_POST['marque'];
    $modele = $_POST['modele'];
    echo $client.' '.$tel.' '.$mail.' '.$adresse.' '.$date.' '.$time.' '.$form.' '.$serv.' '.$marque.' '.$modele.'<br />';
     
    //Edition des parametres pour la requete préparée
    $prepared_insert->bindParam(':client', $client);
    $prepared_insert->bindParam(':tel', $tel);
    $prepared_insert->bindParam(':mail', $mail);
    $prepared_insert->bindParam(':adresse', $adresse);
    $prepared_insert->bindParam(':date_res', $date);
    $prepared_insert->bindParam(':time_res', $time);
    $prepared_insert->bindParam(':form', $form);
    $prepared_insert->bindParam(':serv', $serv);
    $prepared_insert->bindParam(':marque', $marque);
    $prepared_insert->bindParam(':modele', $modele);
     
    //Création de l'entrée dans la table
    $prepared_insert->execute();
    echo "\nPDO::errorCode(): ", $bdd->errorCode();
    $stmt_errorinfo = $bdd->prepare('mauvaise syntaxe sql');
    if (!$stmt_errorinfo)
    {
       echo "\nPDO::errorInfo():\n";
       print_r($bdd->errorInfo());
    }
     
    //Création du lien utilisateur si connecté
    if($_SESSION['type'] !== "guest")
    {
    	$reserva_fetch = $bdd->query("SELECT * FROM reserva WHERE date_res='".$date."', time_res='".$time."'");
    	while ($dat_res = $reserva_fetch->fetch())
    	{
    		echo $dat_res['form'];
    		$last_res_id = $dat_res['ID']; //Récupération de l'ID de la réservation
    	}
    	$bdd->exec("UPDATE {$_SESSION['type']}_accounts SET last_res='{$last_res_id}' WHERE mail='{$mail}'");
    }
     
    //Redirection
    header('Location: ../index.php');
    exit();
     
    ?>
    A part m'afficher PDO::errorCode(): 00000, ça ne m'indique rien du tout...

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Attention dans le cas de requêtes préparées il est précisé dans la page PDO::errorCode:
    Si vous créez un objet PDOStatement avec la fonction PDO::prepare() ou la fonction PDO::query() et que vous invoquez une erreur sur le gestionnaire de requête, PDO::errorCode() ne retournera pas cette erreur. Vous devez appeler PDOStatement::errorCode() pour retourner le code erreur pour une opération exécutée sur un gestionnaire de requête particulier.
    Donc c'est $prepared_insert->errorCode() et pas $bdd->errorCode() (idem pour errorInfo).

    Qu'est ce que c'est que cette ligne 109? (C'est juste un test.)

  7. #7
    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
    J'ai affiché les erreurs PDO pour la requete préparée, voici ce qu'il en ressort :

    SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens on line 99
    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    <?php
     
    //Démmarage de la session
    session_start();
     
    //Connexion à la BDD
    $bdd = new PDO('mysql:host=localhost;dbname=id9488668_newcca;charset=utf8', 'id9488668_user', 'a2d77e96bd1480af', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));
     
    //Vérification de la disponibilité de l'heure
    (int)$converted_post_time = (substr($_POST['time'], 0, 2)).(substr($_POST['time'], 3));
    $taken_dates = array ();
    $alltakendates = $bdd->query('SELECT * FROM reserva');
    while ($atakendate = $alltakendates->fetch())
    {
    	if($_POST['date'] == $atakendate['date'])
    	{
    		(int)$mintime_to_allow = (intval(substr($atakendate['time'], 0, 2)) + 1).(substr($atakendate['time'], 3));
    		(int)$maxtime_to_allow = (intval(substr($atakendate['time'], 0, 2)) - 1).(substr($atakendate['time'], 3));
    		if($converted_post_time < $mintime_to_allow)
    		{
    			if($converted_post_time > $maxtime_to_allow)
    			{
    				header('Location: reserv.php?need_latency');
    				exit();
    			}
    		}
    	}
    }
     
    //Création de la fonction servCalc
    function servCalc($g, $l, $e, $f)
    {
    	$serv_ans = $g + $l + $e + $f; //Résultat = SOMME(g, l, e, f)
    	return $serv_ans; //Retour résultat
    }
     
    //Préparation de la requete mySQL
    $prepared_insert = $bdd->prepare("INSERT INTO reserva (client, tel, mail, adresse, date_res, time_res, form, serv, marque, modele) VALUES (:client, :tel, :mail, :adresse, :date_res, ':time_res', :form, :serv, :marque, :modele)" );
     
    //Récupération des informations
    $form = $_POST['formule_res']; //Formule
    $client = $_POST['name']; //Client
    $date = $_POST['date']; //Date
    $time = $_POST['time']; //Heure
    $adresse = $_POST['adresse']; //Adresse complète
    $mail = $_POST['mail']; //Adresse mail
    $tel = $_POST['tel']; //Numéro de téléphone
    if (isset($_POST['gonf_check'])) //Service : gonflage
    {
    	$serv_g = 1 ;
    }
    else
    {
    	$serv_g = 0 ;
    }
    if (isset($_POST['lust_check'])) //Service : lustrage
    {
    	$serv_l = 2 ;
    }
    else
    {
    	$serv_l = 0 ;
    }
    if (isset($_POST['essu_check'])) //Service : Installation des essuies-glâce
    {
    	$serv_e = 5 ;
    }
    else
    {
    	$serv_e = 0 ;
    }
    if (isset($_POST['floc_check'])) //Service : Flocage
    {
    	$serv_f = 9 ;
    }
    else
    {
    	$serv_f = 0 ;
    }
    $serv = servCalc($serv_g, $serv_l, $serv_e, $serv_f); //Indice de services
    /* INDICE DE SERVICE : Base numérique conçue sur les chiffres (1, 2, 5, 9) afin d'établir un "octet" de définition*/
    $marque = $_POST['marque'];
    $modele = $_POST['modele'];
    echo $client.' '.$tel.' '.$mail.' '.$adresse.' '.$date.' '.$time.' '.$form.' '.$serv.' '.$marque.' '.$modele.'<br />';
     
    //Edition des parametres pour la requete préparée
    $prepared_insert->bindParam(':client', $client);
    $prepared_insert->bindParam(':tel', $tel);
    $prepared_insert->bindParam(':mail', $mail);
    $prepared_insert->bindParam(':adresse', $adresse);
    $prepared_insert->bindParam(':date_res', $date);
    $prepared_insert->bindParam(':time_res', $time);
    $prepared_insert->bindParam(':form', $form);
    $prepared_insert->bindParam(':serv', $serv);
    $prepared_insert->bindParam(':marque', $marque);
    $prepared_insert->bindParam(':modele', $modele);
     
    //Création de l'entrée dans la table
    $prepared_insert->execute();
    echo "\nPDO::errorCode(): ", $prepared_insert->errorCode();
    $stmt_errorinfo = $bdd->prepare('mauvaise syntaxe sql');
    if (!$stmt_errorinfo)
    {
       echo "\nPDO::errorInfo():\n";
       print_r($bdd->errorInfo());
    }
     
    //Création du lien utilisateur si connecté
    if($_SESSION['type'] !== "guest")
    {
    	$reserva_fetch = $bdd->query("SELECT * FROM reserva WHERE date_res='".$date."' AND time_res='".$time."'");
    	while ($dat_res = $reserva_fetch->fetch())
    	{
    		echo $dat_res['form'];
    		$last_res_id = $dat_res['ID']; //Récupération de l'ID de la réservation
    	}
    	$bdd->exec("UPDATE {$_SESSION['type']}_accounts SET last_res='{$last_res_id}' WHERE mail='{$mail}'");
    }
     
    //Redirection
    header('Location: ../index.php');
    exit();
     
    ?>
    Je ne comprends pas, j'aurai rentré un nombre incorrect de paramètres pour préparer ma commande ?

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Enlèves les quotes autour de :time_res dans ta requête pour voir.

  9. #9
    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
    OMG Aussi simple que ça...
    Tout fonctionne, merci ^^

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Oui, car avec des quotes autour ':time_res' n'est pas vu comme un placeholder mais comme une chaîne de caractères.

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

Discussions similaires

  1. Générer syntaxe INSERT avec MySQL Workbench 6.3
    Par bipolaire_heureux dans le forum Outils
    Réponses: 1
    Dernier message: 25/05/2016, 15h35
  2. syntaxe insert mysql
    Par jeandafrique dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/07/2012, 21h09
  3. [MySQL] Mauvaise syntaxe MySQL
    Par jlb59 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/03/2008, 20h13
  4. [MySQL] Mauvaise syntaxe d'une requete
    Par DonKnacki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/01/2007, 12h10
  5. Pblme simple de requete ! (mauvaise syntaxe)
    Par ju360modena dans le forum ASP
    Réponses: 12
    Dernier message: 10/06/2005, 11h22

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