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 :

connexion à une base de données postgis en PHP [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut connexion à une base de données postgis en PHP
    Bonjour à tous,

    je me fatigue avec ce problème, merci d'avance de m'indiquer sur ma faute exacte.

    le problème:
    je travaille actuellement à la conception d'un site web à l'aide bootstrap.
    le design en html, le fonctionnement de page par javascript et les requêtes sql à la BD de postgis à l'aide PHP.

    Quand je saisis le pseudo et le mot de passe pour l'authentification, rien ne s'affiche??
    je ne trouve pas l'erreur exacte?

    code html:
    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
    <form id="form" class="form-inline" onsubmit="return submitForm();">
    		<div class="form-group">
    			<label for="pseudo">Pseudo:</label>
    			<input type="pseudo" class="form-control" id="pseudo" name="pseudo">
            </div>
            <div class="form-group">
    			<label for="pwd">Mot de passe:</label>
    			<input type="password" class="form-control" id="pwd" name="password">
            </div>
            <div class="checkbox">
    			<label><input type="checkbox">Rappelles moi</label>
            </div>
        <button type="submit" name="submit" value="Submit" class="btn1 btn-default" >s'identifier</button>
     
        </form>
    code 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
    58
    59
    60
    61
    62
    63
    64
    65
    <?php
    ini_set('display_errors', 1); 
     
    //database login info
    $host = '192.168.0.110';
    $port = '5432';
    $dbname = 'bdsa0';
    $user = 'user';
    $password = 'Mot';
     
    $conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
    //tester la connexion à la BD
    if ($conn-> connect_error) {
    	echo "Not connected : " . $conn-> connect_error;
    	}
    else {
        echo 'connexion réussie : '.$conn->host_info;
     
     
    }
     
    //get the table and fields data
    $pseudo = $_GET['pseudo'];
    $password = $_GET['password'];
     
    //tester la methode GET
    if (!$_GET) {
    	echo "nopseudo " ;
     
    } else {
     echo "pseudo";
     }
     
     
    //create basic sql statement
    $sql = "SELECT * FROM benmed."+"Utilisateurs"+" WHERE pseudo='$pseudo' AND password='$password'"; //benmed."+"Utilisateurs"+"
    //tester la requete
    if (!$sql) {
    	echo "No " ;
     
    } else {
     echo "okkk";
     }
     
    //send the query
    if (!$response = pg_query($conn, $sql)) {
    	echo "A query error occured.\n";
    	exit;
    } 
    $b = array();
    $result = [];
     
     
    $response = pg_query($conn, $sql);
     
    //$rows = array();
    while($r = pg_fetch_assoc($response)) {
        $rows = $r;
    }
    $r = pg_fetch_assoc($response);
    echo json_encode($rows);
     
     
    echo $row['pseudo'];
    ?>
    code javascript:

    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
    $.ajax("get_data.php",{
    		type: "GET",
    		data: $("#form").serialize(),
    		success: function(data){
    			document.getElementById("couches").style.display="none";
    			document.getElementById("couches2").style.display="block";			
    			document.getElementById("nav1").style.display="block";	
     
    			if(data){
     
    				var pseudo = data.pseudo;
    			    var password = data.password;
    			  window.alert("Bienvenue Mr le " );
    			//$( "#hi" ).append("Bienvenue Mr le ");
     
    			document.getElementById("form").style.display="none";
    			document.getElementById("hi").style.display="inline-block";
    			type = "1";
    			if (!data.id_utilisateur) data.id_utilisateur = "1";
    			type = data.id_utilisateur;
    			code = data.d;
    			switch (data.id_utilisateur) {
    	// les cas suivant id d'utilisateur
        case "1":
    	hangry(); // sections (affichage de toutes les couches)
            break;
        case "2":
    	hangry();// sections
            break;
     
        case "3":
    	alert("a");
    	getgeom("ilots2",["gid"],type);// ilots     
            break;
        case "4":
    	getgeom("ilots2",["Nom","Prenom","NI","Sup","NC","NSEC","NILOT"],type,code);// seulement les ilots de proprietaire authentifié
            break;
     
        }	
    			}else if (data == null){
    				window.alert("erreur dans l'email ou le mot de pass.");
     
    			}
    			console.log("Parcells data retrieved");
    			console.log(data.id_utilisateur);
    		},
    		dataType : "json"
    	})
    	return false;
     
     
    	}
    quand j’exécute get_data.php, il m'affiche : connexion réussie: nopseudo No
    Warning: pg_query(): Query failed: ERREUR: erreur de syntaxe sur ou près de « 0 » LINE 1: 0 ^ in C:\ms4w\Apache\htdocs\55\bootstrap-3.3.6-dist\get_data.php on line 46
    A query error occured.
    et sur la page rien ne s'affiche.

    merci

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM benmed."+"Utilisateurs"+" WHERE pseudo='$pseudo' AND password='$password'";
    Qu'est-ce que ces plus font là ? Si c'est pour faire des concaténations, l'opérateur de concaténation est le point . et non le plus +.

    Pour info : Si on applique l'opérateur d'addition à des chaines, il va convertir les chaines en nombres.
    Donc là, vu que tes chaines ne sont pas numériques, tu obtiens l'équivalent de $sql = 0+0+0; autrement dit $sql=0;.
    Et ça m'étonnerait fort que "0" soit une requête SQL valable
    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]

  3. #3
    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
    Bonjour,

    Trois très mauvaises idées:
    1. Tu as passé le nom d'utilisateur et mot de passe en URL (méthode GET), on pourrait les voir dans les historiques des navigateurs.
    2. Et ensuite tu les as passés directement dans la requête, bonjour les injections SQL.
    3. Tu as les mots de passe en claire dans la base.


    A+.

  4. #4
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par Celira Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM benmed."+"Utilisateurs"+" WHERE pseudo='$pseudo' AND password='$password'";
    Qu'est-ce que ces plus font là ? Si c'est pour faire des concaténations, l'opérateur de concaténation est le point . et non le plus +.
    merci Celira pour l'information,
    en fait, j'ai intégré le + dans le sql car la création de la table sur postgis est écrit benmed."Utilisateurs"
    si j'enlève les guillemets, il m'affiche une erreur:

    Warning: pg_query(): Query failed: ERREUR: la relation « benmed.utilisateurs » n'existe pas LINE 1: SELECT * FROM benmed.Utilisateurs WHERE pseudo='' AND passwo... ^ in C:\ms4w\Apache\htdocs\55\bootstrap-3.3.6-dist\get_data.php on line 46
    A query error occured.

  5. #5
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonjour,

    Trois très mauvaises idées:
    .
    merci andry pour cet éclaircissement,

    mais Quelles sont les trois bonnes idées?

  6. #6
    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
    Si tu veux conserver les guillemets dans la requête, il faut les échapper dans la chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM benmed.\"Utilisateurs\" WHERE pseudo='$pseudo' AND password='$password'";
    Les 3 bonnes idées sont la correction des 3 mauvaises idées citées par Andry
    1. Envoyer les informations en méthode POST au lieu de la méthode GET. Ce n'est pas parfait, mais au moins ce n'est plus en clair dans l'URL.
    2. Protéger les données avant de les mettre dans la requête. J'ignore si l'API pour PostgreSQL permet les requêtes préparées, mais tu peux au moins appliquer pg_​escape_​string sur les valeurs avant de les inclure dans la requête
    3. Stocker les mots de passe hachés et non en clair. Tu peux utiliser password_​hash pour les encoder à l'insertion et password_​verify pour la vérification.
    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]

  7. #7
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par Celira Voir le message
    Si tu veux conserver les guillemets dans la requête, il faut les échapper dans la chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM benmed.\"Utilisateurs\" WHERE pseudo='$pseudo' AND password='$password'";
    Les 3 bonnes idées sont la correction des 3 mauvaises idées citées par Andry
    1. Envoyer les informations en méthode POST au lieu de la méthode GET. Ce n'est pas parfait, mais au moins ce n'est plus en clair dans l'URL.
    2. Protéger les données avant de les mettre dans la requête. J'ignore si l'API pour PostgreSQL permet les requêtes préparées, mais tu peux au moins appliquer pg_​escape_​string sur les valeurs avant de les inclure dans la requête
    3. Stocker les mots de passe hachés et non en clair. Tu peux utiliser password_​hash pour les encoder à l'insertion et password_​verify pour la vérification.
    merci infiniment Celira,
    je vais suivi vos indications et explications

    a+

  8. #8
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Celira,

    j'ai corrigé la requête sql, ça fonctionne sans erreur. Mais quand je saisis le pseudo et le mot de passe sur le site, il n'affiche rien.
    j'ai essayé de mettre un test sur la méthde GET :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (!$_GET) {
    	echo "nopseudo " ;
     
    } else {
     echo "pseudo";
     }
    résulat: nopseudo

    Est ce que le problème dans le code de GET ou dans le code js?

  9. #9
    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
    Essaye plutôt de mettre un var_dump pour afficher ce qu'il y a dedans : var_dump($_GET);. Et si tu as modifié ton envoi ajax de get à post, il faut travailler avec $_POST et non plus $_GET.
    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]

  10. #10
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par Celira Voir le message
    Essaye plutôt de mettre un var_dump pour afficher ce qu'il y a dedans : [C]var_dump($_GET);.
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $pseudo = $_GET['pseudo'];
    var_dump($_GET);
     
    $password = $_GET['password'];
    var_dump($_GET);
    voila ce qu'il m'acaffiché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     array(0) { } array(0) { }

  11. #11
    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
    Si t'as utilisé post depuis AJAX:

    A+.

  12. #12
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Si t'as utilisé post depuis AJAX:

    A+.
    j'ai utilisé GET:

    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
    $.ajax("get_data.php",{
    		type: "GET",
    		data: $("#form").serialize(),
    		success: function(data){
    			document.getElementById("couches").style.display="none";
    			document.getElementById("couches2").style.display="block";			
    			document.getElementById("nav1").style.display="block";
     
              if(data){
    			var pseudo = data.pseudo;
    			var password = data.password;
    			window.alert("Bienvenue Mr le " );
    			$( "#hi" ).append("Bienvenue Mr le ");
     
    			document.getElementById("form").style.display="none";
    			document.getElementById("hi").style.display="inline-block";
    }else if {

  13. #13
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    il manque une condition ?
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  14. #14
    Membre régulier
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 164
    Points : 100
    Points
    100
    Par défaut
    merci pour votre aide.

    le problème est résolu par la suppression de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($conn-> connect_error) {
    	echo "Not connected : " . $conn-> connect_error;
    	}
    else {
        echo 'connexion réussie : '.$conn->host_info;
     
     
    }
    et l'ajout dans le code PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password")or die('Connexion impossible : ' . pg_last_error());

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

Discussions similaires

  1. [PostgreSQL] connexion à une base de données via php
    Par georex dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/04/2012, 13h20
  2. [MySQL] Connexion à une base de données avec php-gtk
    Par mawusse dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 12/09/2007, 19h30
  3. [ODBC] [DB2] Problème de connexion à une base de données sur un as400 via PHP sous Linux
    Par boo64 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 19/04/2006, 10h51
  4. Delphi Connexion à une base de donnée distante par TCP/IP
    Par viecel dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/01/2005, 20h19
  5. Réponses: 3
    Dernier message: 29/03/2004, 19h02

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