DB speichert INT-Werte nur bis 10 und fängt neu an zu zaehlen...

Sheeky
Hallo Forum! großes Grinsen

Forens.: WBBlite 1.0.2

Ich habe mal eine Frage zu einem kleinen Mini-Code, den ich geschrieben habbe. Da ich kein 'Kiss-Hack' o.V. mehr gefunden habe und ohnehin einen wollte, der sofort '+1' zaehlt, wenn man im Profil auf 'Kissen' klickt, habe ich eben selber einen geschrieben.

Die PHP Datei sieht so aus:

<?php
$filename="kiss.php";
require("./global.php");

if(!$wbbuserdata['userid']) access_error();

$action=$_REQUEST['action'];
$userid=$_REQUEST['userid'];

if($wbbuserdata['userid'] == "$userid"){
$error_msg="Sie können sich nicht selbst küssen.";
eval("\$tpl->output(\"".$tpl->get("error")."\");");
exit();
}

$kiss=$db->query_first("SELECT * FROM bb".$n."_users WHERE userid='".$userid."'");
$kiss=$kiss['user_kiss'];

if($action == "send"){
$kiss=$kiss['user_kiss']+1;
$db->query("UPDATE bb".$n."_users SET user_kiss='$kiss' WHERE userid='".$userid."'");
$url = "../profile.php?userid=$userid";
header("Location: " . $url);
}
else
{
$error_msg="Es ist ein Fehler aufgetreten. Bitte wende dich an einen Administrator.";
eval("\$tpl->output(\"".$tpl->get("error")."\");");
exit();
}
?>

Mein Problem: Soweit funktioniert alles. Nur wenn ein User nun 10 Kiss erhalten hat und dann noch einmal geküsst wird, faengt die Datenbank wieder von 1 an zu zaehlen.

Die Spalte ist in der Datenbank normal unter bb*_users angelegt, wie z.B. andere Funktionen auch, die augenscheinlich genauso funktionieren und auch gehen. (Typ: INT, Standard: 0)

Vll. kann mir dabei ja wer helfen! verwirrt
Beckebans
Ich würde ich das lieber "Küssen" nennen, nicht "Kissen" Zunge raus


Welche Länge hat das Feld denn in der Datenbank? Wenn das int(1) ist, können nur einstellige Zahlen gespeichert werden.


Hier ein paar kleine Änderungen am Code:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
<?php
 $filename="kiss.php";
 require("./global.php");

 if(!$wbbuserdata['userid']) access_error();

 if(isset($_REQUEST['action'])) $action=$_REQUEST['action'];
 else $action="error";
 if(isset($_REQUEST['userid'])) $userid=intval($_REQUEST['userid']);
 else $userid=0;

 if($wbbuserdata['userid'] == $userid) {
  $error_msg="Sie können sich nicht selbst küssen.";
  eval("\$tpl->output(\"".$tpl->get("error")."\");");
  exit();
 }

 if($action == "send") {
  $kiss_db=$db->query_first("SELECT user_kiss FROM bb".$n."_users WHERE userid='".$userid."'");
  $kiss=$kiss_db['user_kiss']+1;
  $db->query("UPDATE bb".$n."_users SET user_kiss='".$kiss."' WHERE userid='".$userid."'");
  header("Location: profile.php?userid=$userid");
 } else {
  $error_msg="Es ist ein Fehler aufgetreten. Bitte wende dich an einen Administrator.";
  eval("\$tpl->output(\"".$tpl->get("error")."\");");
  exit();
 }
?>
Sheeky
Wieso geht das jetzt bei deinem Code und bei meinem nicht? unglücklich

Aber vielen Dank! Freude Nächstes Problem:

Nun würde ich gerne einbauen, dass ein User genau 100x am Tag küssen kann und dann eine Sperre bis zum naechsten Tag erhaelt. Da ich nicht genau weiß, wie ich das mit PHP realisieren soll, wuerde ich gerne einen Cronjob verwenden (es sei denn jemand belehrt mich eines besseren. smile ..)

Meine PHP-Datei sieht nun so aus:

<?php
$filename="kiss.php";
require("./global.php");

if(!$wbbuserdata['userid']) access_error();

if(isset($_REQUEST['action'])) $action=$_REQUEST['action'];
else $action="error";
if(isset($_REQUEST['userid'])) $userid=intval($_REQUEST['userid']);
else $userid=0;

$kiss_db=$db->query_first("SELECT user_kiss FROM bb".$n."_users WHERE userid='".$userid."'");
$kiss_max_db=$db->query_first("SELECT user_kiss_max FROM bb".$n."_users WHERE userid='".$wbbuserdata['userid']."'");

if($wbbuserdata['userid'] == $userid) {
$error_msg="Sie können sich nicht selbst küssen.";
eval("\$tpl->output(\"".$tpl->get("error")."\");");
exit();
}

if($kiss_max_db['user_kiss_max'] == 0) {
$error_msg="Du hast für heute bereits genug geküsst.";
eval("\$tpl->output(\"".$tpl->get("error")."\");");
exit();
}

if($action == "send") {

$kiss=$kiss_db['user_kiss']+1;
$db->query("UPDATE bb".$n."_users SET user_kiss='".$kiss."' WHERE userid='".$userid."'");
$kiss_max=$kiss_max_db['user_kiss_max']-1;
$db->query("UPDATE bb".$n."_users SET user_kiss_max='".$kiss_max."' WHERE userid='".$wbbuserdata['userid']."'");
header("Location: profile.php?userid=$userid");
} else {
$error_msg="Es ist ein Fehler aufgetreten. Bitte wende dich an einen Administrator.";
eval("\$tpl->output(\"".$tpl->get("error")."\");");
exit();
}
?>

Das funktioniert alles tadellos. Danke nochmal. smile

Dazu habe ich eine Spalte in der DB eingefügt mit dem definierten Wert 100 als Standard.


Nun die Datei, die ich gerne als Cronjob benutzen wuerde:

<?php
$filename="kiss_cronjob.php";
require("./global.php");

$kiss_max_db=$db->query_first("SELECT user_kiss_max FROM bb".$n."_users);
$kiss_max=100;
$kiss_max=$kiss_max_db['user_kiss_max'];
$db->query("UPDATE bb".$n."_users SET user_kiss_max='".$kiss_max."');

?>

Und zwar soll diese Datei einfach nur alle 'user_kiss_max' wieder auf 100 auffüllen, wenn das Script ausgeführt wird. Klappt nur irgendwie nicht wie gewollt. unglücklich

Wäre super, wenn da auch nochmal jemand drueber gucken koennte. smile
Beckebans
Ich würde noch dieses:
php:
1:
if($kiss_max_db['user_kiss_max'] == 0) {

durch dies ersetzen:
php:
1:
if($kiss_max_db['user_kiss_max'] <= 0) {


und dieses:
php:
1:
$kiss_max=$kiss_max_db['user_kiss_max']-1;

durch dies ersetzen:
php:
1:
2:
if($kiss_max_db['user_kiss_max'] >= 1$kiss_max=$kiss_max_db['user_kiss_max']-1;
else $kiss_max=0;




Als Cronjob kannste mal dies testen, das sollte reichen:
php:
1:
2:
3:
4:
5:
6:
7:
<?php
 $filename="kiss_cronjob.php";
 require("./global.php");

 $db->query("UPDATE bb".$n."_users SET user_kiss_max='100'");

?>



Allerdings setzt die Datei den Wert bei jedem Aufruf auf 100 zurück. Die musste noch irgendwo hinpacken (und Pfad zur global.php anpassen), dass die keiner zufällig findet und aufruft.
Sheeky
Uh. Sehr schoen! Funktioniert super. Sowohl der Code, als auch mein Cronjob. - Hab die Datei einfach etwas kryptischer genannt. Freude

Dankeee. Augenzwinkern