[RESOLU] liste déroulante dépendante d'une base de données dans un formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] liste déroulante dépendante d'une base de données dans un formulaire

Re: liste déroulante dépendante d'une base de données dans un formulaire

par manelll » 04 juin 2015, 13:32

Bonjour, j'ai trouvé la solution je vais poster le code pour ceux qui vont rencontrer le même problème, merci tof73 de me répondre
<?php 
	
	require 'database.php';

	$id = null;
	if ( !empty($_GET['id'])) {
		$id = $_REQUEST['id'];
	}
	
	if ( null==$id ) {
		header("Location: affectation.php");
	}
	
	if ( !empty($_POST)) {
		// keep track validation errors
		$nameError = null;
		$surnameError = null;
		$gradeError = null;
		$servicelogError = null;
		
		// keep track post values
		
		$name = $_POST['name'];
		$surname = $_POST['surname'];
		$grade = $_POST['grade'];
		$servicelog = $_POST['servicelog'];
		
		// validate input
		$valid = true;
		if (empty($name)) {
			$nameError = 'Please enter Name';
			$valid = false;
		}
		
		if (empty($surname)) {
			$surnameError = 'Please enter surname';
			$valid = false;
		}
		
		if (empty($grade)) {
			$gradeError = 'Please enter grade';
			$valid = false;
		}
		
		if (empty($servicelog)) {
			$servicelogError = 'Please enter servicelog';
			$valid = false;
		}
		
		// update data
		if ($valid) {
			$pdo = Database::connect();
			$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			$sql = "UPDATE personnel  set name = ' ".$name." ', surname = ' ".$surname." ', grade = ' ".$grade." ', servicelog = ' ".$servicelog." '  WHERE id = $id";
			$q = $pdo->prepare($sql);
			$q->execute(array($name,$surname,$grade,$servicelog,$id));
			Database::disconnect();
			header("Location: affectation.php");
		}
	} else {
		$pdo = Database::connect();
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$sql = "SELECT * FROM personnel where id = $id";
		$q = $pdo->prepare($sql);
		$q->execute(array($id));
		$data = $q->fetch(PDO::FETCH_ASSOC);
		$name = $data['name'];
		$surname = $data['surname'];
		$grade = $data['grade'];
		$servicelog = $data['servicelog'];
		Database::disconnect();
	}
?>


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <link   href="css/bootstrap.min.css" rel="stylesheet">
    <script src="js/bootstrap.min.js"></script>
</head>

<body>

    <div class="container">
    
    			<div class="span10 offset1">
    			
    		
	    			<form class="form-horizontal" action="update.php?id=<?php echo $id?>" method="post">
					  <div class="control-group <?php echo !empty($nameError)?'error':'';?>">
					    <label class="control-label">Name</label>
					    <div class="controls">
					      	<input readonly  name="name" type="text"  placeholder="Name" value="<?php echo !empty($name)?$name:'';?>">
					      	<?php if (!empty($nameError)): ?>
					      		<span class="help-inline"><?php echo $nameError;?></span>
					      	<?php endif; ?>
					    </div>
					  </div>
					  <div class="control-group <?php echo !empty($surnameError)?'error':'';?>">
					    <label class="control-label">Surname</label>
					    <div class="controls">
					      	<input readonly name="surname" type="text" placeholder="Surname" value="<?php echo !empty($surname)?$surname:'';?>">
					      	<?php if (!empty($surnameError)): ?>
					      		<span class="help-inline"><?php echo $surnameError;?></span>
					      	<?php endif;?>
					    </div>
					  </div>
					  <div class="control-group <?php echo !empty($gradeError)?'error':'';?>">
					    <label class="control-label">grade</label>
					    <div class="controls">
					      	<input readonly name="grade" type="text"  placeholder="grade" value="<?php echo !empty($grade)?$grade:'';?>">
					      	<?php if (!empty($gradeError)): ?>
					      		<span class="help-inline"><?php echo $gradeError;?></span>
					      	<?php endif;?>
					    </div>
					  </div>
					  
					   
					    <label class="control-label">Service</label>
					    <div >
				<?php
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT servicelog FROM servicelog ORDER BY id DESC";
$q = $pdo->prepare($sql);
$q->execute();
$data = $q->fetchAll(PDO::FETCH_ASSOC);
Database::disconnect();
?>
<select  size=1 name="servicelog" id="servicelog">
<option value="-1">--liste service --</option>
<?php foreach($data as $value): ?>
<option value="<?php echo $value['servicelog'] ?>"> <?php echo $value['servicelog'] ?></option>
<?php endforeach; ?>
</select>
					    </div>
					  
					  <div class="form-actions">
						  <button type="submit" class="btn btn-success">تعيين</button>
						  <a class="btn" href="affectation.php">رجوع</a>
						</div>
					</form>

				</div>
				
    </div> <!-- /container -->

  </body>
</html>

Re: liste déroulante dépendante d'une base de données dans un formulaire

par tof73 » 04 juin 2015, 00:16

$result = mysql_query("SELECT servicelog FROM servicelog ORDER BY id DESC" );
ne fonctionne que si une connexion a une base de donnée a été faite avant, et non refermée. je n'en vois pas la trace.

liste déroulante dépendante d'une base de données dans un formulaire

par manelll » 04 juin 2015, 00:08

Bonsoir, je suis en train de développer une application avec PHP, j'ai utilisé un CRUD pour charger les données de la base de données dans un formulaire qui affiche 4 champs de la table "personnel" (name, surname, grade, service ) mais on va mettre à jour seulement le champs service qui doit contenir une liste déroulante des différents services qui peuvent être associés à une personne, cette liste est chargé à partir d'une autre table appelée (servicelog), mon problème est que la liste des services ne s'affiche pas dans la liste déroulante du formulaire, ci-dessous est mon code source

le script affectation.php, qui se charge de charger les données de la base et l'afficher sous forme d'une table
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <link   href="css/bootstrap.min.css" rel="stylesheet">
    <script src="js/bootstrap.min.js"></script>
</head>
 
<body>
    <div class="container">
 
			<div class="row">
 
 
				<table class="table table-striped table-bordered">
		              <thead>
		                <tr>
		                  <th>Name</th>
		                  <th>surname</th>
		                  <th>grade</th>
		                  <th>Affectation</th>
		                </tr>
		              </thead>
		              <tbody>
		              <?php 
					   include 'database.php';
					   $pdo = Database::connect();
					   $sql = 'SELECT * FROM personnel ORDER BY id DESC';
	 				   foreach ($pdo->query($sql) as $row) {
						   		echo '<tr>';
							   	echo '<td>'. $row['name'] . '</td>';
							   	echo '<td>'. $row['surname'] . '</td>';
							   	echo '<td>'. $row['grade'] . '</td>';
							   	echo '<td width=250>';
 
							   	echo '<a class="btn btn-success" href="update.php?id='.$row['id'].'">Update</a>';
							   	echo '&nbsp;';
 
							   	echo '</tr>';
					   }
					   Database::disconnect();
					  ?>
				      </tbody>
	            </table>
    	</div>
    </div> <!-- /container -->
  </body>
</html>
le script responsable de la mise à jour du champs service : update.php
<?php 
 
	require 'database.php';
 
	$id = null;
	if ( !empty($_GET['id'])) {
		$id = $_REQUEST['id'];
	}
 
	if ( null==$id ) {
		header("Location: affectation.php");
	}
 
	if ( !empty($_POST)) {
		// keep track validation errors
		$nameError = null;
		$surnameError = null;
		$gradeError = null;
 
		// keep track post values
		$name = $_POST['name'];
		$surname = $_POST['surname'];
		$grade = $_POST['grade'];
 
		// validate input
		$valid = true;
		if (empty($name)) {
			$nameError = 'Please enter Name';
			$valid = false;
		}
 
		if (empty($surname)) {
			$surnameError = 'Please enter surname';
			$valid = false;
		}
 
		if (empty($grade)) {
			$gradeError = 'Please enter grade';
			$valid = false;
		}
 
		// update data
		if ($valid) {
			$pdo = Database::connect();
			$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			$sql = "UPDATE personnel  set name = ?, surname = ?, grade = ?, servicelog = ?  WHERE id = ?";
			$q = $pdo->prepare($sql);
			$q->execute(array($name,$surname,$grade,$servicelog,$id));
			Database::disconnect();
			header("Location: affectation.php");
		}
	} else {
		$pdo = Database::connect();
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		$sql = "SELECT * FROM personnel where id = ?";
		$q = $pdo->prepare($sql);
		$q->execute(array($id));
		$data = $q->fetch(PDO::FETCH_ASSOC);
		$name = $data['name'];
		$surname = $data['surname'];
		$grade = $data['grade'];
		$servicelog = $data['servicelog'];
		Database::disconnect();
	}
?>
 
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <link   href="css/bootstrap.min.css" rel="stylesheet">
    <script src="js/bootstrap.min.js"></script>
</head>
 
<body>
    <div class="container">
 
    			<div class="span10 offset1">
 
 
	    			<form class="form-horizontal" action="update.php?id=<?php echo $id?>" method="post">
					  <div class="control-group <?php echo !empty($nameError)?'error':'';?>">
					    <label class="control-label">Name</label>
					    <div class="controls">
					      	<input readonly  name="name" type="text"  placeholder="Name" value="<?php echo !empty($name)?$name:'';?>">
					      	<?php if (!empty($nameError)): ?>
					      		<span class="help-inline"><?php echo $nameError;?></span>
					      	<?php endif; ?>
					    </div>
					  </div>
					  <div class="control-group <?php echo !empty($surnameError)?'error':'';?>">
					    <label class="control-label">Surname</label>
					    <div class="controls">
					      	<input readonly name="surname" type="text" placeholder="Surname" value="<?php echo !empty($surname)?$surname:'';?>">
					      	<?php if (!empty($surnameError)): ?>
					      		<span class="help-inline"><?php echo $surnameError;?></span>
					      	<?php endif;?>
					    </div>
					  </div>
					  <div class="control-group <?php echo !empty($gradeError)?'error':'';?>">
					    <label class="control-label">grade</label>
					    <div class="controls">
					      	<input readonly name="grade" type="text"  placeholder="grade" value="<?php echo !empty($grade)?$grade:'';?>">
					      	<?php if (!empty($gradeError)): ?>
					      		<span class="help-inline"><?php echo $gradeError;?></span>
					      	<?php endif;?>
					    </div>
					  </div>
 
 
					    <label class="control-label">Service</label>
					    <div >
				 <?php
										echo '<select  size=1 name="servicelog" id="servicelog">'."\n";
									echo '<option value="-1">--liste service --</option>'."\n";
										$result = mysql_query("SELECT servicelog FROM servicelog ORDER BY id DESC" );
										while($data =  mysql_fetch_array($result))
											{
												echo '<option value="'.$data[0].'">'.$data['servicelog'];
												echo '</option>'."\n";
											}
												echo '</select>'."\n";
 
						        ?>	
 
					    </div>
 
					  <div class="form-actions">
						  <button type="submit" class="btn btn-success">&#1578;&#1593;&#1610;&#1610;&#1606;</button>
						  <a class="btn" href="affectation.php">&#1585;&#1580;&#1608;&#1593;</a>
						</div>
					</form>
				</div>
 
    </div> <!-- /container -->
  </body>
</html>
SVP, j'ai besoin d'aide le plutôt possible, merci