Limiter les réservations de mon formulaire

ecolom Messages postés 68 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 1 décembre 2012 - 22 oct. 2011 à 23:08
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 - 27 oct. 2011 à 21:44
Bonjour,

je suis occupé à créer un formulaire de réservation pour des formations.
j'ai 6 sessions de 12 personnes maximum.
Seulement voilà, pour l'instant je passe mon temps à compter les réservations effectuées en ligne en espérant ne pas avoir une 13ème qui m'obligerait à contacter les users pour annulation.
J'aimerai adapter un compteur et dès que le nombre de personne est atteint pour une réservation, il indique un message de type popup afin d'inviter le user à choisir une autre date.
euh..par écrit c'est super mais pour le programmer c'est galère.....
Je ne vois pas trop comment inscrire un code qui vérifie dans ma Db le nombre d'inscrit.
Ci-dessous le code actuel.
SI vous avez une idée, un exemple concret, je suis preneur.
Merci pour votre aide.

 <?php
      include("./include/param.inc.php");
    // Creation des variables des zones de la page
$date_encodage = mysql_real_escape_string($_REQUEST['date_encodage']);
    $date_reservation = mysql_real_escape_string($_REQUEST['date_reservation']);
$nom_users = mysql_real_escape_string($_REQUEST['name_users']);
    $email_users = mysql_real_escape_string($_REQUEST['email_users']);

// Verifie que les zones date de reservation etnom soient remplies
if ($_REQUEST['date_reservation'] != "" and $_REQUEST['name_users'] != "")
        {
$sql1 = "SELECT * FROM int_org WHERE nom_users='$nom_users'";
$req1 = mysql_query ($sql1) or die ('erreur sql
'.$sql1.'
'.mysql_error());

//vérifie si le nombre de lignes trouvées est 0 si oui, c'est que ce pseudo n'est pas encore utilisé> ok
if(mysql_num_rows($req1) == 0)
{
$sql2 = "INSERT INTO int_org (date_encodage,
  date_reservation,
  nom_users,
  email_users							
  )											
VALUES('$date_encodage',
   '$date_reservation',	
   '$nom_users',
   '$email_users'
   )";	
$req2 = mysql_query($sql2) or die('Erreur SQL : 
'.$sql2);
 } 	// fin du if pseudo existe déjà
 else
{
?>
  <script language="JavaScript">
     alert("Une réservation existe déjà à votre nom. \n Si vous désirez changer de date, veuillez contacter Kathy \n A booking already exists in your name. \n If you want to change the date, please contact Kathy ");
     window.location.replace("index.php");// On inclut le formulaire d'identification
  </script>
    <?php
   } 
   }  // fin du else
      // Select pour preparer l affichage du contenu de la DB
$result=mysql_query("SELECT * FROM int_org order by date_reservation ASC,nom_users DESC");	
$i=0;
while( $row=mysql_fetch_array($result) ) 
{			 		
      if($i>0)
  {
 			   
    echo "<tr valign=bottom>";
    echo "<td bgcolor=#3333CC background='./images/strichel.gif' colspan=6 width=1 height=1></td>";
    echo "</tr>";
      }	 
  { 
    echo "<tr height=20 valign=center>";
echo "<td align=center> ".$row['date_reservation']."</td>";
    echo "<td align=center> ".$row['nom_users']."</td>";
    echo "<td align=center> ".$row['email_users']."</td>";
    echo "<td class=tabval></td>";
    echo "</tr>";
    $i++;
  } 
}
 mysql_close();
    ?>

7 réponses

NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
23 oct. 2011 à 01:26
Bonjour,

Tu peux faire un SELECT :
SELECT COUNT(*) FROM MaTable WHERE MaDateSession='yyyy-mm-dd hh:mm:ss'

Ensuite, tu vérifies le résultat retourné qui contiendra le nombre de réservation en cours.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
ecolom Messages postés 68 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 1 décembre 2012
23 oct. 2011 à 12:22
Hello,

merci NHenry,

pour le count j'y ai pensé mais je suis confronté à un message qui ne me donne pas de résultat (Resource id #6)
Pour mon test, j'essaie simplement de capturer le nombre de réservation et de l'afficher sur ma page. ça bloque déjà... pfff
Dans la seconde partie de mon test, je dois effectuer un calcul afin de signaler via un message que la formation est complète. Et là, dur dur pour moi car débutant je suis.


// Verifie que les zones date de reservation etnom soient remplies
if ($_REQUEST['date_reservation'] != "" and $_REQUEST['name_users'] != "")
        {

$session = "SELECT COUNT(*) FROM int_org WHERE num_form='$date_reservation'";

$recordcount = mysql_query ($session) or die ('erreur sql
'.$session.'
'.mysql_error());
echo $recordcount;


Merci pour l'aide que vous pouvez m'apporter.
0
cs_nemo_1 Messages postés 60 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 26 octobre 2011
23 oct. 2011 à 13:50
Chalute,

Pensez à lire php.net les functions un peu car l'aide sur linternet est la pour cela.

Le deboggage fait partie de la programmation fait un minimum de recherche et tu trouveras bcp plus facilement.

Ton erreur te dit que tu as une ressource normal car mysql_query renvoit une RESSOURCE :)

Pour voir son contenu, tu es obligé de faire un mysql_fetch_assoc/array et tu auras le count que tu voudras.

voilà comment tu doit proceder:

L'utilisateur veux s'enregistrer pour une date:

1. Avant toute chose tu regarde le count de cette date
2. if($count<12){
//Tu enregistre sa demande
}else{
//Demande refusé
$message = "dslé voili voilou tu affiches ici ce que tu veux";
}
3. Avant l'affiche du formulaire (peut etre en haut tu peux afficher ton message comme suit):
<?php if(!empty($message)){ echo "{$message}
"; } ?>

j'espère t'avoir aidé.

La prochaine fois:

Quand tu as un problème de logique, tu peux venir sur un forum ou cherché un peu.

Quand tu as un problème d'erreur php/mysql essaie dabord de voir qu'est ce qui cloche, est ce normal ou pas, la fonction utilisée ...

Si vraiment tu ne trouves rien on t'aideras volontier :).

Bon courage
0
ecolom Messages postés 68 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 1 décembre 2012
23 oct. 2011 à 23:33
Merci Nemo_1

Je passe bcp de temps dans les livres, tutoriaux et forums mais parfois on peut lire cinquante fois la même chose et ne pas le comprendre. C'est mon cas pour les conditions compliquées.

J'ai fini par trouver le code qui me permet de vérifier le nombre de réservation via l'interrogation de la DB.
PAr contre, je ne m'en sort pas avec ma double condition dans mon programme.
En fait j'ai deux conditions spécifiques.
La première doit vérifier dans la db le nombre de réservation et ne pas dépasser 12 personnes.
Si ok, MAJ de mon formulaire dans ma DB et sinon message à l'écran ( javascript dans mon exemple )
La deuxième doit vérifier dans la DB si le user qui s'inscrit existe déjà.
Si n'existe pas MAJ dans la DB et si déjà inscrit, message à l'écran avec retour sur le formulaire ( javascript dans mon exemple)
Pour une condition ça va mais les deux, c'est le fiasco total.

Cela fait + de 3 heures que je tourne en rond a essayer les if else elseif et je n'obtiens pas de résultat à 100%
Qui a -t-il dans mon code qui empêche les deux conditions de fonctionner?
Ou que manque-t-il pour que cela fonctionne.

// Verifie que les zones date de reservation et nom soient remplies
if ($_REQUEST['date_reservation'] != "" and $_REQUEST['name_users'] != "")
        {

$sql = "SELECT * FROM int_org WHERE num_form='$date_reservation'";
$resultat = mysql_query ($sql)or die ('erreur sql
'.$sql.'
'.mysql_error());
if (mysql_num_rows($resultat) < 12)

{
$sql2 = "INSERT INTO int_org (date_encodage,
  date_reservation,
  num_form,
  nom_users,
  email_users							
  )											
VALUES('$date_encodage',
   '$date_reservation',
   '$date_reservation',
   '$nom_users',
   '$email_users'
   )";	
$req2 = mysql_query($sql2) or die('Erreur SQL : 
'.$sql2);
                // -----------------------------------------------------------------------------------------------------------------------------------	
// Email envoyé à EC pour verification DB
// -----------------------------------------------------------------------------------------------------------------------------------	
   } 	// fin du if nom existe déjà
else	

{
     ?>
  <script language="JavaScript">
     alert("La session que vous avez choisis est complète. \n ");
     window.location.replace("index.php");// On inclut le formulaire d'identification
  </script>
 <?php
} 

$sql1 = "SELECT * FROM int_org WHERE nom_users='$nom_users'";
$req1 = mysql_query ($sql1) or die ('erreur sql
'.$sql1.'
'.mysql_error());

//vérifie si le nombre de lignes trouvées est 0 si oui, c'est que ce nom n'est pas encore utilisé> ok 

if(mysql_num_rows($req1) == 0)
{
$sql2 = "INSERT INTO int_org (date_encodage,
  date_reservation,
  num_form,
  nom_users,
  email_users							
  )											
VALUES('$date_encodage',
   '$date_reservation',
   '$date_reservation',
   '$nom_users',
   '$email_users'
   )";	
$req2 = mysql_query($sql2) or die('Erreur SQL : 
'.$sql2);
                // -----------------------------------------------------------------------------------------------------------------------------------	
// Email envoyé à EC pour verification DB
// -----------------------------------------------------------------------------------------------------------------------------------	
   } 	// fin du if nom existe déjà
 else
{
?>
  <script language="JavaScript">
     alert("Une réservation existe déjà à votre nom. \n Si vous désirez changer de date, veuillez contacter Kathy \n A booking already exists in your name. \n If you want to change the date, please contact Kathy ");
     window.location.replace("index.php");// On inclut le formulaire d'identification
  </script>
    <?php
   } 
   }  // fin du else


Votre aide serait la bienvenue car j'ai sorti mes grandes rames.
Merci
0

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

Posez votre question
cs_nemo_1 Messages postés 60 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 26 octobre 2011
24 oct. 2011 à 11:31
Chalute,

Voilà ce que je te suggère:
<?php
    //Verifier si on a pas atteint les 12 inscriptions
    $query "SELECT count(date) FROM ta_table_ici WHERE date $_POST['date']";
    $count_set = mysql_query($query);
    $count = mysql_fetch_assoc($count_set);
    $count = array_shift($count);//Pour avoir le contenu de ton tableau car tu
    aura un truc du genre array(0 => le count);
    if($count<12){
       $query "SELECT count(email_users) FROM tatable WHERE email_user
          $_POST['email'];
       $user_exists_set = mysql_query($query);
       $user_exists = mysql_fetch_assoc($user_exists_set);
       $user_registred = array_shift($user_exists);
       if($user_registred == 1){
          //C'est OK tu peux l'enregistrer
       }else{
          //C'est NOK tu peux faire comme ceci
          $message = "Vous etes deja enregistre pour cette formation";
       }

?>                                                


Bon tu regarde dabord si il ya de la place pour ce reserver.
Après on regarder si le user est deja enregistrer.
Si non, ben tu lenreistre.
S'il est deja enregistrer tu lui affiche le message en prenant bien soin de
faire un test sur la variable message pour voir s'il existe ou pas.

Jespère que c'est clair je suis au travail je peux pas faire plus pour le
moment :)
0
ecolom Messages postés 68 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 1 décembre 2012
26 oct. 2011 à 23:54
[code=php]
/codeBonsoir nemo_1,
j'ai réadapté mon code avec tes conseils bien que je désire avoir un message séparé pour mes deux conditions. EN ce qui concerne le ELSE, il doit mettre à jour ma DB
Ci-dessous mobn code.
Il fonctionne presque....
Quand un user veut réserver une date alors qu'il s'est déjà renregistré, le message apparait pour signaler qu'il y a déjà une réservation à son nom. OK
Quand un user choisis une date alors que la session de formation est complète ( 12 users dans mon exemple ) un message apparait et signale que la session est complète. Malheureusement, pour une raison que j'ignore, il fait quand même la mise à jour de la db et dépasse le nombre de users prévu.
Pourtant mon message reinitialise la page et à ma connaissance la fonction Else ne s'active que si les deux conditions sont bonnes.
Qu'est-ce qui bloque dans ce que j'ai écrit ?

Merci pour l'aide que vous voudrez bien m'apporter.

// Verifie que les zones date de reservation et nom soient remplies
if ($_REQUEST['date_reservation'] != "" and $_REQUEST['name_users'] != "")
{
$sql = "SELECT count(*) as nombre FROM int_org WHERE num_form='$date_reservation'";
$resultat = mysql_query ($sql);
$data = mysql_fetch_assoc($resultat);
if ($data['nombre'] > 12) 

{
?>
<script language="JavaScript">
alert("La session est complète \n Veuillez choisir une autre date");
window.location.replace("index.php");
</script>
<?php
}
$sql1 = "SELECT count(*) as nombre FROM int_org WHERE nom_users='$nom_users'";
$req1 = mysql_query ($sql1);
$data = mysql_fetch_assoc($req1);
//vérifie si le nombre de lignes trouvées est 0 si oui, c'est que ce pseudo n'est pas encore utilisé> ok
if($data['nombre'] != 0) 
{
?>
<script language="JavaScript">
alert("Une réservation existe déjà à votre nom. \n Si vous désirez changer de date, veuillez contacter Kathy \n A booking already exists in your name. \n If you want to change the date, please contact Kathy");
window.location.replace("index.php");
</script>
<?php
}
else
{			
$sql2 = "INSERT INTO int_org (date_encodage,
  date_reservation,
  num_form,
  nom_users,
  email_users							
  )											
VALUES('$date_encodage',
   '$date_reservation',
   '$date_reservation',
   '$nom_users',
   '$email_users'
   )";	
$req2 = mysql_query($sql2) or die('Erreur SQL : 
'.$sql2);
}
}
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
27 oct. 2011 à 21:44
Bonjour,

As-tu mis un exit(); pour demander d'arrêter le code ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0