Seite 1 von 2
HTTP_GET_VARS Problem
Verfasst: 01.09.2007 18:47
von phillip
Hallo
Ich will, dass wenn z.B die URL
profile.php?mode=register&userid=2
aufgerufen wird, dem jeweiligem Benutzer mit der user_id 10 points gutgeschrieben werden.
Ich habe folgendes unterhalb dieser langen INSERT Angabe in der usercp_register eingefügt:
Code: Alles auswählen
if( isset($HTTP_GET_VARS['userid'] ) || isset($HTTP_POST_VARS['userid']) )
{
$userid = ( isset($HTTP_GET_VARS['userid']) ) ? $HTTP_GET_VARS['userid'] : $HTTP_POST_VARS['userid'];
$sql = "UPDATE " . USERS_TABLE . "
SET user_points = user_points + 10
WHERE user_id = $userid";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update users table', '', __LINE__, __FILE__, $sql);
}
}
Leider macht er mir aber keine Variable, bzw. die $userid kommt nicht zu stande.
Was ist daran falsch?
Verfasst: 01.09.2007 19:00
von Ivan
Befindet sich dein Codeschnipsel auch an einer "erreichbaren" Stelle?
Und hast du testweise mal ne Ausgabe simuliert, ob du überhaupt in deine if-Verzweigung rein kommst?
Gruß
Ivan
Verfasst: 01.09.2007 19:02
von phillip
ja das hab ich gemacht. hab
$userid = ( isset($HTTP_GET_VARS['userid']) ) ? $HTTP_GET_VARS['userid'] : $HTTP_POST_VARS['userid'];
einmal ganz oben reingestellt, dann per echo erfolgreich augegeben.
Jetzt ists weiter unten, und es klappt nicht mehr...
Verfasst: 01.09.2007 23:16
von fanrpg
Wenn ich noch was anmerken dürfte.. den Code würde ich nicht in mein Forum einbauen.. Superglobale direkt in eine Query einzubinden..
Hier mal was zu lesen (auch der Rest ist sehr interessant!):
http://www.cms-sicherheit.de/module-blo ... pid-4.html
Verwende zumindest intval() in dem Fall da ne user-id nur zahlen sind.
Verfasst: 01.09.2007 23:54
von phillip
mhh, irgendwie versteh ich den Zusammenhang nicht ganz...
http://www.php-resource.de/handbuch/function.intval.htm
Verfasst: 02.09.2007 00:13
von fanrpg
intval() gibt dir einen Integer zurück.. und Integer sind immer ganze Zahlen.
Könntest natürlich auch floatval() nehmen.. wenn du kommastellen brauchst...
Ansonsten halt
http://de3.php.net/manual/de/function.m ... string.php
Verfasst: 02.09.2007 00:15
von phillip
ja das ist klar, aber für was brauch ich denn das? irgendwie check ichs jetzt nicht ganz, ist schon früh ^^
ah oder meinst du, ich soll das Ganze
userid=2
reinnehmen?
Verfasst: 02.09.2007 00:18
von fanrpg
Nein...
Code: Alles auswählen
<?php
$userid = ( isset($HTTP_GET_VARS['userid']) ) ? intval($HTTP_GET_VARS['userid']) : intval($HTTP_POST_VARS['userid']);
?>
Eher so.
$_POST, $_GET und Co. sind keine Integerwerte.. wenn du diese durch intval() jagst werden die Inhalte nach Integer konventiert und verlieren somit alles was nicht Zahlen sind, bzw. bei Zahlen in anderem Format wird die Zahl als Integer zurückgegeben und wenn keine Zahl drin vorkommt einfach eine 0.
Verfasst: 02.09.2007 01:10
von phillip
ach sooo! ja jetzt ^^ das mit diesen $_POST, $_GET und Co muss ich auch noch ein bisschen üben...
jetzt sieht das Ganze so aus:
Code: Alles auswählen
$userid = ( isset($HTTP_GET_VARS['userid']) ) ? intval($HTTP_GET_VARS['userid']) : intval($HTTP_POST_VARS['userid']);
$sql = "UPDATE " . USERS_TABLE . "
SET user_points=user_points+10
WHERE user_id = $userid";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update users table', '', __LINE__, __FILE__, $sql);
}
Der Link =
profile.php?mode=register&userid=2
Ich weiss jetzt aber nicht wo ich das am Besten einbaue, habs schon an ein paar Stellen versucht...z.B direkt unter der langen INSERT (usercp_register natürlich)
Gibt es noch eine Möglichkeit, das UPDATE nur dann vorzunehmen, wenn
vorhanden ist?
Verfasst: 02.09.2007 01:30
von fanrpg
Code: Alles auswählen
$userid = ( isset($HTTP_GET_VARS['userid']) ) ? intval($HTTP_GET_VARS['userid']) : intval($HTTP_POST_VARS['userid']);
if( $userid > 0 )
{
$sql = "UPDATE " . USERS_TABLE . "
SET user_points=user_points+10
WHERE user_id = $userid";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update users table', '', __LINE__, __FILE__, $sql);
}
}
Sollte funktionieren
Wo du das einbaust.. ja da muss man gucken.
Ich würde es vllt. davor packen:
Code: Alles auswählen
if ( $mode == 'editprofile' )
{
$user_id = intval($HTTP_POST_VARS['user_id']);
$current_email = trim(htmlspecialchars($HTTP_POST_VARS['current_email']));
}
Oder vor:
Code: Alles auswählen
if ( isset($HTTP_POST_VARS['submit']) )
{
include($phpbb_root_path . 'includes/usercp_avatar.'.$phpEx);
Mit einer zusätzlichen Prüfung auf mode=register.
Oder oder.. es gibt genug Stellen und solange du kein Mod draus machst.. muss es auch nicht unbedingt an der "richtigen" Stelle sein, höchstens es funktioniert.