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

bastiekleve

Mitglied
Hallo Liebe Mitglieder

Ich bin der Sebatian. und bin 34 Jahre alt. Ich habe da ein problem

Undzwar.

Ich habe eine Msyql tabelle in der werte gespeichert werden un nach aktion automatisch erhöht werden. ( Punkte)


so jetzt meine frage ich möchte nun das wenn die punkte einen gewissen wert haben das dann in der gleichen tabelle eine ander spalte automatisch um eines erhöt wird.( Level)

Als Beispiel:

ein mitglied hat 148 punkte und ist noch in level null bei erreichen von 200 Punkten soll er in Level 1 kommen.

Wie stelle ich das nun an das das Level dann automatisch angehoben wird wenn ein wert erreicht ist.

Da ich mir im mpment das PHP und MYSQL selber beibringe und ich auch schon durch einiges nachlasen etwas eineignen konnte konnte ich schon ein paar probleme selber beheben aber das oben gennat bekomme ich einfach nicht hin

Vielen dank für eure Hilfe
 
Hallo bastiekleve,

du könntest eine IF-Abfrage machen die prüft ob der Wert nun >= 200 ist. Wenn die Bedingung erfüllt ist machst du ein UPDATE in Level und Wert in entsprechender Tabelle.

PHP:
if ($Punkte >= 200) {
$PunkteNeu=$Punkte;
$LevelNeu=1;
	$sql  =("UPDATE
				Tabellenname
			SET
				Punkte='$PunkteNeu',
				Level='$LevelNeu'
			Where
				Username='$Username'");
	mysql_query($sql);				
	//echo $sql;				
	if (mysql_errno()) {		
		echo mysql_errno() . ": " . mysql_error(). "\n";
	}
}

Da es ja vermutlich mehrere Level werden wäre allerdings eine Switch-Case Abfrage besser.

Ich hoffe das hilft dir weiter.
 
Um das level um eins zu erhöhen sollte der Query allerding so aussehen:
PHP:
$userid = 1;
$result = mysql_query("SELECT * FROM `points` WHERE `userid` = '".$userid."'");
$row   = mysql_fetch_assoc($result);
if( $row['points'] > 200 ){
  mysql_query("UPDATE `points` SET `level` = `level`+1 WHERE `userid` = '".$userid."'");
}

// bessere Möglichkeit
// wenn beispielsweise alle 200 Punkte ein Levelup erfolgen soll:
$level = floor($row['points']/200);
if( $level > $row['level'] )
  mysql_query("UPDATE `points` SET `level`  = '".$level."' WHERE `userid` = '".$userid."'");

Außerdem sollte man sich lieber IDs anlegen, statt nach usernamen zu gehen.
 
Recht hast Timestamp , etwas eleganter gelöst :)

Im allgemeinen wird immer mit IDs umgangen. Ich persönlich nutze Usernamen da ichs gerne übersichtlich habe und alles soffort erkennen kann. Die Usernamen sind dann halt meine IDs. Habe jetzt noch nicht erkennen können ob das Nachteile bietet, ich hoffs aber mal nicht.
 
Hallo******


Danke euch vielmals aber ich bin anscheint zu blöd das hinzubekommen er macht es nicht

wo muss ich das denn einbauen?

Ich habe folgendes script
<?
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 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];

/* augeben */
echo 'mein_test3_wert='.$row[2].'&';//Name
echo 'mein_test1_wert='.$row[0].'&';//punkte
echo 'mein_test2_wert='.$row[1];//level

}



mysql_free_result($result);

?>

ich weis auch nicht mehr weiter bitte helft mir
 
Bitte benutze [code=php] [/code] um deinen Code leserlicher zu gestalten.
Die while-Schleife ist überflüssig, da userids nur einmal vorkommen und du dementsprechend nur einen Datensatz zurückbekommst.
Nach dem Ausführen von mysql_fetch_array kannst du überprüfen, wie groß die Punkte sind (mittels switch/if) und je nach dem dann die entsprechenden Aktionen ausführen. Es ist übrigens einfacher mit assoziativen arrays als mit numerischen zu arbeiten ;)
 
häää ich verstehe im moment nur bahnhof.

wo müsste ich das denn einbauen? ok die while schleife kann ich raus nehmen. Aber es löst nicht mein problem
gesetz dem fall ich mache das mal

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

/* Abfrage senden - bei Bedarf anpassen */
$result = mysql_query("select Level,punkte, name from plus_signup where userid='$_SESSION[userid]'")
or die ("Abfrage fehlgeschlagen ...<br><br>");
$result = mysql_query("SELECT * FROM `points` WHERE `userid` = '".$userid."'");
$row   = mysql_fetch_assoc($result);
if( $row['points'] > 200 ){
  mysql_query("UPDATE `points` SET `level` = `level`+1 WHERE `userid` = '".$userid."'");
}


mysql_free_result($result);


meinst du das in etwa so?
 
So ist das schonmal nicht schlecht. Das Problem ist jetzt nur, sobald die Punktzahl größer als 200 ist, wird bei jedem Aufruf des Scriptes das level erhöht. Außerdem musst du den unteren Query noch an deine Tabelle anpassen ;)
 
Das könntest du in etwa so machen:

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

/* Abfrage senden - bei Bedarf anpassen */
$result = mysql_query("select Level,punkte, name from plus_signup where userid='$_SESSION[userid]'")
or die ("Abfrage fehlgeschlagen ...<br><br>");
$result = mysql_query("SELECT * FROM `points` WHERE `userid` = '".$userid."'");
$row   = mysql_fetch_assoc($result);
$points = $row['points'];
$level = $row['level'];

switch ($points) {
    case $points >= 200 && !($level >= 1):
		$levelNeu=1;
		break;
	case $points >= 600 && !($level >= 2):
		$levelNeu=2;
		break;
	case $points >= 1500 && !($level >= 3):
		$levelNeu=3;
		break;
	default:
		$levelNeu= $level;
		break;
}
if ($levelNeu != $level) {
	mysql_query("UPDATE `points` SET `level` = `$levelNeu` WHERE `userid` = '".$userid."'");
}

Habs jetzt nicht getestet sollte aber funktionieren.
 
Zuletzt bearbeitet:
Zurück