Partage
  • Partager sur Facebook
  • Partager sur Twitter

Creer un inventaire et MAJ des qtes

input dans tableau

13 novembre 2018 à 14:31:35

Bonjour à tous,

je commence à m'amuser en PHP et en général j'arrive toujours à mes fins mais là j'avoue que je bloque depuis 2 jours.

Mon problème me semble simple mais impossible de trouver ce que je cherche.

Voilà mon soucis, j'ai créé une page PHP qui à l'ouverture lance une requête (Select * from article) et je fait afficher dans un tableau :

- code article

- Qte stock

- et un champ input pour saisir ma nouvelle qte (vide de base)

Je souhaite qu'en bas de ma liste apparaisse une touche OK qui valide (update article SET qte=nouvelle qte) toutes les lignes renseignées,

et c'est là que je bloque j'arrive à le faire ligne par ligne mais pas en global.

Merci par avance pour votre aide.

Micky

voici mon code :

<?php
include('includes/config.php');
include('includes/detecte_mobile.php');

// Current page name
$current_page = "mouvementdestock";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><?php echo $titlePage_home; ?></title>

	<!-- METAS -->
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <meta name="author" content="" />
	<!-- /METAS -->

	<!-- CSS -->
    <link href="css/styles.css" rel="stylesheet" media="all" />
    <link href="css/theme.css" rel="stylesheet" media="all" />
	<!-- /CSS -->
    
  
    <!--[if IE]>
   	<link href="css/IE.css" rel="stylesheet" media="all" />
	<![endif]-->

    
</head>

<body>
<?php include('includes/header.php'); ?>


<!-- HOME SLIDER -->
<div id="home_slider">
	<div class="content">
    
    <!-- slogan -->
    <div class="central_slogan">Saisie d'inventaire</div>
	<div style=text-align:center><a href="listearticle.php"><img src="images/stock2.png" width="70" height="70" /></a><img src="images/espacevide.png" width="10" height="70" /><a href="index.php"><img src="images/home.png" width="70" height="70" /></a></div>
    <!-- /slogan -->
        
    </div>
</div>
<!-- /HOME SLIDER -->


<!-- MAIN -->
<div id="main">
	<div class="content">
    
    <!-- Wrap Block Style -->
    <div class="wrap_top"></div>
    <div class="wrap_block">
    <!-- Wrap Block Content -->
        <!-- total part -->
		
        <div class="total_part">			
                        	<h3>Recherche article</h3>
                            <br>
								<h4></h4>
								<br>																
							<br>
                            <p>
								<?php
									Req();
								?>
									<form><input type='submit' value='OK'/></form>
							</p>
                        
        </div>
        <!-- /total part -->
         
        <br class="clear" />
  
    <!-- /Wrap Block Content -->
    </div>
    <div class="wrap_bottom"></div>
    <!-- /Wrap Block Style -->
    
    </div>
</div>
<!-- /MAIN -->

<?php include('includes/footer.php'); ?>
</body>
</html>

<!-- ********************************************** FONCTIONS ********************************************** -->

<?php
function Req()
{
// variables
$serveur = "localhost" ;
$base = "france" ;
$user = "france" ;
$pass = "france" ;
$test = "1";
$categorietest="xx";

// connection à la base de donnee
$conn=new mysqli("$serveur","$user","$pass","$base") or die ("Can't connect");
//echo 'connexion reussie';

if ($premiereconnexion ="O") {
	$sql = "SELECT * FROM article order by CATEGORIE, CODEART";
	$rs=$conn->query($sql);
	$premiereconnexion ="N";
	
 // Affichage du resultat
if ($rs->num_rows >0) {

	//echo "<div class="tableau">";
	while($row=$rs->fetch_assoc()) {
		
		if ($test == '1') 
		{
			$color = "";
			$test = '0';
			$codeart = $row["CODEART"] ;
			$qteactuelle= $row["QTE"];
			$categorie=$row["CATEGORIE"] ;
		}
		else
		{
			$color = "#D5007766";
			$test = '1';
			$codeart = $row["CODEART"] ;
			$qteactuelle= $row["QTE"];
			$categorie=$row["CATEGORIE"] ;
		}
		if ($categorie==$categorietest) {
			$categorietest=$categorie;
		}
		else
		{
			echo "</table><br><h4>$categorie</h4><table rules='all' cellpadding='5px' style=width:90%; border:solid 1px black; font-family:verdana; font-size:12px; align=center>
			<tr>
			<!-- <th style='background-color: #D50077;font-size: 18px;'>ID</th> -->
			<th style='background-color: #D50077;font-size: 18px;width: 70px;'>Modif.</th>	
			<th style='background-color: #D50077;font-size: 18px;width: 20 %;'>Article</th>
			<th style='background-color: #D50077;font-size: 18px;'>Libelle</th>
			<th style='background-color: #D50077;font-size: 18px;'>qte stock</th>
			<th style='background-color: #D50077;font-size: 18px;width: 100px;'>qte E/S</th>
			<th style='background-color: #D50077;font-size: 18px;'>qte saisie</th>

			</tr>";
			$categorietest=$categorie;
		}
		{echo "<tr>
		<form  method='POST' id='inventaire'>
		<td style='background-color: $color;text-align: center;'><a href='modif-fichearticle.php?CODEART=$codeart'><img src='images/modif.png' width='20' height='20' /></a></td>
		<td style='background-color: $color'>".$row["CODEART"]."</td>
		<td style='background-color: $color'>".$row["LIBELLE"]."</td>
		<td style='background-color: $color;text-align: center;'>".$row["QTE"]."</td>
		<td style='background-color: $color'; align=center><input name='nouvelleqte' type='text' value='' style='width: 80px';></td>
		
		<input type='hidden' name='champcodeart' type='text' value=$codeart>
		<input type='hidden' name='qteactuelle' type='text' value=$qteactuelle>
		</tr>
		</form>";}
		
	}
	//echo "</div>";
	echo "</table>";
		echo var_dump($_POST['inventaire']);
}

else {
	echo "0 resultat";
}

$conn->close();

}
}

?>

 

 


<!-- /********************************************** FONCTIONS ********************************************** -->
Resultat actuel :

-
Edité par mickaelfuentes 13 novembre 2018 à 14:54:15

  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2018 à 14:43:19

Bonjour, 

Pourquoi ne pas faire une boucle qui parcours toutes tes lignes et fait la MAJ dans la BDD ? 

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2018 à 14:48:48

justement je ne sais pas comment faire cette boucle et lire mes lignes une à une
  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2018 à 16:23:29

Tu peux créer des tableaux avec l’attribue "name" de tes inputs par exemple: 

<input name='nouvelleqte[tube2000]' type='text' value='' style='width: 80px';>
<input name='nouvelleqte[tube2001]' type='text' value='' style='width: 80px';>

Et quand tu récupère la variable 

$_POST['nouvelleqte']

Tu auras un tableau de valeur qui sera indexé par le nom/id de ton article qu'il te suffira de parcourir pour mettre à jour tes données, par exemple avec le code au dessus:

array(2) =>

    'tube2000' => 54

    'tube2001' => 62

  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2018 à 10:36:12

Merci pour vos réponses,

j'avance tranquillement, j'utilise la methode de BigChicChicken qui fonctionne pour 1 ligne quand je renseigne la valeur puis ENTER,

mais impossible de rentrer plusieurs données et de lancer la mise à jour avec ma touche OK,

j'ai toujours un array() avec OK.

Es ce que c'est parce que mon bouton OK est après ma requête ?

<?php
Req();
?>
<form><input type='submit' value='OK'/></form>



  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2018 à 10:45:05

Révise tes cours, PHP est interprété côté serveur et html/JS côté client, donc pas en même temps.
  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2018 à 11:43:28

Salut, c'est normal que ça ne marche pas. Le bouton submit soumet le formulaire dans lequel il est.
  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2018 à 11:57:17

ok donc je ne peux pas faire d'action si je ne soumet pas une autre page php alors c'est ça ?
  • Partager sur Facebook
  • Partager sur Twitter
14 novembre 2018 à 12:09:22

en gros si tu veux que bouton submit soumet toutes les valeurs, il faut que ton formulaire s'ouvre avant ton while et se faire ferme après.

  • Partager sur Facebook
  • Partager sur Twitter
15 novembre 2018 à 12:39:04

Bonjour à tous,

je me suis remis sur mon projet, j'arrive bien à avoir dans mon array le nom de mes articles mais avec ==> int 0,

impossible de récupérer la nouvelle que associée.

			echo "</table><br><h4>$categorie</h4><table rules='all' cellpadding='5px' style=width:90%; border:solid 1px black; font-family:verdana; font-size:12px; align=center>
			<tr>
			<!-- <th style='background-color: #D50077;font-size: 18px;'>ID</th> -->
			<th style='background-color: #D50077;font-size: 18px;width: 70px;'>Modif.</th>	
			<th style='background-color: #D50077;font-size: 18px;width: 20 %;'>Article</th>
			<th style='background-color: #D50077;font-size: 18px;'>Libelle</th>
			<th style='background-color: #D50077;font-size: 18px;'>qte stock</th>
			<th style='background-color: #D50077;font-size: 18px;width: 100px;'>qte E/S</th>
			<th style='background-color: #D50077;font-size: 18px;'>qte saisie</th>
			</tr>";
			$categorietest=$categorie;
		}
		$nouvelleqte["$codeart"]=0;
		{echo "<tr>
		<td style='background-color: $color;text-align: center;'><a href='modif-fichearticle.php?CODEART=$codeart'><img src='images/modif.png' width='20' height='20' /></a></td>
		<td style='background-color: $color'>".$row["CODEART"]."</td>
		<td style='background-color: $color'>".$row["LIBELLE"]."</td>
		<td style='background-color: $color;text-align: center;'>".$row["QTE"]."</td>
		<td style='background-color: $color'; align=center><input name='nouvelleqteb[".$codeart."]' type='text' value='' style='width: 80px';></td>
		<td style='background-color: $color;text-align: center;'>".$row["PRIX"]."</td>
		</tr>
		</form>";}
	}
	//echo "</div>";
	
	echo "</table>";
	echo $nouvelleqte['tube2000x'];
	echo "<input id='majqte' type='submit' value='OK'/>";
	var_dump($nouvelleqte);



  • Partager sur Facebook
  • Partager sur Twitter
15 novembre 2018 à 13:30:17

Salut !

La balise <form> doit être hors de <table> ou dans <td>/<th>, donc le formulaire doit soit englober l'entier du tableau, soit être entièrement dans une cellule de celui-ci.

  • Partager sur Facebook
  • Partager sur Twitter
16 novembre 2018 à 9:26:39

Je ne m'en sort pas, j'ai fait énormément d'essais en déplaçant mes balise mais je n'y arrive pas.

vous trouverez ci dessous mon code version lite :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//FR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title><?php echo $titlePage_home; ?></title>
</head>

<body>
			
    <h3>Recherche article</h3>

	<?php
		Req();
	?>

</body>

</html>

<!-- ********************************************** FONCTIONS ********************************************** -->

<?php
function Req()
{
// variables
$serveur = "localhost" ;
$base = "france" ;
$user = "france" ;
$pass = "france" ;
$test = "1";
$categorietest="xx";
$i=0;
$nouvelleqte=array();

// connection à la base de donnee
$conn=new mysqli("$serveur","$user","$pass","$base") or die ("Can't connect");
//echo 'connexion reussie';

if ($premiereconnexion ="O") {
	$sql = "SELECT * FROM article order by CODEART";
	$rs=$conn->query($sql);
	$premiereconnexion ="N";
	
 // Affichage du resultat
if ($rs->num_rows >0) {
echo "<form  method='POST' id='inventaire'>";
	
	while($row=$rs->fetch_assoc()) {
		
		{
			$codeart = $row["CODEART"] ;
			$qteactuelle= $row["QTE"];
			$i++;
		}
		
		{
			echo "</table><br><table rules='all' cellpadding='5px' style=width:90%; border:solid 1px black; font-family:verdana; font-size:12px; align=center>
			<tr>
			<th>Article</th>
			<th>Libelle</th>
			<th>qte stock</th>
			<th>qte E/S</th>
			</tr>";
		}
		
		$nouvelleqte["$codeart"]=0;
		
		{echo "<tr>
		<td>".$row["CODEART"]."</td>
		<td>".$row["LIBELLE"]."</td>
		<td>".$row["QTE"]."</td>
		<td><input name='nouvelleqte[".$codeart."]' type='text' value='';></td>
		</tr>
		</form>";
		}	
	}
	
	echo "</table>";
	
	echo "<input id='majqte' type='submit' value='OK'/>";
	echo $nouvelleqte['tube2000x'];
	var_dump($nouvelleqte);
}

else {
	echo "0 resultat";
}

$conn->close();

}
}
?>
<!-- /********************************************** FONCTIONS ********************************************** -->

et si besoin ma table article test :

-- phpMyAdmin SQL Dump
-- version 4.8.3
-- https://www.phpmyadmin.net/
--
-- Hôte : 127.0.0.1:3306
-- Généré le :  ven. 16 nov. 2018 à 08:21
-- Version du serveur :  5.7.23
-- Version de PHP :  7.2.10

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de données :  `francehairmakeup`
--

-- --------------------------------------------------------

--
-- Structure de la table `article`
--

DROP TABLE IF EXISTS `article`;
CREATE TABLE IF NOT EXISTS `article` (
  `CODEART` varchar(20) NOT NULL,
  `QTE` decimal(10,2) DEFAULT NULL,
  `LIBELLE` varchar(50) DEFAULT NULL,
  `CATEGORIE` varchar(30) DEFAULT NULL,
  `PHOTO` varchar(255) DEFAULT NULL,
  `CODEBARRE` char(13) DEFAULT NULL,
  `PRIX` decimal(10,2) DEFAULT NULL,
  `UNITE` char(3) DEFAULT NULL,
  `NOTE` varchar(255) DEFAULT NULL,
  `ACTIF` char(1) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Déchargement des données de la table `article`
--

INSERT INTO `article` (`CODEART`, `QTE`, `LIBELLE`, `CATEGORIE`, `PHOTO`, `CODEBARRE`, `PRIX`, `UNITE`, `NOTE`, `ACTIF`) VALUES
('tube', '1.00', 'terst', 'cat', NULL, '1234', '3.00', 'L', 'test', 'O'),
('tube', '1.00', 'terst', 'cat', NULL, '1234', '3.00', 'L', 'test', 'O'),
('aza', '5.00', 'test libelle 4', 'produit', 'photos/mariage stéphanie 2015 005.JPG', '123456', '3.50', 'L', 'commentaire2', 'O'),
('qqqq', '0.00', 'test libelle', '', '', '', '0.00', '', '', 'O'),
('abb', '0.00', 'test abb', '', '', '', '0.00', '', '', 'O'),
('abb', '0.00', 'test abb', '', '', '', '0.00', '', '', 'O'),
('abb', '0.00', 'test abb', '', '', '', '0.00', '', '', 'O'),
('aza', '0.00', '', '', '', '', '0.00', '', '', 'O'),
('aza', '0.00', '', '', '', '', '0.00', '', '', 'O'),
('eee', '0.00', '', '', '', '', '0.00', '', '', 'O'),
('tube2000', '0.00', '', '', '', '', '0.00', '', '', 'O');
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;





  • Partager sur Facebook
  • Partager sur Twitter
16 novembre 2018 à 9:53:28

Je ne suis pas certain de bien comprendre ton code "lite", il y a des accolades qui me paraissent inutiles, et j'ai l'impression que de toute manière ton code HTML généré n'est pas valide. Il semble manquer des ouvertures et des fermetures de balises, et tu fermes encore ton formulaire avant de fermer <table> (lignes 74 et 78).

Tant que le HTML qui sort de ton script PHP n'est pas correct au niveau de l'ordre des balises, je doute que ça fonctionne comme tu t'y attends.

-
Edité par Ymox 16 novembre 2018 à 11:38:50

  • Partager sur Facebook
  • Partager sur Twitter
16 novembre 2018 à 11:36:52

J'ai remis tout mon code à plat, c'est bon je récupérer maintenant toutes mes valeurs comme il faut,

merci pour votre aide.

  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2018 à 9:59:02

Salut, je te conseille d'aller lire des cours sur le html/css/php/sql. Désolé mais ton code c'est juste n'importe quoi.

-
Edité par Romuald44 17 novembre 2018 à 9:59:27

  • Partager sur Facebook
  • Partager sur Twitter