PHP sans bdd [Site Restaurant]

Petit nouveau ! | 3 Messages

22 nov. 2014, 21:29

Bonjour,
Voila je suis débutant en php et je dois réaliser un projet sur une sorte de "borne" de restauration. J'ai réaliser la partie visuel de mon site avec des images cliquables.
Sous cette forme :
<a href="index.php?plat=Kebab Pain&prix= 5"><img src="./images/kebab/kebabpain.jpg" alt="Kebab Pain" title="Kebab Pain" width="100px" height="100px"/></a> 
En faite il faut que quand on clique sur une image, a un endroit du site on lise le nom du produit sélectionné ainsi que son prix.
C'est a dire en php
<?php 
$plat = $_GET['plat'] ; 
$prix = $_GET['prix'] ; 
echo $plat; 
echo $prix; 
?>

Affichage:
Kebab Pain 5

Jusque la rien de bien compliqué.
Ma question ce pose alors, comment afficher une liste des produits sélectionné et afficher le résultat de la note.

Par exemple je clique sur deux images (ou deux fois sur la même soyons fou :))
Je voudrais que ça m'affiche:

Kebab Pain 5
Gros Kebab 6
Addition 11

Je cherche désespérément sur internet mais je ne trouve pas :(
J'ai trouvé comment faire des additions en php style :
$r=$a+$b
echo $r

Mais comme je n'arrive pas a afficher une liste je ne vois pas comment je peux l'additionner.

Si quelqu'un pourrais m'aider :)

Eléphant du PHP | 63 Messages

23 nov. 2014, 00:03

Les sessions php est une manière d'y arriver. Un exemple pas très brillant
<?php

session_start();

if(!empty($_GET['reset']) && $_GET['reset']==1) $_SESSION['liste'] = serialize(array());

$plat = isset($_GET['plat']) ? $_GET['plat'] : '';
$prix = isset($_GET['prix']) ? (float)$_GET['prix'] : 0;

$liste = isset($_SESSION['liste']) ? unserialize($_SESSION['liste']) : array();
if($plat&&$prix) $liste[] = array('plat'=>$plat, 'prix'=>$prix);

if(count($liste)) {
  $_SESSION['liste'] = serialize($liste);

  $total = 0;
  foreach($liste as $choix) {
    echo htmlentities($choix['plat']), ' ', $choix['prix'], '<br/>';
    $total += $choix['prix'];
  }
  echo '<b>Addition = ', $total, '</b><hr/>';
}

?>
<a href="?plat=Kebab+Pain&prix=5.99">Kebab Pain</a><br/>
<a href="?plat=Gros+Kebab&prix=6.79">Gros Kebab</a><br/>
<a href="?plat=Tarte+au+Citron&prix=3.49">Tarte au Citron</a><br/>
==============<br/>
<a href="?reset=1">Réinitialiser Achats</a>

Mammouth du PHP | 2278 Messages

23 nov. 2014, 10:13

Sans PHP ni BDD avec Javascript:
<html>
<!--  Attention dans le javascript à bien respecter les majuscules/ minuscules -->
<script type = "text/javascript">
function ajouter (produit)
{
	//document.getElementById("total").value récipère la valeur du champ total
	// mais c'est une chaine de caractères que parseFloat convertiit en nombre à virgule
	totallocal =  parseFloat (document.getElementById("total").value);
	if (produit == 1) //1 est le code du kebab
	{
		totallocal += 5.50;
	}
	if (produit == 2) //1 est le code de la boisson
	{
		totallocal += 1.50;
	}
	// on donne à la valeur du champ total le résultat du calcul
	document.getElementById("total").value = totallocal;
}
</script>

<form method ="post" action = "" />
	<img src="" onclick = "ajouter ('1');" /> kebab
<img src="" onclick = "ajouter ('2');" /> coca	
	<input name ="total" id = "total" value ="0" />
</form>
</html>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 3 Messages

23 nov. 2014, 17:11

J'ai testé le premier code qui me donne exactement la meme valeur que le produit selectionné c'est a dire :
Kebab 5
Addition = 5
Et quand je clique sur une autre image
Pizza 6
Addition = 6

Je vais essayer de montrer ce que j'ai fais :
Une partie du code Html
<a href="index.php?plat=Kebab Pain&prix= 5"><img src="./images/kebab/kebabpain.jpg" alt="Kebab Pain" title="Kebab Pain" width="100px" height="100px"/></a>
<a href="index.php?plat=Assiette Kebab&prix= 7"><img src="./images/kebab/asskebab.jpg" alt="Assiette Kebab" title="Assiette Kebab" width="100px" height="100px"/></a>
a href="index.php?plat=Kebab Crêpe&prix= 5"><img src="./images/kebab/kebabcre.jpg" alt="Kebab Crêpe" title="Kebab Crêpe" width="100px" height="100px"/></a>
<a href="index.php?plat=Miche Kebab&prix= 5,5"><img src="./images/kebab/michekebab.jpg" alt="Miche Kebab" title="Miche Kebab" width="100px" height="100px"/></a>
J'ai donc 4 plats

On m'a proposer de faire une session puis de faire une boucle pour afficher une liste des produit et de cette liste faire le total du prix:
<?php
session_start();

$plat = $_GET['plat'] ;
$prix = $_GET['prix'] ;

if(isset($_SESSION['meschoix'])){
  $arrChoix = $_SESSION['meschoix'];
}else{
  $arrChoix = array();
}
$arrChoix[] = array('plat' => $plat,'prix ' => $prix);

$_SESSION['meschoix'] = $arrChoix ;

print_r($_SESSION['meschoix']);

 $total = 0;

foreach($_SESSION['meschoix'] as $P){
if(isset( $P['prix']) && $P['prix']!='' {
  $Pprix = $P['prix'];
else{
  $P['prix']=0;
}
 echo "<br> plat : ".$P['plat']. "   prix : ".$Pprix ;
 $total += $Pprix; 
}
echo " Le total est de : ".$total;

?>
Malheureusement cela ne marche pas :(
Pour le Javascript c'est gentil mais il faut que j'utilise du PHP dans mon projet donc ... :D

Mammouth du PHP | 2278 Messages

23 nov. 2014, 19:15

C'était si simple en javascript; menfin:
<?PHP
session_start(); //en premier obligatoirement
print_r($_SESSION); // test à supprimer
$total = isset($_SESSION['total']) ? $_SESSION['total']: 0; //Si la session contient une valeur total, la variable $total la prend, sinon 0;
print_r($_POST); // test à supprimer
extract($_POST); //les variables e même nom que les champs correspondants sont créées avec les valeurs passées
// sinon:
//$quantites = $_POST['quantites'];
//$produits = $_POST['produits'];
//Il faut tout remettre à zéro entre deux clients
if ($bouton == 2)  
{
	$total = 0;
}
else
{
	if ($bouton == 1)  
	{
		for ($nb = 1; $nb <= 3; $nb ++) // $nb <= au nombre de produits réels ( cf plus bas)
		{
			$produit = isset($produits[$nb]) ?$produits[$nb] : 0; //précaution
			$quantite = isset($quantites[$nb]) ?$quantites[$nb] : 0;//précaution
			$total +=  $produit * $quantite;
		}
	}
	else
	{
		$total = 0;
	}
}
$_SESSION['total'] = $total;

print "
<form method ='post' action = 'commande.php'>
	<fieldset>
		<legend>Kebab</legend>
				 <img src =''> kebab
<!-- on crée des inputs sous forme de tableaux partant de 1 -->
		<input type = 'text' name = 'produits[1]' value = '5.5' />
		<select name = 'quantites[1]'>
			<option selected ='selected'>0</option>
			<option>1</option>
			<option>2</option>
		</select>
	</fieldset>
	<fieldset>
		<legend>Boisson</legend>
				<img src =''> coca
		<input type = 'text' name = 'produits[2]' value = '1.5' />
		<select name = 'quantites[2]'>
			<option selected ='selected'>0</option>
			<option>1</option>
			<option>2</option>
		</select>
	</fieldset>
	<fieldset>
		<legend>Dessert</legend>
				<img src =''> dessert
		<input type = 'text' name = 'produits[3]' value = '2.5' />
		<select name = 'quantites[3]'>
			<option selected ='selected'>0</option>
			<option>1</option>
			<option>2</option>
		</select>
	</fieldset>
	<textarea name = 'total'>$total</textarea>
	
	<!-- deux boutons suivant le cas où on est: type ='reset' ne fait pas l'affaire--W
	<button name = 'bouton' type = 'submit' value = '1'>Calcul</button>
	<button name = 'bouton' type = 'submit' value = '2'>Client suivant</button>
</form>
</html>";

?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 63 Messages

23 nov. 2014, 20:51

Salut
J'ai testé le premier code qui me donne exactement la meme valeur que le produit selectionné c'est a dire :
Kebab 5
Addition = 5
Et quand je clique sur une autre image
Pizza 6
Addition = 6
Ton navigateur est donc configuré pour ne pas accepter les cookies alors que ton serveur est configuré pour avoir l'id de session en cookies. Il y a moyen de configurer ton serveur pour une parfaite transparence $_GET/$_POST. Sinon il faut mettre un peu la main dans le code pour gérer les sessions.
$nom = ini_get('session.name');
if(!empty($_REQUEST[$nom])) session_id($_REQUEST[$nom]);
session_start();
Devrait suffire pour récupérer l'id de session en $_REQUEST même si le serveur est configuré en cookies... malheureusement il faut ajouter soi-même le SID aux liens $_GET ou au formulaire $_POST... par exemple mon code initial devient
<?php

$nom = ini_get('session.name');
if(!empty($_REQUEST[$nom])) session_id($_REQUEST[$nom]);
session_start();

if(!empty($_GET['reset']) && $_GET['reset']==1) $_SESSION['liste'] = serialize(array());

$plat = isset($_GET['plat']) ? $_GET['plat'] : '';
$prix = isset($_GET['prix']) ? (float)$_GET['prix'] : 0;

$liste = isset($_SESSION['liste']) ? unserialize($_SESSION['liste']) : array();
if($plat&&$prix) $liste[] = array('plat'=>$plat, 'prix'=>$prix);

if(count($liste)) {
  $_SESSION['liste'] = serialize($liste);

  $total = 0;
  foreach($liste as $i=>$choix) {
    echo htmlentities($choix['plat']), ' ', $choix['prix'], '<br/>';
    $total += $choix['prix'];
  }
  echo '<b>Addition = ', $total, '</b><hr/>';
}


?>
<a href="?<?php echo htmlentities(SID); ?>&plat=Kebab+Pain&prix=5.99">Kebab Pain</a><br/>
<a href="?<?php echo htmlentities(SID); ?>&plat=Gros+Kebab&prix=6.79">Gros Kebab</a><br/>
<a href="?<?php echo htmlentities(SID); ?>&plat=Tarte+au+Citron&prix=3.49">Tarte au Citron</a><br/>
<hr/>
<a href="?<?php echo htmlentities(SID); ?>&reset=1">Réinitialiser Achats</a>
Il y a des echo dans les <a> à la fin pour conserver manuellement l'id de session.
Je vais essayer de montrer ce que j'ai fais :
Une partie du code Html
<a href="index.php?plat=Kebab Pain&prix= 5"><img src="./images/kebab/kebabpain.jpg" alt="Kebab Pain" title="Kebab Pain" width="100px" height="100px"/></a>
<a href="index.php?plat=Assiette Kebab&prix= 7"><img src="./images/kebab/asskebab.jpg" alt="Assiette Kebab" title="Assiette Kebab" width="100px" height="100px"/></a>
a href="index.php?plat=Kebab Crêpe&prix= 5"><img src="./images/kebab/kebabcre.jpg" alt="Kebab Crêpe" title="Kebab Crêpe" width="100px" height="100px"/></a>
<a href="index.php?plat=Miche Kebab&prix= 5,5"><img src="./images/kebab/michekebab.jpg" alt="Miche Kebab" title="Miche Kebab" width="100px" height="100px"/></a>
J'ai donc 4 plats

On m'a proposer de faire une session puis de faire une boucle pour afficher une liste des produit et de cette liste faire le total du prix:
<?php
session_start();

$plat = $_GET['plat'] ;
$prix = $_GET['prix'] ;

if(isset($_SESSION['meschoix'])){
  $arrChoix = $_SESSION['meschoix'];
}else{
  $arrChoix = array();
}
$arrChoix[] = array('plat' => $plat,'prix ' => $prix);

$_SESSION['meschoix'] = $arrChoix ;

print_r($_SESSION['meschoix']);

 $total = 0;

foreach($_SESSION['meschoix'] as $P){
if(isset( $P['prix']) && $P['prix']!='' {
  $Pprix = $P['prix'];
else{
  $P['prix']=0;
}
 echo "<br> plat : ".$P['plat']. "   prix : ".$Pprix ;
 $total += $Pprix; 
}
echo " Le total est de : ".$total;

?>
Malheureusement cela ne marche pas :(
Pour le Javascript c'est gentil mais il faut que j'utilise du PHP dans mon projet donc ... :D
J'ai modifié un peu ton code en essayant de conserver ta manière de faire. Il faut faire attention aux espaces inutiles qui sont parfois ajoutés, par exemple array('plat'=>$plat, 'prix '=>$prix) n'est pas la même chose que array('plat'=>$plat, 'prix'=>$prix).
<?php

$nom = ini_get('session.name');
if(!empty($_REQUEST[$nom])) session_id($_REQUEST[$nom]);
session_start();

if(!empty($_GET['plat'])) {
  $plat = $_GET['plat'];
}else{
  $plat = '';
}
if(!empty($_GET['prix'])) {
  $prix = str_replace(',', '.', trim($_GET['prix']));
}else{
  $prix = '';
}

if(!isset($_SESSION['meschoix'])){
  $_SESSION['meschoix'] = array();
}
if(!empty($plat)&&!empty($prix)) {
  $_SESSION['meschoix'][] = array('plat' => $plat,'prix' => $prix);
}

print_r($_SESSION['meschoix']);

$total = 0;

foreach($_SESSION['meschoix'] as $P){  
  if(isset($P['prix']) && $P['prix']!='') {
    $Pprix = $P['prix']; 
  }else{
    $Pprix = 0;
  }
  echo "<br> plat : ".$P['plat']. "   prix : ".str_replace('.', ',',$Pprix);
  $total += $Pprix;
}
echo " Le total est de : ".str_replace('.', ',', $total);

?>
<hr/>
<a href="?<?php echo htmlentities(SID); ?>&plat=Kebab Pain&prix= 5"><img src="./images/kebab/kebabpain.jpg" alt="Kebab Pain" title="Kebab Pain" width="100px" height="100px"/></a>
<a href="?<?php echo htmlentities(SID); ?>&plat=Assiette Kebab&prix= 7"><img src="./images/kebab/asskebab.jpg" alt="Assiette Kebab" title="Assiette Kebab" width="100px" height="100px"/></a>
<a href="?<?php echo htmlentities(SID); ?>&plat=Kebab Crêpe&prix= 5"><img src="./images/kebab/kebabcre.jpg" alt="Kebab Crêpe" title="Kebab Crêpe" width="100px" height="100px"/></a>
<a href="?<?php echo htmlentities(SID); ?>&plat=Miche Kebab&prix= 5,5"><img src="./images/kebab/michekebab.jpg" alt="Miche Kebab" title="Miche Kebab" width="100px" height="100px"/></a>
Bonne chance

Petit nouveau ! | 3 Messages

24 nov. 2014, 00:07

Salut tesmet,
Tout d'abord merci de prendre du temps pour essayer de résoudre ce problème :)
Le code que tu m'a passé ce rapproche bien de mon idée de départ, et je pense avoir un problème certainement avec mon navigateur.
Pourtant j'utilise chrome et les cookies sont de base activé.

Donc testé cela donne:

Array ( [0] => Array ( [plat] => Kebab Pain [prix] => 5 ) )
plat : Kebab Pain prix : 5 Le total est de : 5

Donc si j'ai bien compris le code est juste mais c'est mon navigateur qui met le bazar...
Est ce normal de voir sur mon navigateur Array ( [0] => Array ( [plat] => Kebab Pain [prix] => 5 ) ) ?

Eléphant du PHP | 63 Messages

24 nov. 2014, 02:22

Salut
Salut tesmet,
Tout d'abord merci de prendre du temps pour essayer de résoudre ce problème :)
Le code que tu m'a passé ce rapproche bien de mon idée de départ, et je pense avoir un problème certainement avec mon navigateur.
Pourtant j'utilise chrome et les cookies sont de base activé.
Il est aussi possible que ton serveur initialise une nouvelle session sans prendre en compte la session déjà existante pour une raison à découvrir. Pour m'amuser, j'ai uploadé mon premier script sur un serveur gratuit http://tesmet.890m.com/ et c'est fonctionnel avec mon chrome avec cookie. Est-ce aussi fonctionnel avec ton chrome?
Donc testé cela donne:

Array ( [0] => Array ( [plat] => Kebab Pain [prix] => 5 ) )
plat : Kebab Pain prix : 5 Le total est de : 5

Donc si j'ai bien compris le code est juste mais c'est mon navigateur qui met le bazar...
Si ton chrome fonctionne avec le script sur le serveur gratuit, alors il faudra regarder ce qui ne va pas sur ton serveur.
<?php

$AVANT = $_COOKIE;
session_start();
echo '<pre>cookie avant='; print_r($_COOKIE); echo '<br/>';
echo 'cookie apres='; print_r($_COOKIE); echo '<br/>';

echo 'session.auto_start = ', ini_get('session.auto_start'), '<br/>';
echo 'session.use_cookies = ', ini_get('session.use_cookies'), '<br/>';
echo 'session.use_only_cookies = ', ini_get('session.use_only_cookies'), '<br/>';
echo 'session.save_path = ', ini_get('session.save_path'), '<br/>';
echo 'session.name = ', ini_get('session.name'), '<br/>';
echo 'session.id = ', session_id(), '<br/>';

?>
</pre>
<a href="?plat=Kebab Pain&prix= 5"><img src="./images/kebab/kebabpain.jpg" alt="Kebab Pain" title="Kebab Pain" width="100px" height="100px"/></a>
Est-ce que la session.id reste le même après un click sur l'image?
Est ce normal de voir sur mon navigateur Array ( [0] => Array ( [plat] => Kebab Pain [prix] => 5 ) ) ?
Il y avait un print_r() dans ton code, je ne l'ai pas enlevé.

Mammouth du PHP | 2278 Messages

24 nov. 2014, 10:54

J'ai essayé le coe initial de Tesmet; ca fonctionne, mais :
ca ne permet pas de commander plusieurs roduits en même temps;
ca ne permet pas de commander plusieurs produits identiques en meme temps.
Si les sessions ne fonctionnent pas, on peut s'en tirer ainsi
<?PHP
//session_start(); //en premier obligatoirement
//print_r($_SESSION); // test à supprimer
$total = isset($_SESSION['total']) ? $_SESSION['total']: 0; //Si la session contient une valeur total, la variable $total la prend, sinon 0;
print_r($_POST); // test à supprimer
extract($_POST); //les variables de même nom que les champs correspondants sont créées avec les valeurs passées
// sinon:
//$quantites = $_POST['quantites'];
//$produits = $_POST['produits'];
//Il faut tout remettre à zéro entre deux clients
if ($bouton == 2)  
{
	$total = 0;
}
else
{
	if ($bouton == 1)  
	{
		for ($nb = 1; $nb <= 3; $nb ++) // $nb <= au nombre de produits réels ( cf plus bas)
		{
			$produit = isset($produits[$nb]) ?$produits[$nb] : 0; //précaution
			$quantite = isset($quantites[$nb]) ?$quantites[$nb] : 0;//précaution
			$total +=  $produit * $quantite;
		}
	}
	else
	{
		$total = 0;
	}
}
//$_SESSION['total'] = $total;

print "
<form method ='post' action = 'commande.php'>
	<fieldset>
		<legend>Kebab</legend>
				 <img src =''> kebab
<!-- on crée des inputs sous forme de tableaux partant de 1 -->
		<input type = 'text' name = 'produits[1]' value = '5.5' />
		<select name = 'quantites[1]'>
			<option selected ='selected'>0</option>
			<option>1</option>
			<option>2</option>
		</select>
	</fieldset>
	<fieldset>
		<legend>Boisson</legend>
				<img src =''> coca
		<input type = 'text' name = 'produits[2]' value = '1.5' />
		<select name = 'quantites[2]'>
			<option selected ='selected'>0</option>
			<option>1</option>
			<option>2</option>
		</select>
	</fieldset>
	<fieldset>
		<legend>Dessert</legend>
				<img src =''> dessert
		<input type = 'text' name = 'produits[3]' value = '2.5' />
		<select name = 'quantites[3]'>
			<option selected ='selected'>0</option>
			<option>1</option>
			<option>2</option>
		</select>
	</fieldset>
	<textarea name = 'total'>$total</textarea>
	
	<!-- deux boutons suivant le cas où on est: type ='reset' ne fait pas l'affaire-->
	<button name = 'bouton' type = 'submit' value = '1'>Calcul</button>
	<button name = 'bouton' type = 'submit' value = '2'>Client suivant</button>
</form>
</html>";

?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD