Défaut code PHP modification et suppression ne marche pas et pas de messages d'erreurs

Petit nouveau ! | 9 Messages

09 août 2016, 23:27

Bonjour à tous et à toutes,

Je suis bloqué depuis maintenant depuis pas ml de temps j'ai essayé de tourner et retourner le problème consulter un tas de forums mais rien à faire ça ne marche pas et je ne trouve pas de cas vraiment similaire résolu.

Le projet est ici de créer une interface permettant de gérer une base de données contenant les différents outils présent dans l'usine d'une entreprise. Voici donc mon problème je voudrais créer un formulaire de modification pré-remplit avec les informations contenue dans ma base de données. J'ai donc incorporé à mon tableau qui affiche les informations de ma base de donnée un hypertexte "modify" qui renvoi vers le formulaire de modif. J'envoie en mode GET l'ID de mon outil. Je récupère cette ID pour exécuter une sélection des informations de mon outils et ainsi les afficher en VALUE dans mes différents champs INPUT. Problème je ne sais pas si cela marche mon GET lui fonctionne car j'arrive bien à afficher l'ID de mon outils mais l'affichage des autres information tel que le Nom de l'outils son diamètre etc ... ne s'affiche pas.

Voici le code du formulaire:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Tool Manager</title>
        <link href="style1.css" rel="stylesheet">
	<link rel="stylesheet" type="text/css" href="print1.css" media="print1" />
        <!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link href='http://fonts.googleapis.com/css?family=Tenor+Sans&v1' rel='stylesheet' type='text/css'>
	</head>
	<body>

		<div class="container"> 
            <header>
                <?php include("head.php"); ?>
            </header>
            	</br><h1>Mill Tooling</h1></br>

            <div class="container1">

             <?php 
            	$bdd = new PDO('mysql:host=localhost;dbname=utilisateur', 'root', '');
				$reponse = $bdd->prepare('SELECT * FROM mill_tool WHERE ID = ?');
				$reponse->execute(array($_GET['IDnum']));

				while ($donnees = $reponse->fetch()) 
				{
			?>


            	<form action="Mill_Tool_.php" method="POST" href="Mill_Tool_Modify.php?IDnum1='<?php echo $donnees['ID']; ?>'"> <!--Champ de recherche a gauche-->

    				<p class="box1"> <label>Tool name: </br><input type="text" name="Tool" /></label>  </p>
				
    				<p class="box2"> <label>Diameter : </br><input type="number" name="Diameter" /></label>  inch </p>

    				<p class="box3"> <label>Lenght : </br><input type="number" name="Lenght" /></label>  inch </p>
				
    				<p class="box4">
        				<label>Type :</br>
   					<select name="Type" id="Typetool">
	               		<option value="Engraving tool">Engraving tool</option>
	               		<option value="Endmill 3 bull">Endmill 3 bull</option>
	               		<option value="Face mill">Face mill</option>
	               		<option value="Chamfer mill">Chamfer mill</option>
	               		<option value="Endmill 2 Sphere">Endmill 2 Sphere</option>
	               		<option value="Endmill 1 flat">Endmill 1 flat</option>
	               		<option value="Csink">Csink</option>
	               		<option value="Cbore">Cbore</option>
	               		<option value="Reamer">Reamer</option>
	               		<option value="Tap RH">Tap RH</option>
	               		<option value="Drill">Drill</option>
	               		<option value="Spot drill">Spot drill</option>
	               		<option value="Center drill">Center drill</option>
	            	</select></label> 
	            	</p>

					<p class="box5"> <label>Material : </br><input type="text" name="Material" /></label>  </p>
			
					<p class="box6"> <label>Statement : </br><input type="text" name="Statement" /></label>  </p>
			
    				<p class="box7"> <label>Quantity : </br><input type="number" name="Quantity" /></label>  </p>
    			
					<p class="box9"> <input type="submit" value="Modify"> </p>

			<?php
				}
				$reponse->closeCursor();
			?>

				</form>
			</div>
	        
			<footer>
				<?php include("footer.php"); ?>
			</footer>
		</div>
	</body>
</html>
Voici le code de la page qui affiche mon tableau de valeur et qui contient le code UPDATE (Mill_Tool_Modify.php):
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Tool Manager</title>
        <link href="style1.css" rel="stylesheet">
	<link rel="stylesheet" type="text/css" href="print1.css" media="print1" />
        <!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link href='http://fonts.googleapis.com/css?family=Tenor+Sans&v1' rel='stylesheet' type='text/css'>
	</head>
	<body>
		<div class="container"> 
            <header>
                <?php include("head.php"); ?>
            </header>
            	</br><h1>Mill Tooling</h1></br>
	        <div class="container2"> 
	        <!-- php modification, appelle de cette page par le formulaire miil_tool_modifytool.php -->
	       	<?php

/*Si le champ "Tool_Name" est rempli*/
  
if (isset($_POST['Tool_Name']) AND $_POST['Tool_Name'] !== "")
    {  
  
/*Ensuite si le champ "Diameter" est rempli*/

  	if (isset($_POST['Diameter']) AND $_POST['Diameter'] !== "")

       {

/*Puis si le champ "Lenght" est rempli*/

         if (isset($_POST['Lenght']) AND $_POST['Lenght'] !== "")
            {    
           
/* Puis si le champ "Type" est rempli*/

             if (isset($_POST['Type']) AND $_POST['Type'] !== "")
                {

/* Puis si le champ "Material" est rempli*/

                	if (isset($_POST['Material']) AND $_POST['Material'] !=="")
                		{

/* Puis si le champ "Statement" est rempli*/

                		if (isset($_POST['Statement']) AND $_POST['Statement'] !=="")
                			{

/* Enfin si le champ "Quantity" est rempli*/

                			if (isset($_POST['Quantity']) AND $_POST['Quantity'] !=="")
                				{
           			   
/*Au final on a comme ordre de modifier l'article seulement si les champs ne sont pas vide*/

  
  try
    {
      $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    
    
  $bdd -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

/*cette requètte préparée sert à modifier les données j'ai rajouté "nouveau" et "nouvelle" au nom des variables mais vous n'êtes pas obligé des faire pareil, c'est juste pour mieux me repérer et comprendre ce que je fais.*/
  
  $reponse = $bdd->prepare('UPDATE mill_tool SET Tool_Name = :new_toolname, Diameter = :new_diameter, Lenght = :new_lenght,  Type = :new_type, Material = new_material, Statement = new_statement, Quantity = new_quantity WHERE id = :id ');
    
  $reponse->execute(array( 
      'new_toolname' => $_POST['Tool'],
      'new_diameter' => $_POST['Diameter'],
      'new_lenght' => $_POST['Lenght'],
      'new_type' => $_POST['Type'],
      'new_material' => $_POST['Material'],
      'new_statement' => $_POST['Statement'],
      'new_quantity' => $_POST['Quantity']
      ));			
      }
  catch(Exception $e)
    {
      die('Erreur:'.$e->getMessage());
    }
  $reponse->closeCursor();
          
          }
          }
          } 
          }
          }
          } 
  
  echo'<p>The tool was modify with success</p>';
    }
 
 else
    {  	
  echo '<p>Please complete all the field</p>';
  }
?>
				<?php
					$bdd = new PDO('mysql:host=localhost;dbname=utilisateur', 'root', '');
					$reponse = $bdd->query('SELECT * FROM mill_tool ORDER BY Type');
				?>

				<table class="Modify">
						<tr>
							<td><strong>Tool name</strong></td>
							<td><strong>Diameter</strong></td>
							<td><strong>Lenght</strong></td>
							<td><strong>Type</strong></td>
							<td><strong>Material</strong></td>
							<td><strong>Statement</strong></td>
							<td><strong>Quantity</strong></td>
						</tr>

					<?php while ($donnees = $reponse -> fetch()) 
						{
					?>
						<tr>
							<td><?php echo $donnees['Tool_Name']; ?></td>
							<td><?php echo $donnees['Diameter']; ?></td>
							<td><?php echo $donnees['Lenght']; ?></td>
							<td><?php echo $donnees['Type']; ?></td>
							<td><?php echo $donnees['Material']; ?></td>
							<td><?php echo $donnees['Statement']; ?></td>
							<td><?php echo $donnees['Quantity']; ?></td>
							<td><a href="Mill_Tool_ModifyTool2.php?IDnum='<?php echo $donnees['ID']; ?>'">Modify</a></td>
						</tr>
					<?php
					};
					?>
				</table>
			
			</div>
	        
			<footer>
				<?php include("footer.php"); ?>
			</footer>
		</div>
	</body>
</html>
Même problème ma supprresion ne marche pas et je ne sais pas pourquoi ... :/ :
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Tool Manager</title>
        <link href="style1.css" rel="stylesheet">
	<link rel="stylesheet" type="text/css" href="print1.css" media="print1" />
        
<link href='http://fonts.googleapis.com/css?family=Tenor+Sans&v1' rel='stylesheet' type='text/css'>
	</head>
	<body>
		<div class="container"> 
            <header>
                <?php include("head.php"); ?>
            </header>
            	</br><h1>Mill Tooling</h1></br>
	        <div class="container2">

<!-- Selection par recuperation de l'ID et suppresion d'un outil -->

				<?php
					$bdd = new PDO('mysql:host=localhost;dbname=utilisateur', 'root', '');
					if(isset($_GET['IDnum']))
					{
						$requete = $bdd->prepare('DELETE FROM mill_tool where ID=?');
						$requete->execute(array($_GET['IDnum']));
					}
					$reponse = $bdd->query('SELECT * FROM mill_tool ORDER BY Type');
				?>

<!-- Affichage du nouveau tableau sans elements precedemment supprime -->

				<table class="Modify">
						<tr>
							<td><strong>Tool name</strong></td>
							<td><strong>Diameter</strong></td>
							<td><strong>Lenght</strong></td>
							<td><strong>Type</strong></td>
							<td><strong>Material</strong></td>
							<td><strong>Statement</strong></td>
							<td><strong>Quantity</strong></td>
						</tr>

					<?php while ($donnees = $reponse -> fetch()) 
						{
					?>
						<tr>
							<td><?php echo $donnees['Tool_Name']; ?></td>
							<td><?php echo $donnees['Diameter']; ?></td>
							<td><?php echo $donnees['Lenght']; ?></td>
							<td><?php echo $donnees['Type']; ?></td>
							<td><?php echo $donnees['Material']; ?></td>
							<td><?php echo $donnees['Statement']; ?></td>
							<td><?php echo $donnees['Quantity']; ?></td>
<!-- envoie de l'ID de l'outil via l'URL --> <td><a href="Mill_Tool_Delete.php?IDnum='<?php echo $donnees['ID']; ?>'">Delete</a></td>
						</tr>
					<?php
					};
					?>
				</table>
			
			</div>
	        
			<footer>
				<?php include("footer.php"); ?>
			</footer>
		</div>
	</body>
</html>
Désolé si ce n'est pas claire pour vous je débute et il s'agit ici de mon prmier post sur ce FORUM. N'hésitez pas à me demander des précisions s'il le faut.

Merci d'avance pour tout !! :D

Mammouth du PHP | 2703 Messages

09 août 2016, 23:47

<form action="Mill_Tool_.php" method="POST" href="Mill_Tool_Modify.php?IDnum1='<?php echo $donnees['ID']; ?>'">
la balise form n'a pas d’attribut href.
le formulaire va donc être envoyé vers Mill_Tool_.php.
si le code de mise à jour est dans Mill_Tool_Modify.php, cela va fonctionner beaucoup moins bien.

Petit nouveau ! | 9 Messages

10 août 2016, 00:13

Houla ! J'ai fais beaucoup de confusion ... Je te pris de m'en excuser !
Tout d'abord merci beaucoup de ta réponse ! Merci pour le href dans la balise form j'avais oublié qu'elle ne pouvait contenir de href.
L'idée était de faire un formulaire pré-remplit avec les informations de l'outils que l'on souhaite modifier. Problème mes input ne s'affiche pas et donc le formulaire pré-remplit encore moins ... je me suis tromper pour le formulaire (Mill_Tool_Modifytool.php) voici le bon :
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Tool Manager</title>
        <link href="style1.css" rel="stylesheet">
	<link rel="stylesheet" type="text/css" href="print1.css" media="print1" />
        <!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link href='http://fonts.googleapis.com/css?family=Tenor+Sans&v1' rel='stylesheet' type='text/css'>
	</head>
	<body>
		<div class="container"> 
            <header>
                <?php include("head.php"); ?>
            </header>
            	</br><h1>Mill Tooling</h1></br>

            <div class="container1">

            <?php 
            	$bdd = new PDO('mysql:host=localhost;dbname=utilisateur', 'root', '');
				$reponse = $bdd->prepare('SELECT * FROM mill_tool WHERE ID = ?');
				$reponse->execute(array($_GET['IDnum']));
			?>

			<?php while ($donnees = $reponse->fetch()) 
						{
			?>

	
            	<form action="Mill_Tool_Modify.php" method="POST"> <!--Champ de recherche a gauche-->
          
    				<p class="box1"> <label>Tool name: </br><input type="text" name="NXTool_Name" value="<?php echo $donnees['Tool_Name']; ?>" /></label>  </p>
				
    				<p class="box2"> <label>Diameter : </br><input type="number" name="NXDiameter" value="<?php echo $donnees['Diameter']; ?>" /></label>  inch </p>

    				<p class="box3"> <label>Lenght : </br><input type="number" name="NXLenght" value="<?php echo $donnees['Lenght']; ?>" /></label>  inch </p>
				
    				<p class="box4">
        				<label>Type :</br>
   	
   					<select id="Typetool" name="NXType" value="<?php echo $donnees['Type']; ?>" >
	               		<option value="Engraving tool">Engraving tool</option>
	               		<option value="Endmill 3 bull">Endmill 3 bull</option>
	               		<option value="Face mill">Face mill</option>
	               		<option value="Chamfer mill">Chamfer mill</option>
	               		<option value="Endmill 2 Sphere">Endmill 2 Sphere</option>
	               		<option value="Endmill 1 flat">Endmill 1 flat</option>
	               		<option value="Csink">Csink</option>
	               		<option value="Cbore">Cbore</option>
	               		<option value="Reamer">Reamer</option>
	               		<option value="Tap RH">Tap RH</option>
	               		<option value="Drill">Drill</option>
	               		<option value="Spot drill">Spot drill</option>
	               		<option value="Center drill">Center drill</option>
	            	</select></label> 
	            	</p>

					<p class="box5"> <label>Material : </br><input type="text" name="NXMaterial" value="<?php echo $donnees['Material']; ?>" /></label>  </p>
			
					<p class="box6"> <label>Statement : </br><input type="text" name="NXStatement" value="<?php echo $donnees['Statement']; ?>" /></label>  </p>
			
    				<p class="box7"> <label>Quantity : </br><input type="number" name="NXQuantity" value="<?php echo $donnees['Quantity']; ?>" /></label>  </p>

    				<p class="box8"> <input type="submit" value="Execute"> </p>

    			</form>
    			<?php
					};
				?>
			
			</div>
		</div>
	</body>
</html>
Ton conseil est de merde le code de modif dans une autre page que celle de mon tableau avec l'hyperlien "modify" ?

Merci encore.

Eléphant du PHP | 176 Messages

10 août 2016, 00:28

Bonsoir,

Quand tu dis que tes inputs ne s'affiche pas c'est que tu ne les vois pas ou que les valeurs ne sont pas mises dedans ?

Sinon tu es bien sûre que les champs de ta base de données sont les bons ? ("Tool_Name", "Diameter", "Lenght", "Type" ... )
Cordialement
Naroth

Petit nouveau ! | 9 Messages

10 août 2016, 01:02

Je veux dire que rien ne s'affiche même le texte avant les input. Le plus étonnant est dès que j'enlève les ligne de php dans le value des input alors ils réapparaissent avec le texte.

Oui j'ai bien vérifié le nom de mes entrées pas de problème de ce côté là... :/

Merci de votre réponse.

Eléphant du PHP | 176 Messages

10 août 2016, 08:44

Bonjour,

Tu peux toujours essayé d'activer l'affichage des erreurs en mettant au debut de ta page :
ini_set("display_errors","1");


Dans quel environnement tourne ton code ?
Est-ce le même que celui de developpement ?
Cordialement
Naroth

Petit nouveau ! | 9 Messages

10 août 2016, 17:18

Bonjour Naroth,

Désolé de ne répondre que maintenant je suis aux USA et j'ai donc un bon décalage horaire avec vous...

Qu'entends-tu par là, je ne comprend pas trop la question ?
Sinon rien ne te parait complètement faux dans mon code ?

Cordialement,
Mattdtry.

Eléphant du PHP | 176 Messages

10 août 2016, 17:46

Bonjour,

J'ai testé ton code sur ma machine et il fonctionne. J'ai les inputs, ces mêmes inputs sont remplis. (j'ai crée une base de données avec des valeurs arbitraires mais qui respecte tes champs).

Pour en revenir aux environnements :
Pour ma part je développe sous un Windows 7 via un WampServer (pour le PHP) etc... (Aussi appelé environnement de dev)
En revanche les serveurs sur lesquels mes services web vont tourner, une fois le développement terminé, sont des serveurs Linux (Environnement de prod)
Plus d'info sur les environnements

Je te posais donc cette question car il est très fréquent que des petits problèmes (dû au changement d'OS pas à ton code) ce glisse lors du passage de l'un à l'autre.
Dans mon cas (Windows -> Linux) le changement chiant le plus courants que je peux te citer est le traitement des retours chariots qui ne sont gérés de la même manière par les deux OS.
Cordialement
Naroth

Petit nouveau ! | 9 Messages

10 août 2016, 18:42

Whouahhh donc il marche .... :D bizzare !! Je suis sous Microsoft Windows 10 home avec Wampserver et sur chrome. Je vais essayer avec linux alors ! Je vous tiens au courant de si ça marche.

Merci Naroth.

Petit nouveau ! | 9 Messages

10 août 2016, 19:34

Sinon pas d'autres solutions pour solutionner ce problème autrement que par le téléchargement de linux ?!

Eléphant du PHP | 176 Messages

10 août 2016, 20:19

Attend,

Ton code je l'ai testé sous windows 7.
Dans ton cas comme il n'y a pas eu de changement d'envionnement pas de probleme de ce genre !
Cordialement
Naroth

Petit nouveau ! | 9 Messages

10 août 2016, 20:26

Qu'est-ce qui ferait que ça ne marcherait pas sur mon environnement alors ? C'est vraiment bizzare ...! ça ne marche toujours pas même sur d'autre navigateur :/

Petit nouveau ! | 9 Messages

10 août 2016, 20:27

Le code pour Delete ça marche aussi sur ta machine ?

Eléphant du PHP | 176 Messages

11 août 2016, 00:35

Bonsoir,

J'ai passé un peu de temps avec Mattdtry sur son code on est donc arrivé au constat que ce le code ci-dessous ne fonctionnait pas chez lui mais marchait chez moi.
$reponse = $bdd->prepare('SELECT * FROM mill_tool WHERE ID = ?');
$reponse->execute(array($_GET['IDnum']));
J'ai tenté toutes les variantes avec bindparams / bindvalues sans effet

La solution que je lui ai proposé est donc la suivante et qui fonctionne
$query = "SELECT * FROM mill_tool WHERE ID = ".$_GET['IDnum'];
$reponse = $bdd->query($query);

while($donnees = $reponse->fetch(PDO::FETCH_ASSOC )
{ 
...
Ma question est alors POURQUOI la première version ne marche pas ?
Cordialement
Naroth

Petit nouveau ! | 9 Messages

11 août 2016, 17:53

Merci encore Naroth pour ton aide ! :D