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 :

[SQL] Faire une recherche plus modification dans base sql


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Points : 24
    Points
    24
    Par défaut [SQL] Faire une recherche plus modification dans base sql
    Bonjour

    J'aimerais créer un champ recherche dans une page, ce champ permettrer de faire une recherche par nom ou par date dans ma base sql

    Ensuite une fois le resultat de la recherche afficher, il faudrait pouvoir modifier les données de la table

    Pouvez vous m'aider

    D'avance merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Points : 24
    Points
    24
    Par défaut
    Bonjour

    J'ai réussi à mettre en place la fonction recherche et modification dans ma base sql

    Mais je rencontre quand même deux problème:

    * Le premier c'est que par exemple si dans le champ remaque je met un apostrophe et que je valide pour modifier il me met une erreur de syntaxe et ne me modifie rein

    * Le deuxième c'est que les utilisateus peuvent faire une recherche par nom ou par date. Mais quand il font une recherche en mettant la date au foramt français ça ne marche par contre au format américain ça fonctionne... De même après une recherche mon champ date affiché est au format américain et pas français. Je souhaiterais que l'utilisateur puisse saisir toutes les dates au format français et que après ce fasse une conversion transparente pour l'utilisateur

    Je vous met ma page de recherche + mes 3 scripts:

    affiche l'écran de recherche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <form action="modification.php" enctype="multipart/form-data" method="post"> 
    <label>Nom : </label>
     <input name="nom" type="text">
    <label>Date : </label> 
    <input name="date" type="text"> 
    <input name="submit" type="submit" value="Rechercher"> 
    </form>
    Premier script qui interroge la base:
    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
     
    <html>
      <head>
        <title>modification de données en PHP :: partie 1</title>
      </head>
    <body>
      <?php
        if(isset($_POST['submit'])) 
    { 
        $db = mysql_connect('localhost', 'root', ''); 
        mysql_select_db('base1',$db); 
     
        $table="livraisons"; 
        $nom=$_POST['nom']; 
        $date=$_POST['date']; 
     
        if(!empty($nom)){ 
            $sql = "SELECT * FROM $table WHERE nom='$nom'"; 
        } 
        elseif(!empty($date)){ 
            $sql = "SELECT * FROM $table WHERE date='$date'"; 
        } 
        else{ 
            // On ne fait pas de recherche 
            // Redirection 
        } 
     
     
        //exécution de la requête:
        $requete = mysql_query( $sql, $db ) ;
     
        //affichage des données:
        while( $result = mysql_fetch_object( $requete ) )
        {
           echo("<div align=\"center\">".$result->nom." ".$result->prenom." ".$result->date." <a href=\"modification2.php?idPersonne=".$result->id_personne."\">modifier</a><br>\n") ;
        }
        }
      ?>
    </body>
    </html>
    Deuxième script qui intérroge et affiche le resultat:
    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
     
    <html>
      <head>
        <title>modification de données en PHP :: partie2</title>
      </head>
    <body>
      <?php
      //connection au serveur:
      $cnx = mysql_connect( "localhost", "root", "" ) ;
     
      //sélection de la base de données:
      $db = mysql_select_db( "base1" ) ;
     
      //récupération de la variable d'URL,
      //qui va nous permettre de savoir quel enregistrement modifier
      $id  = $_GET["idPersonne"] ;
     
      //requête SQL:
      $sql = "SELECT *
                FROM livraisons
    	    WHERE id_personne = ".$id ;
     
      //exécution de la requête:
      $requete = mysql_query( $sql, $cnx ) ;
     
      //affichage des données:
      if( $result = mysql_fetch_object( $requete ) )
      {
      ?>
     
    <form name="insertion" action="modification3.php" method="POST">
      <input type="hidden" name="id" value="<?php echo($id) ;?>">
      <table border="0" align="center" cellspacing="2" cellpadding="2">
        <tr align="center">
          <td>Nom</td>
          <td><input type="text" name="nom" value="<?php echo($result->nom) ;?>"></td>
        </tr>
        <tr align="center">
          <td>Prenom</td>
          <td><input type="text" name="prenom" value="<?php echo($result->prenom) ;?>"></td>
        </tr>
        <tr align="center">
          <td>Adresse</td>
          <td><input type="text" name="adresse" value="<?php echo($result->adresse) ;?>"></td>
        </tr>
        <tr align="center">
          <td>Ville</td>
          <td><input type="text" name="ville" value="<?php echo($result->ville) ;?>"></td>
        </tr>
        <tr align="center">
          <td>Code postal</td>
          <td><input type="text" name="codepostal" value="<?php echo($result->codepostal) ;?>"></td>
        </tr>
          <td>Telephone</td>
          <td><input type="text" name="telephone" value="<?php echo($result->telephone) ;?>"></td>
        </tr>
          <td>Documents à fournir</td>
          <td><input type="text" name="documentsafournir" value="<?php echo($result->documentsafournir) ;?>"></td>
        </tr>
          <td>Conseiller</td>
          <td><input type="text" name="conseiller" value="<?php echo($result->conseiller) ;?>"></td>
        </tr>
          <td>Rendez vous</td>
          <td><input type="text" name="rendezvous" value="<?php echo($result->rendezvous) ;?>"></td>
        </tr>
          <td>Remarque</td>
          <td><input type="text" name="remarque" value="<?php echo($result->remarque) ;?>"></td>
        </tr>
          <td>Date</td>
          <td><input type="text" name="date" value="<?php echo($result->date) ;?>"></td>
        </tr> 
        <tr align="center">
          <td colspan="2"><input type="submit" value="modifier"></td>
        </tr>
      </table>
    </form>
      <?php
      }//fin if 
      ?>
    </body>
    </html>
    Troisième script qui fait un update des modifs dans ma base:
    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
     
    <?php
      //connection au serveur
      $cnx = mysql_connect( "localhost", "root", "" ) ;
     
      //sélection de la base de données:
      $db  = mysql_select_db( "base1" ) ;
     
      //récupération des valeurs des champs:
      //nom:
      $nom     = $_POST["nom"] ;
      //prenom:
      $prenom = $_POST["prenom"] ;
      //adresse:
      $adresse = $_POST["adresse"] ;
      //code postal:
      $codepostal = $_POST["codepostal"] ;
      //Ville:
      $ville = $_POST["ville"] ;
      //Telephone:
      $telephone = $_POST["telephone"] ;
      //code Documents à fournir:
      $documentsafournir = $_POST["documentsafournir"] ;
      //Conseiller:
      $conseiller = $_POST["conseiller"] ;
      //Rendez vous:
      $rendezvous = $_POST["rendezvous"] ;
      //Remarque:
      $remarque = $_POST["remarque"] ;
     
      //récupération de l'identifiant de la personne:
      $id         = $_POST["id"] ;
     
     
     
      //création de la requête SQL:
      $sql = "UPDATE livraisons
                SET nom         = '$nom', 
    	          prenom     = '$prenom',
    		  adresse    = '$adresse',
                      ville     = '$ville',
    		  codepostal = '$codepostal',
    		  telephone = '$telephone',
                      documentsafournir = '$documentsafournir',
                      conseiller = '$conseiller',
                      rendezvous = '$rendezvous',
                      remarque = '$remarque' 
               WHERE id_personne = '$id' " ;
     
      //exécution de la requête SQL:
      $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
     
     
      //affichage des résultats, pour savoir si la modification a marchée:
      if($requete)
      {
        echo("La modification à été correctement effectuée") ;
      }
      else
      {
        echo("La modification à échouée") ;
      }
    ?>
    Pouvez vous m'aider à resoudre ces 2 problèmes
    Merci pour votre aide

  3. #3
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Premier problème:
    C'est le problème des injections SQL

    Dans ton cas il faut donc, avant d'insérer des données dans la base, utiliser la fonction mysql_real_escape_string() sur la donnée

    Deuxieme probleme:
    Les dates dans MySQL sont stockées au format aaaa-mm-jj et il ne faut surtout pas essayer de le changer, stocker une date dans un autre champ etc ca poserait plus de problèmes que ca n'en résoudrait.
    La solution est donc, avant l'insertion de convertir la date tapée par l'utilisateur et à l'affichage idem transformer la date récupérée de la base de données.
    Il y a eu hier un certains nombre de posts concernant cette transformation de format de date.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Points : 24
    Points
    24
    Par défaut
    et comment utiliser la fonction mysql_real_escape_string() ????

  5. #5
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par ju3979
    et comment utiliser la fonction mysql_real_escape_string() ????
    As-tu lu la documentation ???

    exemple de base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $variable = $_POST['mavariable']; // vaut " l'espoir "
    $requete = "UPDATE table SET monchamp='$variable'";
    ca ca fait une erreur par ce que la requete donne :
    UPDATE table SET monchamp='l'espoir'
    donc erreur de guillemets.

    il faut donc faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $variable = $_POST['mavariable']; // vaut " l'espoir "
    $requete = "UPDATE table SET monchamp='". mysql_real_escape_string($variable) ."'";

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Points : 24
    Points
    24
    Par défaut
    et comme j'ai plusieurs champ je dois faire un update par champ ou y a t-il la possibilité de grouper le tout ?

  7. #7
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Tu gardes tes update comme ils sont et tu appliques la fonction mysql_real_escape_string() a chacune des nouvelles valeurs des champs, comme je l'ai fait avec une dans mon exemple.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Points : 24
    Points
    24
    Par défaut
    Désolé j'ai fait un test avec le champ remarque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $sql = "UPDATE livraisons
                SET nom         = '$nom', 
    	          prenom     = '$prenom',
    		  adresse    = '$adresse',
                      ville     = '$ville',
    		  codepostal = '$codepostal',
    		  telephone = '$telephone',
                      documentsafournir = '$documentsafournir',
                      conseiller = '$conseiller',
                      remarque = '". mysql_real_escape_string($remarque) .",  
                      rendezvous = '$rendezvous'
     
               WHERE id_personne = '$id' " ;

    mais ça ne marche pas il met une erreur: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'Matin' WHERE id_personne = '43'

  9. #9
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Si tu affichais la requete COMPLETE tu verrais qu'il manque un apostrophe apres la remarque, juste avant la virgule

    Dans tes die() mets plutot ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    die("Erreur SQL!!!<br/>Requete : $marequete<br/>Erreur :".mysql_error());
    Ca te permet d'avoir l'erreur ET la requete associée, bien plus simple pour comprendre!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Points : 24
    Points
    24
    Par défaut
    ok merci pour tes précieux conseils ça marche maintenant

    Peux tu m'aider également pour le pb de format de date car avec les post j'ai du mal à comprendre et donc à les adapter à mon problème

    Merci pour ton aide

  11. #11
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par ju3979
    Peux tu m'aider également pour le pb de format de date car avec les post j'ai du mal à comprendre et donc à les adapter à mon problème
    Peux-tu me montrer ce que tu as essayé que je vois ce qui ne va pas plutot?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 79
    Points : 24
    Points
    24
    Par défaut
    je voulais mettre un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $date= date("Y-m-d", mktime(0,0,0,$tab[1], $tab[0], $tab[2]));
    mais je sais pas du tout ou l'insérer dans mes scripts car il faut que l'utilisateur puisse faire sa recherche en saisissant une date au format français et que quand il arrive sur l'ecran de modification des champs la date s'affiche en fr et lui il la modifit en fr

  13. #13
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Donc il faut utiliser cette conversion lorsque tu vas insérer des dates dans ta base, ou quand tu fais des select sur la base de données.

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/06/2011, 14h30
  2. Réponses: 1
    Dernier message: 21/10/2009, 17h26
  3. Réponses: 2
    Dernier message: 08/10/2009, 13h42
  4. Réponses: 4
    Dernier message: 03/03/2008, 14h34
  5. Faire une recherche de texte dans un tableau de variable
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/02/2006, 13h12

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