Affichage requête en jquery

Petit nouveau ! | 7 Messages

29 août 2013, 14:41

Bonjour voila mon problème,

J'utilise PHP, jQuery et json pour mon application : en gros index.html = formulaire de connexion (login, MDP), la requête marche parfaitement, je suis ensuite redirigé vers homepage.html et c'est la que le problème ce pose : J'ai une table client(idClient, nomClient) et j'aimerai afficher la totalité de cette table mais je ne vois pas du tout comment effectuer cela, je vous met mon code cela sera surement plus simple :

Mon fichier php listCli.php
<?php
/**
 * Ce script permet de vérifier si la connexion est valide.
 */
 
header("Access-Control-Allow-Origin", "*");
 
include('global.php');

$retour = array();

try {
	$pdo = new PDO($dsn, $user, $pwd);
	$sqlLogin="SELECT * FROM client ";
	$result = $pdo->query($sqlLogin);
	if ($result->rowCount() == 1) {
		foreach ($result as $ligne) {
			$retour = array (
				'idClient' => $ligne['idClient'],
				'nomClient' => $ligne['nomClient']
			);
		}
	}
	else {
		$retour = array (
			'error' => 'Erreur dans la requête sql'
		);
	}
}
catch (Exception $e) {
	$retour = array (
		'error' => urlencode("Erreur avec la base de données. Contactez l'administrateur.")
	);
}
	
echo $_GET['callback'].'('.json_encode($retour).')';

 

Ma page HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1, maximum-scale=1" />
    <link type="text/css" href="css/main.css" rel="stylesheet" />
	<script type="text/javascript" src="js/jQuery.js"></script>
	<!--<script type="text/javascript" src="js/cordova.js"></script>-->
    <script type="text/javascript" src="js/function.js"></script>    
    <script type="text/javascript" src="js/homePage.js"></script>
</head>

<body class="homePage">

	<div id="wrapper">
		<br/>
		<img src="img/logo.png" />
		<br/>
		<br/>
		<h1>Accueil</h1>
	</div>
	<br/>
	<div class="content"></div>

</body>
</html>
Ma page JS (homePage.js)
[javascript]$(document).ready(function(){
login = extrUrlParam("login");
pwd = extrUrlParam("password");

// si le login et le mot de passe sont fournis
if(login != "" && pwd != "") {
$.ajax({
type: "GET",
url: "http://127.0.0.1:8888/script/login.php?lo=" + encodeURIComponent(login) + "&pwd=" + encodeURIComponent(pwd),
contentType: "application/json",
dataType: 'jsonp',
async: false,
crossDomain: true,
success: function(data) {
if(data.error && data.error != 'undefined') {
document.location.href="index.html?err=" + encodeURIComponent(data.error);
}
else {
$.ajax({
type: "POST",
url: "http://127.0.0.1:8888/script/listCli.php",
contentType: "application/json",
dataType: 'jsonp',
async: false,
crossDomain: true,
success: function(data) {
$(".content").html("idClient "+data.idClient);
} })
}
}
});
}
// sinon on retourne sur l'accueil avec une erreur
else document.location.href="index.html?err=" + encodeURIComponent("Veuillez saisir un login et un mot de passe");
});[/javascript]

Petit nouveau ! | 7 Messages

29 août 2013, 15:41

HELP

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 août 2013, 16:11

Modération :
Les "up" sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Merci de prendre le temps de lire les règlements.
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

29 août 2013, 16:14

Ehoh... Tu sais il y a des gens qui ont une vie ? On est pas payé à la réponse ici. ;)

Déjà tu as un problème dans ton code PHP...
if ($result->rowCount() == 1) {
                foreach ($result as $ligne) {
                        $retour = array (
                                'idClient' => $ligne['idClient'],
                                'nomClient' => $ligne['nomClient']
                        );
                }
        }
Ta requête te retourne tous les n-uplets mais ton test vérifie qu'il n'y en a que un de retourné.
1) Modifies ta condition
Ton foreach est bien mais tu écrases le contenu de $retour à chaque itération.
2) Ajoutes dans une nouvelle dimension de $retour au lieu d'écraser son contenu

Ensuite il faut interpréter les résultats dans ton JS.
De ce côté json est un objet et donc tu peux itérer dessus avec une boucle for et affiche les informations contenues dans chaque dimension.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 août 2013, 16:31

echo $_GET['callback'].'('.json_encode($retour).')';

json foireux a cause de ce qu'il y a dans $_GET['callback'] et des parenthèses.

cette info est inutile puisse que l'a forcément en réalisant la requête ajax.
if ($result->rowCount() == 1) {
                foreach ($result as $ligne) {
                        $retour = array (
                                'idClient' => $ligne['idClient'],
                                'nomClient' => $ligne['nomClient']
                        );
                }
        }
        else {
                $retour = array (
                        'error' => 'Erreur dans la requête sql'
                );
        }
inutile, test si result != false et si oui utilise fetchAll() pour avoir le tableau retour directement. (sinon erreur, obtenue avec errorInfo()).
de plus ton foreach écrase systématiquement l'info précédente donc tu n'as que la dernière ligne retournée par la requête.

@+
Il en faut peu pour être heureux ......