11521 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonjour a tous,

je débute en ajax/javascript et j'essais de faire en sorte que quand je sélectionne une valeur dans mon menu déroulant, dans mon cas un login, tous les inputs se remplissent automatiquement avec les information qui concerne le login sélectionne.
Voici la page Modif.php :
<?php include('Include/General/connexion.php');?>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<SCRIPT>
<!--
$(document).ready(function() {
                $('select#noms').change(function() {
		//On récupère le nom
		var value = $(this).val();
                //Index
                var i = 0;
		//On prépare l'Ajax
		$.ajax({
                //On indique le fichier ou aller consulter 
		url: "Include/Profil/traitement.php",
                //Le type de l'envoi (POST ou GET)
		type: "POST",
                //On indique que le résultat sera un tableau JSON      
		dataType: "JSON",
		//On lui donne le nom de la personne
        data: {nom : value},
		success:function(data)
		{
                        //Nécessite d'avoir les informations du tableau dans le 
                        //même ordre que les inputs
                        $('input').each(function(){
		                 $(this).val(data)
				  i++;
			});
		}
	});

});
});
//-->
</SCRIPT>

<section class="seccreacompte">
	<form method="POST" action="/~sibox/Include/Creation_Compte/Ajout.php" class="formClassique">
		
		 <fieldset class="creacompte">
			   <legend><h3>Infos compte</h3></legend>
		<table>
					
					<tr><td><p> Login :   </td><td> <input type="text" id="login"/required></p></td></tr>
					<tr><td><p> Mail : </td><td><input type="email" name="mail"/required/></p></td></tr>
					<tr><td><p> Nom : </td><td><input type="text" name="nom"/required/></p></td></tr>
					<tr><td><p> Prenom : </td><td><input type="text" name="prenom"/required/></p></td></tr>
					<tr><td><br><br>
						<select id="noms" >
						
						<?php
						$requete="select * from Utilisateurs order by login;";
						$res= $mysqli->query($requete) or die ("erreur dans la requete");
						$ligne=mysqli_fetch_array($res);
						while($ligne)
						{
							echo'<option value='.$ligne['login'].'">'.$ligne['login'].'</option>';
							$ligne=mysqli_fetch_array($res);
						}
						?>
						</SELECT>
						
					</td></tr>
					</table>
					</fieldset>
					<br>
					<center><p><input type="submit" />
					<input type="reset"/></p>
	</form>
</section>





et la page traitement.php :



<?php
	include('../General/connexion.php');
	//On récupère le nom passé en paramètre
	$nom = $_POST['noms'];
	
	$requete = 'SELECT * FROM Utilisateurs WHERE login="'.$nom.'"';
	$informations = mysqli_query($requete) or die('Erreur SQL !<br>'.$requete.'<br>'.mysqli_error());

	echo json_encode($informations);

?>


j'ai pas mal lu tous les autres topics ouvert a ce sujet mais je n'arrive toujours pas a le faire fonctionner alors si vous pouvez m'aider en m’indiquant ce qui va pas ou en me corrigeant.
Merci d'avance. Smiley biggrin

Edit : Je viens de trouver les erreur qui me sont donneés:


Notice: Undefined index: noms in /home/sibox/public_html/Include/Profil/traitement.php on line 3

Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/sibox/public_html/Include/Profil/traitement.php on line 6

Warning: mysqli_error() expects exactly 1 parameter, 0 given in /home/sibox/public_html/Include/Profil/traitement.php on line 6
Erreur SQL !
SELECT * FROM Utilisateurs WHERE login=.""
Modifié par Fl0riba (25 Jul 2015 - 17:23)
Bonjour,

Alors petite erreur que je vois en première lecture : tu envoies à ton PHP une donnée "nom" et tu cherches à lire une donnée "noms", ça pourrait expliquer ton erreur SQL.

Dans des cas comme ça, pense à débugger ton PHP avant toute chose avec des echo(), var_dump()... avant même d'utiliser ajax.
Bonjour,

Merci de votre réponse, j'ai modifié le nom de la variable par "nom" dans le script mais le problème persiste dans mon php.


<?php
	include('../General/connexion.php');
	//On récupère le nom passé en paramètre
	$nom = $_POST['nom'];
	$requete = 'SELECT * FROM Utilisateurs WHERE login="$nom"';
	$informations = mysqli_query($requete) or die('Erreur SQL !<br>'.$requete.'<br>'.mysqli_error());

	echo json_encode($informations);

?>


erreur :

Notice: Undefined index: nom in /home/sibox/public_html/Include/Profil/traitement.php on line 4

Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/sibox/public_html/Include/Profil/traitement.php on line 6

Warning: mysqli_error() expects exactly 1 parameter, 0 given in /home/sibox/public_html/Include/Profil/traitement.php on line 6
Erreur SQL !
SELECT * FROM Utilisateurs WHERE login="$nom"

J'ai essayer de faire de cette manière la mais sans resultat aussi :


<?php
	include('../General/connexion.php');
	//On récupère le nom passé en paramètre
	$nom = $_POST['nom'];
	$requete = 'SELECT * FROM Utilisateurs WHERE login="$nom"';
	$informations = $mysqli->query($requete) or die('Erreur SQL !<br>'.$requete.'<br>'.$mysqli->error());

	echo json_encode($informations);

?>


erreur :

Notice: Undefined index: nom in /home/sibox/public_html/Include/Profil/traitement.php on line 4
{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null}


je ne comprend pas pourquoi ma variable "nom" n'est pas defini alors que mon script doit normalement l'envoyer dans mon traitement.php.
Modifié par Fl0riba (27 Jul 2015 - 14:59)
Ton problème ne viendrait-elle pas de l'utilisation des simple quote pour l'écriture de ta requête au lieu des doubles ?

As-tu essayé un echo $nom; (en appelant ta page traitement.php?nom=toto) ?
Modifié par SolidSnake (28 Jul 2015 - 08:07)
Bonjour,

Je fait appel à mon fichier traitement.php en rajoutant le ?nom=toto
Include/Profil/traitement.php?nom=toto

mais les erreurs restes les memes. Meme la ligne "echo $nom;" fait un erreur.


<?php
	include('../General/connexion.php');
	//On récupère le nom passé en paramètre
	echo $nom;
	$nom = $_POST['nom'];
        echo $nom;
	$requete = "SELECT * FROM Utilisateurs WHERE login='".$nom."'";
	$informations = mysqli_query($requete) or die('Erreur SQL !<br>'.$requete.'<br>'.mysqli_error());

	echo json_encode($informations);

?>


Notice: Undefined variable: nom in /home/sibox/public_html/Include/Profil/traitement.php on line 4

Notice: Undefined index: nom in /home/sibox/public_html/Include/Profil/traitement.php on line 5

Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/sibox/public_html/Include/Profil/traitement.php on line 7

Warning: mysqli_error() expects exactly 1 parameter, 0 given in /home/sibox/public_html/Include/Profil/traitement.php on line 7
Erreur SQL !
SELECT * FROM Utilisateurs WHERE login=''
Modifié par Fl0riba (28 Jul 2015 - 14:20)
Par contre je vois un autre problème dans ta requête SQL.

$informations = mysqli_query($requete)


Tu ne peux pas avoir ton résultat dans ta variable $informations. Il te manque un traitement.
Je ne connais pas bien mysqli, mais essaie ceci:


$row = mysqli_fetch_array($informations , MYSQLI_ASSOC);
  echo $row["nom"];

Modifié par nabucco (29 Jul 2015 - 10:40)
Pardon par contre, j'ai oublié de préciser pour le test, remplace l'attribution de $nom par :
$nom = $_GET['nom'];


EDIT :
Ah, mais ça doit venir de là en plus... dans ta requête Ajax quand tu précises "POST" c'est le paramètre "method" de jQuery !
Modifié par SolidSnake (28 Jul 2015 - 16:19)
Bonjour,

Merci de vos réponses. Maintenant la requête s’exécute correctement j'ai bien toute les donnée qui entrer dans la variable mais les input ne se remplissent toujours pas. Mais déjà la page traitement fonctionne.


<?php
include('../General/connexion.php');
$nom = $_GET['nom'];
$informations = "";
echo $nom;

if ($result = $mysqli->query("SELECT * FROM Utilisateurs WHERE login='$nom'")) 
{

    while ($row = $result->fetch_array(MYSQLI_NUM)) 
	{
		$informations[] = $row;
	}
	
    /* Libération du jeu de résultats */
    $result->close();
}
else
{
	printf("Message d'erreur : %s\n", $db->error);
}

$informations = $informations[0];

echo json_encode($informations);
?>


Et la page resultat :

test["test","d","admin@siteamap.com","4","1","0","sfde","sdf"]
J'ai mis console.log(data) dans mon success() mais rien ne s'affiche


<SCRIPT>
<!--
$(document).ready(function() {
    $('select#nom').change(function() {
		//On récupère le nom
		var value = $(this).val();
                //Index
                var i = 0;
		//On prépare l'Ajax
		$.ajax({
			//On indique le fichier ou aller consulter 
			url: "Include/Profil/traitement.php",
			//Le type de l'envoi (POST ou GET)
			type: "GET",
			//On indique que le résultat sera un tableau JSON      
			dataType: "JSON",
			//On lui donne le nom de la personne
			data: {nom : value},
			success:function(data)
			{
				//Nécessite d'avoir les informations du tableau dans le 
				//même ordre que les inputs
				console.log(data);
				$('input').each(function(){
					$(this).val(data)
					i++;
				});
			}
		});

	});
});
//-->
</SCRIPT>
Fl0riba a écrit :
J'ai mis console.log(data) dans mon success() mais rien ne s'affiche

Je pose juste la question, mais tu as bien regardé dans la console de ton navigateur ?

Et sinon quelle est la forme exacte de ta sortie JSON de ta page traitement.php (en collant un paramètre d'exemple dans ton url) ?
Modifié par SolidSnake (29 Jul 2015 - 14:35)
je pense pas avoir bien compris mais dans le JSON y'a sa :


0: "test"
1: "d"
2: "admin@siteamap.com"
3: "4"
4: "1"
5: "0"
6: "sfde"
7: "sdf"


Je met se que ma affiché la console de la page en image si sa peut aider.

upload/59481-Sans1titre.png
upload/59481-Sanstitre.png
				$('input').each(function(){
					$(this).val(data)
					i++;
				});


deja, fait gaffe, tu as oublier un " ; " à la fin de $(this).val(data)
et ensuite, si tu veux parcourir ton data rajoute data(i) <<<---- j'ai mis des parenthèses mais se sont des crochets. ici "crochets i" est considérer comme la balise "Italic" !
Modifié par JENCAL (29 Jul 2015 - 16:25)
je doit vraiment pas être doué mais je vois pas ou s'affiche le resultat


$(document).ready(function() {
    $('select#nom').change(function() {
		//On récupère le nom
		var value = $(this).val();
                //Index
                var i = 0;
		//On prépare l'Ajax
		$.ajax({
			//On indique le fichier ou aller consulter 
			url: "Include/Profil/traitement.php",
			//Le type de l'envoi (POST ou GET)
			type: "GET",
			//On indique que le résultat sera un tableau JSON      
			dataType: "JSON",
			//On lui donne le nom de la personne
			data: {nom : value},
			success:function(data)
			{
				//Nécessite d'avoir les informations du tableau dans le 
				//même ordre que les inputs
				console.log(data[i]);
				$('input').each(function(){
					$(this).val(data[i]);
					i++;
				});
			}
		});

	});
});
//-->
</SCRIPT>
[/i][/i]
Merci pour l'exemple mais même quand je remplis le data a la main comme l'exemple mes input ne se remplissent pas. Je comprend pas pourquoi la pourtant j'ai bien repris l'exemple.


<?php include('Include/General/connexion.php');?>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<section class="seccreacompte">
<SCRIPT>
<!--
/*$(document).ready(function() {
    $('select#nom').change(function() {
		
		//On récupère le nom
		var value = $(this).val();
                //Index
				i = 0;
		//On prépare l'Ajax
		$.ajax({
			//On indique le fichier ou aller consulter 
			url: "Include/Profil/traitement.php";
			//Le type de l'envoi (POST ou GET)
			type: "GET";
			//On indique que le résultat sera un tableau JSON      
			dataType: "JSON";
			//On lui donne le nom de la personne
			data: {nom : value};
			success:function(data)
			{
				
				//Nécessite d'avoir les informations du tableau dans le 
				//même ordre que les inputs
				
				$('input').each(function(){
					$(this).val(data[i]);
					i++;
				});
			}
		});

	});
});*/
data = ["test","d","admin@siteamap.com","4","1","0","sfde","sdf"]

$('select#nom').change(function() {
  i = 0;
  $('input').each(function(){
		                 $(this).val(data[i]);
				  i++;
			});
});
//-->
</SCRIPT>


	<form method="POST" action="/~sibox/Include/Creation_Compte/Ajout.php" class="formClassique">
		
		 <fieldset class="creacompte">
			   <legend><h3>Infos compte</h3></legend>
		<table>
					<tr><td><br><br>
						<select id="nom">
						<option value=''>Aucun</option>
						<?php
						$requete="select * from Utilisateurs order by login;";
						$res= $mysqli->query($requete) or die ("erreur dans la requete");
						$ligne=mysqli_fetch_array($res);
						while($ligne)
						{
							echo'<option value='.$ligne['login'].'>'.$ligne['login'].'</option>';
							$ligne=mysqli_fetch_array($res);
						}
						?>
						</SELECT>
						
					</td></tr>
					<tr><td><p> Login :   </td><td> <input type="text" /required></p></td></tr>
					<tr><td><p> Mot de passe:   </td><td> <input type="text" /required></p></td></tr>
					<tr><td><p> Mail : </td><td><input type="email" /required/></p></td></tr>
					<tr><td><p> Grade : </td><td><input type="text" /required/></p></td></tr>
					<tr><td><p> Mail : </td><td><input type="text" /required/></p></td></tr>
					<tr><td><p> Nom : </td><td><input type="text" /required/></p></td></tr>
					<tr><td><p> Prenom : </td><td><input type="text" /required/></p></td></tr>
					
					</table>
					</fieldset>
					<br>
					<center><p><input type="submit" />
					<input type="reset"/></p>
	</form>
</section>



[/i][/i]
JENCAL a écrit :
deja, fait gaffe, tu as oublier un " ; " à la fin de $(this).val(data)

Peu importe, je ne les mets pas non plus XD ! (oui je sais c'est pas bien, un vieux reste du C)

Fl0riba a écrit :
Merci pour l'exemple mais même quand je remplis le data a la main comme l'exemple mes input ne se remplissent pas. Je comprend pas pourquoi la pourtant j'ai bien repris l'exemple.

C'est normal, ce n'est pas un format JSON valide ! Le JSON doit être avec des accolades du type :
{"nom":"test","email":"admin@siteamap.com"...}

Cela doit apparaître directement sous cette forme sur la page de ton navigateur si tu appelles la page traitement.php. Si tu as une page blanche ou des erreurs, c'est qu'il y a un soucis. (on verra le traitement en JS après)
Modifié par SolidSnake (30 Jul 2015 - 08:25)
Bonjour,

@JENCAL: j'ai beau copier coller l'exemple qui fonctionne mais sur mon site il ne fonctionne pas je comprend pas...

@SolidSnake : Sur ma page traitement.php il y a sa qui s'affiche :

["test","d","admin@siteamap.com","4","1","0","sfde","sdf"]
Mais j'ai pas l'impression qu'il est renvoyer au script car rien ne se passe après.
Pages :