11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

je sèche sur mon script. L'idée c'est qu'une fois sélectionné un membre dans un input, son statut soit en même temps sélectionné dans un input hidden.
<script>
$(document).ready (function() {
							
$( ".tags" ).autocomplete({
 source: [<?php 
  mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
 mysql_select_db ('$db_name');
 $sql = mysql_query ('select * from membres');
 while($row = mysql_fetch_assoc ($sql)){
 echo '"'.$row['prenom'].' '.$row['nom'].'",';
}
 mysql_close ();
           ?>],
     minLength: 2,
    
	 select: function(event, ui) {
   
      var AllStatut = {"<? echo $row['prenom']; ?> <? echo $row['nom'];  ?>":"<? echo $row['statut']; ?>"};
          
      var statut = AllStatut[ui.item.value];

 	 $('#statutweb').val(statut);
  }
	  });
   });
</script>


Ce script ne marche pas !

En revanche, si je mets dans mon script :

   var AllStatut = {"Michel Duchemol" :1"}; 


Ca fonctionne ! Quand je sélectionne alors Michel Duchemol dans le premier input, le chiffre "1" apparaît bien dans l'input hidden.
Pouvez vous me mettre sur la voie ?

Merci
Modifié par daggoon (26 Aug 2015 - 10:01)
Modérateur
Salut,

Qu'est-ce que t'entend par "ca ne marche pas" ?

Tu as une erreur Js ?
Que contient AllStatut une fois rempli ?
Que contient ui.item.value ?
Que contient statut une fois que tu as fait var statut = AllStatut[ui.item.value]; ?
Modifié par _laurent (25 Aug 2015 - 17:35)
Dans ma base de données, j'ai donc un liste de membres (prénom, nom) avec un statut (0 pour stagiaire, 1 pour titulaire par exemple)

Mon premier script ne fonctionne pas. Je ne récupère aucune valeur avec
var AllStatut = {"<? echo $row['prenom']; ?> <? echo $row['nom'];  ?>":"<? echo $row['statut']; ?>"};
        


Si je mets directement les membres avec leur statut, cela marche.

 var AllStatut = {"Michel Duchemol" :1, "Mauricette Martin":1, etc... }; 


Quand je sélectionne en autocomplete Michel Duchemol, j'ai bien 1 dans mon input hidden.

Sauf que je voudrais pouvoir récupérer les valeurs directement depuis la base de données et non en listant tous mes membres dans le
var AllStatut = ....

Modifié par daggoon (25 Aug 2015 - 17:36)
Modérateur
Et ton bout de code php
<?php 
  mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
 mysql_select_db ('$db_name');
 $sql = mysql_query ('select * from membres');
 while($row = mysql_fetch_assoc ($sql)){
 echo '"'.$row['prenom'].' '.$row['nom'].'",';
}
 mysql_close ();
?>

Il écrit bien la liste (si tu le déplace dans le dom par ex) ? Il te renvoie une erreur ?
Salut,

je pense que l'autocomplete de jQuery lit comme source du JSON.
Pour cela (je ne sais pas si ça marche) il faudrait faire ça non ?:
<?php
  $membres = array();
  mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
  mysql_select_db ('$db_name');
  $sql = mysql_query ('select * from membres');
  while($row = mysql_fetch_assoc ($sql)){
    $membres[] = array('label' => $row['prenom'], $row['nom'], 'statut' => $row['statut']);
  }
  mysql_close ();
  echo json_encode($membres);


Tu peux d'ailleurs envoyer autant de valeur que tu veux dans la source de l'autocomplete :

$membres[] = array('label' => $row['prenom'], $row['nom'], 'statut' => $row['statut']);

ensuite tu récupères simplement ta valeur comme ça dans le select :
select: function(event, ui) {

  var statut = ui.item.statut;
  $('#statutweb').val(statut);

}

Modifié par MatthieuR (25 Aug 2015 - 18:00)
Avec l'autocomplete de JQuery, je n'ai pas de soucis pour avoir ma liste de membres. Ça marche bien.
<script>
$(document).ready (function() {
							
$( ".tags" ).autocomplete({
 source: [<?php 
  mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
 mysql_select_db ('$db_name');
 $sql = mysql_query ('select * from journalistes');
 while($row = mysql_fetch_assoc ($sql)){
 echo '"'.$row['prenom'].' '.$row['nom'].'",';
}
 mysql_close ();
           ?>],
     minLength: 2,
    
	
  }
	  });
   });
</script>


Effectivement j'ai pensé à JSON. Sauf que sur les serveurs FREE, avec une version PHP "dinosaure", ce n'est tout simplement pas possible. J'essaie donc de trouver une alternative. L'autre serait de changer d'hébergeur.. oui j'y pense ! Smiley cligne

En tout cas merci pour votre aide et vos conseils.
Modifié par daggoon (25 Aug 2015 - 18:20)
Tu veux dire que PHP est < 5.2 ?
Du coup tu écris directement en JSON Smiley cligne
<?php
  $membres = array();
  mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
  mysql_select_db ('$db_name');
  $sql = mysql_query ('select * from membres');
  $membres = '[{';
  while($row = mysql_fetch_assoc ($sql)){
    $membres .= '\'label\':' . $row['prenom'] . ' ' . $row['nom'] ', \'statut\':' . $row['statut'];
  }
  mysql_close ();
  $membres .= '}]';
  echo $membres;

C'est vraiment important de générer une source nickel que tu peux facilement exploiter ensuite dans ton JS !
Et oui, change d'hébergeur, PHP 5.1 a déjà presque 10 ans !
Modifié par MatthieuR (25 Aug 2015 - 18:29)
J'ai fait une petite erreur sur la génération du JSON, il faut utiliser le code suivant :
  $membres = array();
  while($row = mysql_fetch_assoc ($sql)){
    $membres[] = '{\'label\':\'' . $row['prenom'] .' ' . $row['nom'] . '\', \'statut\':\'' . $row['statut'] . '\'}';
  }
  mysql_close ();
  $json_membres = '[';
  $json_membres .= implode(',', $membres);
  $json_membres .= ']';

  echo $json_membres;

Modifié par MatthieuR (25 Aug 2015 - 18:50)