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

Langage PHP Discussion :

Création "section" de recherche dans une page


Sujet :

Langage PHP

  1. #41
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Pour ton dernier message, je pense que tu devrais construire ton tableau 'table' en tant que chaine de caractère HTML dans la fonction "monClient". Tu n'enverras plus une réponse json mais HTML donc modifier la requête AJAX pour le type de json à html.

    Ton 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
    function ficheClient (item) {
    		
    		 // Envoi requête AJAX   	
    	    $.ajax({
    	         type: "POST"
    	       , url: "ajax/monclient"
    	       , data : {'id':[item.id]}
    	       , dataType: "html"
    	       , success: function(reponse){
     
             		$("#clients").append(reponse);
    // Sur Succès de la réponse AJAX
    	 	    	 
    	              // Reinitialise l'input de recherche
    	 	     	$("input#suggestBoxClient").val("Tapez les premières lettres pour une suggestion");
    	 		$("input#suggestBoxClient").addClass("estompe");
    		    		
    			} // Eof:: success
    		});  //Eof:: ajax
    Dans ton ajaxController, il faut supprimer le init, car nous voulons une réponse json et html dans le même controller et init est commun à toutes les actions.
    Donc petite explication sur le rendu de la vue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // désactive le layout
    $this->_helper->layout->disableLayout();
    // Désactive le rendu pour l'action en cours
    $this->_helper->viewRenderer->setNoRender(); 
    // Désactive le rendu pour toutes les actions du controller (a mettre dant init)
    $this->_helper->viewRenderer->setNeverRender(true);
    Pour envoyer une réponse HTML à une requête ajax il faut simplement désactiver le layout.
    construit ton tableau html '<table>...</table>' dans ton action/controller comme une chaine de caractères à mettre dans une variable que tu assignes à la vue.

    dans la vue , la où tu as mis ton formulaire de recherche ajoute ceci , qui va recevoir le tableau .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <div id="clients">
    </div>
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  2. #42
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Merci de ta réponse Freeseb74, mais, je suis dans le regret de te dire que je n'ai pas compris grand chose ...

    reprenons les points les uns après les autres :
    1) Concernant le init, il faut tout bonnement le supprimer ?

    2)
    construit ton tableau html '<table>...</table>' dans ton action/controller comme une chaine de caractères à mettre dans une variable que tu assignes à la vue.
    Comment tu fais cela ?? de cette manière ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $row->responsable_client = $form->getValue('responsable_client');
    3)
    dans la vue , la où tu as mis ton formulaire de recherche ajoute ceci , qui va recevoir le tableau .
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <div id="clients">
    </div>
    au niveau du tableau ?? je retire totalement le tableau que j'avais préalablement créé ??

    Désolé, j'ai un peu perdu le fil ...
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  3. #43
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par cyrux Voir le message
    Merci de ta réponse Freeseb74, mais, je suis dans le regret de te dire que je n'ai pas compris grand chose ...

    reprenons les points les uns après les autres :
    1) Concernant le init, il faut tout bonnement le supprimer ?
    Oui, car on veut une réponse Json qui ne nécessite pas une vue et une réponse HTML qui nécessite une vue (comportement normale du MVC).
    Pour informations le init d'un controller se comporte comme une action commune à tous les autres actions de ce controller
    2) Comment tu fais cela ?? de cette manière ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $row->responsable_client = $form->getValue('responsable_client');
    3)
    au niveau du tableau ?? je retire totalement le tableau que j'avais préalablement créé ??
    Nom le tableau que tu définies dans ta vue tu le fait au niveau du controller
    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
    <table>
    					<tr>
    						<th>Num&eacute;ro</th>
    						<th>Nom</th>
    						<th>Raison sociale</th>
    						<th>Responsable</th>
    						<th>Adresse</th>
    						<th>Code postal</th>
    						<th>Ville</th>
    						<th>D&eacute;partement</th>
    						<th>Pays</th>
    						<th>Mail</th>
    						<th>Telephone Domicile</th>
    						<th>Action</th>
    					</tr>
    					<?php foreach($this->client as $client) : ?>
    					<tr>
    						<td><?php echo $this->escape($client->numero_client);?></td>
    						<td><?php echo $this->escape($client->nom_client);?></td>
    						<td><?php echo $this->escape($client->numero_raison_sociale_client);?></td>
    						<td><?php echo $this->escape($client->responsable_client);?></td>
    						<td><?php echo $this->escape($client->adresse_client);?></td>
    						<td><?php echo $this->escape($client->code_postal_client);?></td>
    						<td><?php echo $this->escape($client->ville_client);?></td>
    						<td><?php echo $this->escape($client->numero_departement_client);?></td>
    						<td><?php echo $this->escape($client->numero_pays_client);?></td>
    						<td><?php echo $this->escape($client->mail_client);?></td>
    						<td><?php echo $this->escape($client->telephone_domicile_client);?></td>						
    						<td><a href="<?php echo $this->url(array('controller'=>'index','action'=>'modifier', 'id'=>$client->numero_client));?>">Modifier</a>
    						<a href="<?php echo $this->url(array('controller'=>'index','action'=>'supprimer', 'id'=>$client->numero_client));?>">Supprimer</a>
    						<a href="<?php echo $this->url(array('controller'=>'index','action'=>'consulter', 'id'=>$client->numero_client));?>">Consulter</a>
    						</td>
    					</tr>
    					<?php endforeach; ?>
    				</table>
    N'oublies pas que tu as 2 requêtes Ajax l'une pour la liste de suggestion qui s'attend à une réponse JSON et l'autre qui va afficher la liste des clients sous forme d'un tableau HTML qu'elle aura reçue. Cette 2ème requête Ajax va ensuite insérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("#clients").append(reponse);
    ton tableau HTML table préalablement construit dans le controller dans la page en cours au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div id="clients">
    </div>
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  4. #44
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Il faut que je place tout ceci dans mon contrôler ?? (apparemment, vu les erreurs qu'il me retourne, non ... )
    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
     
    <table>
    	tr>
    		<th>Num&eacute;ro</th>
    		<th>Nom</th>
    		<th>Raison sociale</th>
    		<th>Responsable</th>
    		<th>Adresse</th>
    		<th>Code postal</th>
    		<th>Ville</th>
    		<th>D&eacute;partement</th>
    		<th>Pays</th>
    		<th>Mail</th>
    		<th>Telephone Domicile</th>
    		<th>Action</th>
    	</tr>
    <?php foreach($this->client as $client) : ?>
    	<tr>
    		<td><?php echo $this->escape($client->numero_client);?></td>
    		<td><?php echo $this->escape($client->nom_client);?></td>
    		<td><?php echo $this->escape($client->numero_raison_sociale_client);?></td>
    		<td><?php echo $this->escape($client->responsable_client);?></td>
    		<td><?php echo $this->escape($client->adresse_client);?></td>
    		<td><?php echo $this->escape($client->code_postal_client);?></td>
    		<td><?php echo $this->escape($client->ville_client);?></td>
    		<td><?php echo $this->escape($client->numero_departement_client);?></td>
    		<td><?php echo $this->escape($client->numero_pays_client);?></td>
    		<td><?php echo $this->escape($client->mail_client);?></td>
    		<td><?php echo $this->escape($client->telephone_domicile_client);?></td>						
    		<td><a href="<?php echo $this->url(array('controller'=>'index','action'=>'modifier', 'id'=>$client->numero_client));?>">Modifier</a>
    		    <a href="<?php echo $this->url(array('controller'=>'index','action'=>'supprimer', 'id'=>$client->numero_client));?>">Supprimer</a>
             	    <a href="<?php echo $this->url(array('controller'=>'index','action'=>'consulter', 'id'=>$client->numero_client));?>">Consulter</a>
    		</td>
    	</tr>
    <?php endforeach; ?>
    </table>
    Mon controler ressemble à ceci pour le moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function indexAction()
    	{
    		$this->view->title = "Liste des clients";
    		$client = new Clients();
    		$this->view->client = $client->fetchAll(); //on demande d'afficher tous les clients
    	}
    autre chose, quand je remplace, le code ficheclient par celui que tu m'as donné dans ton dernier post
    (pour rappel :
    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
     
    function ficheClient (item) {
     
    		 // Envoi requête AJAX   	
    	    $.ajax({
    	         type: "POST"
    	       , url: "ajax/monclient"
    	       , data : {'id':[item.id]}
    	       , dataType: "html"
    	       , success: function(reponse){
     
             		$("#clients").append(reponse);
    // Sur Succès de la réponse AJAX
     
    	              // Reinitialise l'input de recherche
    	 	     	$("input#suggestBoxClient").val("Tapez les premières lettres pour une suggestion");
    	 		$("input#suggestBoxClient").addClass("estompe");
     
    			} // Eof:: success
    		});  //Eof:: ajax
    je n'ai plus rien qui s'affiche en dessous de ma suggestboxclient ... normal ?? (je pense que tu veut afficher ces résultats directement dans le tableau html en dessous ??)
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  5. #45
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Envoi moi le code complet du AjaxController et de ton scripts client.js

    Merci
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  6. #46
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Voila mon ajaxcontroler et mon client.js

    ajaxcontroller.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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    <?php
    class AjaxController extends Zend_Controller_Action {
     
    	/**
    	 * Renvoie la liste de mes noms de client
    	 */
    	public function clientAction() {
     
    		// Appel de mon modèle de table
    		$TClients = new TClients;
     
    		// Extraction de mes données
    		$Clients = $TClients->selectData();
     
    		// Création de ma liste (id et text vont être utilisé pour JQuery Suggest)
    		foreach ($Clients as $Client) {$list[] = array(  'id'=> $Client->numero_client, 'text'=> $Client->nom_client);
    		}
    			// Je renvoie ce tableau à ma vue au format JSON
                $this->_helper->json($list, array('enableJsonExprFinder' => true));
            }//Eof:: clientAction
     
     
    	/**
    	 * Renvoie la fiche d'un client
    	 */
    	public function monclientAction() {
     
    		// Récupère le numéro du client
    		$numero_client = $this->_request->getParam('id');
     
    		// Appel de mon modèle de table
    		$TClients = new TClients;
     
    		// Extraction de mes données
    		$Clients = $TClients->selectDataByID($numero_client);
     
    		// Création de ma liste
    		foreach ($Clients as $Client) {
    			$list['client'][] = array(  'numero_client'	=> $Client->numero_client
    									  , 'nom_client'	=> $Client->nom_client
    									  , 'responsable_client'	=> $Client->responsable_client
    									  , 'adresse_client'	=> $Client->adresse_client
    									  , 'code_postal_client'	=> $Client->code_postal_client
    									  , 'ville_client'	=> $Client->ville_client
    							);
    		}
     
    			// Je renvoie ce tableau à ma vue au format JSON
                $this->_helper->json($list
                                      , array(
                                        		'enableJsonExprFinder' => true
                                              ));
     
    	}//Eof:: clientAction	
     
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////							Fournisseur							///////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////
     
    	public function fournisseurAction() {
     
     
    		$TFournisseurs = new TFournisseurs;
     
    		$Fournisseurs = $TFournisseurs->selectData();
     
    		foreach ($Fournisseurs as $Fournisseur) {$list[] = array(  'id'=> $Fournisseur->numero_fournisseur, 'text'=> $Fournisseur->nom_fournisseur);
    		}
    			Zend_Debug::Dump($list);
    	        $this->_helper->json($list, array('enableJsonExprFinder' => true));
            } 
     
    	public function monfournisseurAction() 
    		{
    		Zend_Debug::Dump($list);
     		$numero_fournisseur = $this->_request->getParam('id');
    		$TFournisseurs = new TFournisseurs;
    		$Fournisseurs = $TFournisseurs->selectDataByID($numero_fournisseur);
     
    		foreach ($Fournisseurs as $Fournisseur) 
    		{
    			$list['fournisseur'][] = array(  'numero_fournisseur'	=> $Fournisseur->numero_fournisseur
    									  , 'nom_fournisseur'	=> $Fournisseur->nom_fournisseur
    									  , 'contact_fournisseur'	=> $Fournisseur->contact_fournisseur
    									  , 'adresse_fournisseur'	=> $Fournisseur->adresse_fournisseur
    									  , 'code_postal_fournisseur'	=> $Fournisseur->code_postal_fournisseur
    									  , 'ville_fournisseur'	=> $Fournisseur->ville_fournisseur
    							);
    		}
     
                $this->_helper->json($list, array('enableJsonExprFinder' => true));
     
    	}	
     
     
    }//Eof::Class
    ?>
    Comme je l'avais précisé, j'ai tenté de faire de même pour ma partie fournisseur (donc j'ai laissé le code au cas ou celui ci poserait problème ...)


    Client.js :
    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
     
    // sur chargement du document DOM termniné (soit notre page HTML) 
    $(document).ready(function() {
     
    function ficheClient (item) {
     
    		 // Envoi requête AJAX   	
    	    $.ajax({
    	         type: "POST"
    	       , url: "ajax/monclient"
    	       , data : {'id':[item.id]}
    	       , dataType: "html"
    	       , success: function(reponse){
     
             		$("#clients").append(reponse);
    // Sur Succès de la réponse AJAX
     
    	              // Reinitialise l'input de recherche
    	 	     	$("input#suggestBoxClient").val("Tapez les premières lettres pour une suggestion");
    	 		$("input#suggestBoxClient").addClass("estompe");
     
    			} // Eof:: success
    		});  //Eof:: ajax
    	}//Eof:: ficheClient
     
    	// Gère le suggest après retour de la liste des documents au format json
     	// fait appel au script jquery.jsonsuggest.js
     	jQuery(function() {
     		$.getJSON("ajax/client",
     			function(data){
     				$('input#suggestBoxClient').jsonSuggest(data,  {minCharacters:3,onSelect:ficheClient});
     			}
     		);	
     	}); // Eof:: jQuery
     
     
     // Supprime la valeur de l'input de saisie suggest lors du focus par la souris
     	$("input#suggestBoxClient").focus (
     			function() {
     				$("input#suggestBoxClient").val("");
     				$("input#suggestBoxClient").removeAttr("class");
     			}
     	); // Eof:: $("input#suggestBoxClient").focus
     
     
    }); // Eof:: Chargement de ma page terminé
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  7. #47
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Autant pour moi, cela s'affiche correctement, j'avais juste une erreur de connexion bdd...
    (je laisse les codes pour ceux qui en auraient besoin...)


    au niveau du tableau et de mon controler, pourrais tu m'expliquer comment faire s'il te plait ??
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  8. #48
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Je viens de m'apercevoir de quelque chose ...
    lorsque je tape mes 3 lettres pour la suggestion, mes résultats apparaissent dans la liste en dessous de la suggestbox tout est impeccable sur ce point.

    Chose que je ne savais pas, c'est qu'il falait cliquer sur le résultat, je me contentais de changer de suggestion avec les flèches haut et bas et appuyer sur entrée !

    en cliquant dessus, ma suggestbox c'est rempli de la mention
    "Tapez les premières lettres pour une suggestion"
    avec un petit carré à la place du caractère spécial, mais sa ne doit rien être de grave...

    cette mention n'apparaissait alors pas jusque la.

    ensuite, au dessus de mon tableau html, j'ai une erreur qui apparait, la voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'where clause'' in C:\wamp\www\XXXXXXX\library\Zend\Db\Statement\Pdo.php:228 Stack trace: 
    #0 C:\wamp\www\XXXXXXX\library\Zend\Db\Statement\Pdo.php(228): PDOStatement->execute(Array) 
    #1 C:\wamp\www\XXXXXXX\library\Zend\Db\Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) 
    #2 C:\wamp\www\XXXXXXX\library\Zend\Db\Adapter\Abstract.php(468): Zend_Db_Statement->execute(Array) 
    #3 C:\wamp\www\XXXXXXX\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT * FROM c...', Array) 
    #4 C:\wamp\www\XXXXXXX\library\Zend\Db\Adapter\Abstract.php(706): Zend_Db_Adapter_Pdo_Abstract->query('SELECT * FROM c...', Array) 
    #5 C:\wamp\www\XXXXXXX\application\models\TClients.php(34): Zend_Db_Adapter_Abstract->fetchAll('SELECT * FROM c...') 
    #6 C:\wamp\www\XXXXXXX\application\controllers\AjaxController.php(35): TClients->selectDataByID(Array) 
    #7 C:\wamp\www\XXXXXXX\library\Zend\Controller\A in C:\wamp\www\XXXXXXX\library\Zend\Db\Statement\Pdo.php on line 234
    la ligne concernée est celle ci (dans le ajaxcontroller)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Clients = $TClients->selectDataByID($numero_client);
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  9. #49
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Pour ton dernier post, pourquoi ne fais tu pas un debug, pour savoir ce que contien 'Array'.

    As tu déjà regarder les requêtes AJAX dans la console Firebug, il y a une liste de tous les actions des scripts JS et regarde en particulier les lignes en gras.
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  10. #50
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Ok, Je vais tenter le débug !!

    Au niveau du tableau dans le controller, comment faire ??
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  11. #51
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    L'erreur provient du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <div id="clients">
    </div>
    je pense que c'est parce que je n'ai pas effectué la "manipulation" du tableau dans le controller ... ??
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  12. #52
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Voilà pour ton contrôleur, le code client.js est apparemment juste.
    As tu vu comment lire les requêtes AJAX dans FIREBUG

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    <?php
    class AjaxController extends Zend_Controller_Action {
     
    	/**
    	 * Renvoie la liste de mes noms de client
    	 */
    	public function clientAction() {
     
    		// désactive le rendu de vue et layout
            if($this->_request->isXmlHttpRequest()){
    	        $this->_helper->layout->disableLayout();
                $this->_helper->viewRenderer->setNoRender(true);
            }
     
    		// Appel de mon modèle de table
    		$TClients = new TClients;
     
    		// Extraction de mes données
    		$Clients = $TClients->selectData();
     
    		// Création de ma liste (id et text vont être utilisé pour JQuery Suggest)
    		foreach ($Clients as $Client) {$list[] = array(  'id'=> $Client->numero_client, 'text'=> $Client->nom_client);
    		}
    			// Je renvoie ce tableau à ma vue au format JSON
                $this->_helper->json($list, array('enableJsonExprFinder' => true));
            }//Eof:: clientAction
     
     
    	/**
    	 * Renvoie la fiche d'un client
    	 */
    	public function monclientAction() {
     
    		// désactive le layout
            if($this->_request->isXmlHttpRequest()){
    	        $this->_helper->layout->disableLayout();
            }
     
    		// Récupère le numéro du client
    		$numero_client = $this->_request->getParam('id');
     
    		// Appel de mon modèle de table
    		$TClients = new TClients;
     
    		// Extraction de mes données
    		$Clients = $TClients->selectDataByID($numero_client);
     
    		$html = ' 
    		<table>
    			tr>
    				<th>Num&eacute;ro</th>
    				<th>Nom</th>
    				<th>Raison sociale</th>
    				<th>Responsable</th>
    				<th>Adresse</th>
    				<th>Code postal</th>
    				<th>Ville</th>
    				<th>Département</th>
    				<th>Pays</th>
    				<th>Mail</th>
    				<th>Telephone Domicile</th>
    				<th>Action</th>
    			</tr>
    		';	
     
    	foreach($Clients as $client) {
    		$html .= '<tr>';
    		$html .= '<td>'.$client->numero_client.'</td>';
    		$html .= '<td>'.$client->nom_client.'</td>';
    		$html .= '<td>'.$client->numero_raison_sociale_client.'</td>';
    		$html .= '<td>'.$client->responsable_client.'</td>';
    		$html .= '<td>'.$client->adresse_client.'</td>';
    		$html .= '<td>'.$client->code_postal_client.'</td>';
    		$html .= '<td>'.$client->ville_client.'</td>';
    		$html .= '<td>'.$client->numero_departement_client.'</td>';
    		$html .= '<td>'.$client->numero_pays_client.'</td>';
    		$html .= '<td>'.$client->mail_client.'</td>';
    		$html .= '<td>'.$client->telephone_domicile_client.'</td>';					
    		$html .= '<td>';
    		$html .= '<a href="'.$this->view->url(array('controller'=>'index'
    													  ,'action'=>'modifier'
    													  , 'id'=>$client->numero_client))
    													  .'">Modifier</a>';
    		$html .= '<a href="'.$this->view->url(array('controller'=>'index'
    		 												,'action'=>'supprimer'
    		 												, 'id'=>$client->numero_client))
    		 												.'">Supprimer</a>';
            $html .= '<a href="'.$this->view->url(array('controller'=>'index'
            												,'action'=>'consulter'
            												, 'id'=>$client->numero_client))
            												.'">Consulter</a>';
    		$html .= '</td>';
    		$html .= '</tr>';
    	}
     
    		$html .= '</table>';
     
    		// Assignation de mes différents éléments à ma vue
    		$this->view->html = $html;
     
    		// Appel automatique de ma vue
     
    	}//Eof:: clientAction	
     
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////							Fournisseur							///////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////
     
    	public function fournisseurAction() {
     
     
    		$TFournisseurs = new TFournisseurs;
     
    		$Fournisseurs = $TFournisseurs->selectData();
     
    		foreach ($Fournisseurs as $Fournisseur) {$list[] = array(  'id'=> $Fournisseur->numero_fournisseur, 'text'=> $Fournisseur->nom_fournisseur);
    		}
    			Zend_Debug::Dump($list);
    	        $this->_helper->json($list, array('enableJsonExprFinder' => true));
            } 
     
    	public function monfournisseurAction() 
    		{
    		Zend_Debug::Dump($list);
     		$numero_fournisseur = $this->_request->getParam('id');
    		$TFournisseurs = new TFournisseurs;
    		$Fournisseurs = $TFournisseurs->selectDataByID($numero_fournisseur);
     
    		foreach ($Fournisseurs as $Fournisseur) 
    		{
    			$list['fournisseur'][] = array(  'numero_fournisseur'	=> $Fournisseur->numero_fournisseur
    									  , 'nom_fournisseur'	=> $Fournisseur->nom_fournisseur
    									  , 'contact_fournisseur'	=> $Fournisseur->contact_fournisseur
    									  , 'adresse_fournisseur'	=> $Fournisseur->adresse_fournisseur
    									  , 'code_postal_fournisseur'	=> $Fournisseur->code_postal_fournisseur
    									  , 'ville_fournisseur'	=> $Fournisseur->ville_fournisseur
    							);
    		}
     
                $this->_helper->json($list, array('enableJsonExprFinder' => true));
     
    	}	
     
     
    }//Eof::Class
    ?>
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  13. #53
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    effectivement, j'ai compris comment lire les requêtes ajax sur firebug. super utile firebug !!!!

    Je pensait que l'erreur viendrais du fait que je n'avais pas fait le tableau dans le controller, mais en fait non puisque même après ceci, j'ai toujours la même erreur.

    lorsque je place un Zend_Debug:: Dump($array);
    il me dit qu'il ne connait pas la variable array et me renvoi NULL
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  14. #54
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Il faut que tu contrôles les paramètres envoyés dans la requête au niveau de ton controller.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $params = $this->_request->getParams();
    Zend_Debug::Dump($params);
    exit;
    En faite la requête SQL a reçue un tableau PHP (array) et non un numero_client.
    Comment veux tu que cela fonctionne si tu ne vérifies pas si à chaque stade les paramètres envoyés ou reçues ne sont pas celles dont la fonction attend ou doit retourner.

    Il faut parfois court-circuiter (temporairement) les paramètres reçues en mettant des constants, pour valider ta fonction.
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  15. #55
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    j'ai testé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		$numero_client = $this->_request->getParam('id');
    		Zend_Debug::Dump($numero_client);
    		exit;
    J'ai ensuite choisi tapé les 3 premiere lettres du nom d'un de mes clients et j'ai ensuite cliqué sur celui ci.
    et il m'a retourné ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    array(1) {
      [0] => string(1) "4"
    }
    Ce qui correspond au bon numéro.

    Cela est donc correct non ??

    Comment cela se fait il que ma requête récupère un tableau et non un numero_client ?? ce qui lui est passé en paramètre est bien un numéro_client non ??
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  16. #56
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Cyrux,

    Et comment on fait pour récupérer la valeur du premier élément d'un tableau php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $array = $this->_request->getParam('id');
    $numero_client = $array[0];
    tu dois sans doute utiliser la dernière version de jquery où il ont changé le .val() qui renvoie un tableau dans certain cas, mais à mon grand regret à tous les coups. (un bug)
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  17. #57
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Effectivement, j'utilise la dernière version du framework ...

    Mes requêtes ajax sont bonnes et le numéro_client retourné est correct, cependant une autre erreur est affichée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script 'ajax/monclient.phtml' not found in path (./application/views\scripts/)' in C:\wamp\www\XXXXXXX\library\Zend\View\Abstract.php:976 Stack trace:
    #0 C:\wamp\www\XXXXXXX\library\Zend\View\Abstract.php(876): Zend_View_Abstract->_script('ajax/monclient....') 
    #1 C:\wamp\www\XXXXXXX\library\Zend\Controller\Action\Helper\ViewRenderer.php(897): Zend_View_Abstract->render('ajax/monclient....')
    #2 C:\wamp\www\XXXXXXX\library\Zend\Controller\Action\Helper\ViewRenderer.php(918): Zend_Controller_Action_Helper_ViewRenderer->renderScript('ajax/monclient....', NULL) 
    #3 C:\wamp\www\XXXXXXX\library\Zend\Controller\Action\Helper\ViewRenderer.php(957): Zend_Controller_Action_Helper_ViewRenderer->render() 
    #4 C:\wamp\www\XXXXXXX\library\Zend\Controller\Action\HelperBroker.php(277): Zend_Controller_Action_Helper_ViewRenderer->postDispatch() 
    #5 C:\wamp\www\XXXXXXX\library\Zend\Controller\Action.php(523): Zend_Controller_Action_HelperBroker->notifyPostDispatch() 
    #6 C:\wamp\ in C:\wamp\www\XXXXXXX\library\Zend\View\Abstract.php on line 976
    ajax/monclient.phtml est manquant, je n'avais pourtant pas à le créer. il doit surement faire allusion à ma vue. non ??
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  18. #58
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Je crois que tu dois enelevé le .phtml
    A la recherche d'un film : http://chercher-un-film.com

  19. #59
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par cyrux Voir le message
    ajax/monclient.phtml est manquant, je n'avais pourtant pas à le créer. il doit surement faire allusion à ma vue. non ??
    Il faut créer ce fichier dans views/script/monclient.phtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    echo $this->html;
    ?>
    Tu renvoies à ta requête AJAX une réponse au format HTML il faut bien lui donner d'une manière ou d'une autre.

    Dans ce cas tu as désactivé le layout donc seul cette vue, donc la chaine de caractère $html contenant le tableau HTML 'table' est rendu.

    L'aide d'action JSON $this->_helper->json fait passer les données par l'entête HTTP d'après la doc, ce n'est pas identique.
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  20. #60
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    merci pour ta contribution m4riachi mais la solution correcte est celle de Freeseb74
    Effectivement ... c'est encore bien sa Freeseb74 !!!!


    maintenant, place aux questions pour l' "évolution" :

    Premièrement :
    j'ai actuellement 2 tableau :
    - 1 pour les recherches qui ne s'affiche que lorsque l'on créé une recherche
    - 1 qui liste tous les clients à lors de l'arrivée sur la page.

    est il possible de n'afficher qu'un tableau ? c'est à dire que lorsque j'arrive sur la page, mon tableau qui liste tous les clients soit apparent et lorsque je saisis une recherche, celui ci disparaisse une fois les résultats de cette recherche retournée pour laisser place aux résultats ???

    Je pose cette question à tout hasard, sans même savoir si cela est possible.
    Si c'est possible cela serait

    autre question :
    maintenant, pour effectuer une recherche sur mes clients par ville, il ne me reste qu'a rajouter une suggestboxVilleClient et à recréer les requetes, je n'ai rien d'autre à ajouter comme code js ou ajax ??

    j'avais tenté de faire une recherche mais cette fois ci dans mes fournisseurs et j'ai bien un retour sur le zend_debug::dump($liste) mais rien ne s'affiche en dessous de la suggestbox ... pourtant la requête retourne bien ce qui est demandé. mais nous verrons le problème un peu plus tard.

    Autre chose : est-ce normal que quand j'appuie sur "entrée" alors que je suis en train de remplir une suggestbox, cela me recharge la page, même si j'ai sélectionné une suggestion???

    dernière petite question :
    Je n'arrive pas à afficher les caractères spéciaux en js/ajax/et à divers endroits utilisant zend.
    J'ai réussi à les afficher au début et la, plus rien ...

    encore !!!
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/06/2015, 21h12
  2. Rechercher dans une page
    Par eric41 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 11/05/2006, 21h34
  3. [PHP-JS] Rechercher dans une page
    Par eric41 dans le forum Langage
    Réponses: 7
    Dernier message: 08/05/2006, 11h05

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