Incrémenter en php

Fermé
Loreena - 30 nov. 2011 à 12:09
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 - 2 déc. 2011 à 13:27
Bonjour a toutes et a tous

Mon problème est le suivant : Je dois créer une page, avec trois boutons, +1 -1 et raz.
Il faut imaginer par exemple que c'est un concert et a chaque personne qui entre dans la salle la personne au guichet clique sur +1, ou -1 si quelqu'un sort, avec un nombre max de personnes, et 0 en minimum. Il faut aussi a côté de ça que cela calcule le total d'argent gagné en fonction du nombre de personnes qui entrent.
Alors, j'ai réussi a faire fonctionner le +1, et l'affichage de l'argent en fonction du nombre de personnes, mais je n'arrive pas a faire le -1 et la raz.
Voici ce que j'ai fait :


<?
$ajout=$_POST['ajout'];
$moins=$_POST['moins'];
$places=50; ?>

<pre>
<?print_r($_POST)?>
</pre>
<?
if(isset($_POST['total_personnes']));
{
$_POST['total_personnes']>=0;
}
if(!empty($ajout));
{
$_POST['total_personnes']++;
}
if(isset($_POST['personnes_parties']));
{
$_POST['personnes_parties']<= 50;
}
if(empty($moins));
{
$_POST['personnes_parties']--;
}
print"Personnes présentes dans la salle =".$_POST['total_personnes'];
?>
<br>
<?
print"Somme totale en euros =".$_POST['total_personnes']*5;
?>
<br>


<form METHOD=POST>
<input type=submit value="+1" name="ajout">
<input type=hidden name=total_personnes value= <? print $_POST['total_personnes']; ?>>
</form>

<form METHOD=POST>
<input type=submit value="-1" name="moins">
<input type=hidden name=personnes_parties value= <? print $_POST['personnes-parties']; ?>>
</form>

<form METHOD=POST>
<input type=submit value="raz" name="raz">
</form>



Pourriez vous m'indiquer ce qui ne va pas svp ?

Merci beaucoup !
A voir également:

13 réponses

Zhp Messages postés 198 Date d'inscription mercredi 27 avril 2011 Statut Membre Dernière intervention 5 mars 2013 37
30 nov. 2011 à 15:01
Bonjour,

JE crois bien que le problème vient du faite d'avoir plusieurs formulaire sur une même page.
Tu peut utiliser javascript pour régler le problème.
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
30 nov. 2011 à 16:37
Fais en qu un seul ...
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
30 nov. 2011 à 15:06
Salut ...

ça m'étonne que le +1 fonctionne !!!
0
C'est un exercice que j'ai a faire, et je n'ai pas droit au javascript.
0
Zhp Messages postés 198 Date d'inscription mercredi 27 avril 2011 Statut Membre Dernière intervention 5 mars 2013 37
30 nov. 2011 à 15:39
essai avec ça ...

if(!empty($moins)); 

au lieu de :
if(empty($moins)); 


Mais je crois bien que plusieurs formulaire pose problème en html, à moins peut-être d'utiliser les spécification de html5.

IL faut obligatoirement que ce soit des boutons ? sinon trois bouton radio et un bouton submit dans un seul form fera grandement l'affaire ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 30/11/2011 à 15:44
J'insiste sur la fait que ça ne fonctionnera jamais, parce que tes variables ne sont pas enregistrés, les variables normales sont détruites a la fin de l'exécution la page, donc quand tu cliquera de nouveau, y aura aucune variables qui contiendrait le nombre de personnes déjà entrés ...

Pour se faire ...
Tu dois utiliser la variables globale, or, $_SESSION ou $_COOKIE

Les variables de session ne seront supprimé qu'après la fermeture du navigateur ...
Mettez en résolu quand c'est résolu -.- ...
0
Zhp, j'ai essayé cela ne fonctionne pas, mais merci.
JooS je débute en php, et je ne sais malheureusement pas m'en servir. merci
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 30/11/2011 à 16:15
Ok, j'explique ...

Les variables simple ne sont conservés que pendant l'exécution de la page, donc elles seront supprimés une fois la page chargée.

Donc il te faut un endroit ou enregistrer tes données pendant un bon moment.

1 - Tu peut soit utiliser Les variables globales $_SESSION.
1 - Soit utiliser Les variables globales $_COOKIE.
3 - Soit utiliser un fichier texte.
4 - Sinon, une base de données.

Les variables globales sont les plus pratiques en ce qui concerne ton exercice, et plus précisément, les SESSIONS, parce qu'ils sont plus sécurisés et ne peuvent pas être modifiés par un utilisateur autre que toi même.

Les fichiers textes se trouvent être moins pratiques.

Les bases de données sont utilisable généralement pour une bonne quantités de données, et non pas seulement pour un nombre.

Pour utiliser les $_SESSION, tu doit toujours mettre le code suivant au début de chaque page ...
session_start();
pour lancer la session.

Exemple :
<?php 
session_start(); 
if(!isset($_SESSION['nom_de_variable'])) $_SESSION['nom_de_variable'] = 0; 
$_SESSION['nom_de_variable']++; 
echo $_SESSION['nom_de_variable']; 
?>  

Tu remarquera que le nombre s'incremente a chaque fois que tu actualise la page ..., ce qui est la preuve que la valeur est conservé.

Essaye la même chose avec un variable simple.

Voir aussi le site du zero pour plus d'informations.
Mettez en résolu quand c'est résolu -.- ...
0
dream666 Messages postés 735 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 24 février 2014 104
30 nov. 2011 à 16:13
<?php session_start();
// session reste en memoire seulement si le navigateur n'est pas ferme


// remise a zéro ou initialisation de programme
if( ! isset($_SESSION['nbrEntrees']) or isset($_POST['etatProgramme']))
{
$_SESSION['nbrEntrees'] = 0 ;
$_SESSION['nbrSorties'] = 0 ;
$_SESSION['prixParPlace'] = 5 ;
$_SESSION['nbrPlaceMax'] = 50 ;
}
//fin de l'initialisation ou la remise a zero



// compte les entrees
if ( isset($_POST['nbrEntrees']) )
{
$_SESSION['nbrEntrees'] = ($_SESSION['nbrEntrees'] +1) ;
}

// compte les sorties
if ( isset($_POST['nbrSorties']) )
{
$_SESSION['nbrSorties'] = ($_SESSION['nbrSorties'] -1) ;
}





?>
<br />
<p><?php // visuel des infos sur le nombre de places ect...
echo "Place actuelement utilisé=".($_SESSION['nbrEntrees']+$_SESSION['nbrSorties'])
."<br /> Prix=".($_SESSION['prixParPlace']*$_SESSION['nbrEntrees'])
."<br /> place restantes=".($_SESSION['nbrPlaceMax']-($_SESSION['nbrEntrees']+$_SESSION['nbrSorties']) )
;
?>
</p>


<!-- commandes utilisateur en html -->
<form METHOD="POST" action="ccm1.php">
<input type="submit" value="+1" name="ajout" />
<input type="hidden" name="nbrEntrees" value= "<?php echo $_SESSION['nbrEntrees'] ?>" />
</form>

<form METHOD="POST" action="ccm1.php">
<input type="submit" value="-1" name="moins">
<input type="hidden" name="nbrSorties" value= "<?php echo $_SESSION['nbrSorties'] ?>" />
</form>

<!-- envoi de la variable post etatProgramme pour la remie a zero -->
<form METHOD="POST" action="ccm1.php">
<input type="submit" value="raz" name="raz" />
<input type="hidden" name="etatProgramme" value= "0" />
</form>
0
dream666 Messages postés 735 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 24 février 2014 104
30 nov. 2011 à 16:17
tout doit être enregistrer en utf-8 et il faut changé la page ccm1.php par le nom de la page creer
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 30/11/2011 à 16:20
Pourquoi tu utilise un type hidden, alors que ton nombre est toujours conservé dans ta session ?

Pour le nombre de places max, suffit d'utiliser une simple variable, ou une constante, pas besoin de la conserver dans une session ..., même chose pour le prix ...
0
dream666 Messages postés 735 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 24 février 2014 104
30 nov. 2011 à 16:25
oui tu as raison , le code n'as pas été optimiser mai seulement tester.
ccm1.php c'est la page dans le quel tu copier tout le code, a toi de changer dans ce code ccm1.php par ta page .php
0
Dream, a quoi correspond "ccm1.php" ?
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
30 nov. 2011 à 16:22
Mets un # a la place !!!
Mais ça servira a rien de copier coller ! tant que tu comprend pas !
0
Justement si je pose la question c'est que je ne comprend pas ;)
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
30 nov. 2011 à 16:30
Ben j'ai expliquer de mon mieux, sinon, va sur le site du zero !!! tout y ait !
et si tu comprend pas quelque chose, alors t'as qu'a demander !
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 30/11/2011 à 16:35
Espérant que t'essayera de comprendre !

<?php  
//---------------------------------------------------------------------------
// POUR LANCER UNE SESSION  
session_start();  

define('MAX_PLACES',100); // Nombre maximum de places  
define('PRIX_TICKET',200); // 200€  
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// SI LA VARIABLE GLOBAL "$_SESSION['nbre_personnes']" N'EXISTE PAS ENCORE, ALORS ON LA CREE ET ON L'INITIALISE A 0  
if(!isset($_SESSION['nbre_personnes'])) $_SESSION['nbre_personnes'] = 0;  
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// SI LE BOUTTON +1 A ETE CLIQUE, ET QUE LE NOMBRE DE PERSONNE N'A PAS ENCORE ATTEINT LE NOMBRE DE PLACES MAXIMUM, ALORS ON INCREMENTE  
if(isset($_POST['+1']) AND $_SESSION['nbre_personnes'] < MAX_PLACES) {  
 $_SESSION['nbre_personnes']++;  
}  

// SINON SI LE BOUTTON -1 A ETE CLIQUE, ET QUE LE NOMBRE DE PERSONNE N'A PAS ENCORE ATTEINT 0, ALORS ON DESCREMENTE  
elseif(isset($_POST['-1']) AND $_SESSION['nbre_personnes'] > 0) {  
 $_SESSION['nbre_personnes']--;  
}  

// SINON SI C'EST LE BOUTTON "REMETTRE A ZERO" QUI A ETE CLIQUE, ALORS ON REMET LE NOMBRE DE PERSONNES A 0  
elseif(isset($_POST['resetTo0'])) {  
 $_SESSION['nbre_personnes'] = 0;  
}  
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// MAX_PLACES-$_SESSION['nbre_personnes'] NOUS DONNE LE NOMBRE DE PLACES RESTANTES  
echo '<div class"info">';  
echo '<span class="info_ligne">Nombre de personnes presentes : '.$_SESSION['nbre_personnes'].'</span>';  
echo '<span class="info_ligne">Nombre de places réstantes : '.(MAX_PLACES-$_SESSION['nbre_personnes']).'</span>';  
echo '<span class="info_ligne">Argent recolte : '.(PRIX_TICKET*$_SESSION['nbre_personnes']).' €</span>';  
echo '</div>';  
//---------------------------------------------------------------------------
?>  
<div class="forms">  
 <form method="POST" action="#">   
  <input type="submit" name="+1" value="+1" />   
 </form>   
   
 <form method="POST" action="#">   
  <input type="submit" name="-1" value="-1" />   
 </form>  
   
 <form method="POST" action="#">   
  <input type="submit" name="resetTo0" value="Remettre a zero" />   
 </form>  
</div>  

<style>  
.info {  
 display:block;  
}  

.info_ligne {  
 border: 1px solid black;  
 padding:5px;  
 display:block;  
 margin:3px;  
 width:300px;  
 text-align:center;  
}  

.forms {  
 border: 1px solid grey;  
 padding:5px;  
 margin:3px;  
 width:300px;  
 text-align:center;   
}  

.forms form {  
 display:inline;  
}  
</style>


Mettez en résolu quand c'est résolu -.- ...
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
30 nov. 2011 à 16:35
essai ca...
<?php
$places=50;
$personnes_parties=0; 
$total_personnes=20;
echo "<pre>";
if (isset($_POST)) {
   print_r($_POST);
   echo "</pre>";
   if(isset($_POST['ajout'])) {
      $total_personnes=$_POST['total_personnes']+1;
      }                               
   if(isset($_POST['moins']))
      {
      $total_personnes=$_POST['total_personnes']-1;
      if(isset($_POST['personnes_parties']))
      { 
        $personnes_parties=$_POST['personnes_parties']-1;
      }
  }
  echo "Personnes présentes dans la salle =".$total_personnes."<br>";
  echo "Somme totale en euros =".($total_personnes*5)."<br>";
}
?>


<form METHOD=POST> 
<input type=submit value="+1" name="ajout"> 
<input type=hidden name=total_personnes value= <?php echo $total_personnes; ?>>

<input type=submit value="-1" name="moins"> 
<input type=hidden name=personnes_parties value= <?php echo $personnes_parties; ?>>

<input type=submit value="raz" name="raz"> 
</form> 
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
Modifié par Fallentree le 30/11/2011 à 16:37
les session ne servent qu en cas de plusieurs pages interactives...
Tu ne peux pas soustraire a une variable post ...
Selon moi du moins ...
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 30/11/2011 à 16:40
Et ben tu te trompe, les session servent a conserver des valeurs jusqu'à leur suppression ou la fermeture du navigateur ...

Je pourrai facilement changer le contenu de tes champs hidden, et fausser les résultats !, tu pense pas ?!
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
Modifié par Fallentree le 30/11/2011 à 16:42
Y a un probleme avec les personnes parties
il faut sortir l initialisation de la boucle ...
Bref, je pense que c est sur la bonne voie ....
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
30 nov. 2011 à 16:45
La boucle ?!
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
30 nov. 2011 à 16:46
voila avec un RAZ
<?php
$places=50;
$personnes_parties=0; 
$total_personnes=20;
echo "<pre>";
if (isset($_POST)) {
   print_r($_POST);
   echo "</pre>";
   if(isset($_POST['ajout'])) {
      $total_personnes=$_POST['total_personnes']+1;
      }
   if(isset($_POST['personnes_parties']))
      { 
        $personnes_parties=$_POST['personnes_parties'];
      }                              
   if(isset($_POST['moins']))
      {
      $total_personnes=$_POST['total_personnes']-1;
      $personnes_parties--;

  }                                                             
if(isset($_POST['raz'])) {
  $personnes_parties=0;
  $total_personnes=0;
  }
  echo "Personnes présentes dans la salle =".$total_personnes."<br>";
  echo "Somme totale en euros =".($total_personnes*5)."<br>";
}
?>


<form METHOD=POST> 
<input type=submit value="+1" name="ajout"> 
<input type=hidden name=total_personnes value= <?php echo $total_personnes; ?>>

<input type=submit value="-1" name="moins"> 
<input type=hidden name=personnes_parties value= <?php echo $personnes_parties; ?>>

<input type=submit value="raz" name="raz"> 
</form> 
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
30 nov. 2011 à 16:50
C est sur que la sucurité peut importer...
Mais pour un Exo de debutant pourquoi se formaliser...
En plus, la securité il faut etre ouvert a internet et avoir quelqu un dans le collimateur ...
Bref ca en fait des cas, Non ???
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
30 nov. 2011 à 16:52
Non :), suffit de dérouler son programme, et de supposer que l'utilisateur ne fait pas ce qu'on attend de lui !

PS :
personnes_parties : FAUX
total_personnes : FAUX

Personnes présentes dans la salle : peut devenir un nombre négatif si on continue de cliquer sur -1 ...
Somme totale en euros : peut devenir un nombre négatif si on continue de cliquer sur -1 ...
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
30 nov. 2011 à 17:01
je suis entrain de passer l exam...
Si un SI est necessaire pour faire beau ..
<?php
$places=50;
$personnes_parties=0; 
$total_personnes=20;
echo "<pre>";
if (isset($_POST)) {
   print_r($_POST);
   echo "</pre>";
   $total_personnes=$_POST['total_personnes'];
   if(isset($_POST['ajout']) and $total_personnes<$places) {
      $total_personnes++;
      }
   if(isset($_POST['personnes_parties']))
      { 
        $personnes_parties=$_POST['personnes_parties'];
      }                              
   if(isset($_POST['moins']) and $total_personnes>0)
      {
      $total_personnes--;
      $personnes_parties--;

  }                                                             
if(isset($_POST['raz'])) {
  $personnes_parties=0;
  $total_personnes=0;
  }
  echo "Personnes présentes dans la salle =".$total_personnes."<br>";
  echo "Somme totale en euros =".($total_personnes*5)."<br>";
if ($total_personnes==$places) echo "salle pleine<br>";
if ($total_personnes==0) echo "salle vide<br>";
}
?>


<form METHOD=POST> 
<input type=submit value="+1" name="ajout"> 
<input type=hidden name=total_personnes value= <?php echo $total_personnes; ?>>

<input type=submit value="-1" name="moins"> 
<input type=hidden name=personnes_parties value= <?php echo $personnes_parties; ?>>

<input type=submit value="raz" name="raz"> 
</form> 
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
30 nov. 2011 à 17:02
Alors ???
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
30 nov. 2011 à 17:12
Ton raz ne fonctionne pas comme il le doit !
$_POST['total_personnes'] n'est pas définie a l'ouverture de la page, donc ça affiche une erreur !
La condition isset($_POST) n'est pas vérifié ...

Pourquoi total_personnes est initialisé a 20, y a personnes a l'ouverture des portes, non ? donc c'est 0 !
0
J'ai un peu du mal a vous suivre, je n'ai commencé le php que depuis 2 jours. Merci a tous de votre aide, j'essaie de comprendre de mon mieux.
0
Wahhhh ça fonctionne super ! Merci beaucoup ! Par contre je n'arrive pas a comprendre ce que j'ai fait comme bêtises par rapport a ton code.
Malgré tout, après deux jours d'apprentissage des bases du php, cet exercice me semble un peu... "velu" !
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 30/11/2011 à 18:30
Relit tout les posts, y a eu 3 solutions a ton exercice, a toi de comparer, et essayer de comprendre !

Si t'as besoin d'aide, n'hésite pas !
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
2 déc. 2011 à 13:27
Alors ????
0