commande online petite restauration.

Eléphant du PHP | 257 Messages

14 avr. 2016, 18:31

Bonjour, suis à la demande de ma belle-fille qui tient un petit commerce de restauration. elle m'a demandé de créer un style de menu qui tourne via intranet.

J'ai quelques soucis avec mon premier script d'insertion, il me dit que ma commande est vide.

Ajouter des onglets suivant les catégories de produits, café, sandwichent, etc. valider dans une seule page ?

Merci de votre aide.
<?PHP
header('Content-type: text/html; charset=UTF-8');

$choix = filter_input(INPUT_POST, 'choix');
$table = filter_input(INPUT_POST, 'table');


$message = '';

if(!empty($choix)){ 

		  
        require("function.php");
        $connection = connexion_db ();
		
			

 			foreach($choix as $liste) { 
            $insert_prep=array(':article'=> $liste,
							   ':table'=> $table,
							   ':date_enregistrement'=> date("Y-m-j H:i:s"));
		    $value_choix = implode(', ',array_keys($insert_prep));
            $inser_exec=$connection->prepare( 'INSERT INTO commande ('.str_replace(':','',$value_choix).') VALUES('.$value_choix.')');
            $inser_exec->execute($insert_prep);
			}
			
  
		if ($inser_exec === true) 
        {
		 header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/commande_passer.php");
		}
		
		
    
  }else {    /* Au moins un choix dans la commande*/
    $message = 'Passer votre commande, car elle est vide.';
  }


?>	
<!doctype html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style_co.css">
<title>commande</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
		<script type="text/javascript">
		  // Une fois le chargment de la page terminé ...
		  $(document).ready(function(){	
			// Lorsqu'un lien a.tab est cliqué
			$("a.tab").click(function () {		
				// Mettre toutes les onglets non actif
				$(".active").removeClass("active");
				
				// Mettre l'onglet cliqué actif
				$(this).addClass("active");
				
				// Cacher les boîtes de contenu
				$(".content").slideUp();
				
				// Pour afficher la boîte de contenu associer, nous
				// avons modifier le titre du lien par le nom de
				// l'identifiant de la boite de contenu
				var contenu_aff = $(this).attr("title");
				$("#" + contenu_aff).slideDown();	  
			});
		  });
		</script>
</head>
<body>
<div id="commande">
    <form action="#" method="post">
    <fieldset>Commande<br/>
    		<ul class="tabs">
		    <li><a href="#" title="content_1" class="tab active">Café</a></li>
		    <li><a href="#" title="content_2" class="tab">Sandwich</a></li>
		    <li><a href="#" title="content_3" class="tab">Boissons fraîche</a></li>
            <li><a href="#" title="content_4" class="tab">Boissons 1</a></li>
            <li><a href="#" title="content_5" class="tab">Boissons 2</a></li>
            <li><a href="#" title="content_6" class="tab">Boissons 3</a></li>
            <li><a href="#" title="content_7" class="tab">Boissons 4</a></li>
            <li><a href="#" title="content_8" class="tab">Boissons 5</a></li>
            <li><a href="#" title="content_9" class="tab">Boissons 6</a></li>
            <li><a href="#" title="content_10" class="tab">Boissons 7</a></li>
		</ul>   
    </fieldset>
<div id="content_1" class="content">
<p><table width="100%">
  <tr>
    <td>Café noir<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /><p><input type="checkbox" name="choix[]" value="Café noir"></p></td>
    <td><input type="checkbox" name="choix[]" value=""></td>
    <td><input type="checkbox" name="choix[]" value=""></td>
    <td><input type="checkbox" name="choix[]" value="">></td>
  </tr>
  <tr>
    <td>Café au lait<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /><p><input type="checkbox" name="choix[]" value="Café au lait"></p></td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
  <tr>
    <td>Café moka<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /><p><input type="checkbox" name="choix[]" value="Café moka"></p></td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
  <tr>
    <td>Café Crème<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /><p><input type="checkbox" name="choix[]" value="Café Crème"></p></td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
</table></p>
</div>

<div id="content_2" class="content">
<p><table width="100%">
  <tr>
    <td><input type="checkbox" name="choix[]" value="Café noir">&nbsp;Café noir<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /></td>
    <td><input type="checkbox" name="choix[]" value="Café au lait">&nbsp;Café au lait<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /></td>
    <td><input type="checkbox" name="choix[]" value="Café moka">&nbsp;Café moka<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /></td>
    <td><input type="checkbox" name="choix[]" value="Café Crème">&nbsp;Café Crème<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /></td>
  </tr>
  <tr>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
</table></p>
</div>

<div id="content_3" class="content">
<p><table width="100%">
  <tr>
    <td><input type="checkbox" name="choix[]" value="Café noir">&nbsp;Café noir<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /></td>
    <td><input type="checkbox" name="choix[]" value="Café au lait">&nbsp;Café au lait<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /></td>
    <td><input type="checkbox" name="choix[]" value="Café moka">&nbsp;Café moka<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /></td>
    <td><input type="checkbox" name="choix[]" value="Café Crème">&nbsp;Café Crème<img src="imdesign/tasse-a-cafe-avec-soucoupe.jpg" width="100" height="100" /></td>
  </tr>
  <tr>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
    <td><input type="checkbox" name="choix[]" value="">&nbsp;</td>
  </tr>
</table></p>
</div>
<div id="content_4" class="content"></div>
<div id="content_5" class="content"></div>
<div id="content_6" class="content"></div>
<div id="content_7" class="content"></div>
<div id="content_8" class="content"></div>
<div id="content_9" class="content"></div>
<div id="content_10" class="content"></div>
<p><input type="hidden" name="table" value="1" /></p>
<p><input type"submit" value="Envoyer" id ="valider"/></p>
</form>
    <div id="message">
	<?PHP   if(!empty($message)){
            echo '<div class="message" style="color:red;text-align:center;"><b>'.$message.'</b></div>';
            }
		
	?>
</div>
<br />
</div>
</body>
</html>

Mammouth du PHP | 985 Messages

15 avr. 2016, 10:53

Bonjour, plusieurs pistes pour déboguer :

il manque le signe '=' après type

Code : Tout sélectionner

<p><input type"submit" value="Envoyer" id ="valider"/></p>
Au début du script vous faites un input_filter, mais vous n'avez pas mis de marqueur de filtre http://php.net/manual/fr/function.filter-input.php , du coup cela retourne toujours false.

FAites d'abord un test de façon classique

Code : Tout sélectionner

//$choix = filter_input(INPUT_POST, 'choix'); //$table = filter_input(INPUT_POST, 'table'); $choix = $_POST['choix']; $table = $_POST['table'];
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 257 Messages

15 avr. 2016, 16:49

Bonjour merci de votre aide voila j'ai une erreur
Notice: Undefined index: choix in C:\Program Files\EasyPHP-5.3.8.1\www\shoponline\index.php on line 4

Notice: Undefined index: table in C:\Program Files\EasyPHP-5.3.8.1\www\shoponline\index.php on line 5
$choix = $_POST['choix'];
$table = $_POST['table'];
et toujours le message ici
}else {    /* Au moins un choix dans la commande*/
    $message = 'Passer votre commande, car elle est vide.';
  }

Mammouth du PHP | 985 Messages

15 avr. 2016, 17:02

Bonsoir,
une simple vérification au début :

Code : Tout sélectionner

$choix = false; $table = false; $message = false; if($_POST){ $choix = $_POST['choix']; $table = $_POST['table']; }
Pour la variable $message je vois pas trop ce que vous voulez, car si le forumaire est vide, le message s'affiche, et si vous passez commande vous partez dans un autre fichier passer-commande.php, donc cette variable n'est plus nécessaire.

Merci de m'éclairer.
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 257 Messages

15 avr. 2016, 17:21

Bonjour, merci de ton aide j'ai trouvé la solution, mais j'ai une erreur dans l'insertion des données
<?PHP
header('Content-type: text/html; charset=UTF-8');
 


if(isset($_POST['choix'],$_POST['table'])){ 
  if(!empty($_POST['choix'])){ 
 
        require("function.php");
        $connection = connexion_db ();
 
            $table = $_POST['table'];
 			foreach($_POST['choix'] as $liste) { 
            $insert_prep=array(':article'=> $liste,
			                   ':table'=> $table,
							   ':date_enregistrement'=>date("Y-m-j H:i:s"));
		    $value_choix = implode(', ',array_keys($insert_prep));
            $inser_exec=$connection->prepare( 'INSERT INTO commande ('.str_replace(':','',$value_choix).') VALUES('.$value_choix.')');
            $inser_exec->execute($insert_prep);
			}
  
		if ($inser_exec === true) 
        {
		 header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/commande_passer.php");
		}
 
   }else {    /* Au moins un choix dans la commande*/
    $message = 'Passer votre commande, car elle est vide.';
  }
}
?>
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'table, date_enregistrement) VALUES('Café noir', '1', '2016-04-15 17:16:57')' à la ligne 1' in C:\Program Files\EasyPHP-5.3.8.1\www\shoponline\index.php:19 Stack trace: #0 C:\Program Files\EasyPHP-5.3.8.1\www\shoponline\index.php(19): PDOStatement->execute(Array) #1 {main} thrown in C:\Program Files\EasyPHP-5.3.8.1\www\shoponline\index.php on line 19

Avatar de l’utilisateur
Administrateur PHPfrance
Administrateur PHPfrance | 7162 Messages

15 avr. 2016, 23:11

Je te l'ai déjà dit dans le sujet précédent :
Quand tu as une erreur MySQL : affiche ta requête avec un echo et teste là dans phpmyadmin
Quand tout le reste a échoué, lisez le mode d'emploi...