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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2014
    Messages : 33
    Points : 22
    Points
    22

    Par défaut Faire une requete préparée en postgresql avec php

    Bonsoir,

    Dans le cadre d'un projet de groupe, je dois réaliser un petit site web qui permettra d'afficher des messages.
    Nous avons l'obligation d'utiliser une base de donnée postgres.

    Nous avons donc réalisé la base de donnée, avec des tables et des vues.

    Je bloque pour le moment au niveau d'une requete preparé ou j'utilise une variable dedans.

    Voici le fichier connexion.php, qui me permet de me connecter à 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
     
    <?php
      $dsn = "pgsql:host=localhost;port=5432;dbname=postgres;user=postgres;password=hirokw";
      try
        {
        $conn = new PDO($dsn);
          if($conn)
          {
            echo "Connected to the <strong>$dsn</strong> database successfully! <br />";
          }
        }
      catch (PDOException $e)
        {
          echo $e->getMessage();
        }
    ?>
    Puis mon fichier php principal, index.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
    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
     
    <meta http-equiv="Cache-control" content="no-cache">
    <?php
    	include_once "connexion/connexion.php";
    	session_start();
      $_SESSION['mail'] = $_POST['username']; //On enregistre le name de la personne connecté
     	$adr_email =   $_SESSION['mail']."@iut.fr";
     
     
    	//Test d'une première requete qui récupère les info de la table membres ou le nom
    	$r=$conn->query('SELECT * from membres');
    	while ($donnees = $r->fetch())
    	{
    		 echo $donnees['nom'] . '<br />';
    	}
    /*\'franck@iut.fr\'*/
    ?>
    	<h3>Message reçus</h3>
    <?php
     
    	$r = $conn->prepare('SELECT * from mes_messages_recu WHERE mes_messages_recu.dest= :email2 ');
    	$r->execute(array(
    	    ':email2' => $adr_email
    	));
     
    	while ($donnees = $r->fetch())
    	{
    	    echo $donnees['mess'] . '<br />';
    	}
     
    	$r->closeCursor();
     ?>
     
     
     <!DOCTYPE html>
     <html>
     <head>
         <title>Bienvenue</title>
         <link href="css/style1.css" rel="stylesheet" type="text/css">
     </head>
     
    	 <body>
    		 <div id="main">
    			<form action="new_message.php" method="post">
    				<p>
    					<p><input type="text" name="Destinataire" placeholder="Adresse email"/></p>
    					<p><input type="text" name="Objet" placeholder="Objet"/></p>
    					<p>
    						<textarea name="message" rows="8" cols="45" placeholder="Votre message"></textarea>
    					</p>
    					<p><input type="submit" value="envoyer"/></p>
    				</p>
    			</form>
    		 </div>
    	 </body>
     
     </html>
    Il y a également un autre fichier mais qui n'est pas utile ici, il permet de se connecter avec un login et mot de passe en POST. Je construit également ma variable de session $adr_email grâce au login que je récupère.

    Mon problème se situe donc au niveau des lignes suivantes, sur le fichier index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $r = $conn->prepare('SELECT * from mes_messages_recu WHERE mes_messages_recu.dest= :email2 ');
    	$r->execute(array(
    	    ':email2' => $adr_email
    	));
    Cela ne m'affiche aucune erreur mais ne m'affiche pas non plus les messages qu'il devrait.
    J'ai essayé beaucoup de choses mais cela ne fonctionne pas, avez vous une idée sur la question ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    29 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 207
    Points : 43 386
    Points
    43 386

    Par défaut

    Commence par activer les erreurs PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2014
    Messages : 33
    Points : 22
    Points
    22

    Par défaut

    Je viens de l'activer, mais je n'ai pas plus d'info sur une potentielle erreur.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    29 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 207
    Points : 43 386
    Points
    43 386

    Par défaut

    Contrôle les éléments après l'execution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $r->execute(array(
    	    ':email2' => $adr_email
    	));
    var_dump($r);
    var_dump($adr_email);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2014
    Messages : 33
    Points : 22
    Points
    22

    Par défaut

    C'est donc ce que j'avais fait précédemment et voici ce que ça me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C:\wamp64\www\projet_bdd\Mail-PostgreSQL\boite_mail\index.php:37:
    object(PDOStatement)[3]
      public 'queryString' => string 'SELECT * from mes_messages_recu WHERE mes_messages_recu.dest= :email2 ' (length=70)
    C:\wamp64\www\projet_bdd\Mail-PostgreSQL\boite_mail\index.php:38:string 'francky@iut.fr' (length=14)
    Du coup ça m'avance pas trop.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    29 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 207
    Points : 43 386
    Points
    43 386

    Par défaut

    Déjà tu as bien vérifié que cette requête donne des résultats ?

    Sinon continue le debugage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $return = $r->execute(array(
    	    ':email2' => $adr_email
    	));
    var_dump($return);
    var_dump($r->rowCount());
    $donnees = $r->fetchAll();
    var_dump($donnees);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2014
    Messages : 33
    Points : 22
    Points
    22

    Par défaut

    J'ai finalement réussi à faire mon select, j'avais un soucis sur une de mes variable. Merci pour l'aide

    Je rencontre un autre problème pour faire un insert dans une vue.

    Voici mon 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
     
    <?php
      //include_once "connexion/connexion.php";
     
        $conn1 = pg_pconnect("hostaddr = 127.0.0.1 dbname = postgres user = postgres password = Morasin1961");
        if (!$conn1)
        {
          echo "Une erreur s'est produite 1.\n";
          exit;
        }
     
        $r = $conn1->prepare( "INSERT INTO mes_messages_recu (expe,mess,dest, obj) VALUES ('julien@iut.com', :message, :destinataire,:objet)");
        $r->execute(array(
      	    ':message' => $_POST['message'],
            ':destinataire' => $_POST['destinataire'],
            ':objet' => $_POST['objet']
      	));
     ?>
    Et cela me donne les erreurs suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Fatal error: Uncaught Error: Call to a member function prepare() on resource in C:\wamp64\www\projet_bdd\Mail-PostgreSQL\boite_mail\new_message.php on line 11
    ( ! ) Error: Call to a member function prepare() on resource in C:\wamp64\www\projet_bdd\Mail-PostgreSQL\boite_mail\new_message.php on line 11
    Je ne vois pas ce qui ne va pas, comment faire ?

    merci d'avance

  8. #8
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    juin 2011
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : juin 2011
    Messages : 493
    Points : 912
    Points
    912

    Par défaut

    Salut,
    c'est soit PDO ou pg_connect avec ses fonctions associées http://php.net/manual/fr/ref.pgsql.php
    Le bienfait n'est jamais perdu

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2014
    Messages : 33
    Points : 22
    Points
    22

    Par défaut

    Salut,

    du coup j'ai refait autrement

    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
    <?php
       $dsn = "pgsql:host=localhost;port=5432;dbname=postgres;user=postgres;password=Morasin1961";
     try{
                        // create a PostgreSQL database connection
                        $conn = new PDO($dsn);
                    }catch (PDOException $e){
                        // report error message
                        echo $e->getMessage();
                      }
     
      $expe='henri@iut.fr';
                                   $mess='ca marche ?';
                                   $dest='franck@iut.fr';
                                   $obj='Dernier Test';
     
                                   $req = $conn->prepare('INSERT INTO mes_messages_recu(expe,mess,dest,obj)VALUES(:expe,:mess,:dest,:obj)');
     
                                   $req->execute(array(
                                       'expe' => $expe,
                                       'mess' => $mess,
                                        'dest' => $dest,
                                        'obj' => $obj
                                       ));
     
     
     ?>
    ca ne me met pas d'erreur, mais ça ne m'insere rien dans la vue. Je comprend pas trop la

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    29 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 207
    Points : 43 386
    Points
    43 386

    Par défaut

    Pense à activer les erreurs PDO.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    juin 2011
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : juin 2011
    Messages : 493
    Points : 912
    Points
    912

    Par défaut

    Ajoute après $conn = new PDO($dsn); , $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Le bienfait n'est jamais perdu

Discussions similaires

  1. faire une requete avec restriction
    Par rfily dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/04/2009, 10h13
  2. Réponses: 10
    Dernier message: 13/08/2007, 16h12
  3. Faire une requete de requete en SQL <= pb avec analyse croisée
    Par capitaine dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/08/2006, 16h13
  4. Comment faire une requete liée avec une requete ?
    Par DavidDeTroyes dans le forum Requêtes
    Réponses: 4
    Dernier message: 18/04/2006, 13h18
  5. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22

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