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 :

Envoie de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Par défaut Envoie de données
    Bonjour,
    Dans le cadre d'un devoir maison étudiant, j'ai comme projet d'écrire et lire dans une base de donnée.
    J'ai donc crée une base de donnée avec deux tables simples une vehicule(numV,marque,modele,annee,prixV,kilometrage) et une autre garage(numG,rue,ville,pays,nombredeplace,#numV)
    a travers un script php je suis sencé pouvoir rentrer de nouveaux modèles de voiture.
    Cependant j'ai une erreur récurrente ligne 9 et 10 alors que les noms correspondent dans mon fichier html comme dans mon fichier php.
    ci-joint mon fichier php et mon fichier html contenant le formulaire.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé Avatar de Arunna
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2013
    Messages : 34
    Par défaut
    Tu peux nous indiquer le message d’erreur ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Par défaut
    Ah bien en fait ça marche, je ne comprends pas trop pourquoi, je l'ai essayé chez un amis et ça marche, il n'y a que chez moi où cela ne marche pas.
    En revanche cette fois j'ai un nouveau soucis mais c'est pour l'affichage des données.
    L'erreur est : Notice:undefined index : numv marque modele et tous les autre champs dans c:\wamp\www\liste.php
    Fichiers attachés Fichiers attachés

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Par défaut
    Bonjour bombers, si je peux te donner un conseil, si tu utilise des requêtes préparés utilise les partout.

    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
     
    <?php
    $reponse=$bdd->prepare('SELECT * FROM vehicule');
    $reponse->execute();
    ?>
     
    <?php while ($donnees=$reponse->fetch()) { 
    //je te déconseil les accentuations
     
    //pour tes echo utilise des apostrophes, et non des guillemets. (' au lieu de ")
    //sécurise tes données avec htmlspecialchars()
    echo '<tr><td>'.htmlspecialchars($donnees['numv']).'</td>';
    	echo '<td>'.htmlspecialchars($donnees['marque']).'</td>';
    	echo '<td>'htmlspecialchars(.$donnees['modele']).'</td>';
    	echo '<td>'.htmlspecialchars($donnees['annee']).'</td>';
    	echo '<td>'.htmlspecialchars($donnees['prixV']).'</td>';
    	echo '<td>'.htmlspecialchars($donnees['kilometrage']).'</tr></td><br/>';
     
    	}
    	echo '</table>';
     
    ?>

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Par défaut
    D'accord merci beaucoup pour ta réponse je vais essayer ça

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Par défaut
    Lorsque j'applique cette methode, j'ai une nouvelle erreur a ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $reponse=$bdd->prepare('SELECT * FROM vehicule');
    $reponse->execute();
    il me dit que la variable $bdd est indéfinie
    et
    Fatal error: Call to a member function prepare() on a non-object

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Par défaut
    Re,

    Il ne faut pas oublier de reprendre la variable de ta connexion :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //si tu utilise la variable $bdd tu doit également la placer ici
    $bdd = new PDO("mysql:host=localhost;dbname=vehicule","root","");
    $bdd-> setattribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

    Si tu est amené à réutiliser ta connexion tu peu utiliser la méthode suivante pour faire appel à ta connexion :

    Créer un nouveau fichier que tu appellera (par exemple) connexionvehicule.inc.php

    dans lequel tu y insérera le code de ta connexion c'est à dire

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    try{
    	$bdd= new PDO("mysql:host=localhost;dbname=vehicule","root","");
    	$bdd-> setattribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    	}
    catch (Exception $e)
    {
            die('Erreur : '. $e->getMessage());
    }

    ensuite pour faire appel à ta connexion dans ta page de code, tu pourra faire appel à ta connexion grâce à 'require_once' comme ceci :

    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
     
     
    <?php
    require_once("connexionvehicule.inc.php");
    try {
    $reponse=$bdd->prepare('SELECT * FROM vehicule');
    $reponse->execute();
     
    while ($donnees=$reponse->fetch()) { 
     
    echo '<tr><td>'.htmlspecialchars($donnees['numv']).'</td>';
    	echo '<td>'.htmlspecialchars($donnees['marque']).'</td>';
    	echo '<td>'htmlspecialchars(.$donnees['modele']).'</td>';
    	echo '<td>'.htmlspecialchars($donnees['annee']).'</td>';
    	echo '<td>'.htmlspecialchars($donnees['prixV']).'</td>';
    	echo '<td>'.htmlspecialchars($donnees['kilometrage']).'</tr></td><br/>';
     
    	}
    	echo '</table>';
    }
            $reponse->closeCursor();
     
    }
    catch (Exception $e) {
            echo 'Erreur : ',  $e->getMessage();
    }
    ?>

    Cordialement.

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Citation Envoyé par reverb94 Voir le message
    Bonjour bombers, si je peux te donner un conseil, si tu utilise des requêtes préparés utilise les partout.
    Et pourquoi ?

  9. #9
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    Ben parce que quand tu débutes, tu ne te préoccupes pas trop des questions d'optimisation et prendre le pli de toujours préparer ses requêtes est bien meilleur et surtout sécurisé que de ne pas le faire.

    Donc, je conseille très fortement de toujours préparer ses requêtes.

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Par défaut
    Bonjour,
    Merci pour votre aide, je vais essayé la méthode de reverb94 et je reviens vers vous pour donner le résultat !

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Par défaut
    bonjour,

    La plupart des bases de données supportent les requêtes préparées,
    elles utilisent moins de ressources et s'exécutent plus rapidement, et une application qui utilise exclusivement les requêtes préparées, peut être sûr (ou presque ) qu'aucune injection SQL ne sera possible.

    pour les 'débutants' ( comme moi xD ) je trouve cette méthode très simple à comprendre et à utiliser.

    Cordialement.

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 57
    Par défaut
    J'ai trouvé le problème ! En fait dans ma base de donnée mes champs étaient écrit en majuscule NUMV, MARQUE etc, alors que dans mon script php ils étaient en majuscule je ne savais pas que c'était sensible a la casse... Du coup cela marche parfaitement merci beaucoup.

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Citation Envoyé par reverb94 Voir le message
    les requêtes préparées... s'exécutent plus rapidement
    Uniquement pour les requêtes multiples (et encore quand on fait des bench on s'aperçoit qu'il en faut un grand nombre dans la boucle pour gagner en vitesse par rapport à des requêtes non préparées). Mais pour des requêtes uniques, les requêtes préparées sont plus lentes que les requêtes non préparées.

    Vient ensuite le problème de sécurité et d'injection sql. Et pour plus de sécurité on conseille effectivement d'utiliser des requêtes préparées pour les requêtes contenant des données utilisateur.

    On peut donc définir la règle suivante :
    - Requêtes multiples et requêtes construites avec des données utilisateur
    => requêtes préparées


    - Requêtes uniques sans données utilisateur
    => requêtes non préparées
    Après on peut aussi dire de faire systématiquement des requêtes préparées mais la règle ci-dessus n'est quand même pas si difficile à retenir.

    Là où je suis moins d'accord c'est de préconiser systématiquement l'utilisation de requêtes préparées dans un code qui respecte correctement la règle ci-dessus.
    Par exemple le code des fichiers "deposer.php" et "liste.php" des messages de bombers est correctement écrit puisque seule la requête contenant des données utilisateur est préparée. Et conseiller de préparer des requêtes comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete = "select MAX(NUMV) from vehicule";
    //ou
    $requete ="select * from vehicule";
    est quand même un peu too much... Non seulement l'exécution d'une requête préparée rendra l'exécution du code un peu plus lent mais surtout il ne faut pas réfléchir bien longtemps pour comprendre que ces types de requêtes sont insensibles au injections sql, car qui dit injection sql dit introduction de code et donc au moins une variable comme vecteur d'introduction.

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 26/06/2008, 10h10
  2. socket : envois des données impossible
    Par thechief dans le forum Réseau
    Réponses: 16
    Dernier message: 18/03/2006, 19h28
  3. envoi de données sur un même port
    Par manaboko dans le forum Développement
    Réponses: 7
    Dernier message: 05/10/2005, 15h53
  4. [PHP-JS] Envoi de données sur une même page...
    Par dudux dans le forum Langage
    Réponses: 8
    Dernier message: 14/09/2005, 13h51
  5. [debutant]envoie de données
    Par miloux32 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 14/08/2003, 10h24

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