webForumDet fria alternativet

Behöver hjälp med "fnuttarna"

PHP

6 svar · 483 visningar · startad av lillebror

Medlem sedan apr. 20041 597 inlägg
Frågan#1

Hej,

Jag får inte till det med fnuttarna i en sträng som ska in i databasen. Så här ser du ut:

if(trim($_POST['sendsurvey']) == 'Skicka enkät') {
	
	$RSobjPolls = getPolls(1);
	
	while($poll = mysql_fetch_array($RSobjPolls)) {
		
		while($pollMatch = mysql_fetch_array(getPollMatch($poll['pollID']))) { 
			
			$pollAlternative = getAlternative($pollMatch['alternativeID']);
			
			if(!empty($pollAlternative['alternativeText'])) {
				$pollTemp = $poll['pollID'];
				
				[B]RAD22[/B] $sqlInsert = "INSERT INTO tblpollanswer (pollMatchID, memberID, date_time) VALUES ('$_POST['$pollTemp']', '$_SESSION["uid"]', now())";
				$RSobj = mysql_query($sqlInsert) or die (mysql_error());
			} else if (!empty($pollAlternative['alternativeNum'])) {
				$pollTemp = $poll['pollID'];
				
				$sqlInsert = "INSERT INTO tblpollanswer (pollMatchID, memberID, date_time) VALUES ('$_POST['$pollTemp']', '$_SESSION["uid"]', now())";
				$RSobj = mysql_query($sqlInsert) or die (mysql_error());
			} else if (!empty($pollAlternative['alternativeFreetext'])) {
				$pollTemp = $poll['pollID'];
				
				$sqlInsert = "INSERT INTO tblpollanswer (pollMatchID, memberID, freetext, date_time) VALUES ('$poll['pollID']', '$_SESSION["uid"]', '$_POST['$pollTemp']', now())";
				$RSobj = mysql_query($sqlInsert) or die (mysql_error());
			}
		}
	}
}
?>

Någon som ser vad som är fel?

Får följande felmeddelande:
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /xxx/poll.php on line 22

Medlem sedan mars 20041 505 inlägg
#2

Vilken rad är 22?

Jag gissar på att '$_POST['$pollTemp']' måste bytas ut mot {'$_POST['$pollTemp']'} men jag är inte säker.

En sak som jag är säker på dock är att din kod är helt öppen för så kallade SQL-injections eftersom du använder indata från POST-variablerna direkt i en SQL-fråga. Sök mer om detta i forumet så hittar du säkert info om hur du ska skydda dig.

Medlem sedan apr. 20041 597 inlägg
#3

Jag försökte skriva rad med en kommentar med då tog php-parsern bort det. RAD 22 står rätt högt upp i koden inom FET-klammrar framför ett $sqlInsert-statement! :)

Medlem sedan mars 20041 505 inlägg
#4

lillebror, aha titta nu såg jag det! Läs mitt tidigare svar. :)

Medlem sedan apr. 20041 597 inlägg
#5

Troxy skrev:

En sak som jag är säker på dock är att din kod är helt öppen för så kallade SQL-injections eftersom du använder indata från POST-variablerna direkt i en SQL-fråga.

Räcker det med att mellanlagra POST-värdena i en lämplig variabel som jag därefter stoppar in i SQL-satsen? Är jag av med problemet då? Jag brukar inte ha POST-variablerna direkt så men nu höll jag på och testade och var lite lat :e

Medlem sedan mars 20041 505 inlägg
#6

lillebror, du måste köra variablerna genom en funktion som escape:ar alla farliga tecken, exempelvis funktionen mysql_real_escape_string() (som för övrigt är ett hemskt namn på en funktion enligt mig).

Medlem sedan mars 20034 471 inlägg
#7

Troxy skrev:

lillebror, du måste köra variablerna genom en funktion som escape:ar alla farliga tecken, exempelvis funktionen mysql_real_escape_string() (som för övrigt är ett hemskt namn på en funktion enligt mig).

Nja, troligen är väl magic_quotes_gpc och då är det inte öppet för SQL Injections.

Om den är av, däremot måste du för hand se till att inget otrevligt händer. Det måste du i så fall göra med samtliga get, post och cookies värden. Även sådana som används i SELECT-satser. Brukar så vitt jag förstår kunna lösas med add_slashes resp strip_slashes. Om du byter namn på variabeln gör det ingen nytta, för innehållet ändras inte. Om du inte vet kan du kolla mha get_magic_quotes_gpc

Däremot tycker jag att Troxys förslag fortfarande ser skumma ut.

//Byt istället
"INSERT INTO tblpollanswer (pollMatchID, memberID, date_time) 
VALUES ('$_POST['$pollTemp']', '$_SESSION["uid"]', now())"; 

//mot
"INSERT INTO tblpollanswer (pollMatchID, memberID, date_time) 
VALUES ('".$_POST["$pollTemp"]."', '".$_SESSION["uid"]."', now())"; 

//och om du inte har magic_quotes_gpc på:
"INSERT INTO tblpollanswer (pollMatchID, memberID, date_time) 
VALUES ('".add_slashes($_POST["$pollTemp"])."', '".$_SESSION["uid"]."', now())";
256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)