PHP / MySQL Warenkorb

Hayes

Mitglied
Hallo

Ich erstelle gerade einen Online Shop. Nun hab ich ein Problem beim Warenkorb.
Ich möchte in einer Tabelle prüfen ob der Artikel schon vorhanden ist. Wen er vorhanden ist, möchte ich gern den Wert 1 bekommen und wenn er nicht vorhanden ist, den Wert 0. Wie mach ich das? Ich hab bis jetzt nur Lösungen wie diese gefunden.

Code:
$ausgabe = mysql_query("SELECT * FROM basket WHERE user='$user' AND product='$artikel'");
while($row = mysql_fetch_object($ausgabe))
{
 $product = $row->product;
 $dbmenge = $row->menge;
}

//hier wird überprüft ob der Artikel schon vorhanden ist
if($product == $artikel){
 //wenn Artikel vorhanden ist
}
else{
 //wenn Artikel nicht vorhanden ist
}

bitte helft mir...
 
Hallo,

vielleicht hilft dir da IF():
SQL:
SELECT 
  IF(product,1,0) AS ergebnis FROM basket WHERE user='123' AND product='456';

Die Syntax der IF-Funktion erklärt sich folgendermaßen:
  • Bedingung
  • Rückgabewert bei wahrer Bedingung
  • Rückgabewert bei falscher Bedingung
 
Probier mal Folgendes:
PHP:
<?php

	$query = '
		SELECT
		        1
		  FROM
		        `basket`
		  WHERE
		        `user`    = "'.mysql_real_escape_string($user).'"
		    AND `product` = "'.mysql_real_escape_string($artikel).'"
		';
	var_dump( mysql_num_rows(mysql_query($query)) );

?>
 
Danke für die schnelle Hilfe...

Ich hab’s jetzt mal mit dem IF versucht

Code:
$artikel_check = mysql_query("SELECT IF($art_artikelnummer,1,0) AS ergebnis FROM tbl_warenkorb WHERE fs_p_id LIKE '$user_id' AND fs_art_artikelnummer = '$art_artikelnummer'");
while($artikel = mysql_fetch_object($artikel_check))
{
 $artikel_in_warenkob=$artikel->ergebnis
}

if($artikel_in_warenkob==1){
  //Artikel vorhanden
 }
 else{
   //Artikel nicht vorhanden
 }

Das ist auch alles gut, und es läuft. Aber wie bekomme ich die while Schleife weg?
 
PHP:
$artikel_check = mysql_query("SELECT IF(fs_art_artikelnummer,1,0) AS ergebnis FROM tbl_warenkorb WHERE fs_p_id LIKE '$user_id' AND fs_art_artikelnummer = '$art_artikelnummer'");
$artikel_in_warenkorb = mysql_result($artikel_check,0,0);

if($artikel_in_warenkob==1){
  //Artikel vorhanden
 }
 else{
   //Artikel nicht vorhanden
 }
Noch ein kleiner Kommentar zu IF(): Die Bedingung sollte Spalte(n) der Tabelle auf Werte/Existenz prüfen und nicht mit einer PHP-Variable gefüllt werden (außer es ist explizit von der Programmlogik gewollt). Denn steht in der PHP-Variable ein Wert, der nicht gleich eines Spaltennamens der Tabelle ist, kommt immer 0 als Ergebnis zurück.
 
Wenn der Artikel im Warenkorb ist funktioniert es perfekt. Aber wenn der Artikel noch nicht in der Tabelle steht, gibt es diese Fehlermeldung:


Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 4 in C:\xampp\htdocs\IPA\public\artikel_hinzufuegen.php on line 23

was ist damit gemeint?
 
Falls es keine Datensätze mit übereinstimmenden Kriterien gibt, kann auch keine Spalte dieser nicht-übereinstimmtenden Datensätze ausgewählt werden.
Probier einfach mal meinen Vorschlag. Alternativ könntest du auch die übereinstimmenden Datensätze von MySQL zählen lassen (siehe COUNT()-Funktion).
 
Ich habs jetzt mal auf deine Weise probiert.

PHP:
$artikel_check = mysql_query("SELECT 1 FROM tbl_warenkorb WHERE fs_p_id = mysql_real_escape_string($user_id) AND fs_art_artikelnummer = mysql_real_escape_string($art_artikelnummer)");
var_dump( mysql_num_rows(mysql_query($artikel_check)));

dan erscheint aber volgende Fehlermeldung:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\IPA\public\artikel_hinzufuegen.php on line 33
bool(false)
 
Wieso werden Vorschläge eigentlich nicht zuerst 1:1 übernommen, bevor sie besserwisserisch nach den eigenen Vorstellungen angepasst werden? Die mysql_real_escape_string()-Funktion ist eine PHP-Funktion und darf deshalb nicht in diesem Kontext angewandt werden.
 
Tut mir leid.. Aber ich bin im Moment ziemlich im Stress (Abschlussarbeit meiner 4Jährigen Informatiker Lehre)
Ich hab es nun so gemacht:
PHP:
$artikel_check = ("SELECT 1 FROM tbl_warenkorb WHERE fs_p_id = $user_id AND fs_art_artikelnummer = $art_artikelnummer");

$artikel_vorhanden = var_dump( mysql_num_rows(mysql_query($artikel_check)));

Das funktioniert auch, aber die Variable $artikel_vorhanden hat nun z.B. den Wert int(1).
Ich brauche aber den Wert 1 oder 0
 
Zurück