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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    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 : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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
    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 confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    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?

  5. #5
    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 : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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]

  6. #6
    Membre confirmé
    Femme Profil pro
    étudiant master
    Inscrit en
    Février 2014
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    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+

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

    Informations professionnelles :
    Activité : étudiant master

    Informations forums :
    Inscription : Février 2014
    Messages : 167
    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.

+ 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, 12h20
  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, 18h30
  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, 09h51
  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, 19h19
  5. Réponses: 3
    Dernier message: 29/03/2004, 18h02

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