Wert per php aus tabelle abfragen wenn wert erreicht soll spalte 2 um eines erhöht

@yaslaw ich schätze er möchte abfangen das jemand mehr Geld ausgibt als er hat.

PHP:
if($DeinGeld < $Preis){
    echo 'geht nicht';
}
else {
 UPDATE
   Table usw.
}
 
genau das will ich Joe. das war ja auch nur ein beispiel das soll ja mit anderen waren auch so kommen nachher . Man produziert waren und nachher will man das produzierte auch weiter geben als beispiel ich habe 3 mal apfel prodziert oder wachsen lassen. Jetzt will ich meiner figur diesen apfel als nahrung geben . Ich habe also 3 mal apfel auf lager. jetzt will ich eben das ich nichtmehr abegeben kann als ich wirklich habe.
also kann ich nur 3 mal apfel geben und nicht unendlich weil im moment geht es ja ins minus und das darf nicht.

Ich frage diese also in einer speraten datei ab. im moment so



alter code
PHP:
$abfrage = "select * FROM plus_signup where userid='$_SESSION[userid]'";

/* Abfrage senden - bei Bedarf anpassen */
$result = mysql_query("select  bannane from plus_signup where userid='$_SESSION[userid]'")
  or die ("Abfrage fehlgeschlagen ...<br><br>");


/* solange entsprechende Datensätze geliefert werden, diese nun auswerten */
while($row = mysql_fetch_array($result))
{
/* Entweder einer Variablen zuweisen */

  $bannane =$row[0];

}

if($bannane < 0){
$aendern = "UPDATE plus_signup Set bannane=bannane - 1 WHERE userid='$_SESSION[userid]'";
$update = mysql_query($aendern);
    $bannane = 0;
  
}
neuer code
PHP:
$abfrage = "select * FROM plus_signup where userid='$_SESSION[userid]'"; 

/* Abfrage senden - bei Bedarf anpassen */ 
$result = mysql_query("select  bannane from plus_signup where userid='$_SESSION[userid]'") 
  or die ("Abfrage fehlgeschlagen ...<br><br>"); 


/* solange entsprechende Datensätze geliefert werden, diese nun auswerten */ 
while($row = mysql_fetch_array($result)) 
{ 
/* Entweder einer Variablen zuweisen */ 

  $bannane =$row[0]; 

} 

if($bannane > 0){ 
echo 'du kannst nicht mehr geben als du hast';

$aendern = "UPDATE plus_signup Set bannane=bannane - 1 WHERE userid='$_SESSION[userid]'"; 
$update = mysql_query($aendern); 
    $bannane = 0; 
   
}

aber er geht trozdem ins minus
 
Zuletzt bearbeitet:
jetzt zu meiner letzen frage.

kann ich das auch überdiese switchabfrage lösen wenn ich ein ein neues level kommen dann solln auch neue waren frei geschaltet werden? oder besser auch über so eine if abfrage?

da stehe ich noch etwas auf dem schlauch. Ich kann ja alle waren anzeigen lassen die man machenkann aber das eben alle waren blockiert sind bis man das entsprechende level erreicht hat
 
Du könntest eine 2.e Tabelle WarenLvl machen mit Spalte UserID und alle Warren.
Ins Switch-Case setzt du bei entsprechenden Level die Variable deiner Ware auf 1.
zb $Banane=1;
Zusätzlich noch ein
$NewWare=1;
Bsp:
PHP:
// Vor der Switchabfrage alle Waren auf NULL setzen $Banane=0; $Ware2=0; usw.
    case $punkte >= 25 && !($Level >= 2):
        $levelNeu=2;
		$Banane=1;
		$NewWare=1;
        break;

Damit nicht jedesmal sinnlos ein Update gemacht wird prüfst du (siehe Code) ob $NewWare überhaupt gesetzt ist.

Das Update unter der Switch-Abfrage erweiterst du etwa so
PHP:
if ($levelNeu != $Level) {
$aendern="UPDATE plus_signup SET Level = $levelNeu, Puller=Puller+$PullerNeu  where userid='$_SESSION[userid]'";
$update = mysql_query($aendern);
	if ($NewWare != 0) {
		aendern="UPDATE WarenLvl SET Banane= $Banane, Ware2 = $Ware2, Ware3 = $Ware3  where userid='$_SESSION[userid]'";
		$update = mysql_query($aendern);
		// Datensatz zum ersten mal erstellen falls nochnicht vorhanden
		if (mysql_affected_rows() == 0) {
			mysql_query("INSERT INTO
							WarenLvl
								(userid,
								Banane,
								Ware2,
								Ware3)
							VALUES
								('$_SESSION[userid]','$Banane','$Ware2','$Ware3')");
			if (mysql_errno()) {		
				echo mysql_errno() . ": " . mysql_error(). "\n";
			}
		}
	}
}

Tja und wenn du dann irgendwo prüfen willst ob eie Ware freigschalten ist machst du nen simples Select und schaust ob entsprechende Ware nicht 0 ist.

Das ganze geht sicher noch einfacher über Joins aber da bin ich selbst überfragt.
Es gibt da sicher viele elegantere Lösungen aber dies soll dir ja auch nur zeigen wies in etwa gehen könnte.
 
Zuletzt bearbeitet:
Vielen dank auch

aber irgendwie geht es nicht es kommt zwar keine fehler meldung aber es geht nicht


habe jetzt einen neue Tabelle erstellen mit WarenLvl

CREATE TABLE `WarenLvl` (
`waren_id` int(100) NOT NULL auto_increment,
`userid` varchar(10) collate latin1_german2_ci NOT NULL,
`apfel` varchar(1000) collate latin1_german2_ci NOT NULL,
`kaffee` varchar(1000) collate latin1_german2_ci NOT NULL,
`bannane` varchar(1000) collate latin1_german2_ci NOT NULL,
PRIMARY KEY (`waren_id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=4 ;

--
-- Daten für Tabelle `WarenLvl`
--

INSERT INTO `WarenLvl` VALUES (1, 'Sebie', '0', '0', '0');

habe aber auch in meiner ursprungstabelle die spalten waren muss ich die dort dann ganz raus nehmen?
habe in der warenLvl auch werte auf null gesetzt

habe es dann auch so eingebaut wie du geschrieben hast was mache ich denn falsch?

normaler weise muss er doch daten eintragen oder?
 
Zuletzt bearbeitet:
Liegt daran das du Vchar nutzt anstatt Int in den entsprechenden Feldern. Da du nur mit 0 und 1 arbeitest nimmst du am besten smallint oder bool.

Die Waren würde ich dann aus der Ursprungstabelle rausnehmen. Da dies sonst zu einer nicht nötigen Überbeanspruchung einer einzigen Tabelle führt. Wenn du das genauer wissen willst liesst du dir mal etwas über "Normalisierung von Datenbanken" durch.

Die Waren Tabelle täte ich als 3.e Tabelle anlegen mit UserId, und den ganzen Waren (INT).
 
Zuletzt bearbeitet:
das ist ja das komische ich bekomme gar keine fehlermeldung oder sonst was wenn icch die datei aufrufe, bleibt die seite weis obwohl ich den echo nutze.
PHP:
<?


$abfrage = "select * FROM plus_signup where userid='$_SESSION[userid]'";

/* Abfrage senden - bei Bedarf anpassen */
$result = mysql_query("select Level, punkte, name, Puller, Poller, bannane, apfel, kaffee from plus_signup where userid='$_SESSION[userid]'")
  or die ("Abfrage fehlgeschlagen ...<br><br>");
und so sieht der code aus

PHP:
<?
include "include/session.php";
include "include/z_db.php";


$abfrage = "select * FROM plus_signup where userid='$_SESSION[userid]'";

/* Abfrage senden - bei Bedarf anpassen */
$result = mysql_query("select Level, punkte, name, Puller, Poller, bannane, apfel, kaffee from plus_signup where userid='$_SESSION[userid]'")
  or die ("Abfrage fehlgeschlagen ...<br><br>");


/* solange entsprechende Datensätze geliefert werden, diese nun auswerten */
while($row = mysql_fetch_array($result))
{
/* Entweder einer Variablen zuweisen */
  $punkte = $row[0];
  $Level = $row[1];
  $name = $row[2];
  $Puller = $row[3];
  $Poller = $row[4];
  $bannane =$row[5];
  $apfel =$row[6];
  $kaffee =$row[7];

/*26 augeben */

echo 'mein_test1_wert='.$row[0].'&';//punkte
echo 'mein_test2_wert='.$row[1].'&';//level
echo 'mein_test3_wert='.$row[2].'&';//Name
echo 'mein_test4_wert='.$row[3].'&';//Puller
echo 'mein_test5_wert='.$row[4].'&';//Poller
echo 'mein_besitz1_wert='.$row[5].'&';
echo 'mein_besitz2_wert='.$row[6].'&';
echo 'mein_besitz3_wert='.$row[7];
}
 
mysql_free_result($result);

$result = mysql_query("select * FROM plus_signup where userid='$_SESSION[userid]'") 
  or die ("Abfrage fehlgeschlagen ...<br><br>"); 
$result = mysql_query("SELECT Level, punkte ,apfel, kaffee, bannane FROM plus_signup where userid='$_SESSION[userid]'");  

$row = mysql_fetch_assoc($result);  
$punkte = $row[punkte]; 
$Level = $row[Level]; 
$apfel = $row[apfel]; 
$kaffee = $row[kaffee];
$bannane = $row[bannane];

// Vor der Switchabfrage alle Waren auf NULL setzen $Banane=0; $Ware2=0; usw
$PullerNeu=0; 
switch ($punkte) { 
    case $punkte >= 0 && !($Level >= 0): 
        $levelNeu=0; 
        $PullerNeu=0;
        $apfel=1;
        $NewWare=1; 
        break;
    case $punkte >= 15 && !($Level >= 1): 
        $levelNeu=1; 
        $PullerNeu=5; 
        $kaffee=1;
        $NewWare=1;
        break; 
    case $punkte >= 25 && !($Level >= 2): 
        $levelNeu=2;
        $PullerNeu=5;
        $bannane=1;
        $NewWare=1; 
        break; 
    case $punkte >= 67 && !($Level >= 3): 
        $levelNeu=3; 
        break; 
    case $punkte >= 127 && !($Level >= 4): 
        $levelNeu=4; 
        $PullerlNeu=50; 
        break; 
    case $punkte >= 240 && !($Level >= 5): 
        $levelNeu=5; 
        break; 
    case $punkte >= 785 && !($Level >= 6): 
        $levelNeu=6; 
        break; 
    case $punkte >= 962 && !($Level >= 7): 
        $levelNeu=7; 
        break; 
    case $punkte >= 1919 && !($Level >= 8): 
        $levelNeu=8; 
        break; 
    case $punkte >= 3689 && !($Level >= 9): 
        $levelNeu=9; 
        break; 
 default: 
        $levelNeu= $level; 
        $PullerNeu=0; 
        break; 

} 
if ($levelNeu != $Level) {
$aendern="UPDATE plus_signup SET Level = $levelNeu, Puller=Puller+$PullerNeu  where userid='$_SESSION[userid]'";
$update = mysql_query($aendern);
    if ($NewWare != 0) {
        $aendern="UPDATE WarenLvl SET Banane= $banane, Kaffee = $kaffee, Apfel = $apfel  where userid='$_SESSION[userid]'";
        $update = mysql_query($aendern);
        //97 Datensatz zum ersten mal erstellen falls nochnicht vorhanden
        if (mysql_affected_rows() == 0) {
            mysql_query("INSERT INTO
                            WarenLvl
                                (userid,
                                bannane,
                                kaffee,
                                apfel)
                            VALUES
                                ('$_SESSION[userid]','$bannane','$kaffee','$apfel')");
            if (mysql_errno()) {        
                echo mysql_errno() . ": " . mysql_error(). "\n";
            }
        }
    }
} 

?>  



/* solange entsprechende Datensätze geliefert werden, diese nun auswerten */
while($row = mysql_fetch_array($result))
{
/* Entweder einer Variablen zuweisen */
  $punkte = $row[0];
  $Level = $row[1];
  $name = $row[2];
  $Puller = $row[3];
  $Poller = $row[4];
  $bannane =$row[5];
  $apfel =$row[6];
  $kaffee =$row[7];

/*26 augeben */

echo 'mein_test1_wert='.$row[0].'&';//punkte
echo 'mein_test2_wert='.$row[1].'&';//level
echo 'mein_test3_wert='.$row[2].'&';//Name
echo 'mein_test4_wert='.$row[3].'&';//Puller
echo 'mein_test5_wert='.$row[4].'&';//Poller
echo 'mein_besitz1_wert='.$row[5].'&';
echo 'mein_besitz2_wert='.$row[6].'&';
echo 'mein_besitz3_wert='.$row[7];
}
 
mysql_free_result($result);

$result = mysql_query("select * FROM plus_signup where userid='$_SESSION[userid]'") 
  or die ("Abfrage fehlgeschlagen ...<br><br>"); 
$result = mysql_query("SELECT Level, punkte ,apfel, kaffee, bannane FROM plus_signup where userid='$_SESSION[userid]'");  

$row = mysql_fetch_assoc($result);  
$punkte = $row[punkte]; 
$Level = $row[Level]; 
$apfel = $row[apfel]; 
$kaffee = $row[kaffee];
$bannane = $row[bannane];

// Vor der Switchabfrage alle Waren auf NULL setzen $Banane=0; $Ware2=0; usw
$PullerNeu=0; 
switch ($punkte) { 
    case $punkte >= 0 && !($Level >= 0): 
        $levelNeu=0; 
        $PullerNeu=0;
        $apfel=1;
        $NewWare=1; 
        break;
    case $punkte >= 15 && !($Level >= 1): 
        $levelNeu=1; 
        $PullerNeu=5; 
        $kaffee=1;
        $NewWare=1;
        break; 
    case $punkte >= 25 && !($Level >= 2): 
        $levelNeu=2;
        $PullerNeu=5;
        $bannane=1;
        $NewWare=1; 
        break; 
    case $punkte >= 67 && !($Level >= 3): 
        $levelNeu=3; 
        break; 
    case $punkte >= 127 && !($Level >= 4): 
        $levelNeu=4; 
        $PullerlNeu=50; 
        break; 
    case $punkte >= 240 && !($Level >= 5): 
        $levelNeu=5; 
        break; 
    case $punkte >= 785 && !($Level >= 6): 
        $levelNeu=6; 
        break; 
    case $punkte >= 962 && !($Level >= 7): 
        $levelNeu=7; 
        break; 
    case $punkte >= 1919 && !($Level >= 8): 
        $levelNeu=8; 
        break; 
    case $punkte >= 3689 && !($Level >= 9): 
        $levelNeu=9; 
        break; 
 default: 
        $levelNeu= $level; 
        $PullerNeu=0; 
        break; 

} 
if ($levelNeu != $Level) {
$aendern="UPDATE plus_signup SET Level = $levelNeu, Puller=Puller+$PullerNeu  where userid='$_SESSION[userid]'";
$update = mysql_query($aendern);
    if ($NewWare != 0) {
        $aendern="UPDATE WarenLvl SET Banane= $banane, Kaffee = $kaffee, Apfel = $apfel  where userid='$_SESSION[userid]'";
        $update = mysql_query($aendern);
        //97 Datensatz zum ersten mal erstellen falls nochnicht vorhanden
        if (mysql_affected_rows() == 0) {
            mysql_query("INSERT INTO
                            WarenLvl
                                (userid,
                                bannane,
                                kaffee,
                                apfel)
                            VALUES
                                ('$_SESSION[userid]','$bannane','$kaffee','$apfel')");
            if (mysql_errno()) {        
                echo mysql_errno() . ": " . mysql_error(). "\n";
            }
        }
    }
} 

?>

so wir es mir beschrieben wurde habe ich es auch gemacht. Die tabelle WerteLvl habe ich ich auch angelegt und alle felder mit smallident versehen aber die tabelle bleibt leer.

so sieht die tabelle warenLvl aus
Code:
-- 
-- Tabellenstruktur für Tabelle `WarenLvl`
-- 

CREATE TABLE `WarenLvl` (
  `userid` smallint(100) NOT NULL,
  `apfel` smallint(10) NOT NULL,
  `kaffee` smallint(10) NOT NULL,
  `bannane` smallint(10) NOT NULL,
  PRIMARY KEY  (`userid`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;

-- 
-- Daten für Tabelle `WarenLvl`
-- 

INSERT INTO `WarenLvl` VALUES (0, 0, 0, 0);
 und so die tabelle von den mitgliedern

CREATE TABLE `plus_signup` (
  `userid` varchar(10) collate latin1_german2_ci NOT NULL default '',
  `password` varchar(10) collate latin1_german2_ci NOT NULL default '',
  `email` varchar(50) collate latin1_german2_ci NOT NULL default '',
  `name` varchar(50) collate latin1_german2_ci NOT NULL default '',
  `sex` varchar(6) collate latin1_german2_ci NOT NULL default '',
  `Level` varchar(100) collate latin1_german2_ci NOT NULL default '0',
  `punkte` varchar(10000) collate latin1_german2_ci NOT NULL default '0',
  `Puller` varchar(100) collate latin1_german2_ci NOT NULL default '0',
  `Poller` varchar(100) collate latin1_german2_ci NOT NULL default '0',
  `bannane` varchar(100) collate latin1_german2_ci NOT NULL default '0',
  `apfel` varchar(100) collate latin1_german2_ci NOT NULL default '0',
  `kaffee` varchar(100) collate latin1_german2_ci NOT NULL default '0',
  PRIMARY KEY  (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;

-- 
-- Daten für Tabelle `plus_signup`
-- 

INSERT INTO `plus_signup` VALUES ('Sebie', 'XXXXXXXX ', 'xxx@xxxxxxx', 'Sebastian', 'male', '4', '178', '10', '0', '29', '17', '23');
 
Zuletzt bearbeitet:
Oh man das ist ja nen ChaosPost :)

Also zuerstmal sehe ich in deinem Code 2 mal die selbe SQL-Abfrage gefolgt von einem PHP-Tag daraufhin ein 2.es <? PHP-Anfangstag. Ist das auch im tatsächlichen Code so? Wenn ja das muss weg.

Zum 2.en musst du vor der Switch-Abfrage deine Variablen auf 0 setzen.
Also so:

PHP:
<?
include "include/session.php";
include "include/z_db.php";


$abfrage = "select * FROM plus_signup where userid='$_SESSION[userid]'";

/* Abfrage senden - bei Bedarf anpassen */
$result = mysql_query("select Level, punkte, name, Puller, Poller, bannane, apfel, kaffee from plus_signup where userid='$_SESSION[userid]'")
  or die ("Abfrage fehlgeschlagen ...<br><br>");


/* solange entsprechende Datensätze geliefert werden, diese nun auswerten */
while($row = mysql_fetch_array($result))
{
/* Entweder einer Variablen zuweisen */
  $punkte = $row[0];
  $Level = $row[1];
  $name = $row[2];
  $Puller = $row[3];
  $Poller = $row[4];
  $bannane =$row[5];
  $apfel =$row[6];
  $kaffee =$row[7];

/*26 augeben */

echo 'mein_test1_wert='.$row[0].'&';//punkte
echo 'mein_test2_wert='.$row[1].'&';//level
echo 'mein_test3_wert='.$row[2].'&';//Name
echo 'mein_test4_wert='.$row[3].'&';//Puller
echo 'mein_test5_wert='.$row[4].'&';//Poller
echo 'mein_besitz1_wert='.$row[5].'&';
echo 'mein_besitz2_wert='.$row[6].'&';
echo 'mein_besitz3_wert='.$row[7];
}
 
mysql_free_result($result);

$result = mysql_query("select * FROM plus_signup where userid='$_SESSION[userid]'") 
  or die ("Abfrage fehlgeschlagen ...<br><br>"); 
$result = mysql_query("SELECT Level, punkte ,apfel, kaffee, bannane FROM plus_signup where userid='$_SESSION[userid]'");  

$row = mysql_fetch_assoc($result);  
$punkte = $row[punkte]; 
$Level = $row[Level]; 
$apfel = $row[apfel]; 
$kaffee = $row[kaffee];
$bannane = $row[bannane];

// Vor der Switchabfrage alle Waren auf NULL setzen $Banane=0; $Ware2=0; usw
$PullerNeu=0; 
$apfel=0;
$kaffee=0;
$bannane=0;
switch ($punkte) { 
    case $punkte >= 0 && !($Level >= 0): 
        $levelNeu=0; 
        $PullerNeu=0;
        $apfel=1;
        $NewWare=1; 
        break;
    case $punkte >= 15 && !($Level >= 1): 
        $levelNeu=1; 
        $PullerNeu=5; 
        $kaffee=1;
        $NewWare=1;
        break; 
    case $punkte >= 25 && !($Level >= 2): 
        $levelNeu=2;
        $PullerNeu=5;
        $bannane=1;
        $NewWare=1; 
        break; 
    case $punkte >= 67 && !($Level >= 3): 
        $levelNeu=3; 
        break; 
    case $punkte >= 127 && !($Level >= 4): 
        $levelNeu=4; 
        $PullerlNeu=50; 
        break; 
    case $punkte >= 240 && !($Level >= 5): 
        $levelNeu=5; 
        break; 
    case $punkte >= 785 && !($Level >= 6): 
        $levelNeu=6; 
        break; 
    case $punkte >= 962 && !($Level >= 7): 
        $levelNeu=7; 
        break; 
    case $punkte >= 1919 && !($Level >= 8): 
        $levelNeu=8; 
        break; 
    case $punkte >= 3689 && !($Level >= 9): 
        $levelNeu=9; 
        break; 
 default: 
        $levelNeu= $level; 
        $PullerNeu=0; 
        break; 

} 
if ($levelNeu != $Level) {
$aendern="UPDATE plus_signup SET Level = $levelNeu, Puller=Puller+$PullerNeu  where userid='$_SESSION[userid]'";
$update = mysql_query($aendern);
    if ($NewWare != 0) {
        $aendern="UPDATE WarenLvl SET Banane= $banane, Kaffee = $kaffee, Apfel = $apfel  where userid='$_SESSION[userid]'";
        $update = mysql_query($aendern);
        //97 Datensatz zum ersten mal erstellen falls nochnicht vorhanden
        if (mysql_affected_rows() == 0) {
            mysql_query("INSERT INTO
                            WarenLvl
                                (userid,
                                bannane,
                                kaffee,
                                apfel)
                            VALUES
                                ('$_SESSION[userid]','$bannane','$kaffee','$apfel')");
            if (mysql_errno()) {        
                echo mysql_errno() . ": " . mysql_error(). "\n";
            }
        }
    }
} 

?>

Tja und wenn du deinen Code so ersetzt hast muss ich erstmal wissen ob die Seite immernoch "weiss" bleibt. Wenn nicht und es sindimmernoch Fehler drinnen dann gehts ans debugging. Dazu nimmst du ein echo "Code wird hier ausgeführt"; und schaust an welcher Stelle das echo geht und wo nicht. Wenn es dann immernoch keine Fehlermeldung wirft musst du das SQL debuggen. Dazu hat Yaslaw ein sehr gutes Tutorial geschrieben.
 
Zurück