Guten Tag.
Ich habe hier ein Einkaufs script für meinen Server.
Er ging bis vor kurzem einwandfrei, aber dann kam ein Plesk Update, und seit dem gehts nicht mehr
Folgender fehler wird angezeigt:
Warning: Invalid argument supplied for foreach() in C:\Inetpub\vhosts\domain-test.tk\httpdocs\Shop\purchase.php on line 18
Warning: Invalid argument supplied for foreach() in C:\Inetpub\vhosts\domain-test.tk\httpdocs\Shop\purchase.php on line 80
Also beide fehler verweisen auf: [foreach($purchase AS $key => $value);]
Hier ein test zugang zum shop:
http://domain-test.tk/Shop/mall_login.php
User: demo
Passwort: demo
Ich habe hier mal das gesamte Porblem script gelistet:
Es ist eine .php datei von mehreren, aber nur diese hat anscheinend das problem.
Ich weiss, das ein array fehlt, oder benötigt wird, jedoch weiss ich nicht genau was, denn ich bin eher neu in der .php brange
So, das ist das Script (File), ich hoffe mir kann da jemand helfen.
Liebe Grüße euch allen
Ich habe hier ein Einkaufs script für meinen Server.
Er ging bis vor kurzem einwandfrei, aber dann kam ein Plesk Update, und seit dem gehts nicht mehr
Folgender fehler wird angezeigt:
Warning: Invalid argument supplied for foreach() in C:\Inetpub\vhosts\domain-test.tk\httpdocs\Shop\purchase.php on line 18
Warning: Invalid argument supplied for foreach() in C:\Inetpub\vhosts\domain-test.tk\httpdocs\Shop\purchase.php on line 80
Also beide fehler verweisen auf: [foreach($purchase AS $key => $value);]
Hier ein test zugang zum shop:
http://domain-test.tk/Shop/mall_login.php
User: demo
Passwort: demo
Ich habe hier mal das gesamte Porblem script gelistet:
Es ist eine .php datei von mehreren, aber nur diese hat anscheinend das problem.
Ich weiss, das ein array fehlt, oder benötigt wird, jedoch weiss ich nicht genau was, denn ich bin eher neu in der .php brange
PHP-Code:
<?php
//SID Check ausfuehren => Datenbankverbindung wird aufgebaut und Sprachauswahl gesetzt
include "sid_check.php";
//UserUID aus Sessions Tabelle holen
$query_UID = "SELECT UserUID FROM MallSessions WHERE sid = '$cook_sid_escaped'";
$result_UID = mssql_query($query_UID);
$array_UID = mssql_fetch_array($result_UID);
$user_UID = $array_UID['UserUID'];
//String mit den Einkaeufen wieder zum Array aufblaehen
$purchase = unserialize($_POST['purchase']);
//Durchs Array turnen und aufloesen wo das Item ein Paket ist, das Ganze schoen aufgedroeselt in ein dreidimensionales Array eintueten
$array_row = 0;
foreach($purchase AS $key => $value);
{
$key = ms_escape_string($key);
$value = ms_escape_string($value);
$query_mall = "SELECT * FROM GameMall WHERE ItemID = '$key'";
$result_mall = mssql_query($query_mall);
while($array_mall = mssql_fetch_assoc($result_mall))
{
$is_pack = $array_mall['PackID'];
if (!is_null($is_pack))
{
$query_pack = "SELECT * FROM ItemPacks WHERE PackID = '$is_pack'";
$result_pack = mssql_query($query_pack);
while($array_pack = mssql_fetch_assoc($result_pack))
{
$amount = $value * $array_mall['ItemCount'] * $array_pack['ItemCount'];
$buy_array[$array_row] = array(array('ItemID' => $array_pack['ItemID'], 'ItemCount' => $amount));
$array_row++;
}
}
else
{
$amount = $value * $array_mall['ItemCount'];
$buy_array[$array_row] = array(array('ItemID' => $array_mall['ItemID'], 'ItemCount' => $amount));
$array_row++;
}
}
}
//Schonmal pruefen ob in der GiftBox des Accs ueberhaupt genug freie Slots fuer den Einkauf vorhanden sind
//Wenn nicht => Ausfuehrung beenden
$query_free_slots = "SELECT COUNT(Slot) AS slots FROM PS_GameData.dbo.UserStoredPointItems WHERE UserUID = '$user_UID'";
$result_free_slots = mssql_query($query_free_slots);
$array_free_slots = mssql_fetch_assoc($result_free_slots);
$number_free_slots = 240 - $array_free_slots['slots'];
$size = count($buy_array);
$slots_available = $number_free_slots - $size;
if ($slots_available < 0)
{
if ($lang_sel == 'en')
{
die("Not enough free slots in Gift Box available. <br><br><a href=\"mall.php\">Showroom</a>");
}
else
{
die("Nicht genügend freie Slots in der Gift Box verfügbar. <br><br><a href=\"mall.php\">Verkaufsraum</a>");
}
}
if ($lang_sel == 'en')
{
echo "<h2>Shaiyaner WebMall - Purchase</h2><br><br>";
}
else
{
echo "<h2>Shaiyaner WebMall - Einkauf</h2><br><br>";
}
//Nochmal durchs 2D Array aus dem POST tanzen fuer die Einkaufshistorie mit den Preisen
//Geht leider nicht beim Einfuegen in die GiftBox weil die Items aus den Pakten keinen eigenen Preis haben :/
$complete_cost =0;
foreach($purchase AS $key => $value);
{
$key = ms_escape_string($key);
$value = ms_escape_string($value);
$query_mall = "SELECT * FROM GameMall WHERE ItemID = '$key'";
$result_mall = mssql_query($query_mall);
$array_mall = mssql_fetch_assoc($result_mall);
$withdraw = ($value * $array_mall['PriceNow']);
$query_point = "SELECT Point, UserID FROM PS_UserData.dbo.Users_Master WHERE UserUID = '$user_UID'";
$result_point = mssql_query($query_point);
$array_point = mssql_fetch_assoc($result_point);
$new_balance = $array_point['Point'] - $withdraw;
$buy_date = date('d.m.Y H:i:s');
//Nochmal testen ob nicht irgendein Schlauberger nach dem Zusammenstellen des Einkaufs aber vor dem Klicken auf "Kaufen"
//im Warenkorb noch per Ingame Mall seine DP unter den Einkaufswert gedrueckt hat
if ($new_balance < 0)
{
if ($lang_sel == 'en')
{
die("Not enough SP available <br><br><a href=\"mall.php\">Showroom</a>");
}
else
{
die("Nicht genügend SP verfügbar <br><br><a href=\"mall.php\">Verkaufsraum</a>");
}
}
//Wenn SP noch ausreichend fuer Einkauf, Preis von den DP abziehen und Einkaufshistorie schreiben
else
{
$update_points = "UPDATE PS_UserData.dbo.Users_Master SET Point = '$new_balance' WHERE UserUID = '$user_UID'";
mssql_query($update_points) or die("Withdrawing DP failed");
$insert_history = "INSERT INTO PurchaseHistory (UserUID, ItemID, Price, pdate) VALUES ('$user_UID', '$key', '$withdraw', '$buy_date')";
mssql_query($insert_history) or die("Updating Purchase History failed");
}
if ($lang_sel == 'en')
{
echo "Purchase of ".$value." ".$array_mall['ItemTitle']." for ".$withdraw." SP completed.<br>";
}
else
{
echo "Kauf von ".$value." ".$array_mall['ItemTitle']." für ".$withdraw." SP abgeschlossen.<br>";
}
$complete_cost = $complete_cost + $withdraw;
}
//Nu aber wirklich einkaufen: Durch 3D Array hampeln, freien GiftBox Slot suchen und Item eintueten
$userslot = 0;
for ($iterate = 0; $iterate < $size; $iterate++)
{
while($userslot < 240)
{
$query_slots = "SELECT ItemID FROM PS_GameData.dbo.UserStoredPointItems WHERE UserUID = '$user_UID' AND Slot = '$userslot'";
$result_slots = mssql_query($query_slots);
$array_slots = mssql_fetch_assoc($result_slots);
$is_slot = $array_slots['ItemID'];
if (empty($is_slot))
{
$item_count = $buy_array[$iterate][0]["ItemCount"];
$item_id = $buy_array[$iterate][0]["ItemID"];
$buy_date = date('Y-m-d H:i:s');
//Opportunistisch einen Millisekundenwert faken und an den Timestamp kleben. Wer weiss schon wofuer es gebraucht wird ...
$buy_date .= ".".rand(100,999);
$insert_Item = "INSERT INTO
PS_GameData.dbo.UserStoredPointItems (
UserUID,
Slot,
ItemID,
ItemCount,
BuyDate)
VALUES (
'$user_UID',
'$userslot',
'$item_id',
'$item_count',
'$buy_date')";
mssql_query($insert_Item) or die("Inserting Items failed");
break 1;
}
$userslot++;
}
}
//Gesamtpreis und neuen SP Kontostand anzeigen, freundlich bedanken und zu weiterem Einkauf animieren
if ($lang_sel == 'en')
{
echo "<br>Withdrew $complete_cost DP from your account ".$array_point['UserID'].". <br>Your new SP balance is $new_balance.<br><br>";
echo "<h2>Thank you for your purchase.</h2>";
echo "<br><br><input type=\"button\" onclick=\"window.location.href = 'mall.php'\" value=\"Continue Shopping\">";
}
else
{
echo "<br>Es wurden insgesamt $complete_cost SP von Deinem Account ".$array_point['UserID']." abgezogen. <br>Dein neuer SP Kontostand ist $new_balance.<br><br>";
echo "<h2>Danke für Deinen Einkauf.</h2>";
echo "<br><br><input type=\"button\" onclick=\"window.location.href = 'mall.php'\" value=\"Weiter einkaufen\">";
}
mssql_close($conn);
?>
Liebe Grüße euch allen
Kommentar