HTTP_GET_VARS Problem

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

HTTP_GET_VARS Problem

Beitrag 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?
Benutzeravatar
Ivan
Mitglied
Beiträge: 267
Registriert: 28.12.2004 17:26
Wohnort: Mössingen, BW
Kontaktdaten:

Beitrag 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
Der Götterbote - Die Zeitung von The-Arena
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag 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...
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag 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.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

mhh, irgendwie versteh ich den Zusammenhang nicht ganz...

http://www.php-resource.de/handbuch/function.intval.htm
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag 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
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag 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?
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag 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.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag 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?
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag 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.
Antworten

Zurück zu „Coding & Technik“