in php ist mir alles neu weil es die erste Programmiersprache ist die ich angehe. Ich habe einen Warenkorb mit Produkten. So, wenn man nun das selbe Produkt 2 mal in den Warenkorb einfügt wird die Anzahl der Produkte dem selben Produkt im Warenkorb addiert. Mein Problem ist aber das ich diese extern eingefügt haben möchte aber dazu muss sich die ID vom ersten eingefügten Produkt unterscheiden.
Ich habe den Folgenden Code geändert:
PHP Code:
// If the item is already in the cart, increase its quantity if($this->qtys[$id] > 0) { $this->qtys[$id] += $qty; $this->update_subtotal(); }
in:
PHP Code:
// If the item is already in the cart, increase its quantity if($this->qtys[$id] > 0 and $this->qtys[$id] <= 1) {
Jetzt bekomme ich 1 Produkt extern eingefügt so wie ich das wollte, nun aber wenn ich mehr als 2 gleiche Produkte einfügen möchte wird es dem 2ten Produkt zugeordnet aufgrund der selben ID.
Mir geht es darum das ich im diese Produkte mit verschiedenen Optionen in den Warenkorb einfügen möchte, falls sich jemand fragt warum überhaupt.
Wie könnte ich vergleichen ob die eingefügte ID schon einmal vorhanden ist um dann dem nächsten Produkt eine andere ID zu geben?
ich bin mir nicht ganz sicher ob ich das problem richtig verstanden habe, da die code zeilen nicht unbedingt viel erklären.
Zum Prüfen ob eine Id schon in einem Array vorhanden ist, was vermutlich bei dir $this->qtys ist, könntest du via "isset($this->qtys[$id])" prüfen, aber um dir da richtig zu helfen brauch man da um einiges mehr background wissen von dem system, meiner meinung als die paar zeilchen =).
/** * Update an item in the cart * * @param string $id * @param mixed $qty * * @return boolean */ private function update_item($id, $qty) {
// If the quantity is zero, no futher validation is required if ((int) $qty === 0) { $validQty = true; } // If decimal quantities are enabled, verify it's a float elseif ($this->config['decimalQtys'] === true && filter_var($qty, FILTER_VALIDATE_FLOAT)) { $validQty = true; } // By default, verify the quantity is an integer elseif (filter_var($qty, FILTER_VALIDATE_INT)) { $validQty = true; }
// If it's a valid quantity, remove or update as necessary if ($validQty === true) { if($qty < 1) { $this->remove_item($id); } else { $this->qtys[$id] = $qty; } $this->update_subtotal(); return true; } }
/* Using post vars to remove items doesn't work because we have to pass the id of the item to be removed as the value of the button. If using an input with type submit, all browsers display the item id, instead of allowing for user-friendly text. If using an input with type image, IE does not submit the value, only x and y coordinates where button was clicked. Can't use a hidden input either since the cart form has to encompass all items to recalculate subtotal when a quantity is changed, which means there are multiple remove buttons and no way to associate them with the correct hidden input. */
/** * Reamove an item from the cart * * @param string $id * */ private function remove_item($id) { $tmpItems = array();
// Rebuild the items array, excluding the id we just removed foreach($this->items as $item) { if($item != $id) { $tmpItems[] = $item; } } $this->items = $tmpItems; $this->update_subtotal(); }
/** * Update the entire cart */ public function update_cart() {
// Post value is an array of all item quantities in the cart // Treat array as a string for validation if (is_array($_POST['jcartItemQty'])) { $qtys = implode($_POST['jcartItemQty']); }
// If no item ids, the cart is empty if ($_POST['jcartItemId']) {
$validQtys = false;
// If decimal quantities are enabled, verify the combined string only contain digits and decimal points if ($this->config['decimalQtys'] === true && preg_match("/^[0-9.]+$/i", $qtys)) { $validQtys = true; } // By default, verify the string only contains integers elseif (filter_var($qtys, FILTER_VALIDATE_INT) || $qtys == '') { $validQtys = true; }
if ($validQtys === true) {
// The item index $count = 0;
// For each item in the cart, remove or update as necessary foreach ($_POST['jcartItemId'] as $id) {
// Increment index for the next item $count++; } return true; } } // If no items in the cart, return true to prevent unnecssary error message elseif (!$_POST['jcartItemId']) { return true; } }
// Use config values as literal indices for incoming POST values // Values are the HTML name attributes set in config.json $id = $_POST[$id]; $name = $_POST[$name]; $zutat = $_POST[$zutat]; $price = $_POST[$price]; $qty = $_POST[$qty]; $url = $_POST[$url];
// Only generate unique token once per session if(!$_SESSION['jcartToken']){ $_SESSION['jcartToken'] = md5(session_id() . time() . $_SERVER['HTTP_USER_AGENT']); } // If enabled, check submitted token against session token for POST requests if ($config['csrfToken'] === 'true' && $_POST && $jcartToken != $_SESSION['jcartToken']) { $errorMessage = 'Invalid token!' . $jcartToken . ' / ' . $_SESSION['jcartToken']; }
// Sanitize values for output in the browser $id = filter_var($id, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW); $name = filter_var($name, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW); $zutat = filter_var($zutat, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW); $url = filter_var($url, FILTER_SANITIZE_URL);
// Round the quantity if necessary if($config['decimalPlaces'] === true) { $qty = round($qty, $config['decimalPlaces']); }
// Add an item if ($_POST[$add]) { $itemAdded = $this->add_item($id, $name, $price, $qty, $url, $zutat); // If not true the add item function returns the error type if ($itemAdded !== true) { $errorType = $itemAdded; switch($errorType) { case 'qty': $errorMessage = $config['text']['quantityError']; break; case 'price': $errorMessage = $config['text']['priceError']; break; } } }
// Update a single item if ($_POST['jcartUpdate']) { $itemUpdated = $this->update_item($_POST['itemId'], $_POST['itemQty']); if ($itemUpdated !== true) { $errorMessage = $config['text']['quantityError']; } }
// Update all items in the cart if($_POST['jcartUpdateCart'] || $_POST['jcartCheckout']) { $cartUpdated = $this->update_cart(); if ($cartUpdated !== true) { $errorMessage = $config['text']['quantityError']; } }
// Remove an item /* After an item is removed, its id stays set in the query string, preventing the same item from being added back to the cart in subsequent POST requests. As result, it's not enough to check for GET before deleting the item, must also check that this isn't a POST request. */ if($_GET['jcartRemove'] && !$_POST) { $this->remove_item($_GET['jcartRemove']); }
// Empty the cart if($_POST['jcartEmpty']) { $this->empty_cart(); }
// Determine which text to use for the number of items in the cart $itemsText = $config['text']['multipleItems']; if ($this->itemCount == 1) { $itemsText = $config['text']['singleItem']; }
// Determine if this is the checkout page /* First we check the request uri against the config checkout (set when the visitor first clicks checkout), then check for the hidden input sent with Ajax request (set when visitor has javascript enabled and updates an item quantity). */ $isCheckout = strpos(request_uri(), $checkout); if ($isCheckout !== false || $_REQUEST['jcartIsCheckout'] == 'true') { $isCheckout = true; } else { $isCheckout = false; }
// Overwrite the form action to post to gateway.php instead of posting back to checkout page if ($isCheckout === true) {
// Trim trailing slash if necessary $path = rtrim($path, '/');
$checkout = $path . '/gateway.php'; }
// Default input type // Overridden if using button images in config.php $inputType = 'submit';
// If this error is true the visitor updated the cart from the checkout page using an invalid price format // Passed as a session var since the checkout page uses a header redirect // If passed via GET the query string stays set even after subsequent POST requests if ($_SESSION['quantityError'] === true) { $errorMessage = $config['text']['quantityError']; unset($_SESSION['quantityError']); }
// Set currency symbol based on config currency code $currencyCode = trim(strtoupper($config['currencyCode'])); switch($currencyCode) { case 'EUR': $currencySymbol = '€'; break; case 'GBP': $currencySymbol = '£'; break; case 'JPY': $currencySymbol = '¥'; break; case 'CHF': $currencySymbol = 'CHF '; break; case 'SEK': case 'DKK': case 'NOK': $currencySymbol = 'Kr '; break; case 'PLN': $currencySymbol = 'zł '; break; case 'HUF': $currencySymbol = 'Ft '; break; case 'CZK': $currencySymbol = 'Kč '; break; case 'ILS': $currencySymbol = '₪ '; break; case 'TWD': $currencySymbol = 'NT$'; break; case 'THB': $currencySymbol = '฿'; break; case 'MYR': $currencySymbol = 'RM'; break; case 'PHP': $currencySymbol = 'Php'; break; case 'BRL': $currencySymbol = 'R$'; break; case 'USD': default: $currencySymbol = '$'; break; }
//////////////////////////////////////////////////////////////////////// // Output the cart
// Return specified number of tabs to improve readability of HTML output function tab($n) { $tabs = null; while ($n > 0) { $tabs .= "\t"; --$n; } return $tabs; }
// If there's an error message wrap it in some HTML if ($errorMessage) { $errorMessage = "<p id='jcart-error'>$errorMessage</p>"; }
// If this is the checkout display the PayPal checkout button if ($isCheckout === true) { // Hidden input allows us to determine if we're on the checkout page // We normally check against request uri but ajax update sets value to relay.php echo tab(3) . "<input type='hidden' id='jcart-is-checkout' name='jcartIsCheckout' value='true' />\n";
jetzt möchte ich aber prüfen ob die geänderte ID schon vorhanden ist um diese weiter zu ändern weil sonst immer die ABC-123 auf die ABC-124 geändert wird und ich damit nicht mehr als 2 Produkte einfügen kann :/
Das Ganze könntest du eigentlich mit der if-Bedingung, die KoKsPfLaNzE schon gepostet hat, umsetzen. Falls ein Produkt schon im Warenkorb ist, kannst du es mit den Operatoren ++ um eins erhöhen.
Aber wie mein Vorposter schon schrieb, da braucht es mehr Codezeilen und/oder Backgroundwissen von deinem System.
Edit: Ich schaue mir deinen Code nachher mal an, wenn ich Zeit finde. Edit2: Also ich habe mir das jcart Skript mal auf meinen Server gezogen und bei mir funktioniert es ohne Probleme. Manchmal ist von vorne Anfangen eine bessere Lösung. Was hast du denn an dem Skript geändert, dass es nicht mehr geht? Oder was wolltest du ändern?
Ich tüftel noch ein bisschen rum in der Hoffnung das ich das hinbekomme aber würde mich über Hilfe sehr freuen
EDIT:
Ich glaube ich wurde falsch verstanden sorry weis nicht genau wie ich das erklären soll.
Also wenn ich z.B. Soccerball 2 mal in den Warenkorb einfüge, wird die Anzahl davon im Warenkorb auf 2 gestellt.
Aber ich möchte das Soccerball extern als 2tes Produkt mit einer anderen ID zum Warenkorb hinzugefügt wird
Bis 2 Produkten klappt es aber leider nicht mit mehr:
// Falls jemand selber Interesse an jCart hat ist hier ein altes Forum indem einige Probleme behandelt worden sind aber seit Ende der Weiterarbeit an dem Projekt leider geschlossen ist.
Aber da ich viele Produkte habe die alle ID´s von 1-1000 haben wird z.B beim erstellen einer ID die "2" heißt damit wird eine bereits vorhandene ID überschrieben im Warenkorb.
Hab mir das script ma kurz angeguckt, hab leider gerade wenig Zeit das ma aufzusetzen un co. Aber es ist ziehmlich einfach erklärt du musst dich von dem Artikel Ids in dem Array Trennen und einfach eine Fortlaufendenummer eintragen. dir irgendwelche nummer zu berechnen bringt nichts, das macht nur neue Probleme, die aktuellen nummern werden in der "items" property gespeichert, somit sollte das ja kein großes problem sein, oder?
Will ungern den code-posten da lernst ja nix bei=)
weil du die id mit 1000 addierst un das result, in eine andere property speicherst die sonst nicht verwendet wird. bei dem ++ un die schleife, da wird die id ja auch höher genommen.
du müsstest $id = $id + 1000 rechnen, aber schön is das net =(
weil du die id mit 1000 addierst un das result, in eine andere property speicherst die sonst nicht verwendet wird. bei dem ++ un die schleife, da wird die id ja auch höher genommen.
du müsstest $id = $id + 1000 rechnen, aber schön is das net =(
Genau das habe ich auch versucht aber habe mich inzwischen für die übersichtlichere Lösung entschieden die ID´s meiner Produkte einfach anders zu beschreiben z.B. Pizza-Salami-1, Pizza-Margheritta-1
If Abfrage 03/17/2014 - Web Development - 0 Replies -
Hat sich erledigt
#closerquest
AFK Abfrage ? 09/05/2012 - Guild Wars 2 - 4 Replies Servus, habe grad bissel an meinem eigenen Bot rumgeschraut der nu auch laufen kann und auch das ein oder andere Event erledigt. So nun lasse ich ihn die dritte Testrunde laufen und bekomm aufeinmal ein Fenster (wie die normalen fenster wenn man mit einem NPC spricht) und dort steht " Wer ist der Moa wer ist der Mann ?" und als antwort möglichkeiten gabs Rechts , Links und in der Mitte. Dazu läuft eine art Counter runter. Ich hab aus Schock erstmal irgendwo draufgekickt. Ne minute später kam...
Abfrage in dec? 12/02/2010 - General Coding - 7 Replies Hallo Leute,
ich habe mir hier schnell ein kleines Programm zum üben geschrieben und hab nun eine Frage.
Der Code sieht so aus:
/*
Autor: ******
E-mail: ******
Datum: 28.11.2010
Programm: Check if letter is uppercase or not
If abfrage 12/29/2009 - AutoIt - 8 Replies Hallo leute.
Wollt ma fragen ob mir jemand sagen könnte wie ich abfragen kan ob in einer input box z.b steht xD und dan in der if abfrage so abfragen könnte wen dort xD steht das er z.b das script schliest weis das einer?