Partage
  • Partager sur Facebook
  • Partager sur Twitter

foreach me renvoie uniquement une ligne de la bdd

ajax jquery

Sujet résolu
31 décembre 2021 à 16:46:53

Bonjour 

J'essaye d'afficher 3 adresses qui ont la "ville" Paris mais je n'arrive pas, par contre j'ai une adresse qui a le nom "ville" strasbourg elle s'affiche correctement

Faut-il modifier le code javascript ou bien celui du PHP? 

Faut-il utiliser while au lieu de foreach?

Merci pour votre aide

$.ajax({
   url: "locate.php",
   type: "POST",
   data: $('#locateJSON').serialize(),                         
   cache: false,

    success:function(data){ 
           alert(data);
           data=JSON.parse(data);
           
           $('#label_point_2').html(data.ville);


     }
})

le code PHP

if((isset($_POST['Ville']))){
            $ville = htmlspecialchars($_POST['Ville']);
            $CodeP = htmlspecialchars($_POST['FindCodePostal']);


            $query = $bdd->prepare('SELECT * FROM local WHERE Ville= ? or CodePostal = ?');
            $query->execute(array($ville, $CodeP));
            $Ville = $query->rowCount();
            if($Ville >0){
                $posts = $query->fetchAll(PDO::FETCH_OBJ);

                
                foreach($posts as $post) {


                    $post['GoId']=$post->id;
                    $post['GoNom']=$post->Nom;
                    $post['GoAdresse']=$post->Adresse;
                    $post['GoCP']=$post->CodePostal;
                    $post['GoVille']=$post->Ville;
                   
                    echo json_encode($post);

                }         
                unset($post);
          }
}




-
Edité par CyranoDecasa 1 janvier 2022 à 19:06:00

  • Partager sur Facebook
  • Partager sur Twitter
31 décembre 2021 à 21:12:25

Bonsoir pour la partie php htmlspecialchars se place a l'affichage non a la récupération de la donnée.

Ensuite je dirai que deja dans le php il a une erreur le

echo json_encode n'est pas bien place car il est fait dans le foreach il faut le faire en dehors donc je vous conseille de creer un array et via array_push ajouter le tableau  post a ce nouveau tableau et donc a la fin du foreach faire un echo json encode de ce nouveau tableau suivi d'un die histoire d'etre sûr.

ensuite il une erreur evidente sur post

vous faites des affectations sur le tableau post dans le foreach et ce que vous avez affecter son des valeurs d'attributs de l'objet post

Soit post est un objet soit c'est un tableau. 

En conclusion je pense qu'il faut réélement revoir la partie php et la tester sans ajax c'est a dire provoquer vous meme la condition puis voir ce que donne le echo json_encode final

sinon niveau ajax je ne pense pas que la partie ajax soit fausse a une chose pres, quand est ce que vous envoyez les $_POST que vous récupérez en php ? et data.ville ne sera sûrement pas ce que vous attendez

-
Edité par zvheer 31 décembre 2021 à 21:17:21

  • Partager sur Facebook
  • Partager sur Twitter

yasakani no magatama

1 janvier 2022 à 10:10:42

zvheer a écrit:

Bonsoir pour la partie php htmlspecialchars se place a l'affichage non a la récupération de la donnée.

Ensuite je dirai que deja dans le php il a une erreur le

echo json_encode n'est pas bien place car il est fait dans le foreach il faut le faire en dehors donc je vous conseille de creer un array et via array_push ajouter le tableau  post a ce nouveau tableau et donc a la fin du foreach faire un echo json encode de ce nouveau tableau suivi d'un die histoire d'etre sûr.

ensuite il une erreur evidente sur post

vous faites des affectations sur le tableau post dans le foreach et ce que vous avez affecter son des valeurs d'attributs de l'objet post

Soit post est un objet soit c'est un tableau. 

En conclusion je pense qu'il faut réélement revoir la partie php et la tester sans ajax c'est a dire provoquer vous meme la condition puis voir ce que donne le echo json_encode final

sinon niveau ajax je ne pense pas que la partie ajax soit fausse a une chose pres, quand est ce que vous envoyez les $_POST que vous récupérez en php ? et data.ville ne sera sûrement pas ce que vous attendez

-
Edité par zvheer il y a environ 12 heures

Merci  zvheer 

 Ton explication est bien précise, je suis débutant donc tous les conseils m'aident beaucoup pour mon apprentissage

je me suis procédé de cette façon, sauf que je récupère maintenant la 1ère adresse de la ville de "Paris", les 2 autres adresses ne s'affichent pas

if((isset($_POST['Ville']))){
            $ville = ($_POST['Ville']);
            $CodeP = ($_POST['FindCodePostal']);
 
 
            $query = $bdd->prepare('SELECT * FROM local WHERE Ville= ? or CodePostal = ?');
            $query->execute(array($ville, $CodeP));
            $Ville = $query->rowCount();
            if($Ville >0){
                $posts = $query->fetchAll(PDO::FETCH_OBJ);
 
                $array = array();
                foreach($posts as $post) {
 
                  $array[] = 
                    $post['GoId']=$post->id;
                    $post['GoNom']=$post->Nom;
                    $post['GoAdresse']=$post->Adresse;
                    $post['GoCP']=$post->CodePostal;
                    $post['GoVille']=$post->Ville;
                    
                    
 
                }        
                echo json_encode($post);
          }
}




  • Partager sur Facebook
  • Partager sur Twitter
1 janvier 2022 à 10:58:08

C'est pour cela que j'ai demande d'utiliser array_push qui est une fonction qui ajoute des items dans un tableau, le premier paramètre est le tableau puis le reste des variables est a nombre variable, c'est a dire que vous pouvez ajouter autant d'items a la fois que vous le voulez ensuite.

ensuite a la fin vous faites un echo json_encode de $post et non de $array

donc meme ai vous aviez utiliser array_push ca ne sert a rien a la fin le json_encode doit se faire sur le nouveau array que voys remplirez dans le foreach.

Et je redis soit $post est un tableau soit $post est un objet ou alors faites un var_dump de $post dans le foreach que je puisse voir ce que c'est, peut etre que FETCH_OBJ le permet

-
Edité par zvheer 1 janvier 2022 à 10:59:45

  • Partager sur Facebook
  • Partager sur Twitter

yasakani no magatama

1 janvier 2022 à 11:34:53

zvheer a écrit:

C'est pour cela que j'ai demande d'utiliser array_push qui est une fonction qui ajoute des items dans un tableau, le premier paramètre est le tableau puis le reste des variables est a nombre variable, c'est a dire que vous pouvez ajouter autant d'items a la fois que vous le voulez ensuite.

ensuite a la fin vous faites un echo json_encode de $post et non de $array

donc meme ai vous aviez utiliser array_push ca ne sert a rien a la fin le json_encode doit se faire sur le nouveau array que voys remplirez dans le foreach.

Et je redis soit $post est un tableau soit $post est un objet ou alors faites un var_dump de $post dans le foreach que je puisse voir ce que c'est, peut etre que FETCH_OBJ le permet

-
Edité par zvheer il y a 10 minutes


autrement, voici ce que j'obtiens dans réseau avec ajax  si je met 

echo json_encode($post);

à l'interieur de foreach j'obtiens:

{"Id":"4","Nom":"test1","GoAdresse":"test1test1test1test1test1test1\r\ntest1test1test1test1","CP":"75000","Ville":"paris"}

Par contre si je la met à l'extérieur de foreach j'obtiens une seule ligne:

  1. {Id: "6", GoNom: "test3",…}
    1. Adresse"test3test3test3test3test3test3\r\ntest3test3test3test3\r\ntest3test3test3test3"
    2. CP"75003"
    3. Id"6"
    4. Nom"test3"
    5. Ville"paris"


-
Edité par CyranoDecasa 2 janvier 2022 à 22:18:55

  • Partager sur Facebook
  • Partager sur Twitter
2 janvier 2022 à 22:19:46

Je pense qu'il faudrait que je revoit l'ajax, 

Je cloture ce sujet 

Merci

  • Partager sur Facebook
  • Partager sur Twitter
2 janvier 2022 à 22:22:45

Bonsoir,

ça ne serai pas $array qu'il faudrait mettre dans le json ?

c'est logique que tu es que la dernière ligne puisque tu prends $post

autre chose, la méthode rowCount ne s'utilise pas sur une requête SELECT comme tu pourras le lire dans la doc de cette dernière. Utilise plutôt fetchColumn

  • Partager sur Facebook
  • Partager sur Twitter
3 janvier 2022 à 11:48:50

Aurélien10! a écrit:

Bonsoir,

ça ne serai pas $array qu'il faudrait mettre dans le json ?

c'est logique que tu es que la dernière ligne puisque tu prends $post

autre chose, la méthode rowCount ne s'utilise pas sur une requête SELECT comme tu pourras le lire dans la doc de cette dernière. Utilise plutôt fetchColumn


Merci Aurélien pour ta réponse,

oui je suis sur la piste de modifier le ajax pour qu'il prend en compte tout le tableau

  • Partager sur Facebook
  • Partager sur Twitter
4 janvier 2022 à 16:04:09

Bonjour mes amis,

Jai reussi à résoudre ce probleme, il fallait mettre $.each dans ajax pour que ca marche.

Merci

  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2022 à 17:33:34

bonjours j'ai le même problème

$('#upload').submit(function(b){
 b.preventDefault(); 
console.log(b); 
var data_input = new FormData(); 
var sifat = $("#sifat").val(); 
data_input.append('sifat[]',sifat); 
$.ajax({ type: 'post',
 url: 'post-new-product.php',
 dataType: 'script',
 cache: false, 
contentType: false,
 processData: false,
 data: data_input,
 success: function (response) {
 alert('sf daz');
 } 
}); 
});
$post2 = $_POST['sifat'];
 if (isset($post2)){
   $post =  $_POST['sifat'];
    foreach($post as $key => $value){
    $post1 = $post[$key];
 }

-
Edité par HoussamYamil1 21 mai 2022 à 17:41:13

  • Partager sur Facebook
  • Partager sur Twitter
21 mai 2022 à 18:55:39

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)