Problème liste <option> récupération de base de donnée

Eléphanteau du PHP | 29 Messages

09 mai 2014, 15:15

Bonjour,

J'ai une liste d'option (un formulaire html) rempli avec les noms de ma base de donnée.
Ça, ça marche :D

Maintenant là où j'ai un problème c'est pour pouvoir récupérer le nom inscrit, puisqu'il n'y a qu'une variable pour afficher tous les noms, il y a également un espace de texte pour rajouter des "crédits" en fonction de la personne choisie dans la liste déroulante. Je voudrais donc pouvoir interagir avec les noms de la base de donnée et leurs rajouter le nombre de crédit inscrits dans la zone de texte.
Voici le code de la page :
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	
	<head>
		<link rel="stylesheet" media="screen" type="text/css" title="Design" href="style.css" />
		<link rel="icon" type="image/gif" href="images/icone-piscine.gif" />
		<title>Modification de crédit</title>
	</head>
	
	<body>
		<?php
			if (isset($_POST['mot_de_passe']) AND $_POST['mot_de_passe'] ==  "credit") // Si le mot de passe est bon
			{
		?>

		<?php
			$connexion=mysql_connect('localhost','root',"root") or die ("connexion impossible.");
			$db=mysql_select_db('users') or die ("base de données non accessible");
		?>

		<div id="menuad"><p>Sélectionnez un adhérent: <br>
			<select name="menuadherents" id="menuadherents">
  
				<?php
					$resultat=mysql_query("select prenom,nom,credit from users order by id") or die ("requete non executée");
					if (! $resultat) { 
						echo "Erreur requete"; exit;
					} 
					while ($data=mysql_fetch_array($resultat))
					{	
					
				?>
				
				<option><?php echo ''.$data['nom'].' '.$data['prenom'].'';?></option>
				

				<?php
					}
				?>
				
			</select>

			<form action="credit.php" method="POST">
				<!--<p><input id="text_credit" type="text" name="newcredit" value="Nouveau Crédit" onfocus="inputFocus(this)" onblur="inputBlur(this)"/></p>-->
				<p><input id="text_credit" type="text" name="newcredit" onclick="this.value='';"  onblur="this.value=!this.value?'Montant à Ajouter':this.value;"  placeholder= "Montant à Ajouter" /></p>
				<input id="envoi_credit" type="submit" value="  Envoi  "/>
			</form>
		</p></div>
		<?php
			}
			else if (isset($_POST['mot_de_passe']) AND $_POST['mot_de_passe'] !=  "credit") {
				echo '<p><big><font color="#C60800"> Mot de passe incorrect </font></big></p>';
			}
		?>
		
		<p><form action="pass_credit.php">
			<input type="submit" value="  Retour  " id="button_credit"/>
		</form></p>
		
		<p><form action="index.php">
			<input type="submit" value="  Accueil  " id="buttonaccueil"/>
		</form></p>
	
		<p><form action="acces.php">
			<input type="submit" value="  Inscription  " id="button_acces"/>
		</form></p>
	
	</body>
</html>
Errare humanum est, lupus et agnus, geranium begonia, para bailar la bamba

wng
Eléphanteau du PHP | 25 Messages

09 mai 2014, 16:40

Si j'ai bien compris, tu souhaite pouvoir récuperer et traiter les informations via le nom uniquement déclarer ici :
<option><?php echo ''.$data['nom'].' '.$data['prenom'].'';?></option>
Dans le formulaire :
<form action="credit.php" method="POST">
<!--<p><input id="text_credit" type="text" name="newcredit" value="Nouveau Crédit" onfocus="inputFocus(this)" onblur="inputBlur(this)"/></p>-->
<p><input id="text_credit" type="text" name="newcredit" onclick="this.value='';"  onblur="this.value=!this.value?'Montant à Ajouter':this.value;"  placeholder= "Montant à Ajouter" /></p>
<input id="envoi_credit" type="submit" value="  Envoi  "/>
</form>
Si oui pourquoi avoir dissocier ton select du formulaire ?

Dans tous les cas tu peut simplement rajouter sur tes options :
<option value="<?=$data['nom'];?>" ><?php echo ''.$data['nom'].' '.$data['prenom'].'';?></option>
Et de la récupérer via $_POST la value de ton select à condition que celui-ci soit dans le form, sinon en javascript !
En espérant avoir bien compris ta demande :)

Eléphanteau du PHP | 29 Messages

12 mai 2014, 13:03

Donc je peux mettre le select dans le formulaire ?
C'est juste que je voulais savoir comment sélectionner le nom choisi dans la liste déroulante et pour interagir sur les informations associée dans la base de donnée.
En tout cas merci je vais voir avec ce que tu m'as proposé :)
Errare humanum est, lupus et agnus, geranium begonia, para bailar la bamba

Eléphanteau du PHP | 29 Messages

12 mai 2014, 13:50

Oui alors j'ai essayé des trucs, et je pense (j'en suis presque sûr) que je dois créer une variable pour ce que dois recevoir la zone de texte (je peux appeler ça ''textbox'' ?)
Avec ce code j'ai une erreur qui dit ça : Notice: Trying to get property of non-object in F:\wamp\www\projet\credit.php on line 51
C'est la ligne avec : $sql='UPDATE user SET credit='.$resultat->credit.' WHERE id='.$data['id'].'';
Voilà ce que j'ai tenté; et je sais que $resultat n'est pas la bonne variable ^^
<?php
			$connexion=mysql_connect('localhost','root',"root") or die ("connexion impossible.");
			$db=mysql_select_db('users') or die ("base de données non accessible");
		?>

		<div id="menuad"><p>Sélectionnez un adhérent: <br>
			
			
			<form action="credit.php" method="POST">
				<select name="menuadherents" id="menuadherents">
  
					<?php
						$resultat=mysql_query("select prenom,nom,credit from users order by id") or die ("requete non executée");
						if (! $resultat) { 
							echo "Erreur requete"; exit;
						} 
						while ($data=mysql_fetch_array($resultat))
						{	
					
					?>
				
					<option value="<?=$data['nom'];?>" ><?php echo ''.$data['nom'].' '.$data['prenom'].'';?></option>
				

					<?php
						}
					?>
				
			</select>
				<?php
					if (isset($_POST['newcredit'])) {

						$resultat->credit++;
						//On renvoi le nombre dans la base de donnée ou le fichier
					}
					$sql='UPDATE user SET credit='.$resultat->credit.' WHERE id='.$data['id'].'';
				?>
				<!--<p><input id="text_credit" type="text" name="newcredit" value="Nouveau Crédit" onfocus="inputFocus(this)" onblur="inputBlur(this)"/></p>-->
				<p><input id="text_credit" type="text" name="newcredit" onclick="this.value='';"  onblur="this.value=!this.value?'Montant à Ajouter':this.value;"  placeholder= "Montant à Ajouter" /></p>
				<input id="envoi_credit" type="submit" value="  Envoi  "/>
			</form>
		</p></div>
Errare humanum est, lupus et agnus, geranium begonia, para bailar la bamba

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 mai 2014, 17:37

salut,

$resultat est une "ressource" ce n'est pas ressource qui va te fournir tes données mais ce que retourne mysql_fetch_assoc

malheureusement pour toi le jeux de résultat est déjà "consomé".

donc ceci
<?php
if (isset($_POST['newcredit'])) {
    $resultat->credit++;
    //On renvoi le nombre dans la base de donnée ou le fichier
}
$sql='UPDATE user SET credit='.$resultat->credit.' WHERE id='.$data['id'].'';
ne peux fonctionner parce que :
- $resultat n'est pas pas un objet
- $resultat n'est pas ce que tu pense.

si tu veux mettre a jour ta table avec l'info saisie dans le formulaire, au traitement de celui ci (lorsque l'on a cliqué sur le bouton "submit") tu récupère l'info et fait l'update.

Pour faire ce que tu veux il préférable de mettre la clef primaire en "value" de l'option (en clair <option value="<?=$data['id'];?>" bien sur ajoute id dans la liste des champs que tu sélectionne).

pour la récup des infos d'un formulaire : http://www.lephpfacile.com/cours/8-recu ... ormulaires

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 29 Messages

13 mai 2014, 08:49

Oui mais quand j'affiche l'id dans la liste déroulante ça devient pas présentable, les id ne se suivent pas et ça fait bizarre :/

Et puis je suis quand même assez débutant et les interactions avec les bases de donnée je maitrise pas trop... Surtout avec les listes déroulantes ^^

Je vais voir ce que je peux faire. Mais j'aimerais bien quelque chose d'un peu plus explicite, c'est que je suis un peu pressé par le temps.

En tout cas merci de ta réponse :)

[EDIT] J'ai créé une nouvelle page pour afficher que les crédits ont bien été modifiés, j'ai donc changé l'action de mon formulaire, le nom c'est credit_modifie.php, je pense que c'est une bonne idée. Comme ça je pourrais afficher le nombre de crédits ajoutés et être certains d'éviter d'autres erreurs.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	
	<head>
		<link rel="stylesheet" media="screen" type="text/css" title="Design" href="style.css" />
		<link rel="icon" type="image/gif" href="images/icone-piscine.gif" />
		<title>Modification de crédit</title>
	</head>
	
	<body>
<?php
			$connexion=mysql_connect('localhost','root',"root") or die ("connexion impossible.");
			$db=mysql_select_db('users') or die ("base de données non accessible");
			$resultat=mysql_query('select prenom,nom,credit,id from users order by id') or die ("requete non executée");
			if (! $resultat) { 
				echo "Erreur requete"; exit;
			} 
			$data=mysql_fetch_array($resultat);
			echo 'Vous avez ajouté'.' '.$_POST['newcredit'].' '.'crédits à'.' '.$data['prenom'].' '.$data['nom'].'';
		?>
</body>
</html>	
Mais ça n'affiche que le premier nom de ma liste, pas celui que je choisi :/
Errare humanum est, lupus et agnus, geranium begonia, para bailar la bamba