Beste leden,
Laatst heb ik de opdracht gekregen om een veilingsysteem te ontwikkelen. Dit is uiteraard geen probleem en is reeds afgerond. Er is echter één onderdeel waarop ik vastloop.
Mevrouw gaf aan dat ze wilde dat mensen een zgn. `autobod` konden instellen. Mensen geven aan tot aan welk bedrag het systeem mag bieden voor ze.
Even een voorbeeld ter verduidelijking;
Product; 20 euro
Persoon A biedt met een autobod van 30 euro.
Het systeem voegt dan een bod toe met een prijs van 25 euro, en een autobod van 40 euro.
Als dan persoon B ook een bod gaat plaatsen, dan moet het systeem automatisch Persoon A weer over laten bieden totdat het autobod is bereikt van 40 euro.
Hier nog even een duidelijkere uitleg:
Auto bod
Een Autobod is een automatisch bied systeem. Wanneer U een Autobod plaatst zal de veilingsite automatisch voor u overbieden indien nodig, tot het door u aangegeven maximum bod. voorbeeld: een kavel staat op € 10,- U plaatst een autobod van € 20,- Er wordt voor U nu een bod geplaatst van € 12,- Wanneer Pietje nu een bod plaatst van € 14,- zal automatisch worden overboden voor u naar € 16,- dit herhaalt zich tot uw maximumbod is berijkt, in dit geval dus € 20,-
Hoe o hoe ga ik dit aanpakken in PHP? Ik hoef geen voorgekauwde code maar het liefst wel een duidelijke aanpak.
M.v.g,
Nathanael
- Moeilijk principe met Mysql/PHP
-
15-11-2007, 10:25 #1
- Berichten
- 1.139
- Lid sinds
- 19 Jaar
Moeilijk principe met Mysql/PHP
-
15-11-2007, 10:39 #2
- Berichten
- 30
- Lid sinds
- 18 Jaar
Op het moment dat een bod geplaatst wordt zoek je alle users op met een autobod gesorteert op tijd.
In PHP loop je door het array heen, en kijk je of de index ( beginnend bij 1 ) een autobod kan plaatsen ( huidig bod + step <= max bod ). Indien deze geen bod kan plaatsen gooi je hem uit het array.
Zo loop je door het array heen, aan het eind van de for loop controleer je of het array nog maar 1 item heeft, een gebruiker moet natuurlijk niet over zichzelf heen gaan bieden. Zo niet begin je weer voor aan.
-
15-11-2007, 10:48 #3
- Berichten
- 1.139
- Lid sinds
- 19 Jaar
Dus in Php/Mysql taal zou het zoiets moeten worden;
Code:<?php ## Persoon A biedt met een autobod van x euro $sBod = $sql->query ("SELECT * FROM bieden WHERE emailadres = '".addslashes ($_POST['emailadres'])."'"); if($sql->rows ($sBod)) $sql->query ("UPDATE bieden SET prijs = '".($fProduct['prijs'] + $cfg['main']['opbieden'])."', autobod = '".addslashes ($_POST['prijs'])."' WHERE emailadres = '".addslashes ($_POST['emailadres'])."' AND product_id = '".addslashes ($_aGET[2])."'"); else $sql->query ("INSERT INTO bieden (product_id, emailadres, ip, prijs, autobod, datum) VALUES ('".addslashes ($_aGET[2])."', '".addslashes($_POST['emailadres'])."', '".$_SERVER['REMOTE_ADDR']."', '".($fProduct['prijs'] + $cfg['main']['opbieden'])."', '".addslashes ($_POST['prijs'])."', '".time ()."')"); ## Alle lagere bieders emailen en automatisch hoger laten bieden?; $sLager = $sql->query ("SELECT * FROM bieden WHERE product_id = '".addslashes ($_aGET[2])."' AND emailadres != '".addslashes ($_POST['emailadres'])."'"); if ($sql->rows ($sLager)) { $sVerhoogd = 0; while ($fLager = $sql->fetch ($sLager)) { ## Als de prijs en de prijs + $cfg['main']['opbieden'] euro lager is dan het autobod, plaats dan het nieuwe bod if($fProduct['prijs'] < $fLager['autobod'] && ($fProduct['prijs'] + $cfg['main']['opbieden']) < $fLager['autobod']) { $sql->query ("UPDATE bieden SET prijs = '".($fLager['prijs'] + $cfg['main']['opbieden'])."' WHERE id = '".$fLager['id']."'"); mail ($fLager['emailadres'], 'Een hoger bod op leukeveilingen.nl!', 'Beste, '. 'Er is zojuist een hoger bod binnengekomen op een veiling op Leukeveilingen.nl. '. 'Het bod is hier te bekijken '. ''.$cfg['main']['adres'].'/veiling/'.addslashes ($_aGET[2]).' '. ' '. 'Uw autobod is/was nog niet bereikt, er is dus automatisch een nieuw bod voor u geplaatst dat bedraagt: '.($fLager['prijs'] + $cfg['main']['opbieden']).'. '. ' '. 'De crew', "From: Veilingen.nl <noreply@veilingen.nl>\nReturn-path: noreply@veilingen.nl"); $sVerhoogd = 1; } else { ## Deze persoon wel even inlichten mail ($fLager['emailadres'], 'Een hoger bod op leukeveilingen.nl!', 'Beste, '. 'Er is zojuist een hoger bod binnengekomen op een veiling op Leukeveilingen.nl. '. 'Het bod is hier te bekijken '. ''.$cfg['main']['adres'].'/veiling/'.addslashes ($_aGET[2]).' '. ' '. 'Uw autobod is/was al bereikt, er is geen nieuw bod voor u geplaatst. '. ' '. 'De crew', "From: Veilingen.nl <noreply@veilingen.nl>\nReturn-path: noreply@veilingen.nl"); } } } ?>
-
15-11-2007, 11:28 #4
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Wat ik zou doen is wanneer iemand een bod uitbrengt kijken hoeveel mensen een autobod hebben wat hoger is. Dan neem je het hoogste bod, en vergelijk je met het één na hoogste bod en plaatst daar 5€ bovenop bij wijze van.
Gezien je, wanneer 10 mensen autobieden, toch blijft doorgaan tot je bij de hoogste zit, kun je beter direct de hoogste nemen.
-
15-11-2007, 12:26 #5
- Berichten
- 30
- Lid sinds
- 18 Jaar
Heb het even in PHP code uitgewerkt voor je. Je hebt 2 mogelijkheden:
1. Array doorlopen 0,1,2 en dan weer opnieuw beginnen als er een bet geplaatst is.
2. Array doorlopen, en als index 1 in bet plaatst weer bij 0 beginnen. Questie van 1 statement uncommenten.
Code:<?php # init $aCurrent = array ( 'iUID' => 1, 'iBid' => 23 ); $iStep = 2; # array of lower bids ( uid, maxbid ) $aLower = array ( array ( "iUID" => 1, "iMaxBid" => 30 ), array ( "iUID" => 2, "iMaxBid" => 31 ), array ( "iUID" => 3, "iMaxBid" => 50 ) ); function placeBid ( $aLower, &$aCurrent, $iStep ) { # return $bReturn = false; # loop through users for ( $i = 0; $i < count ( $aLower ); $i++ ) { # can we place a bet? if ( $aLower[$i]['iUID'] != $aCurrent['iUID'] && $aCurrent['iBid'] + $iStep <= $aLower[$i]['iMaxBid'] ) { # insert bid echo $aLower[$i]['iUID'] . ' placed a bid of ' . ( $aCurrent['iBid'] + $iStep ) . '<br />'; # update current $aCurrent['iBid'] += $iStep; $aCurrent['iUID'] = $aLower[$i]['iUID']; # return tre if you want to start from index 0 again # return true; #set value $bReturn = true; } } # return return $bReturn; } while ( placeBid ( $aLower, $aCurrent, $iStep ) ) ; ?>
-
15-11-2007, 12:52 #6
- Berichten
- 1.139
- Lid sinds
- 19 Jaar
Woow Super zeg. Ik ga het eens even proberen in te voegen in mijn code en kijken of ik het aan de praat krijg. Ik hou je op de hoogte, super bedankt in advance!
-
15-11-2007, 13:10 #7
- Berichten
- 1.139
- Lid sinds
- 19 Jaar
Hmm ik zit echt helemaal vast :-(.. Ik snap gewoon niet echt hoe ik te werk moet gaan. Het is niet zo zeer het scriptmatige maar de manier waarop dat me dwars zit..
Ik dacht het zo te integreren in m'n code;
Code:## init $aCurrent = array ( 'iUID' => 1, 'iBid' => $_POST['prijs'] ); $iStep = $cfg['main']['opbieden']; ## array of lower bids ( uid, maxbid ) ## $aLower = array ( array ( "iUID" => 1, "iMaxBid" => 30 ), array ( "iUID" => 2, "iMaxBid" => 31 ), array ( "iUID" => 3, "iMaxBid" => 50 ) ); $aLower = array (); $sLager = $sql->query ("SELECT * FROM bieden WHERE product_id = '".addslashes ($_aGET[2])."' AND emailadres != '".addslashes ($_POST['emailadres'])."'"); if ($sql->rows ($sLager)) while ($fLager = $sql->fetch ($sLager)) $aLower [] = array ('iUID' => $fLager['id'], 'iMaxBid' => $fLager['autobod']); function placeBid ( $aLower, &$aCurrent, $iStep ) { # return $bReturn = false; # loop through users for ( $i = 0; $i < count ( $aLower ); $i++ ) { # can we place a bet? if ( $aLower[$i]['iUID'] != $aCurrent['iUID'] && $aCurrent['iBid'] + $iStep <= $aLower[$i]['iMaxBid'] ) { # insert bid echo $aLower[$i]['iUID'] . ' placed a bid of ' . ( $aCurrent['iBid'] + $iStep ) . '<br />'; # update current $aCurrent['iBid'] += $iStep; $aCurrent['iUID'] = $aLower[$i]['iUID']; # return tre if you want to start from index 0 again # return true; #set value $bReturn = true; } } # return return $bReturn; } placeBid ( $aLower, $aCurrent, $iStep ) ;
-
25-11-2007, 19:46 #8
- Berichten
- 30
- Lid sinds
- 18 Jaar
Sorry voor de late reactie, maar je mist de while(1) onderaan?
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic