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

PHP & Base de données Discussion :

1 requête d'insertion marche et pas l'autre [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut 1 requête d'insertion marche et pas l'autre
    Bonjour,

    sur une page j'ai la requête suivante qui insère correctement les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    			$requete = "INSERT INTO visites (date, heure, nom, prenom, departement, quantite)
    			VALUES('$date_reformate','$horaire','$nom','$prenom','$departement','$nombre')";
    			$resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());
    et sur une autre page celle-ci ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     	$my_date = mysql_real_escape_string($my_date);
     	$my_time = mysql_real_escape_string($my_time);
     	$nom = mysql_real_escape_string($nom);
     	$prenom = mysql_real_escape_string($prenom);
     	$emetteur = mysql_real_escape_string($emetteur);
     	$texte = mysql_real_escape_string($texte);
     
    	$requete = "INSERT INTO messages (id, my_date, my_time, nom, prenom, emetteur, texte)
    	value('','$my_date','$my_time','$nom','$prenom','$emetteur','$texte')";
    	$resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());
    le message d'erreur est sur la dernière ligne de la 2 èm requête :Call to undefined method mysqli::error() in

    je ne vois pas pourquoi la 2 è ne marche pas
    ps j'appelle ma page de connexion sur chaque page

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Bonjour,

    Les différences entre les 2 :
    dans le no1 tu ne déclenches pas d'erreur mysql donc pas d'appel à mysqli->error

    mysqli->error
    c'est une propriété et non une fonction !

    ton erreur sql :
    insérer un id: '' et non NULL ? mais pourquoi mettre id ?

    ps: faire des tests de validation sur au moins date et time est un minimum

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



    Note:
    Si vous êtes habitués à utiliser la fonction mysql_real_escape_string(), notez que les arguments de la fonction mysqli_real_escape_string() ne sont pas identiques à ceux de la fonction mysql_real_escape_string().
    L'identifiant link est le premier argument pour la fonction mysqli_real_escape_string(), alors que la chaîne à échapper est le premier argument pour la fonction mysql_real_escape_string().
    Le mieux est encore d'utiliser une requête préparée !



    Encore mieux !!
    Laisser tomber mysqli_ et lui préférer PDO !




    @papajoker
    On peut très bien mettre dans la requête l'id, avec pour valeur '' ou 0.
    Étant auto-incrémenté, il s'auto-incrémentera.
    Dernière modification par Invité ; 29/10/2015 à 18h55.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,





    Le mieux est encore d'utiliser une requête préparée !



    Encore mieux !!
    Laisser tomber mysqli_ et lui préférer PDO !
    Je n'ai pas envie de laisser tomber mysqli, ça m'a été recommandé par l'un des modérateurs et ça me va bien.
    Qu'est ce que je gagnerai à utiliser une requête préparée ?
    Quant à $msqli->real_escape_string() j'ai tellement de messages d'erreurs que je vais revoir ça et pardon mais je trouve que cette doc s'adresse à des très initiés ce que je suis loin d'être

  5. #5
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    en haut de ma page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    include("connect.php");
    include("fonctionsphp.php");
     
    $host = "127.0.0.1";
    $user = "root";
    $password = "";
    $bdd = "association_culturelle";
    $con=mysqli_connect($host,$user,$password,$bdd);
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    Je viens de modifier les échappements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     	$nom = mysqli_real_escape_string($con,$_POST['nom']);
     	$prenom = mysqli_real_escape_string($con,$_POST['prenom']);
     	$emetteur = mysqli_real_escape_string($con,$_POST['mail']);
     	$texte = mysqli_real_escape_string($con,$_POST['texte']);
     
    	$requete = "INSERT INTO messages (id, my_date, my_time, nom, prenom, emetteur, texte)
    	VALUES('','$my_date','$my_time','$nom','$prenom','$emetteur','$texte')";
    	$resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());
    le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to undefined method mysqli::error() in C:\Weblocal\Sites\association_culturelle\contacts.php on line 87
    En fait je reviens à l'erreur initiale

  6. #6
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Bon ça marche.

    merci à vous.

    et peut être pour ceux qui aurons le même problème :
    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
     
    $host = "127.0.0.1";
    $user = "root";
    $password = "";
    $bdd = "association_culturelle";
    $con=mysqli_connect($host,$user,$password,$bdd);
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    		 	$objet = mysqli_real_escape_string($con,$_POST['objet']);
    		 	$nom = mysqli_real_escape_string($con,$_POST['nom']);
    		 	$prenom = mysqli_real_escape_string($con,$_POST['prenom']);
    		 	$emetteur = mysqli_real_escape_string($con,$_POST['mail']);
    		 	$texte = mysqli_real_escape_string($con,$_POST['texte']);
    			$requete = "INSERT INTO messages (id, date, heure, nom, prenom, emetteur, objet, texte)
    			VALUES('','$my_date','$my_time','$nom','$prenom','$emetteur','$objet','$texte')";
    			if (mysqli_query($con, $requete)) {
        				$message1 = "Merci pour votre message, nous vous répondrons dans les meilleurs délais";
    			} else {
        				$message = "Message non enregistré. Merci de vérifier votre saisie";
    			}
    			mysqli_close($con);
    C'est en forgeant qu'on devient forgeron

  7. #7
    Invité
    Invité(e)
    Par défaut
    L'explication* est dans la doc... que tu n'as pas envie de lire...

    *et la syntaxe correcte !

  8. #8
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());
    c'est la même ligne dans les 2 requêtes !!

    Quant à id c'est une incrémentation auto.

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

Discussions similaires

  1. Requête d'insertion ne fonctionne pas
    Par soria_t dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 16/09/2008, 14h06
  2. Ma requête d'insertion n'accepte pas la date
    Par beegees dans le forum ASP
    Réponses: 2
    Dernier message: 06/02/2008, 10h39
  3. Réponses: 3
    Dernier message: 01/08/2006, 14h31
  4. Réponses: 2
    Dernier message: 06/06/2005, 15h13
  5. requête update qui marche pas
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 08h16

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