login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Variabelen optellen in een qry

Offline finduilas - 16/07/2006 06:11
Avatar van finduilasPHP gevorderde Hallo;

Ik zou graag geld optellen met een bepaald bedrag.Normaal dacht ik dus geld=geld+"'$_POST['bedrag']'" maar dit werkt dus niet echt.Weet iemand hoe het wel moet?(Quotes?)

13 antwoorden

Gesponsorde links
Offline roelh - 16/07/2006 08:03
Avatar van roelh PHP gevorderde
  1. geld=geld+"'$_POST['bedrag']'"


moet dan zijn:

  1. geld=geld+'".$_POST['bedrag']."'


weet niet of gaat werken, probeer maars 
Offline rickwieman - 16/07/2006 13:12 (laatste wijziging 16/07/2006 13:15)
Avatar van rickwieman Onbekend
  1. <?php
  2. $geld = $geld . $_POST['bedrag'];
  3. ?>


Ontani edit: Ook al zo goed bezig als JeXuS en ik. der staat in de titel variabele optellen in een QUERY. Daarbij telt uw ding niet eens op maar voegt het er achteraan toe...
Offline Rens - 16/07/2006 13:16
Avatar van Rens Gouden medaille

Crew algemeen
@roelh, quotes om een getal hoeft niet.
  1. geld=geld+".$_POST['bedrag']."

is dus genoeg.
Let wel op de veiligheid e.d. hè...
PHP.net: mysql_escape_string
Offline finduilas - 16/07/2006 20:44 (laatste wijziging 16/07/2006 20:45)
Avatar van finduilas PHP gevorderde @Rensjuh: Ik moet toch geen mysql_escape_string doen als ik check of het numeric is?

En wat je zei: ".$_POST['bedrag']." had ik al.Maar het was vroeg en ik had de . ten vergeten.

http://plaatscode.be/1334/
Offline Maarten - 16/07/2006 20:49
Avatar van Maarten Erelid Dan is dat inderdaad niet nodig. Je moet dus gewoon de enkele quotes weglaten.
Offline Rens - 16/07/2006 21:13
Avatar van Rens Gouden medaille

Crew algemeen
@finduilas, als je dat is_numeric gebruikt hoeft dat inderdaad niet.
Maar er stond nergens dat je is_numeric gebruikte, dus zei ik het er maar even bij voor de zekerheid 
Offline finduilas - 16/07/2006 21:42 (laatste wijziging 16/07/2006 21:50)
Avatar van finduilas PHP gevorderde Noproblem ,Bedankt dat je me helpt .

Maar ik heb nog geen oplossing .
http://plaatscode.be/1337/ (1337 )

Vorige code in me vorige post niet meer na kijken.Het was vroeg en ik heb het verkeerde gekopieerd .Maar het was toch hetzelfde probleem.
Offline Maarten - 16/07/2006 21:57 (laatste wijziging 17/07/2006 00:28)
Avatar van Maarten Erelid Doe eens
  1. <?php
  2. if(is_numeric($_POST['bedrag'])) {
  3. if($_POST['bedrag'] > $arr['geldcontant']) {
  4. echo 'Je hebt niet zoveel geld contant.';
  5. } else {
  6. mysql_query("UPDATE leden SET geldbank = geldbank + ".$_POST['bedrag'].", geldcontant = geldcontant - ".$_POST['bedrag']." WHERE username = ".$username) or die(mysql_error());
  7. echo 'Je hebt succesvol je geld op de bank gezet.';
  8. }
  9. } else {
  10. echo 'Je moet een GETAL invullen!';
  11. }
  12. ?>

Is het trouwens niet intressanter om een aantal functies te maken..
Ik veronderstel dat het over zo'n maffia gedoe gaat:
transactie($bedrag, $gebruiker, $actie)
Bijvoorbeeld
Iets kopen
transactie(200, 1, TRANSACTIE_UIT);
Iets verkopen
transactie(200, 1, TRANSACTIE_IN);
Geld op de bank zetten
transactie(200, 1, TRANSACTIE_NAAR_BANK);
Geld van bank naar contant
transactie(200, 1, TRANSACTIE_NAAR_CONTANT);

En voor die functie moet je dan die constanten (TRANSACTIE_IN, ...) aanmaken, een getal aan toewijzen, en binnen de functie kan je dan iets doen à la
switch($actie) {
case 1: geld weg
case 2: geld bij
...
}

edit: uit de losse pols, kan zijn dat dit een parse error geeft maar het gaat om het idee:
  1. <?php
  2. define('TR_IN', 1);
  3. define('TR_UIT', 2);
  4. define('TR_NAAR_BANK', 3);
  5. define('TR_NAAR_CASH', 4);
  6.  
  7. function transactie($bedrag, $gebruiker, $actie) {
  8. $q = "UPDATE leden SET ";
  9. switch($actie) {
  10. case 1:
  11. $q .= "geldcontant = geldcontant + ".$bedrag;
  12. break:
  13. case 2:
  14. $q .= "geldcontant = geldcontant - ".$bedrag;
  15. break;
  16. case 3:
  17. $q .= "geldcontant = geldcontant - ".$bedrag.", geldbank = geldbank + ".$bedrag;
  18. break;
  19. case 4:
  20. $q .= "geldcontant = geldcontant + ".$bedrag.", geldbank = geldbank - ".$bedrag;
  21. break;
  22. }
  23. $q .= " WHERE id = ".$gebruiker;
  24. /*
  25.   Die error haal je best weg in de live versie dan, en vervang je dan door dit:
  26.   if(mysql_query($q)) {
  27.   return true;
  28.   }
  29.   return false;
  30.   */
  31. }
  32. ?>

nog eens edit: ik zie net dat ik een spatie vergeten ben 
Offline xSc - 17/07/2006 07:26
Avatar van xSc Onbekend Ik zou om $_POST['bedrag'] een functie gebruiken als floatval() o.i.d.
Offline finduilas - 17/07/2006 09:00 (laatste wijziging 17/07/2006 10:12)
Avatar van finduilas PHP gevorderde Dat is inderdaad handig.Had daar nog niet op gedacht.Ik zal het eens proberen .

Ik heb die functie wat aangepast.Maar nu zit ik met een probleem.Ik gebruik variabelen die er enkel zijn als je ingelogd bent.Dus zou die enkel mogen worden uitgevoerd als je ingelogd was.Maar ik las ergens iets over functies en dat je deel functies kunt maken.
Vb: function mens(){
function slaap(){}
function eten(){}
}

Zoiets zou ik ook moeten maken of is dit niet de juiste manier?
  1. <?php
  2. //funtie is_logged_in
  3. function is_logged_in()
  4. {
  5. global $_SESSION;
  6.  
  7. if (!IsSet($_SESSION['userid']))
  8. {
  9. return (0);
  10. }
  11.  
  12. return (1);
  13. }
  14.  
  15. $username = $_SESSION['username'];
  16. $query = mysql_query("SELECT * FROM leden WHERE username='".$username."'");
  17. while ($arr = mysql_fetch_assoc($query)) {
  18. define('TR_IN', 1);
  19. define('TR_UIT', 2);
  20. define('TR_NAAR_BANK', 3);
  21. define('TR_NAAR_CASH', 4);
  22. function transactie($bedrag, $username, $actie) {
  23. $q = "UPDATE leden SET ";
  24. switch($actie) {
  25. case 1:
  26. $q .= "geldcontant = geldcontant + ".$bedrag;
  27. break;
  28. case 2:
  29. if($bedrag > $arr['geldcontant'])
  30. {
  31. echo 'Zoveel geld heb je niet';
  32. }
  33. else
  34. {
  35. $q .= "geldcontant = geldcontant - ".$bedrag;
  36. }
  37. break;
  38. case 3:
  39. if($arr['geldbank'] != '0')
  40. {
  41. echo'Je moet eerst al het geld van je bank nemen';
  42. }
  43. elseif($arr['geldcontant'] < $bedrag)
  44. {
  45. echo'Zoveel geld heb je niet contant';
  46. }
  47. else
  48. {
  49. $q .= "geldcontant = geldcontant - ".$bedrag.", geldbank = geldbank + ".$bedrag;
  50. }
  51. break;
  52. case 4:
  53. if($arr['geldbank'] < $bedrag)
  54. {
  55. echo'Zoveel geld heb je niet op je bank';
  56. }
  57. else
  58. {
  59. $q .= "geldcontant = geldcontant + ".$bedrag.", geldbank = geldbank - ".$bedrag;
  60. }
  61. break;
  62. }
  63. $q .= " WHERE id = ".$username;
  64. /*
  65.   Die error haal je best weg in de live versie dan, en vervang je dan door dit:
  66.   if(mysql_query($q)) {
  67.   return true;
  68.   }
  69.   return false;
  70.   */
  71. }
  72. }
  73. ?>


Dit heb ik nu (dat van murfy een beetje uitgebreid dan + mijn function is_logged_in)
Offline Simon - 17/07/2006 10:23
Avatar van Simon PHP expert
  1. <?php
  2. //define
  3. define('TR_IN', 1);
  4. define('TR_UIT', 2);
  5. define('TR_NAAR_BANK', 3);
  6. define('TR_NAAR_CASH', 4);
  7. //functie transactie
  8. function transactie($bedrag, $geldCo, $geldBa, $username, $actie) {
  9. $q = "UPDATE leden SET ";
  10. switch($actie) {
  11. case 1:
  12. if($bedrag > $geldBa){
  13. echo 'Zoveel geld heb je niet op je bank';
  14. }
  15. else {
  16. $q .= "geldcontant = geldcontant + ".$bedrag;
  17. }
  18. break;
  19. case 2:
  20. if($bedrag > $geldCo){
  21. echo 'Zoveel geld heb je niet contant';
  22. }
  23. else {
  24. $q .= "geldcontant = geldcontant - ".$bedrag;
  25. }
  26. break;
  27. case 3:
  28. if($geldBa != '0') {
  29. echo'Je moet eerst al het geld van je bank nemen';
  30. }
  31. elseif($geldCo < $bedrag) {
  32. echo'Zoveel geld heb je niet contant';
  33. }
  34. else {
  35. $q .= "geldcontant = geldcontant - ".$bedrag.", geldbank = geldbank + ".$bedrag;
  36. }
  37. break;
  38. case 4:
  39. if($geldBa < $bedrag) {
  40. echo'Zoveel geld heb je niet op je bank';
  41. }
  42. else {
  43. $q .= "geldcontant = geldcontant + ".$bedrag.", geldbank = geldbank - ".$bedrag;
  44. }
  45. break;
  46. }
  47. $q .= " WHERE id = ".$username;
  48. /*
  49.   Die error haal je best weg in de live versie dan, en vervang je dan door dit:
  50.   if(mysql_query($q)) {
  51.   return true;
  52.   }
  53.   return false;
  54.   */
  55. }
  56. //funtie is_logged_in
  57. function is_logged_in()
  58. {
  59. global $_SESSION;
  60.  
  61. if (!IsSet($_SESSION['userid']))
  62. {
  63. return (0);
  64. }
  65.  
  66. return (1);
  67. }
  68.  
  69. $username = $_SESSION['username'];
  70. $query = mysql_query("SELECT * FROM leden WHERE username='".$username."'");
  71. $arr = mysql_fetch_assoc($query);
  72. transactie($_POST['bedrag'], $arr['geldcontant'], $arr['geldbank'], $username, TR_IN);
  73. transactie($_POST['bedrag'], $arr['geldcontant'], $arr['geldbank'], $username, TR_UIT);
  74. //etc...
  75. ?>

ik heb je code herschreven, functie buiten while etc..
nu moet ik weg, veel succes
Offline Richard - 17/07/2006 13:06
Avatar van Richard Crew algemeen Nog even een opmerking over is_numeric gebruik voor controle: niet doen. Hiermee zijn waarden als 5e5-2 ook valid, omdat dit een getal is. Je kunt beter PHP.net: ctype_digit gebruiken, dit controleert of het alleen getallen zijn.
Offline xSc - 17/07/2006 13:06
Avatar van xSc Onbekend Murfy, let even op MySQL Injection.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.273s