in SQL-Abfrage ein ' einbinden

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.
Antworten
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

in SQL-Abfrage ein ' einbinden

Beitrag von Gumfuzi »

Hallo Leute,

wie kann ich bei folgendem Code

Code: Alles auswählen

$sql='INSERT INTO `phpbb_total_scores` VALUES (' . $c . ',"' . $user . '",' . $mon[$user] . ',' . $hi[$user] . ',' . $total . ')';
erzwingen, daß die Variable $user von einem ' begrenzt übergeben wird.

Beispiel:
falsch:

Code: Alles auswählen

INSERT INTO `phpbb_total_scores` VALUES (2,Spieler,10,20,300);
richtig:

Code: Alles auswählen

INSERT INTO `phpbb_total_scores` VALUES (2,'Spieler',10,20,300);
ein "\" voranstellen klappt nicht, auch nicht "'"...
Wer kann mir da einen Tipp geben?
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Code: Alles auswählen

$sql="INSERT INTO `phpbb_total_scores` VALUES ($c, '$user', {$mon[$user]}, {$hi[$user]}, $total)";
dürfte wohl das einfachste sein...

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

Hallo PhillippK,

danke für die rasche Antwort, hat funktioniert, allerdings wird trotzdem nix in die DB geschrieben, auch wenn ich via phpmyAdmin reinschaue, steht nix drin, wenn ich den durch "echo" ausgegebenen SQL-Befehl per phpMYAdmin einfüge, funzt es:

Code: Alles auswählen

while($row = $db->sql_fetchrow($result))
{
	$user = $row['username'];
	if ($mon[$user] > 0 OR $hi[$user] > 0)
	{
		$c = $c + 1;
		$total = $mon[$user] * $monat + $hi[$user] * $ewig;
		if ($mon[$user] == 0) {$mon[$user] = "0";}
		if ($hi[$user] == 0) {$hi[$user] = "0";}
		$sql="INSERT INTO `phpbb_total_scores` VALUES ($c, '$user', {$mon[$user]}, {$hi[$user]}, $total)";
		echo $sql;
	}
}
woran liegt das?

Hier der ganze Code, falls nötig:

Code: Alles auswählen

$sql = 'DELETE FROM `phpbb_total_scores`';
$monat = 2;
$ewig = 5;

$sql='SELECT highscore_player, Count(*) AS Anzahl FROM `phpbb_ina_highscore` WHERE `highscore_mon` = ' . date("m", time()) . ' AND `highscore_year` = ' . date("Y", time()) . ' GROUP BY highscore_player';
if(!$result = $db->sql_query($sql)) {
	message_die(GENERAL_ERROR, 'Fehler beim Auslesen der HiScore-Informationen', '', __LINE__, __FILE__, $sql);
}

while($row = $db->sql_fetchrow($result))
{
	$mon[$row['highscore_player']] = $row['Anzahl'];
}


$sql = "SELECT * FROM " . iNA_GAMES . "
	ORDER BY game_name";
if( !$result = $db->sql_query($sql) )
{
	message_die(GENERAL_ERROR, $lang['no_game_data'], "", __LINE__, __FILE__, $sql);
}
$game_count = $db->sql_numrows($result);
$game_rows = $db->sql_fetchrowset($result);

for($i = 0; $i < $game_count; $i++)
{
	$game_id = $game_rows[$i]['game_id'];
	$game_name = $game_rows[$i]['game_name'];
		if ($game_rows[$i]['reverse_list'])
	{
		$list_type = 'ASC';
	}
	else
	{
		$list_type = 'DESC';
	}
		$sql = "SELECT * FROM " . iNA_SCORES . " 
        WHERE game_name = '" . $game_name . "' 
        ORDER BY score $list_type, date ASC";
	 if(!$result = $db->sql_query($sql))
	{
		message_die(GENERAL_ERROR, $lang['no_score_data'], "", __LINE__, __FILE__, $sql);
	}
	$score_info = $db->sql_fetchrow($result);
	$best_player[$i] = $score_info['player'];
	$arr[$best_player] = $arr[$best_player] + 1;
}

$zaehle = array_count_values($best_player);
while(list($key, $val) = each($zaehle))
{
	$hi[$key] = $val;
}

$sql = "SELECT username FROM " . USERS_TABLE . " ORDER BY username";
if( !$result = $db->sql_query($sql) )
{
	message_die(GENERAL_ERROR, $lang['no_user_data'], "", __LINE__, __FILE__, $sql);
}

while($row = $db->sql_fetchrow($result))
{
	$user = $row['username'];
	if ($mon[$user] > 0 OR $hi[$user] > 0)
	{
		$c = $c + 1;
		$total = $mon[$user] * $monat + $hi[$user] * $ewig;
		if ($mon[$user] == 0) {$mon[$user] = "0";}
		if ($hi[$user] == 0) {$hi[$user] = "0";}
		$sql="INSERT INTO `phpbb_total_scores` VALUES ($c, '$user', {$mon[$user]}, {$hi[$user]}, $total)";
		echo $sql;
	}
}

$sql = 'SELECT * FROM `phpbb_total_scores` ORDER BY total';
if( !$result = $db->sql_query($sql) )
{
	message_die(GENERAL_ERROR, $lang['no_user_data'], "", __LINE__, __FILE__, $sql);
}
while($row = $db->sql_fetchrow($result))
{
	$x = $x + 1;
	$template->assign_block_vars("total", array(
		"PLATZ" => $x,
		"NAME" => $row['player'],
		"MON_ANZ" => $row['mon_total'],
		"HI_ANZ" => $row['hi_total'],
		"TOTAL" => $row['total']
	));
}
*edit*
es wird nichtmal die Tabelle entleert... (siehe erste Zeile im Code)
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Du solltest die SQL-Abfrage auch ausführen... :roll:

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

Mann bin ich ein.... - das habe ich glatt vergessen:
$db->sql_query($sql)

Danke für Deine Geduld und Deine rasche Hilfe!!!!!!!
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Was soll eigentlich das bezwecken?

Code: Alles auswählen

if ($mon[$user] == 0) {$mon[$user] = "0";} 
      if ($hi[$user] == 0) {$hi[$user] = "0";}
Wenn es 0 ist auf 0 setzen :D
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

:oops:
damit wollte ich testen, ob mySQL bei der Übergabe eine "0" braucht, oder ob es auch mit zwei Kommas ohne Wert dazwischen geht - hatte es wohl vergessen, wieder wegzulöschen... *gg*

*edit*
Doch, es hat einen Sinn!!!!!

Wenn ich die zwei Zeilen rausnehme, dann werden die Spieler ignoriert, die bei einem der Werte 0 ist - :roll:
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
Antworten

Zurück zu „Coding & Technik“