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 :

Php mysql débutant


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Php mysql débutant
    Bonjour a tous , dans ma page de code j'ai deux erreurs d'afficher :

    Notice: Undefined index: id in C:\wamp64\www\ville\edition.php on line 41
    donc la où il y a
    $id = $_GET['id']; (à la partie 2 ) pour cette erreur est ce qu'il faut tester si ce champs a été initialisé avec la fonction isset() ou !empty() ?

    et
    Fatal error: Call to a member function fetch_array() on boolean in C:\wamp64\www\ville\edition.php on line 46
    (// création du nouvel array
    $row = $result->fetch_array(); )


    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
    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
     
    <?php require('inc_connexion.php'); ?>
    <!DOCTYPE html>
    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
    <?php
    /*
    Partie 1 : gestion de la saisie et enregistrement
    -------------------------------------------------*/
    // récupération des variables
    if(isset($_POST['submit_form']))
    {
    $capitale_nom = $_POST['capitale_nom'];
    $capitale_texte = $_POST['capitale_texte'];
    $capitale_id = $_POST['capitale_id'];
    // vérification du contenu des variables
    if((empty($capitale_nom)) OR empty($capitale_texte))
    {
    $message = '<p class="error">Vous devez saisir le nom d\’une
    capitale et sa présentation.</p>';
    }
    else
    {
    // requête UPDATE
    if ($mysqli->query('UPDATE capitales SET capitale_nom = "'.$capitale_nom.'", capitale_texte = "'.$capitale_texte.'" WHERE capitale_id = '.
    $capitale_id))
    {
    $message = '<p class="message">La mise à jour de la capitale '.
    $capitale_nom .' est effectuée.</p>';
    }
    else
    {
    $message = '<p class="error">La mise à jour de la capitale '.
    $capitale_nom .' est pas effectuée.</p>';
    }
    }
    }
    /*
    Partie 2 : récupération des informations de la base
    et affichage dans le formulaire
    -------------------------------------------------*/
    // récupération de la variable externe
    $id = $_GET['id'];
    // requête.
    $result = $mysqli->query('SELECT capitale_id, capitale_nom, capitale_texte
    FROM capitales WHERE capitale_id = ' . $id );
    // création du nouvel array
    $row = $result->fetch_array();
    // variables destinées à l’affichage
    $nom = $row['capitale_nom'];
    $texte = $row['capitale_texte'];
    ?>
    <div>
    <h1>Ajouter une capitale</h1>
    <?php if(isset($message)) echo $message ?>
    <form method="post">
    <p>Nom de la capitale : <input type="text" name="capitale_nom"
    value="<?php echo $nom ?>"/></p>
    <p>Texte de présentation<br>
    <textarea name="capitale_texte" cols="32" rows="8"/><?php echo $texte
    ?></textarea></p>
    <input type="hidden" name="capitale_id" value="<?php echo $id ?>" />
    <p><input type="submit" name="submit_form" value="valider" /></p>
    </form>
    </div>
    </body>
    </html>

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

    1- A priori, tu sais comprendre les messages d'erreur.

    2- Ça suppose que l'URL soit : "........?id=...."

    3- Oui, il faut systématiquement vérifier l'existence des données qu'on utilise.

    4- Et il me semble qu'on t'a DEJA conseillé de faire des requêtes préparées, non ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Dans un des mes autres fichiers nommé capitale.php et dans d'autres j'ai écris ce genre d'url :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li><a href="capitale.php?id=<?php echo $id ?>"><?php echo $capitale ?></a></li>
    et d'ailleurs je viens de voir que j'ai des erreurs sur capitale.php et je pense que c'est pour ça que dans cette page de code edition.php le code $id = $_GET['id']; ne marche pas il faut que je règle les problèmes que j'ai sur capitale.php.

    J'ai la même erreur Notice: Undefined index: id in C:\wamp64\www\ville\ville.php on line 6 car j'ai mis $id = $_GET['id']; faut il que j'utilise se code la : $id = isset($_POST['id']) ? $_POST['id'] : NULL; ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    1- Oui.
    NULL, ou 0, ou ''... à toi de choisir.

    Dans les 3 cas, c'est empty.

    2- PENSE aussi aux requêtes préparées.
    Ce n'est pas une option, mais une obligation dès qu'on a des paramètres "externes" à intégrer !

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Ça ne doit pas être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id = $_POST['capitale_id'];

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    D'accord et du coup c'est à placer juste avant le code $id = $_GET['id']; ?
    Et les requêtes préparées c'est bien ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $mysqli->query('SELECT ville_id, ville_nom, ville_texte FROM villes WHERE ville_id = ' . $id );
    ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    1- Réfléchis...
    La programmation est en grande partie une question de LOGIQUE.

    2- Non. Ca, c'est une requête "simple"...
    Il faudrait avoir la CURIOSITE de faire des RECHERCHES "mysqli requete preparee"
    On ne peut pas tout faire à ta place...

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Pourquoi récupérer par un $_GET or que l'id est dans $_POST['capitale_id']?

    Pour la requête préparée https://fmaz.developpez.com/tutoriel...re-pdo/#LIII.c

    A+.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    j'ai fais des recherches et j'avais trouvé ce que j'avais marqué mais ceci est faux.
    Est ce genre de requêtes préparées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    try {
        $base = new PDO('mysql:host=localhost;dbname=testconsole', 'root', "");
    	// on active les exceptions
    	$base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	// encodage
    	$base->exec("SET CHARACTER SET utf8");
    } catch(PDOException $e) {
        die('Erreur de connexion : ' . $e->getMessage());
    }
     
    $retour = $base->query('SELECT capitales FROM capitale_nom');

  10. #10
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Encore raté.
    Là, tu nous montres un bloc try / catch pour gérer les exceptions.

    Pour revenir sur les requêtes préparées (car tu récupères des données non sûres via la barre d'adresse avant d'accéder à ta base de données) :

    http://php.net/manual/fr/mysqli.prepare.php

    Sur ce lien, tout le code se trouve dans exemple 1, version objet ou version procédural, tu choisis.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #11
    Invité
    Invité(e)
    Par défaut


    requêtes préparées mysqli :




    CELA DIT... est-ce TOI qui a choisi d'utiliser mysqli ??

    Car PDO est le standard !
    Et il est PLUS SIMPLE à utiliser avec des requêtes préparées... (une fois qu'on a compris le fonctionnement)

    A ta place, j'utiliserais PDO.




    LIS ce qu'on te met en LIEN !
    Dernière modification par Invité ; 12/04/2018 à 15h45.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Oui c'est moi qui ai choisis PDO je ne connais pas trop j'ai vu dans un cours apres les requetes préparées . Je vais regarder l'exemple 1 orienté objet.

    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
     
    <?php
    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
     
    /* Vérification de la connexion */
    if (mysqli_connect_errno()) {
        printf("Échec de la connexion : %s\n", mysqli_connect_error());
        exit();
    }
     
    $capitale = "Paris","Rome";
     
    /* Crée une requête préparée */
    if ($stmt = $mysqli->prepare("SELECT District FROM capitale WHERE capitale_id=capitale_nom")) {
     
        /* Lecture des marqueurs */
        $stmt->bind_param("s", $capitale);
     
        /* Exécution de la requête */
        $stmt->execute();
     
        /* Lecture des variables résultantes */
        $stmt->bind_result($district);
     
        /* Récupération des valeurs */
        $stmt->fetch();
     
        printf("%s est dans le district de %s\n", $capitale, $district);
     
        /* Fermeture du traitement */
        $stmt->close();
    }
     
    /* Fermeture de la connexion */
    $mysqli->close();
    ?>
    Est ce comme ce ci ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    1- Non.
    Ta syntaxe est fausse.
    Ta logique aussi : la requête parle d'un id (capitale_id), et toi tu rentres des chaines ($capitale = "Paris","Rome") ...


    2- mysqli_ est une usine à gaz, créée pour ceux qui avaient DEJA du code en mysql_, et qui ne voulaient pas trop se casser la tête...

    Puisque tu es débutant :
    • Je te conseille TRES VIVEMENT de te tourner vers PDO.


    3- ARRETE la bidouille, et PRENDS LE TEMPS D'APPRENDRE.

  14. #14
    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
    CELA DIT... est-ce TOI qui a choisi d'utiliser mysqli ??
    Citation Envoyé par artotec06 Voir le message
    Oui c'est moi qui ai choisis PDO

    [...]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
    C'est moi ou il y a un problème de communication là ?

    @artotec06 : pose-toi et décide : soit tu utilises mysqli, soit tu utilises PDO. Mais tu n'utilises pas les 2 en même temps, et tu ne dis que tu utilises l'un si tu utilise l'autre. Personnellement, j'utiliserais PDO, mais c'est ton choix.
    Dans tous les cas : fais une pause, arrête de vouloir coder ton script actuel et code un exemple basique avec
    • la connexion
    • une recherche en base sans paramètres
    • une recherche en base avec paramètres (en utilisant une requête préparée)
    • une requête d'insertion (en utilisant une requête préparée)
    • une requête de mise à jour (en utilisant une requête préparée)

    Ensuite, écris les requêtes dont tu as besoin pour ton script actuel en dehors de ton script (dans PhpMyAdmin par exemple)
    Et seulement après, tu intègres les requêtes qui fonctionnent en utilisant le code du script basique comme modèle.
    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]

  15. #15
    Invité
    Invité(e)
    Par défaut
    @Celira

    En fait, il manque une virgule ou un point... ou un passage à la ligne !

    Oui c'est moi qui ai choisis. PDO je ne connais pas trop...
    Comme quoi, il ne faut pas négliger non plus la PONCTUATION !


    N.B. Par contre, je te copie-collerai bien ton "exemple basique" une prochaine fois ! Tu écris si bien...

  16. #16
    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
    N.B. Par contre, je te copie-collerai bien ton "exemple basique" une prochaine fois ! Tu écris si bien...
    En fait, ça fait des mois des années longtemps que j'essaye de me motiver pour écrire l'équivalent PDO du Tutoriel ultra-minimal PHP/Mysql et c'est plus ou moins le plan du tuto (à noter que c'est toujours au stade de plan.)
    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]

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    J'ai trouver ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     var_dump($_GET);
    $id = (int) $_GET['id'];
    // requête.
    $result = $mysqli->query('SELECT ville_id, ville_nom, ville_texte
    FROM villes WHERE ville_id = ' . $id );
    // création du nouvel array
    $row = $result->fetch_array();
    echo "<pre>"; //si xdebug non installé
    var_dump($row);
    echo "</pre>";
    Grâce à ce code mes villes avec leurs descriptifs s'affichent maintenant mais j'ai toujours ce message d'erreur : Undefined index: id in

    Mon passage de variable dans mon lien (url) n'est pas bon.

    Et je pense qu' il y a un problème dans mon lien il devrait y avoir : http://localhost/projet_capitales/capitale.php?id=2 (après localhost le nom de la base de donnée et pas : http://localhost/capitale/capitale.php?id=2 (le nom de la table)
    Je me trompe ?

  18. #18
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Pourquoi récupérer par un $_GET or que l'id est dans $_POST['capitale_id']?
    Tu as lu ce message ? Tu n'y as pas répondu.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Avril 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Avril 2018
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Dans un de mes cours il y a écrit : l’identifiant sera utilisé
    pour créer une variable externe de type GET. L’URL de chaque page sera donc de la forme
    http://localhost/projet_capitales/capitale.php?id=1.

    Pour ça que j'ai fais comme dans mon cours

  20. #20
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Et ton prof aurait pu ajouter dans le cours suivant... sauf s'il y a déjà cette variable en POST

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <form method="post">
    <p>Nom de la capitale : <input type="text" name="capitale_nom"
    value="<?php echo $nom ?>"/></p>
    <p>Texte de présentation<br>
    <textarea name="capitale_texte" cols="32" rows="8"/><?php echo $texte
    ?></textarea></p>
    <input type="hidden" name="capitale_id" value="<?php echo $id ?>" />
    <p><input type="submit" name="submit_form" value="valider" /></p>
    </form>

    Grâce à ce formulaire, quand tu valides, tu crées
    $_POST['capitale_nom'] et $_POST['capitale_texte'] et $_POST['capitale_id'] et $_POST['submit_form']Ici, tu fais même exprès de passer $_POST['capitale_id'] en champ caché...
    Alors si tu ne veux pas les utiliser... c'est bien dommage !
    POST ou GET c'est deux façons différentes de passer tes valeurs à chaque submit de l'utilisateur.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. Php mysql débutant
    Par dell91 dans le forum Langage
    Réponses: 39
    Dernier message: 02/04/2020, 17h16
  2. [MySQL] Aide authentification par session PHP MySql (Débutant)
    Par Dargar dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 03/03/2017, 14h52
  3. [MySQL] débutant, PHP MYSQL XML
    Par nkordiko dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 22/04/2010, 16h56
  4. [Débutant] radio button et BDD (javascript/PHP/MySQL)
    Par stringman62 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/02/2007, 19h03
  5. [Flash MX 2004] Php Mysql (débutant)
    Par mooky dans le forum Flash
    Réponses: 7
    Dernier message: 08/02/2006, 20h55

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