Maximalgebot bei Auktionsscript

Divo1984

Erfahrenes Mitglied
Hallo,

wie im Betreff steht - entwickle ich grade ein Auktionsscript! Da brauche ich eine Funktion - von der ich nicht weiss ob diese mit PHP zu verwirklichen ist. Ich poste es trotzdem mal hier rein.

Ich möchte gern das die User ein Maximalgebot abgeben können - d. h.:

Stargebot: 1 Euro

Mindestgebot wird für jede Auktion festgelegt und aus der DB abgrufen! Hier als Beispiel 50 Cent bzw. 0,50 Euro

User A bietet: 1,50 Euro
User B bietet: maximal 43 Euro
User C bietet: 5 Euro
User D bietet: maximal 45 Euro

Gebot A - ist klar wird auf 1,50 gesetzt

Gebot B - hier soll zwar 43 Euro als Maximalgebot gelten - aber nur bis zum nächst höheren Gebot gezählt werden - also wäre das Gebot hier 2 Euro

Gebot C - hier werden 5 Euro geboten - da aber Gebot B maximal von 43 Euro Euro hat - soll hier automatisch für User B das Gebot von 5,50 Euro gesetzt werden

Gebot D - hier werden 45 Euro als Maximalgebot eingegeben - da User B ein Maximalgebot von 43 Euro hat - soll hier automatisch für User D 43,50 Euro geboten werden.

Hat jemand eine Ahnung wie das zu ermöglichen ist? Mit PHP?

Bin für jeden Ratschlag dankbar!
 
Also funktionieren tut es aber es gibt bestimmt noch was besseres:


PHP:
<?php
function bieten($var) {
global $aktuell;
global $schritt;
global $user;

	return (($var + $schritt) > $aktuell);

}

$user = array("A" => 1.5, "B" => 43.0, "C" => 5.0, "D" => 45.0);

$aktuell = 1.0;

$schritt = 0.5;


//verbliebene Werte durchlaufen und max. Gebot erhöhen
while (count($user) > 1) {
	$aktuell = $aktuell + $schritt;
	$user = array_filter($user, "bieten");
}


echo "<br />";
echo "max. Gebot " .$aktuell;
echo "<br />";
$aktuell = array_keys($user);
echo "User " .$aktuell[0];

?>
 
Zuletzt bearbeitet:
Hallo tombe,

danke für deine Antwort - sieht auch schonmal sehhr gut aus - nur brauche ich das Ganze Datenbankversiert...

Da die Werte ja aus der Datenbank geholt werden und die Gebote dort ja reinge"postet" werden!
 
Na dann machen wir es halt so:

PHP:
<?php
$host = "localhost";
$username = "";
$password = "";
$dbname = "DEINE DATENBANK";

mysql_connect($host, $username, $password);
mysql_select_db($dbname);

function bieten($var) {
global $aktuell;
global $schritt;
global $user;

	return (($var + $schritt) > $aktuell);

}

$aktuell = 1.0;

$schritt = 0.5;

//Alle Einträge ermitteln
$sql = "SELECT user, max_gebot, aktuell FROM gebote WHERE max_gebot > " .$aktuell;
$rs = mysql_query($sql);
//und Werte in Array schreiben
for ($a = 0; $a < mysql_num_rows($rs); $a++) {
	$user[mysql_result($rs, $a, "user")] = mysql_result($rs, $a, "max_gebot");
}

//verbliebene Werte durchlaufen und max. Gebot erhöhen
while (count($user) > 1) {
	$aktuell = $aktuell + $schritt;
	$user = array_filter($user, "bieten");
}
//den Höchstbietenden und das entsprechende Gebot ausgeben
echo "<br />";
echo "max. Gebot " .$aktuell;
echo "<br />";
$user = array_keys($user);
echo "User " .$user[0];
echo "<br />";
//und die Daten in die Tabelle schreiben
$sql = "UPDATE gebote SET aktuell = " .$aktuell ." WHERE user = '" .$user[0] ."'";
mysql_query($sql);

?>

SQL-Anweisungen, Tabellenname usw. an deine DB anpassen und es sollte klappen.

Was ich fast vergessen hätte: Das Feld "user" ist ja klar, das Feld "max_gebot" wohl auch und das Feld "aktuell" bekommt als Wert immer das aktuelle Höchstgebot des Users (sollte aber auch klar sein).
 
Zuletzt bearbeitet:
Anmerkung: Das global innerhalb der Funktion ist schon richtig. Aber mMn lohnt sich global nur dann, wenn die Variable mehrfach innerhalb der Funktion genutzt wird. Für Einzel-Zugriffe kann man auch getrosst auf $GLOBALS zugreiffen

Die Funktion bieten würde dann gekürzt so aussehen
PHP:
function bieten($var) {
    return (($var + $GLOBALS['schritt']) > $GLOBALS['aktuell']);
}
 
Keine Ahnung. Es verhindert aber auch noch unnötige Globals weil man während dem Programmieren den Code ändert. So bei dir geschehen. global $user; wird bei dir zwar als global deklariert, aber nie verwendet.
 
Zurück