Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/08/2007, 19h54   #1
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
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
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 11h50   #2
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
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 :
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 :
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 :
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 :
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
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 11h54   #3
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 11h58   #4
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
et comment utiliser la fonction mysql_real_escape_string() ????
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 12h02   #5
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Citation:
Envoyé par ju3979
et comment utiliser la fonction mysql_real_escape_string() ????
As-tu lu la documentation ???

exemple de base
Code :
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 :
Citation:
UPDATE table SET monchamp='l'espoir'
donc erreur de guillemets.

il faut donc faire:
Code :
1
2
$variable = $_POST['mavariable']; // vaut " l'espoir "
$requete = "UPDATE table SET monchamp='". mysql_real_escape_string($variable) ."'";
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 14h30   #6
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
et comme j'ai plusieurs champ je dois faire un update par champ ou y a t-il la possibilité de grouper le tout ?
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 14h37   #7
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 16h33   #8
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
Désolé j'ai fait un test avec le champ remarque

Code :
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'
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 16h37   #9
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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 :
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!
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 16h56   #10
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
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
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 17h00   #11
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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?
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 17h12   #12
Invité de passage
 
Inscription : mai 2007
Messages : 79
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 79
Points : 2
Points : 2
je voulais mettre un truc du genre:

Code :
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
ju3979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 17h26   #13
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h43.


 
 
 
 
Partenaires

Hébergement Web