8770 sujets

Développement web côté serveur, CMS

Pages :
Bonjour, Je cherche depuis quelques jours un moyens de faire un formulaire afin de modifier des tables dans ma base de donnée.

Je m'explique. J'ai un menu déroulant qui affiche la liste de tous les membres de mon site (a partir de la BDD).
Sous ce menu, une liste de champs inputs. J'aimerais que lorsque l'on sélectionne Takushi dans la liste déroulante, les infos de Takushi se trouvant dans la BDD s'inscrivent automatiquement dans les "value" des inputs.
Tout ça, sans rechargement de la page.

Es-ce possible ? J'ai vu sur ce même forum un sujet similaire ou ils disent qu'avec une fonction javascript, c'est possible. Cependant je n'y connait strictement rien en javascript. J'ai essayer de bidouiller un peu les codes qu'ils donnent sur ce sujet sans réel succès.

J'espère que quelqu'un pourra m'éclairer un peu sur la démarche..

Je vous remercie pour vos futurs réponses.
Takushi.
Modifié par Takushi (28 Jan 2013 - 15:15)
Bonjour,

Pour faire ce que vous demandez il va falloir utiliser l'AJAX. Cependant cela risque d'être relativement complexe si vous ne connaissait pas le Javascript.

Après pour ce qui suit je ne suis pas sûr que ce soit la meilleure méthode mais j'aurais fait comme suit :

- Utiliser l’évènement .change de jQuery qui récupère l'élément sélectionné de votre liste déroulante.

- Ensuite l'Ajax fait un appel à un fichier (avec comme paramètre le nom sélectionné dans la liste déroulante) PHP qui contient la requête SQL a executer pour récupérer les infos du membres.

- La requête retourne un tableau PHP que l'on encode grâce à json_encode puis on retourne ce tableau encodé.

- Ensuite dans l'élément success d'Ajax soit j'itère le tableau retourné (cf: ci-dessus) grâce à .each de jQuery soit je place directement les éléments dans les inputs grâce à $tableau[$indice].

Si vous pouviez poster au moins le fichier qui contient la liste déroulante je pourrais essayer de vous faire le script qui convient à moins que quelqu'un ne possède une meilleure solution Smiley smile

Bonne journée
J'ai a peu près compris ce que vous me dites Smiley smile Oui je suis complement nul en Javascript et en Ajax..

Sinon, je liste simplement les champs wp_id de ma table utilisateurs dans ma BDD.
Mon site est sous wordpress. Je vous donne le code de ma page.

Je me connecte à ma base de donnée et va chercher dans la table utilsateurs.

<?php
$db = mysql_connect('host', 'login', 'mdp');
mysql_select_db('dtb');
$sql = 'SELECT * FROM utilisateurs';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$mob = mysql_query("SELECT wp_id FROM utilisateurs");
?>


Je n'autorise que la personne connectée avec le pseudo Assistante à afficher ce qui suit.

<?php if($current_user->user_login==Assistante): ?>


Je récupère les pseudos dans la base de donnée et les mets dans ma liste déroulante (wp_id étant le nom d'utilisateur du client)

<form name="insertion" action="modification3.php" method="POST">
	<select>
	<?php while ($mobi = mysql_fetch_array($mob) ) { ?>
	<option value="list_wp_id"><?php echo $mobi['wp_id']; } ?></option>
	</select>


Je récupère les infos du pseudo que j'ai sélectionner dans la liste déroulante et les affiche dans les values des inputs leur correspondant (bien sûr cette partie n'est pas encore réalisée).

<?php while ($donnees = mysql_fetch_array($reponse)) ?>
<table border="0" align="center" cellspacing="2" cellpadding="2">
	<tr><td><h2>Client</h2></td></tr>
	<tr><td>Nom d'utilisateur:</td>
	<td><input type="text" name="wp_id" style="width: 200px;" value=""></td></tr>
</table>
</form>


Et enfin le code au complet.. Au cas ou j'ai sortis des trucs complètement inutile.. (on sait jamais). Désoler je ne peux pas faire de spoiler.. Du moins je n'ai pas trouver comment faire si on peux..

<?php
/*
Template Name: BDD
*/
?>
<?php global $wp_query; $ID = $wp_query->post->ID; ?>
<?php
$db = mysql_connect('host', 'login', 'mdp');
mysql_select_db('dbb');
$sql = 'SELECT * FROM utilisateurs';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$mob = mysql_query("SELECT wp_id FROM utilisateurs");
?>
<?php if($current_user->user_login==Assistante): ?>
<?php get_header(); ?>

<div id="content">
	<article class="demi" style="border-right: 1px solid #b9b9b9">
		<h1>Ajouter un utilisateur</h1>
		<form name="insertion" action="insertion2.php" method="POST">
		  <table border="0" align="center" cellspacing="2" cellpadding="2">
		  		<tr><td><h2>Client</h2></td></tr>
				<tr>
					<td>Nom d'utilisateur:</td>
					<td><input type="text" name="wp_id" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Lien de la photo de l'entreprise:</td>
					<td><input type="text" name="usrimg" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Nom Prénom:</td>
					<td><input type="text" name="usrnom" style="width: 200px;"></td>
				</tr>
					<tr>
					<td>Téléphone:</td>
					<td><input type="text" name="usrtel" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>E-mail:</td>
					<td><input type="text" name="usrmail" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Adresse:</td>
					<td><input type="text" name="usradresse" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Code Postal:</td>
					<td><input type="text" name="usrcp" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Ville:</td>
					<td><input type="text" name="usrville" style="width: 200px;"></td>
				</tr>
				<tr><td><h2>Chargé d'affaire</h2></td></tr>
				<tr>
					<td>Nom Prénom:</td>
					<td><input type="text" name="chargenom" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Téléphone:</td>
					<td><input type="text" name="chargetel" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>E-mail:</td>
					<td><input type="text" name="chargemail" style="width: 200px;"></td>
				</tr>
				<tr><td><h2>Assistante</h2></td></tr>
				<tr>
					<td>Nom Prénom:</td>
					<td><input type="text" name="assnom" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Téléphone:</td>
					<td><input type="text" name="asstel" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>E-mail:</td>
					<td><input type="text" name="assmail" style="width: 200px;"></td>
				</tr>
				
				<tr>
					<td colspan="2"><br/><input type="submit" value="insérer"></td>
				</tr>
			</table>
		</form>
	</article>
	<article class="demi">
		<h1>Modifier un utilisateur</h1>
		<form name="insertion" action="modification3.php" method="POST">
			<select><?php while ($mobi = mysql_fetch_array($mob) ) { ?><option value="list_wp_id"><?php echo $mobi['wp_id']; } ?></option></select>
			<?php  while ($donnees = mysql_fetch_array($reponse)) ?>
			<table border="0" align="center" cellspacing="2" cellpadding="2">
		  		<tr><td><h2>Client</h2></td></tr>
				<tr>
					<td>Nom d'utilisateur:</td>
					<td><input type="text" name="wp_id" style="width: 200px;" value=""></td>
				</tr>
				<tr>
					<td>Lien de la photo de l'entreprise:</td>
					<td><input type="text" name="usrimg" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Nom Prénom:</td>
					<td><input type="text" name="usrnom" style="width: 200px;"></td>
				</tr>
					<tr>
					<td>Téléphone:</td>
					<td><input type="text" name="usrtel" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>E-mail:</td>
					<td><input type="text" name="usrmail" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Adresse:</td>
					<td><input type="text" name="usradresse" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Code Postal:</td>
					<td><input type="text" name="usrcp" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Ville:</td>
					<td><input type="text" name="usrville" style="width: 200px;"></td>
				</tr>
				<tr><td><h2>Chargé d'affaire</h2></td></tr>
				<tr>
					<td>Nom Prénom:</td>
					<td><input type="text" name="chargenom" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Téléphone:</td>
					<td><input type="text" name="chargetel" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>E-mail:</td>
					<td><input type="text" name="chargemail" style="width: 200px;"></td>
				</tr>
				<tr><td><h2>Assistante</h2></td></tr>
				<tr>
					<td>Nom Prénom:</td>
					<td><input type="text" name="assnom" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>Téléphone:</td>
					<td><input type="text" name="asstel" style="width: 200px;"></td>
				</tr>
				<tr>
					<td>E-mail:</td>
					<td><input type="text" name="assmail" style="width: 200px;"></td>
				</tr>
				
				<tr>
					<td colspan="2"><br/><input type="submit" value="insérer" style="float: right;"></td>
				</tr>
			</table>
		</form>
	</article>
	<div class="spacer">&nbsp;</div>
</div><!-- end content -->
<?php get_footer(); ?>
<?php else: ?>
<?php get_header(); ?>

<div id="content">
	<article>
		Bonjour <?php echo "$current_user->user_login" ?>. Vous n'avez pas l'autorisation pour accéder à cette page.
	</article>
	<div class="spacer">&nbsp;</div>
</div><!-- end content -->
<?php get_footer(); ?>
<?php endif; ?>


Si j'ai bien compris ce que vous me dites.. Je met donc l'évènement .change sur la liste déroulante.. ? Ensuite je comprends pas vraiment tout mais après j'insère $tableau[$indice] dans les value de mes inputs..

(Oui je suis vraiment très nul. Mais j'essaie de comprendre Smiley smile )

Merci de vous intéresser à mon problème.
Modifié par Takushi (25 Jan 2013 - 14:49)
Si j'ai bien compris c'est celle là votre liste déroulante :

<select><?php while ($mobi = mysql_fetch_array($mob) ) { ?>
    <option value="list_wp_id"><?php echo $mobi['wp_id']; } ?></option>
</select>


Si oui je vous montre le code que j'ai fais en attendant votre réponse et qui fonctionne :

- Il faut mettre un id à votre <select> comme "noms" par exemple ce qui donne
<select id="noms">[...]</select>

- Il vous faut inclure la bibliothèque jQuery en insérant ce lien
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
entre les balises <head></head> de votre site.

- Ensuite soit vous crée un fichier nommé fonction.js qui contiendra notre code javascript (ce qui est conseillé) soit vous ouvrez deux balises <script></script> ou vous insérerez le code javascript.
EDIT : dans le cas de la création du fichier function.js il faut bien évidemment l'inclure tout comme la bibliothèque jQuery.

- Il faut créer aussi un fichier .php nommé traitements qui contiendra notre requête SQL qui retournera les informations d'un membre.

C'est parti Smiley cligne

Fichier fonctions.js

$(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: "traitements.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])
				  i++;
			});
		}
	});

});
});


Fichier traitements.php


<?php
	//On récupère le nom passé en paramètre
	$nom = $_POST['nom'];

	/* 
		ici il vous suffit de faire votre requête
		qui renvoie un tableau que l'on va 
		nommer $informations dans ce cas il ne vous 
		restera plus qu'a dé-commenter la ligne 
		ci-dessous
	*/

	//echo json_encode($informations);

?>


Bonne journée[/i]
Modifié par John Wayne (25 Jan 2013 - 16:25)
D'accord. Qu'es-ce qu'il faut que je rajoute du coup la dedans ? Il faut que je fasse une requête sql dans traitements.php ?

J'ai copier coller vos codes et dé-commenter la ligne json_encode.
Cependant ça ne fonctionne pas. Du coup j'en conclus que j'ai oublier quelque chose.. Je sais je peux paraître stupide. Mais faut comprendre. On est vendredi soir.. Smiley smile
Salut

a écrit :
Qu'es-ce qu'il faut que je rajoute du coup la dedans ?


Dans le fichier que vous m'avez posté (le grand) il faut rajouter un id dans le <select> suivant :
<article class="demi">
		<h1>Modifier un utilisateur</h1>
		<form name="insertion" action="modification3.php" method="POST">
			[b]<select id="noms">[/b]<?php while ($mobi = mysql_fetch_array($mob) ) { ?><option value="list_wp_id"><?php echo $mobi['wp_id']; } ?></option></select>


a écrit :
Il faut que je fasse une requête sql dans traitements.php ?


Oui

a écrit :
'ai copier coller vos codes et dé-commenter la ligne json_encode.
Cependant ça ne fonctionne pas. Du coup j'en conclus que j'ai oublier quelque chose.. Je sais je peux paraître stupide. Mais faut comprendre. On est vendredi soir..


Avez vous fait la requête dans le fichier traitements.php ?

En gros (je dis bien en gros) il devrait ressembler à ceci :


<?php
	//On récupère le nom passé en paramètre
	$nom = $_POST['nom'];
	
	$sql = 'SELECT * FROM utilisateurs WHERE nom=$nom';
	$informations = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

	echo json_encode($informations);

?>


N'hésitez pas à re-recopier le code que j'avais mis car j'ai oublié quelques petits trucs que j'ai édité Smiley smile

EDIT : oublie de la clause Where ... Smiley confus
Modifié par John Wayne (25 Jan 2013 - 16:38)
Okay. Donc quand j'affiche traitements.php il m'affiche null.
Du coup j'en conclus que le script fonctionne.

Par contre, dans les inputs, toujours pas de texte.
Es-ce qu'il ne faudrait pas mettre une variable dans value="" de l'input ?

A moins que le var value = $(this).val(); sert justement à dire qu'il faut le mettre dans la value..

J'ai essayer de faire un echo simple d'une donnée de ma table dans la value, et il n'affiche rien.
Ça pourrait être un problème ?
Tout d'abord es ce que votre requête fonctionne bien ? Pourriez vous la poster ?

Avez vous bien mis les identifiants de connexion à la base de donnée dans traitements.php ?
Modifié par John Wayne (25 Jan 2013 - 16:49)
Oui oui mon code traitements.php

<?php
	//On récupère le nom passé en paramètre
	$wp_id = $_POST['wp_id'];
	
	$db = mysql_connect('host', 'login', 'mdp');
	mysql_select_db('table');
	$sql = 'SELECT * FROM utilisateurs WHERE wp_id=wp_id';
	$informations = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

	echo json_encode($informations);

?>


j'ai remplacer dans le .js tous les nom par wp_id puisque c'est comme ça que j'ai nommer les noms d'utilisateur et l'id de <select> je ne sais pas si ça influx..

Et j'ai supprimer le $ dans le WHERE car il me met une erreur sql lorsque je le met..
Si vous avez changer "noms" en "wp_id" alors non sa ne devrait pas influer.

Votre requête doit être comme ceci :

$sql = "SELECT * FROM utilisateurs WHERE wp_id='$wp_ip'";
Ah yeah ! Ça fonctionne ! Il m'affiche l'erreur SQL dans l'input Smiley lol

Erreur SQL !<br>SELECT * FROM utilisateurs WHERE wp_id=$wp_id<br>Unknown column '$wp_id' in 'where clause'


Je pense que c'est à cause du fait que j'ai changer tous les "nom" par "wp_id".
Normalement non sa devrait y aller si vous avez bien tout changé les noms en wp_id.

Par contre je peux pas tester la requête mais c'est à cause de la clause WHERE que sa foire.

Essayez

$sql = "SELECT * FROM utilisateurs WHERE wp_id=".$wp_ip."";

Sinon je viens de voir qu'il faudrait mettre une class sur les inputs que vous voulez remplir sinon il va remplir les premiers inputs il faudrait :

- ajouter une class "ajax" par exemple aux inputs que vous voulez cibler puis dans le code javascript changer :

$('input').each(function(){
		                 $(this).val(data)
				  i++;
			});

Par
$('input.ajax').each(function(){
		                 $(this).val(data)
				  i++;
			});


Là je pars du taf' donc je répondrais que ce soir Smiley cligne

Bonne soirée
Merci de vous être intéresser à mon problème Smiley smile Sa fait super plaisir Smiley smile
Je pense que le plus gros du boulot est fait. Merci encore.
Je vais bidouiller un peu tous ces codes jusqu'à ce que ça fonctionne ^^

Et du coup tout ça va me modifier 1 seul champs.
Donc il faut je pense que je répète l'opération avec des ids pour chaque inputs afin que me mette le pseudo dans l'input pseudo et le mail dans l'input mail.
Encore une fois j'vais bidouiller tout ça ^^

Je vous remercie encore et bon week-end. Je vais pas empieter sur votre week-end avec mon problème.

Quand j'aurais trouver je posterais la solution ici pour ceux qui voudraient faire le même type de formulaire.
Salut

Bon j'ai pris le temps de faire une table avec des champs et tout et tout et voici le code corrigé :

Traitements.php


<?php

$nom = $_POST['wp_id'];
$informations = "";

$db = new mysqli('database', 'login', 'password','database');
if ($db->connect_errno) {
    printf("Échec de la connexion : %s\n", $mysqli->connect_error);
    exit();
}

if ($result = $db->query("SELECT * FROM utilisateurs WHERE nom='$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);
?>


J'ai utilisé MySQLi car ce que tu utilise est vraiment dépassé voir la doc' PHP : http://php.net/manual/fr/function.mysql-query.php.

Fichier functions.js


$(document).ready(function() {
        $('select#wp_id').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: "traitements.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.ajax').each(function(){
					                        $(this).val(data[i])
								i++;
							});
			}
		});
	});
});



Ton fichier avec tous tes <select> il faut ajouter la class="ajax" aux inputs que tu veux qu'ils soient remplis exemple :

<tr><td><h2>Client</h2></td></tr>
				<tr>
					<td>Nom d'utilisateur:</td>
					<td><input type="text" name="wp_id" style="width: 200px;" [b]class="ajax"[/b]></td>
				</tr>
				<tr>


Et biensûr il faut pas oublier de mettre l'id "wp_id" à ton <select> ou il y a les noms Smiley cligne

Avec sa sa ne peut que fonctionner ! Smiley biggol [/i]
Modifié par John Wayne (25 Jan 2013 - 20:41)
:/ J'héberge sous OVH et d'après ce que j'ai compris, il ne propose pas MYSQLi..
Je te remercie tout de meme puisque ça m'affiche l'intégralité des infos correspondants à l'utilisateur que j'ai choisis dans l'input.

Je vais faire quelques réglages et je pense que ça sera bon ^^
Je connais pas trop OVH mais sa m'étonnerais qu'il ne propose pas MySQLi sinon essaye de voir pour utiliser ceci : http://php.net/manual/fr/book.pdo.php.

a écrit :
Je te remercie tout de meme puisque ça m'affiche l'intégralité des infos correspondants à l'utilisateur que j'ai choisis dans l'input.


Cool Smiley smile !

Tu peux mettre [Résolu] dans le titre de ton sujet si tu pense qu'il l'est Smiley cligne
J'ai entendu parler du PDO.
Je vais me documenter là dessus ^^
Je vous remercie pour m'avoir donner de votre temps (sur celui de votre boulot aussi).
Sa y est ! Réussis ! Smiley lol
Bon j'explique.. Je suis aller sur ce site:
http://studio.jacksay.com/tutoriaux/php/connection-mysql-avec-pdo
Qui explique un peu comment pdo fonctionne.

Du coup j'ai modifier traitements.php en fonction:

Je définis donc que $wp_id correspond à ce que l'on a sélectionner dans la liste déroulante.

$wp_id = $_POST['wp_id'];


Je me connecte ensuite à la BDD en appelant mon fichier connection.php

require_once('connection.php');


contenu de connection.php

try {
$dns = 'mysql:host=localhost;dbname=BDD';
$utilisateur = 'root';
$motDePasse = 'root';
$connection = new PDO( $dns, $utilisateur, $motDePasse );
} catch ( Exception $e ) {
  echo "Connection à MySQL impossible : ", $e->getMessage();
  die();
}


Je demande ensuite d'aller me chercher dans ma table utilisateurs toutes les infos de $wp_id (donc l'utilisateur que j'ai sélectionné)

$select = $connection->query("SELECT * FROM utilisateurs WHERE wp_id='$wp_id'");
$select->setFetchMode(PDO::FETCH_OBJ);
// Traitement d'un seul résultat
$enregistrement = $select->fetch();


Puis je test si le champs que je recherche est bien rempli pour pouvoir l'afficher correctement.

// On test si la variable $enregistrement est vide
if( $enregistrement ) {
  echo $enregistrement->usrnom;
} 
// La requète n'a pas retournée de résultat
else {
  echo "Aucun résultat";
}


Ensuite j'utilise un beau copier-coller de function.js que tu m'a fournis plus haut.
Il ne me reste plus qu'à définir des variables pour afficher dans chaque input la valeur qui lui correspond.

Je te remercie beaucoup pour ton aide. Je ne vais pas avoir à rallonger la dead line Smiley lol

Voila j'espère que ça pourra aider les voyageurs qui passeraient par la.
Modifié par Takushi (29 Jan 2013 - 11:11)
Yop

Sauf que mon script remplissait tes inputs directement avec les bonnes valeurs Smiley lol

Après si tu préfère faire à la main pour chaque input c'est ton choix Smiley smile
Ah.. xD J'aime me compliquer la vie. J'étais en train de chercher un moyens mais s'il y a plus simple..

Pourriez-vous m'éclairer un peu.. ?

J'ai essayer plusieurs choses avec votre version en remplaçant la connection tout ça par PDO mais rien ne se passe..
Je suppose qu'il faut changer toutes les requètes mysqli par celles correspondantes PDO.. ?

Pour l'instant le code qui fonctionne est le suivant pour traitements.php

$wp_id = $_POST['wp_id'];
require_once('connection.php');
$select = $connection->query("SELECT * FROM utilisateurs WHERE wp_id='$wp_id'");
$select->setFetchMode(PDO::FETCH_OBJ);
$enregistrement = $select->fetch();
if( $enregistrement ) {
  echo $enregistrement->usrnom;
} 
else {
  echo "Aucun r&eacute;sultat";
}

Modifié par Takushi (29 Jan 2013 - 11:50)
Pages :