Menu

Probleme d'insertion [Résolu]

godgoza - 1 août 2017 à 05:32 - Dernière réponse : jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention
- 1 août 2017 à 21:19
Bonjour,
je suis présentement entrain de travailler sur une application qui gère les stocks d'un magasin. le problème est le suivant:
j(aimerai que le magasinier au moment d'enregistrer le bon de livraison d'une marchandise entre le nom du fournisseur directement dans le formulaire vu qu'il ne connait pas l'identifiant primaire de celui ci. mais je n'arrive pas à recuperer le fournisseur a partir de son nom. et je suis vraiment coincé j'aimerai votre aide
le code de la saisie d'un bon de livraison est le suivant :

<?php

	$conn=mysqli_connect("localhost", "root", "") or die(mysql_error());
	mysqli_select_db($conn, 'gesmack') or die (mysql_error());
	
	$sqlCommand="select nomfournisseur from fournisseur" ;
	$query=mysqli_query($conn, $sqlCommand) or die(mysql_error());
?>

<!DOCTYPE [/html/htmlintro.php3 html]>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <link rel="icon" href="../../favicon.ico">

  <title>Enregistrer un bon de livraison</title>

  </head>

  <body>
    <div class="container1">
				<h3>Enregistrer un bon de livraison</h3>
	<form method="POST" action="ajouterbon.php">
		
			<table>
				<tr> 
					<td>n° bon de livraison:</td>
					<td><input type="text" name="nbon"></td>
				</tr>
				<tr> 
					<td>fournisseur:</td>
					<td  class="form-group"> 
                        <!--/Creation d'une combo-box -->
                        <input type=text list="fournisseur" name="idfournisseur">
                       <datalist id="fournisseur">
		                    <?php while($FR=mysqli_fetch_assoc($query)) { ?>  
			                   <option><?php echo($FR['nomfournisseur'])?>
		                    <?php  } ?>
					  </datalist>
					</td>
				</tr>
				<tr> 
					<td>montant :</td>
					<td><input type="text" name="montantbon"></td>
				</tr>
				<tr> 
					<td>Date :</td>
					<td><input type="date" name="datebon"></td>
				</tr>
				<tr> 
					<td></td>
					<td><input class="btn-primary" type="submit" value="Enregistrer"></td>
				</tr>
			</table>
	</form>
    </div>
  </body>
</html>


ensuite voici le code pour l'ajout dans la base de données:
<?php

	$conn=mysqli_connect("localhost", "root", "") or die(mysql_error());
	mysqli_select_db($conn, 'gesmack') or die (mysql_error());
	
	$code=$_POST['nbon'];
	$four=$_POST['idfournisseur'];
    $fourage=$four;
	$montant=$_POST['montantbon'];
	$date=$_POST['datebon']; 
 	
	$sqlCommand="insert into BONDELIVRAISON (nbon, idfournisseur, montantbon, datebon)
                  select $code,  $four AS idfournisseur, '$montant', now()
                  FROM FOURNISSEUR
                  WHERE nomfournisseur='$fourage'";
   
	$query=mysqli_query($conn, $sqlCommand) or die(mysql_error());
?>

<!DOCTYPE html>

<html>
<code html>
<head>
	<meta charset= "UTF-8"/>
	<title>ajouter bon de livraison</title>
</head>

<body>
  <table border="1">
		<tr>
			<td>N° bon</td>
			<td><?php echo($code)?></td>
		</tr>
		<tr>
			<td>fournisseur</td>
			<td><?php echo($four)?></td>
		</tr>
		<tr>
			<td>montant</td>
			<td><?php echo($montant)?></td>
		</tr>
		<tr>
			<td>Date</td>
			<td><?php echo($date)?></td>
		</tr>
		
	</table>
   
<a href="afficherbon.php" rel="nofollow noopener noreferrer" target="_blank">liste des chantiers</a>
 </body>
</html>

merci d'avance


Afficher la suite 

Votre réponse

11 réponses

jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 1 août 2017 à 08:40
0
Merci
Bonjour

Dans ta requette (pour lister les fournisseurs ) tu recuperes le nom du fournisseur ET son id.
Puis dans ton select tu mets l'id dans l'attribut "value" des options.
Commenter la réponse de jordane45
0
Merci
merci beaucoup pour ta reponse jordane45 mais je suis un peu bloqué. dans lattribut "value" des options je mets l'id du fournisseurs de quelle façon ?

value="idfournisseur"

ou
value="<?php echo ($fr); ?>"
Commenter la réponse de godgoza
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 1 août 2017 à 16:33
0
Merci
Pour ta requête :
$sqlCommand="SELECT idfournisseur, nomfournisseur FROM fournisseur" ;



Pour ton SELECT:
<?php 
while($FR=mysqli_fetch_assoc($query)) { 
  echo '<option value="'.$FR['idfournisseur'].'">'.$FR['nomfournisseur'].'</option>';
} 
?>



Puis pour l'insertion en BDD.. tu n'auras plus qu'à faire
$sqlCommand="INSERT INTO BONDELIVRAISON 
                        (nbon, idfournisseur, montantbon, datebon)
                  VALUES('$code','$four', '$montant', now() );

godgoza > jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 1 août 2017 à 17:44
je crois que c'est alors cette requête que je cherche depuis le début
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention > godgoza - 1 août 2017 à 20:43
Donc ... une fois l'insertion effectuée... tu REFAIS une requête SELECT pour avoir le nom du fournisseur

$sql = "SELECT  nomfournisseur 
              FROM fournisseur
              WHERE idfournisseur = '$four'" ;
$res=mysqli_query($conn, $sql);

//C'est comme ça qu'on gère les erreurs en mysqli ... pas de or die et surtout pas de mysql_error !!!!
if (!$res) {
    printf("Message d'erreur : %s\n", mysqli_error($link));
}

//on récupère le resultat de la requête
$row = mysqli_fetch_array($res, MYSQLI_ASSOC);




Puis dans ton tableau:
<body>
  <table border="1">
		<tr>
			<td>N° bon</td>
			<td><?php echo($code)?></td>
		</tr>
		<tr>
			<td>fournisseur</td>
			<td><?php echo $row['nomfournisseur']; ?></td>
		</tr>
		<tr>
			<td>montant</td>
			<td><?php echo($montant)?></td>
		</tr>
		<tr>
			<td>Date</td>
			<td><?php echo($date)?></td>
		</tr>
		
	</table>
   
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 1 août 2017 à 20:49
Au passage ....
Pour le nom de tes champs dans tes tables mysql.....
Tu es dans la table fournisseur.....
Donc tu pourrais plus simplement nommer tes champs id, nom .... tu n'as pas besoin (et je dirais même que ça pollue...) mettre idfournisseur, nomfournisseur....

En programmation on dit : Plus c'est court (ou petit) mieux c'est ....
godgoza > jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention - 1 août 2017 à 21:16
je te remercie beaucoup beaucoup
A partir d'aujourd'hui sache que tu es un dieu pour moi
merci
merci merci
jordane45 21720 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 juillet 2018 Dernière intervention > godgoza - 1 août 2017 à 21:19

:-)

En signe de soumission.... ton "dieu" te demande de penser à mettre le sujet en RESOLU ^^
(le lien se trouve sous le titre de ta question)

Bonne continuation.
Commenter la réponse de jordane45