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 :

Insert qui ne fonctionne pas [MySQL]


Sujet :

PHP & Base de données

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut Insert qui ne fonctionne pas
    bonjour,

    J'utilisais EasyPhp 5.4 et j'ai chargé la version 5.6
    Et donc une requête d'insertion qui fonctionnait ne veut plus rien savoir.

    mon fichier de connexion
    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
     
    <?php
    $host = "127.0.0.1";
    $user = "root";
    $password = "";
    $bdd = "jumelage";
     
    $mysqli = new mysqli($host, $user, $password, $bdd);
    if ($mysqli->connect_error) {
        die('Erreur de connexion ('.$mysqli->connect_errno.')'. $mysqli->connect_error);
    }
    $con = mysqli_connect($host,$user,$password,$bdd);
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    ?>
    mon fichier membres où j'insère : nom, prénom et nationalité. Les autres données sont insérées par les membres eux-mêmes.
    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
    <?php
    include("connect.php");
    include("fonctionsphp.php");
    
    <?php
    $name = isset($_POST['name']) ? $_POST['name'] : "";
    $firstname = isset($_POST['firstname']) ? $_POST['firstname'] : "";
    $phone = '';
    $nation = isset($_POST['nation']) ? $_POST['nation'] : "";
    $mail = '';
    $password = '';
    $saisie = '';
    
    echo $bdd; // à supprimer
    
    if (isset($_POST['enregistrer'])) {
    	if ((!empty($_POST['name'])) && (!empty($_POST['firstname'])) && (!empty($_POST['nation']))){
    		//on met la 1ere lettre du nom en majuscule
    		$name = ucfirst($_POST['name']);
    		$firstname = ucfirst($_POST['firstname']);
    		$nation = ucfirst($_POST['nation']);
    
    		//enregistre le membre ** fonctionnait avec php 5.4
    		//$requete = "INSERT INTO membres (id, nom, prenom, phone, nationalite, mail, password)
    		//VALUES('','$name','$firstname', '$phone', '$nation', '$mail', '$password')";
    		//$resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());
    
    		//requête avec 5.6 qui ne fonctionne pas issue d'un tuto
    		$req = $bdd->prepare('INSERT INTO membres (nom, prenom, nationalite)
    		VALUES(:name, :firstname, :phone, :nationalite)');
    		$req->execute(array(
    			'nom' => $name,
    			'prenom' => $firstname,
    			'nationalite' => $nation,));
    
    		$saisie = "Enregistrement de $name $firstname $nation effectué";
    		$_POST['name'] = '';
    		$_POST['firstname'] = '';
    		$_POST['nation'] = '';
    	}
    	else {
    		$saisie = "Pas d'enregistrement effectué, les cases ne sont pas renseignées !";
    	}
    }
    ?>
    <div style="text-align:center">
    	<p> pour obtenir ß = alt +225</p>
    	<FORM name="research" ACTION = "index.php?page=comite" METHOD="POST"> 
    		Nom : <input type="text" name="name" value="" /><br /><br />
    		Prenom : <input type="text" name="firstname" value="" /><br /><br />
    		Nationalité : <input type="text" name="nation" value="" /><br /><br />
    		<input style="cursor:pointer;" type="submit" name="enregistrer" value="Enregistrer" />
    	</FORM>
    	<?php echo $saisie;?>
    </div>
    Quand je lance la requête j'ai code erreur suivant

    Fatal error: Call to a member function prepare() on string in C:\Weblocal\Sites\Jumelage\fr\membres.php on line 84

    la ligne 81
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = $bdd->prepare('INSERT INTO membres (nom, prenom, nationalite)
    Merci de m'aider

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		$req = $bdd->prepare('INSERT INTO membres (nom, prenom, nationalite)
    		VALUES(:name, :firstname, :phone, :nationalite)');
    1-
    • Ce n'est pas $bdd, mais $con !
    • De plus, il manque la colonne "telephone" !


    2- D'autre part, perso, j'écris la requête "à part" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		$sql = "INSERT INTO membres 
    		   (nom, prenom, telephone, nationalite)
    		   VALUES 
    		   (:name, :firstname, :phone, :nationalite)";
    		$req = $con->prepare( $sql );
    Ça permet aussi de l'afficher (en phase de TEST).

    3- HARMONISE les noms de variables/colonnes :
    • $name - :name - nom
    • $firstname - :firstname - prenom
    • ...

    NON : c'est le meilleur moyen de s’emmêler les pieds !

    • $nom - :nom - nom
    • $prenom - :prenom - prenom
    • ...

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    Merci jreaux62

    j'ai fait les modifications.
    Rien ne s'écrit dans la base données et pas message d'erreur !!

    Est ce que cela ne vient pas de l'accès à la bdd ? quand j'ouvre PhpAdmin sur l'onglet il est indiqué : 127.0.0.1:8080/127.0.01/jumelage et
    sur la page connect.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $host = "127.0.0.1";
    la partie php du fichier membres.php
    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
     
    <?php
    $nom = isset($_POST['nom']) ? $_POST['nom'] : "";
    $prenom = isset($_POST['prenom']) ? $_POST['prenom'] : "";
    $telephone = isset($_POST['telephone']) ? $_POST['telephone'] : "";
    $nationalite = isset($_POST['nationalite']) ? $_POST['nationalite'] : "";
    $mail = '';
    $password = '';
    $saisie = '';
     
    if (isset($_POST['enregistrer'])) {
    	if ((!empty($_POST['nom'])) && (!empty($_POST['prenom'])) && (!empty($_POST['nationalite']))){
    		//on met la 1ere lettre du nom en majuscule
    		$nom = ucfirst($_POST['nom']);
    		$prenom = ucfirst($_POST['prenom']);
    		$nationalite = ucfirst($_POST['nationalite']);
    		//enregistre le membre
    		//requête avec 5.6 
    		$sql = "INSERT INTO membres(nom, prenom, telephone, nationalite)
    			VALUES(:nom, :prenom, :telephone, :nationalite)";
    		$req = $con->prepare( $sql );
     
    		$saisie = "Enregistrement de nom :$nom, prénom :$prenom, téléphone : $telephone, nationalité: $nationalite effectué";
    		$_POST['nom'] = '';
    		$_POST['prenom'] = '';
    		$_POST['nationalite'] = '';
    	}
    	else {
    		$saisie = "Pas d'enregistrement effectué, les cases ne sont pas renseignées !";
    	}
    }
    ?>

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu as oublié... d'exécuter la requête.
    Dernière modification par rawsrc ; 29/06/2019 à 09h55.

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    je préfère de loin avoir une variable appelée $cnx relative à la connexion à la base de données que $con, m'enfin c'est un avis personnel.

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    Après avoir ajouté l’exécution de la requête ma table membres était toujours vide.
    Après avoir cherché un bon moment (2 ou 3 heures) j'ai vu que ma colonne mail et password étaient NULL et non ''. Je les ai modifiées et maintenant ça marche !!

    Merci pour votre aide

    Avec la version php 5.4 on codait les mots de passe avec sha1. Est ce qu'avec php 5.6 je vais pouvoir utiliser la fonction $pass_hache = password_hash($passwordFC, PASSWORD_DEFAULT); ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Oui.
    C'est recommandé.

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    Bonjour,

    Je ne comprends pas ce qui s'est passé ! samedi j'avais réussi à insérer des valeurs dans ma table et ce matin impossible !!


    je joins le fichier membres.php et une impression écran de la table membres.

    Merci d'avance
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu dois suivre au plus près les tutos que l'on te file, c'est important.
    j'ai repris ton code :
    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
    <?php
     
    include 'fonctionsphp.php';
     
    // fonction d'échappement des caractères dangereux
    $hsc    = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
    $result = 'Veuillez renseigner le formulaire';
     
    if (isset($_POST['enregistrer']) && ($_POST['enregistrer'] === 'Enregistrer')) {
        $nom         = $_POST['nom'] ?? '';
        $prenom      = $_POST['prenom'] ?? '';
        $nationalite = $_POST['nationalite'] ?? '';
     
        $err = (($nom === '') || ($prenom === '') || ($nationalite === ''));
     
        if ($err) {
            $result = 'Formulaire incomplet, aucun enregistrement';
        } else {
            $cnx = new PDO('mysql:host=127.0.0.1;dbname=jumelage;charset=utf8', 'root', '', [
                \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
                \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
                \PDO::ATTR_EMULATE_PREPARES   => false
            ]);
            $sql  = 'INSERT INTO membres (nom, prenom, nationalite) VALUES (:nom, :prenom, :nationalite)';
            try {
                $stmt = $cnx->prepare($sql);
                $exec = $stmt->execute([':nom' => $nom, ':prenom' => $prenom, ':nationalite' => $nationalite]);
            } catch (\Exception $e) {
                echo $e->getMessage();
                exit;
            }
     
            $result = 'Enregistrement effectué';
        }
    }
    ?>
    <link rel="stylesheet" type="text/css" href="css/style_connexion.css" />
    <div style="text-align:center">
    	<p> pour obtenir ß = alt +225</p>
    	<form name="research" action="index.php?page=comite" method="POST">
    		Nom : <input type="text" name="nom" value="" /><br /><br />
    		Prenom : <input type="text" name="prenom" value="" /><br /><br />
    		Nationalité : <input type="text" name="nationalite" value="" /><br /><br />
    		<input style="cursor:pointer;" type="submit" name="enregistrer" value="Enregistrer" />
    	</form>
    	<?= $hsc($result) ?>
    </div>
    Gaffe à ucfirst(), ça ne fonctionne pas avec l'unicode. Je te laisse chercher un peu

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

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    C'est ma base de données qui était mal configurée !!

    Merci pour l'aide

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

Discussions similaires

  1. Requête insert qui ne fonctionne pas .
    Par Pioul dans le forum VBA Access
    Réponses: 7
    Dernier message: 21/05/2008, 12h28
  2. Bulk Insert qui ne fonctionne pas
    Par genio dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 01/11/2007, 01h13
  3. [MySQL] INSERT qui ne fonctionne pas
    Par djudjublondin dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/08/2007, 19h46
  4. [ODBC] une requete d'insertion qui ne fonctionne pas
    Par boulhous dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/05/2006, 13h56
  5. Insert qui ne fonctionne pas
    Par Nyrianne dans le forum Outils
    Réponses: 7
    Dernier message: 09/01/2006, 17h50

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