Page 1 sur 1

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

Posté : 04 juin 2015, 00:08
par manelll
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

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

Posté : 04 juin 2015, 00:16
par tof73
$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.

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

Posté : 04 juin 2015, 13:32
par manelll
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>