UPDATE sql

Mammouth du PHP | 687 Messages

25 août 2011, 12:11

Bonjour à tous,
je voulais savoir comment il était possible de faire un update sur ma table sql pour réduire les places disponibles par le nombre de places sélectionnées.
1ere page affichage = Page de l'événement avec choix du nombre de places, dès que la personne choisi le nombre de palce la base est updaté automatiquement
exemple: il y a 10 places disponibles, la personne choisie 2 places, la page affiche donc 10 places restantes
Pour réserver on clique sur le bouton réservation
2ème page affichage = Page enregistrement coordonnées avec compteur places disponibles

Les deux pages sont déjà créées, ce que je ne sais pas faire c'est mettre à jour la base lorsque la personne a sélectionné le nombre de place pour pouvoir afficher ensuite le nombre de place restantes.

Est-ce que quelqu'un peut me donner le schéma à suivre s'il vous plait?

Merci par avance.

Cordialement.

Eléphant du PHP | 73 Messages

25 août 2011, 13:37

c'est pas clair du tout ton truc

peux-tu un peu nous expliquer ton projet ? et montrer en partie ta base et tes champs ?

c'est pas plutôt 8 places restantes que tu veux dans ton exemple ? (plutôt que 10)

c'est juste une valeur dans une table (10 par exemple), que tu réduit quand une personne prend X places ?

par exemple 10 places libre, une personne réserve 4 places, il en reste donc 6 libres ?

si c'est le cas, c'est juste un update de base :
// ex compteur de places libres
$anciennes_places = 'SELECT champ_nombre_places FROM table';
$exec_anciennes_places = mysql_query($anciennes_places);
$result_anciennes_places = mysql_result($exec_anciennes_places, 0);

// reservation
$places_reservees_client = '4'; (récup du formulaire par exemple)

// mise à jour des places libres
$nouvelles_places = $result_anciennes_places - $places_reservees_client;    // 10-4 = 6
$maj_places = 'UPDATE table SET champ_nombre = "'.$nouvelles_places.'"';
mysql_query($maj_places);
ou un truc du genre..

Mammouth du PHP | 687 Messages

25 août 2011, 13:45

C'est exactement ça... ;-)
Cers vrai que ce c'était pas très clair.

En gros lorsqu'une personne prends 4 places par exemple et qu'il y a 10 places de dispos alors le fait de choisir les 4 places la base est mise à jour et indique 6 places au lieu des 10 du départ.
Ensuite un compteur indique le nombre de places dispos après que la personne ai choisi ses places....

Merci beaucoup.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 août 2011, 14:35

Pour mettre à jour ta base, il te suffit d'un simple :
'UPDATE ta_table SET ton_champ = ton_champ - ' . $places;
En supposant que $places contienne le nombre de place réservées par l'utilisateur, cela va automatiquement déduire le nombre de places réservées de la valeur que tu as en base :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 687 Messages

25 août 2011, 18:24

Merci.

Comment faire pour que sur ma page l'utilisateur choisisse le nombre de place et que le nombre de place se déduise tout de suite de la base?

du style:
Je choisis par menu déroulant (qui indique le nombre de places dispos, 10 places par exemple) le nombre de places que je souhaite prendre, lorsque je sélectionne 3 place par exemple et que je valide par un bouton "je réserve" alors la base n'affiche plus que 7 places disponibles...

Ma table se nomme "articles" et le champs "stock"

Merci par avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 août 2011, 18:38

Si tu veux le faire en direct sans recharger la page, il te faut utiliser ajax. Sinon, un simple formulaire que tu envoi lorsque l'utilisateur change la valeur du select peut faire l'affaire.

Quant à la façon de faire... ben ça dépend du nom du champ qui contient la valeur et de la façon dont le formulaire est envoyé (get ou post). Quand tu as récupéré la valeur saisie par l'utilisateur et fait les contrôles nécessaire, il te suffira alors de faire un update sur ta base en utilisant la requête si dessus en remplaçant le nom de la table par le nom de ta table, le nom du champ par le nom de ton champ et la valeur php par ta valeur php, et d'exécuté la requête générée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 687 Messages

25 août 2011, 18:54

Voici le formulaire qui permet de choisir son nombre de places...
<?php
$conn = db_connect();
$sql_stock = "select * from articles";
$result = mysql_query($sql_stock, $conn);
?>

<table border="0" cellspacing="0" cellpadding="0" width="100%" align="center">
<tbody>
<tr>
<td valign="top"><form action="envoi_mail.php" method="post"><input type="hidden" name="PHPSESSID" value="afa8d94cae1cee57e0c41f69b8956642" /> 

<table border="0" cellspacing="1" cellpadding="1" width="100%" align="center">
<tbody>
</tbody>
<tbody>
<tr>
<td class="bold">Nom</td>
<td><input id="nom" name="nom" size="35" type="text" /></td>
<td>&nbsp;</td>
<td style="border-left-color: #333333;" rowspan="6" valign="top">&nbsp;</td>

</tr>
<tr>
<td class="bold">Pr&eacute;nom</td>
<td><input id="prenom" name="prenom" size="35" type="text" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td class="bold">Votre E-mail</td>
<td><input name="expediteur" size="35" type="text" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td class="bold">Combien de places?</td>
<td><input name="places" size="35" type="text" id="places" />  </td>

<?php while ($affiche = mysql_fetch_array($result)) { ?>
<td> <?php echo $affiche[stock] ?> </td>
  <?php } ?>
  
</tr>

<tr>
<td><input name="hidden" size="35" type="hidden" /></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>

<tr>
<th colspan="4" align="left"><input type="submit" value="Envoyer" /></th>
</tr>
<tr>
<td>&nbsp;</td>
</tr>

</tbody>
<tbody>
</tbody>
</table>
</form></td>
</tr>
</tbody>
</table>
Maintenant que j'ai le formulaire qui affiche le nombre de place dispos, l'utilisateur peut taper lui même le nombre de places qu'il souhaite...
Dès qu'il clique sur "envoyer" la base est mise à jour et retire le nombre de place que l'utilisateur a choisi.

Questions:
Comment faire l'update avec 'UPDATE ta_table SET ton_champ = ton_champ - ' . $places; ?
Comment faire en sorte que l'utilisateur soit prévenu s'il a choisi plus de places que ce qu'il y a de dispo...?
Merci beaucoup.
De même ce formulaire sera envoyé en même temps par mail " envoi_mail.php (que j'ai déjà constuit), je suppose que le SET UPDATE doit se mettre dans ce fichier?

Merci. :)

Mammouth du PHP | 687 Messages

26 août 2011, 13:50

Bonjour,
Personne ne sait?

Mammouth du PHP | 687 Messages

26 août 2011, 15:26

Voici ce que j'ai essayé de faire mais la mise à jour ne se fait pas...
Quelqu'un pour m'aider?

Merci

FORMULAIRE:
<?php
$conn = db_connect();
$sql_stock = "select * from articles";
$result = mysql_query($sql_stock, $conn);
?>

<table border="0" cellspacing="0" cellpadding="0" width="100%" align="center">
<tbody>
<tr>
<td valign="top"><form action="envoi_mail.php" method="post"><input type="hidden" name="PHPSESSID" value="afa8d94cae1cee57e0c41f69b8956642" />

<table border="0" cellspacing="1" cellpadding="1" width="100%" align="center">
<tbody>
</tbody>
<tbody>
<tr>
<td class="bold">Nom</td>
<td><input id="nom" name="nom" size="35" type="text" /></td>
<td>&nbsp;</td>
<td style="border-left-color: #333333;" rowspan="6" valign="top">&nbsp;</td>

</tr>
<tr>
<td class="bold">Pr&eacute;nom</td>
<td><input id="prenom" name="prenom" size="35" type="text" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td class="bold">Votre E-mail</td>
<td><input name="expediteur" size="35" type="text" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td class="bold">Combien de places?</td>
<td><input name="places" size="35" type="text" id="places" />  </td>

<?php while ($affiche = mysql_fetch_array($result)) { ?>
<td> <?php echo $affiche[stock] ?> </td>
  <?php } ?>
 
</tr>

<tr>
<td><input name="hidden" size="35" type="hidden" /></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>

<tr>
<th colspan="4" align="left"><input type="submit" value="Envoyer" /></th>
</tr>
<tr>
<td>&nbsp;</td>
</tr>

</tbody>
<tbody>
</tbody>
</table>
</form></td>
</tr>
</tbody>
</table>
 
FICHIER pour le post du formulaire:
<?php

//--------les includes des fonctions permettent le bon fonctionnement du site-------------- 
include "include_fns.php";
//-----------------------------------------------------------------------------------------

//---------------- recuperation des variables par la methode POST -------------------------
 $expediteur = stripslashes($_POST['expediteur']);
 $nom = stripslashes($_POST['nom']);
 $prenom = stripslashes($_POST['prenom']);
 $places = stripslashes($_POST['places']);


//-----------------------------------------------------------------------------------------

//---------------si les variables n'existe pas afficher message information----------------
    if (!$expediteur || $_POST['hidden'])
  {
    echo "<h1>".IMPOSSIBLE_ENVOYER_MESSAGE."</h1>";
    echo "<div id=\"message\">".IMPOSSIBLE_DE_POURSUIVRE." !";
    echo "<br />[  <a href=\"javascript:history.back()\">".RETOUR."</a>  ]</div><br />";
//-----------------------------------------------------------------------------------------
 
//----------------connexion db et insertion dans la table commandes-----------------------
	//ajout de l'ecotaxe au prix d'achat


   	//if ($result) {
	   	//requete pour verifier la quantite existante en stock
	  	$conn = db_connect();
	  	$sql_stock = "select * from ".ARTICLES."";
	  	$result_stock = mysql_query($sql_stock, $conn);
	  	$stock_existant = mysql_fetch_array($result_stock);
	  	$reste = $stock_existant[stock] - $places;

	   	//reservation de l'article par l'utilisateur
	    	$conn = db_connect();
	    	$sql_id = "update articles set stock = $reste ";
	    	$result_id = mysql_query($sql_id, $conn);
 

//------------------------affichage du bas de page ----------------------------------------
    include "bas.php";	
    exit();
  }
  
  

//------------------------------------ Envoi du mail --------------------------------------
 $header = "MIME-Version:1.0" . "\r\n" ;
 $header .= "Content-Type:text/html;charset=ISO-8859-1" . "\r\n";
 // more Header
 $header .= "From: $expediteur" . "\r\n" ;

     if (@mail($to, $objet, $message, $header))
    {
      echo "<h1>".CONFIRMATION_MESSAGE_ENVOYER."</h1>";
      echo "<div id=\"message\">".CONFIRMATION_MESSAGE_ENVOYER_TEXTE."<br />";
      echo "[  <a href=\"index.php\">".RETOUR."</a>  ]</div><br />";
//-----------------------------------------------------------------------------------------

//------------------------------affichage du bas de page ----------------------------------
      include "bas.php";
      exit();	
    }
//-----------------------------------------------------------------------------------------

//-------------------------------- si echec de l'envoi ------------------------------------
     else
    {
      echo "<h1>".IMPOSSIBLE_ENVOYER_MESSAGE."</h1>";
      echo "<div id=\"message\">".IMPOSSIBLE_ENVOYER_MESSAGE." !!!<br />";
      echo "[  <a href=\"javascript:history.back()\">".RETOUR."</a>  ]</div><br />";
//-----------------------------------------------------------------------------------------

//--------------------------------affichage du bas de page --------------------------------
      include "bas.php";
      exit();
    }
//-----------------------------------------------------------------------------------------
?>


Mammouth du PHP | 687 Messages

26 août 2011, 22:50

Personne pour m'aider?
:(

Mammouth du PHP | 2278 Messages

27 août 2011, 17:03

Bonjour à tous un peu reformulé
je voudrais savoir comment il est possible de faire un update sur ma table sql pour réduire les places disponibles du nombre de places sélectionnées.

1ere page affichage = Page de l'événement avec choix du nombre de places, dès que la personne choisit le nombre de places la base est mise à jour automatiquement
2ème page affichage = Page enregistrement coordonnées avec compteur de places disponibles
exemple:
page 1
il y a 10 places disponibles,
la page affiche 10 places restantes
la personne choisit 2 places,
Pour réserver on clique sur le bouton réservation
page 2 supposée par moi
demande d'adrese, etc ET affichage de 8 places disponibles dans l'exemple
Les deux pages sont déjà créées, ce que je ne sais pas faire c'est mettre à jour la base lorsque la personne a sélectionné le nombre de places pour pouvoir afficher ensuite le nombre de place restantes.

Est-ce que quelqu'un peut me donner le schéma à suivre s'il vous plait?

Merci par avance.

Cordialement.
Sur la page 1, comme on affiche le nombre de places restantes, en modifiant un peu ton code: en espérant que min et max qui sont dans la norme soient reconnus un jour
$anciennes_places = 'SELECT champ_nombre_places FROM table';
$exec_anciennes_places = mysql_query($anciennes_places);
$result_anciennes_places = mysql_result($exec_anciennes_places, 0);
$nb_restantes = mysql_num_rows($result_anciennes_places);
<input type= 'text' name ='nb_restantes' readonly = 'readonly' value = '$nb_restantes' />
<input type='number' name ='nb_reservees' min='1'  max= '$nb_restantes'  />
sur la page 2 il faut récupérer le nombre restant et le nombre réservé, s'assurer que la nombre réservé est positif et inférieur ou égal au nombre restant puis balancer une requete de ce genre
$requete = "UPDATE 'corrida' set `nb_places`= `nb_places' - $nb_reservees";
Une autre solution serait de créer un select sur la page 1 avec une boucle de 1 à nb_restantes

Quand on connait le nombre de places réservées c'est un
$nombre_reserve = $_POST['nombre_reserve'];

UPDATE 'corrida' set `places
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Mammouth du PHP | 687 Messages

28 août 2011, 01:54

Bonsoir,
Merci pour ta réponse...
Je vais tester ça et reviens vers toi pour te donner le résultat.

Merci. :)

Mammouth du PHP | 687 Messages

28 août 2011, 13:55

Bonjour,
je viens de tester et malheureusement ça ne fonctionne pas... :(
du coup je ne sais pas comment faire...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 août 2011, 14:40

"Ca ne fonctionne pas" n'est pas ce qu'il y a de plus explicite comme message d'erreur pour pouvoir identifier et corriger le problème...

La requête de sirakawa contient quelques erreurs assez facile à corriger :
$requete = "UPDATE 'corrida' set `nb_places`= `nb_places' - $nb_reservees";
- Si corrida est un nom de table et pas une chaine de caractères, il ne faut pas d'apostrophes autour
- Si l'on ouvre une apostrophe tordue spécifique à mysql avant le nom du champ nb_places (le 2ème), il faut la fermer après le nom du champ nb_places

Après, y a peut être d'autres problèmes, mais faute de plus d'information, j'ai pas cherché...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 2278 Messages

29 août 2011, 08:18

"Ca ne fonctionne pas" n'est pas ce qu'il y a de plus explicite comme message d'erreur pour pouvoir identifier et corriger le problème...

La requête de sirakawa contient quelques erreurs assez facile à corriger :
$requete = "UPDATE 'corrida' set `nb_places`= `nb_places' - $nb_reservees";
- Si corrida est un nom de table et pas une chaine de caractères, il ne faut pas d'apostrophes autour
- Si l'on ouvre une apostrophe tordue spécifique à mysql avant le nom du champ nb_places (le 2ème), il faut la fermer après le nom du champ nb_places

Après, y a peut être d'autres problèmes, mais faute de plus d'information, j'ai pas cherché...
$requete = "UPDATE `corrida` set `nb_places`= `nb_places` - $nb_reservees";
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD