Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/12/2011, 17h40   #1
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
Par défaut Tableau considéré comme non vide

Bonjour,

Dans un script Ajax, je cherche le département auquel appartient une localité. Cependant, il arrive que certains pays ne possèdent pas de département, et donc que cette recherche ne retourne rien.

Or, en exécutant mon script, j'obtiens une erreur 500 lorsque je n'ai aucun département retourné. Voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
 
         $listeDepartements = null;
 
...
 
          $listeDepartements = $em->getRepository('HotelsGestionAnnoncesBundle:Departement')->getDepartementsByElem($idElemInit, $typeElemInit);
 
          $retour = '';
 
          if(!empty($listeDepartements))
          {
           foreach($listeDepartements as $departement)
            {
             $retour .= $departement->getId() . '_' . $departement->getNom() . '+';
            }
 
...
Voici la fonction getDepartementsByElem($idElemInit, $typeElemInit) qui recherche le(s) département(s) :

Code :
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
 public function getDepartementsByElem($idElemInit, $typeElemInit)
	{	
		$em = $this->getEntityManager();
 
    switch($typeElemInit)
     {
      case 'localite':
        $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Localite')->find($idElemInit);
      break;
 
      case 'commune':
        $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Commune')->find($idElemInit);
      break;
 
      case 'province':
        $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Province')->find($idElemInit);
      break;
 
      case 'region':
        $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Region')->find($idElemInit);
      break;
 
      default:
        $obj = $em->getRepository('HotelsGestionAnnoncesBundle:Pays')->find($idElemInit);
      break;
     }
 
    $retour = array();
 
    if($typeElemInit == 'localite')
     {
      $retour[] = $obj->getCommune()->getDepartement();
     }
    elseif($typeElemInit == 'commune' || $typeElemInit == 'province')
     {
      $retour[] = $obj->getDepartement(); 
     }
    else
     {
      $retour = $obj->getDepartements();
     }          
 
    return $retour;
	}
Voici le détail de l'erreur que j'obtiens :

Citation:
abbr title="Proxies\HotelsGestionAnnoncesBundleEntityDepartementProxy">HotelsGestionAnnoncesBundleEntityDepartementProxy</abbr>
-&gt;getId
</strong>
()

<br />
in C:\wamp\www\Symfony\src\Hotels\GestionAnnoncesBundle\Controller\DepartementController.php at line 218&nbsp;
.

La ligne 218 est la suivante :

Code :
$retour .= $departement->getId() . '_' . $departement->getNom() . '+';
Donc, apparemment, $listeDepartements n'est pas considéré comme étant vide, vu que le foreach est éxécuté. Quelqu'un aurait une idée?

Merci d'avance pour votre aide
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 18h25   #2
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
J'ai résolu mon problème en conditionnant mon foreach de cette manière :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
          if(is_array($listeDepartements))
           {
            if(is_object($listeDepartements[0]))
             {
              foreach($listeDepartements as $departement)
               {
                $retour .= $departement->getId() . '_' . $departement->getNom() . '+';
               }
 
              //Supprimer le dernier '+'
              if($retour != '')
               {
                $retour = substr($retour, 0, strlen($retour) - 1);
               }
             }
           }
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 13h15   #3
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
Je pensais avoir résolu le problème comme précédemment décrit, mais je me suis trompé. L'erreur est toujours belle et bien présente!
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 13h29   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Pour comprendre la situation je commencerais par regarder ce que contient $listeDepartements avec print_r( ) ou var_dump( ).
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 14h15   #5
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
Merci beaucoup pour ton intérêt. Je rame grave et deviens chêvre. J'avais déjà fais un var_dump de '$listeDepartements', et ça ne m'affiche rien :

Code :
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
 
...
 
          $listeDepartements = $em->getRepository('HotelsGestionAnnoncesBundle:Departement')->getDepartementsByElem($idElemInit, $typeElemInit);
          echo 'maListe vaut ' . var_dump($listeDepartements);
          $retour = '';
 
          if($listeDepartements)
           {     
            foreach($listeDepartements as $departement)
             {
              if(is_object($departement))
               {
                $retour .= $departement->getId() . '_' . $departement->getNom() . '+';
               }
             }
 
            //Supprimer le dernier '+'
            if($retour != '')
             {
              $retour = substr($retour, 0, strlen($retour) - 1);
             }
           }
 
         return new \Symfony\Component\HttpFoundation\Response($retour);
...
Et cela me donne :

Citation:
</pre>maListe vaut <!DOCTYPE html>
J'ai toujours une erreur qui subsiste au niveau de la ligne

Code :
$retour .= $departement->getId() . '_' . $departement->getNom() . '+';
Or, j'ai encore modidié ma méthode 'getDepartementsByElem()' de cette manière :

Code :
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
...
    $retour = array();
    $pasRetour = true;
 
    if($typeElemInit == 'localite')
     {
      $departement = $obj->getCommune()->getDepartement();
 
      if(!empty($departement))
       {
        $pasRetour = false;
        $retour[] = $departement;
       }
     }
 
...
 
    if(!$pasRetour)
     {
      return $retour;
     }
    else
     {
      return false;
     }
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 14h39   #6
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,
Pourrais tu remplacer :
Code :
echo 'maListe vaut ' . var_dump($listeDepartements);
par
Code :
echo 'maListe vaut ', var_dump($listeDepartements), ' - fin de maListe';
et poster le résultat
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 14h49   #7
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
Ok, bien vu... On a de fait un peu plus de matière :

Code :
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
maListe vaut <pre class='xdebug-var-dump' dir='ltr'>
<b>array</b>
  0 <font color='#888a85'>=&gt;</font> 
    <b>object</b>(<i>Proxies\HotelsGestionAnnoncesBundleEntityDepartementProxy</i>)[<i>259</i>]
      <i>private</i> '_entityPersister' <font color='#888a85'>=&gt;</font> 
        <b>object</b>(<i>Doctrine\ORM\Persisters\BasicEntityPersister</i>)[<i>263</i>]
          <i>protected</i> '_class' <font color='#888a85'>=&gt;</font> 
            <b>object</b>(<i>Doctrine\ORM\Mapping\ClassMetadata</i>)[<i>384</i>]
              ...
          <i>protected</i> '_conn' <font color='#888a85'>=&gt;</font> 
            <b>object</b>(<i>Doctrine\DBAL\Connection</i>)[<i>395</i>]
              ...
          <i>protected</i> '_platform' <font color='#888a85'>=&gt;</font> 
            <b>object</b>(<i>Doctrine\DBAL\Platforms\MySqlPlatform</i>)[<i>391</i>]
              ...
          <i>protected</i> '_em' <font color='#888a85'>=&gt;</font> 
            <b>object</b>(<i>Doctrine\ORM\EntityManager</i>)[<i>392</i>]
              ...
          <i>protected</i> '_queuedInserts' <font color='#888a85'>=&gt;</font> 
            <b>array</b>
              ...
          <i>protected</i> '_rsm' <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
          <i>protected</i> '_columnTypes' <font color='#888a85'>=&gt;</font> 
            <b>array</b>
              ...
          <i>private</i> '_insertSql' <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
          <i>protected</i> '_selectColumnListSql' <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
          <i>protected</i> '_selectJoinSql' <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
          <i>protected</i> '_sqlAliasCounter' <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>0</font>
          <i>protected</i> '_sqlTableAliases' <font color='#888a85'>=&gt;</font> 
            <b>array</b>
              ...
      <i>private</i> '_identifier' <font color='#888a85'>=&gt;</font> 
        <b>array</b>
          'id' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'0'</font> <i>(length=1)</i>
      <i>public</i> '__isInitialized__' <font color='#888a85'>=&gt;</font> <small>boolean</small> <font color='#75507b'>false</font>
      <i>private</i> 'id' <small>(Hotels\GestionAnnoncesBundle\Entity\Departement)</small> <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
      <i>private</i> 'code' <small>(Hotels\GestionAnnoncesBundle\Entity\Departement)</small> <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
      <i>private</i> 'nom' <small>(Hotels\GestionAnnoncesBundle\Entity\Departement)</small> <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
      <i>protected</i> 'communes' <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
      <i>protected</i> 'provinces' <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
      <i>private</i> 'region' <small>(Hotels\GestionAnnoncesBundle\Entity\Departement)</small> <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
      <i>private</i> 'pays' <small>(Hotels\GestionAnnoncesBundle\Entity\Departement)</small> <font color='#888a85'>=&gt;</font> <font color='#3465a4'>null</font>
</pre> - fin de maListe<!DOCTYPE html>
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 14h54   #8
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
J'ai simplifié cette fonction et modifié les retours :
Code :
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
public function getDepartementsByElem($idElemInit, $typeElemInit) {
   $em = $this->getEntityManager();
 
   $bundles = array(
      'localite' => 'Localite',
      'commune'  => 'Commune',
      'province' => 'Province',
      'region'   => 'Region',
      'pays'     => 'Pays'
   );
 
   if ( ! isset($bundles[$typeElemInit])) {
      $typeElemInit = 'pays';
   }
 
   $obj = $em->getRepository("HotelsGestionAnnoncesBundle:{$bundles[$typeElemInit]}")->find($idElemInit);
 
   if ($typeElemInit === 'localite') {
      $data = $obj->getCommune()->getDepartement();
   }
   else
   if (($typeElemInit === 'commune') || ($typeElemInit === 'province')) {
      $data = $obj->getDepartement();
   }
   else {
      return $obj->getDepartements();
   }
   return ($data) ? array($data) : array();
}
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 15h04   #9
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
Encore un tout grand merci pour ton aide...

J'ai remplacé mon code par le tien (que je n'ai pas encore étudié de près). Malheureusement, j'ai toujours une erreur 500. Je vais également étudier le détail de cette erreur et posté ce qui me paraîterait intéressant.
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 15h17   #10
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
L'erreur provient toujours de cette fameuse ligne :

Citation:
<strong>
<abbr title="Proxies\HotelsGestionAnnoncesBundleEntityDepartementProxy">HotelsGestionAnnoncesBundleEntityDepartementProxy</abbr>
-&gt;getId
</strong>
()

<br />
in C:\wamp\www\Symfony\src\Hotels\GestionAnnoncesBundle\Controller\DepartementController.php at line 220&nbsp;
Ligne 220 :

Code :
                $retour .= $departement->getId() . '_' . $departement->getNom() . '+';
Or, comme je choisi une localité belge, je n'ai aucun département correspondant.

PS : concernant ton code, c'est de fait nettement plus simplifié et clair. Par contre, la syntaxe que je ne comprends pas, c'est celle du retour :
Code :
return ($data) ? array($data) : array();
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 15h21   #11
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Citation:
Envoyé par dubitoph Voir le message
Or, comme je choisi une localité belge, je n'ai aucun département correspondant.
Ok, donc dans mon code la donnée retournée correspond à la ligne 19 :
Code :
$data = $obj->getCommune()->getDepartement();
Que te retourne $obj->getCommune()->getDepartement(); quand il n'y a pas de données ?
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 15h27   #12
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
Pour répondre à ta question, j'ai donc fait ceci :

Code :
1
2
3
4
5
6
7
8
9
10
...
 
    if ($typeElemInit === 'localite') 
     {
      $data = $obj->getCommune()->getDepartement();
 
      echo "debutListe : " . var_dump($data) . ' fin de liste';
     }
 
...
La liste me paraît correctement vide :

Code :
</pre>debutListe :  fin de liste<!DOCTYPE html>
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 15h38   #13
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Remplaces :
Code :
return ($data) ? array($data) : array();
par
Code :
return (empty($data)) ? array() : array($data);
Avec ce code on s'assure que l'on renvoie bien des données, si aucune donnée n'est présente on est sûr de renvoyer un tableau vide, de cette manière ta boucle foreach() ne devrait jamais être exécutée
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 17h06   #14
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
Désolé pour ma réaction tardive : j'ai eu un problème de connexion.

J'ai donc modifié comme tu me l'as indiqué, mais j'ai toujours le même problème...

Cependant, j'ai testé data :

Code :
1
2
3
4
5
6
7
8
9
    if ($typeElemInit === 'localite') 
     {
      $data = $obj->getCommune()->getDepartement();
 
      if(empty($data))
       echo 'Rien dans data';
      else
       echo 'Data avec données'; 
     }
Et j'obtiens ceci :

Code :
Data avec données<!DOCTYPE html>
Je n'y comprends rien, car lorsque je fais :

Code :
1
2
3
4
5
6
7
8
9
    if ($typeElemInit === 'localite') 
     {
      $data = $obj->getCommune()->getDepartement();
 
      if(empty($data))
       echo 'Rien dans data';
      else
       echo 'Data avec données : ' . var_dump($data) . ' fin affichage'; 
     }
j'obtiens :

Code :
</pre>Data avec données :  fin affichage<!DOCTYPE html>
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 17h28   #15
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
VOILA!!!

Je pense avoir enfin résolu le problème en faisant :

Code :
1
2
3
4
    if($typeElemInit === 'localite') 
     {
      $data = trim($obj->getCommune()->getDepartement()); 
     }
Je ne comprends pas pourquoi j'ai un caractère invisible qui m'est retouné lorsque je n'ai pas de résultat, mais bon...

Un tout grand merci pour l'aide apportée!
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 17h35   #16
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Citation:
Envoyé par rawsrc Voir le message
Que te retourne $obj->getCommune()->getDepartement(); quand il n'y a pas de données ?
Bah voilà, suffisait d'y répondre (post n°11)
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 17h59   #17
Membre habitué
 
Inscription : mai 2004
Messages : 499
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 499
Points : 149
Points : 149
De fait... Mais comme rien n'était affiché, je n'ai pas pensé qu'il me retournait un caractère invisible :

Code :
</pre>debutListe :  fin de liste<!DOCTYPE html>
Cependant, je ne comprends toujours pourquoi il me retourne quelque chose (caractère blanc ou autre).
dubitoph est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h54.


 
 
 
 
Partenaires

Hébergement Web