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... :D

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

Code: Alles auswählen

&userid=
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 :wink:

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.