Hoi,

Ik ben nu al eventjes bezig met een systeem voor bekers te organiseren van hattrick. Tot nu is alles vlot gegaan, tot ik over het volgende probleem viel. Er is een team ingeschreven die noemt "D\'Ostênsche Pernukkels". Die naam wordt zeer mooi opgehaald, maar als ik dan zijn gegevens wil ophalen krijg ik niets weer. Hij herkend het team gewoon niet, maar staat wel overal in de database onder dezelfde naam, namelijk "D\'Ostênsche Pernukkels".

http://bpcup.radiozuta.be/nl/poule/3.htm. Hier is een voorbeeld. Alle teamID's worden opgehaald, behalve die ene ploeg. Ook als hij zijn wedstrijden wilt bekijken, krijgt hij een foutmelding dat zijn ID niet gevonden werd.


<?php
$team = $inf->team;
			
			 $sq = mysql_query("SELECT bp_teamid FROM deelnemers WHERE bp_team = '".$team."'")or die(mysql_error());
             $id = mysql_fetch_object($sq);
?>


Zo haal ik alles op, dus ik snap niet waar het probleem net zit. Ik heb al google afgezocht, deze website ook, maar vind nergens de oplossing.
Hoe zijn de gegevens naar de database geschreven? En hoe probeer je ze op te halen?

Ik hoop dat je in beide gevallen gebruik maakt van mysql_real_escape_string() om de input (de naam van het team) te beveiligen?
Als ze zijn ingevoerd, zijn ze met mysql_real_escape_string() beveiligt. Overal staat er voor de ' een \. Alleen het ophalen lukt niet.

Dit is de hele code waar het in verwerkt is

<?php
# Nu halen we de ploegen op
	$sql = mysql_query("SELECT * FROM poule_$pouleID ORDER BY score DESC, goalsD DESC")or die(mysql_error());
	$row = mysql_num_rows($sql);
	
	if($row != 0) {
		
		$tm = 1;
		
		while($inf = mysql_fetch_object($sql)) {
			
			 $team = $inf->team;
			
			 $sq = mysql_query("SELECT bp_teamid FROM deelnemers WHERE bp_team = '".$team."'")or die(mysql_error());
             $id = mysql_fetch_object($sq);
			
			if($tm == 2) {
			print('<tr>
			  <td style="background: url(\'http://img.radiozuta.be/bpcup/lnPoule.png\') bottom left no-repeat; padding: 4px;">'.$tm.'</td>
			  <td style="background: url(\'http://img.radiozuta.be/bpcup/lnPoule.png\') bottom left no-repeat; padding: 4px;" width="50%"><a href="/'.$lang.'/team/'.$id->bp_teamid.'.htm">'.stripslashes($team).'</a></td>
			  <td style="background: url(\'http://img.radiozuta.be/bpcup/lnPoule.png\') bottom left no-repeat; text-align: center; padding: 4px;">'.$inf->games.'</td>
			  <td style="background: url(\'http://img.radiozuta.be/bpcup/lnPoule.png\') bottom left no-repeat; text-align: center; padding: 4px;">'.$inf->goalsF.'</td>
			  <td style="background: url(\'http://img.radiozuta.be/bpcup/lnPoule.png\') bottom left no-repeat; text-align: center; padding: 4px;">'.$inf->goalsA.'</td>
			  <td style="background: url(\'http://img.radiozuta.be/bpcup/lnPoule.png\') bottom left no-repeat; text-align: center; padding: 4px;">'.$inf->goalsD.'</td>
			  <td style="background: url(\'http://img.radiozuta.be/bpcup/lnPoule.png\') bottom left no-repeat; text-align: center; padding: 4px;">'.$inf->score.'</td>
			 </tr>');
			} else {
			print('<tr>
			  <td style="padding: 4px;">'.$tm.'</td>
			  <td style="padding: 4px;" width="50%"><a href="/'.$lang.'/team/'.$id->bp_teamid.'.htm">'.stripslashes($team).'</a></td>
			  <td style="text-align: center; padding: 4px;">'.$inf->games.'</td>
			  <td style="text-align: center; padding: 4px;">'.$inf->goalsF.'</td>
			  <td style="text-align: center; padding: 4px;">'.$inf->goalsA.'</td>
			  <td style="text-align: center; padding: 4px;">'.$inf->goalsD.'</td>
			  <td style="text-align: center; padding: 4px;">'.$inf->score.'</td>
			 </tr>');	
			}
			
			$tm = $tm + 1;
			
		}
		
	}
?>

Een \ moet dan dus WEG.

Je schiet er niets mee op om quotes te gaan escapen, terwijl het al perfect veilig is, kan alleen maar problemen opleveren

Waar komen die \ uberhaupt vandaan?

Trouwens, nog een paar opmerkingen m.b.t de rest van je code.

1. Die background kan ook gewoon met een color, daar hoef je echt geen plaatje voor te gebruiken.
2. Is het de bedoeling dat alleen de 2de rij die andere kleur krijg, of iedere 2de rij?
Als het 2de het geval is, maak dan van die $tm == 2 dit: $tm % 2 == 0

De % rekent uit wat er overblijft, als je het 1ste getal deelt door het 2de, ff een voorbeeldje:

5 % 2.
2 past 2 keer in 5 ( = 4)
5 - 4 = 1
dus geldt 5 % 2 = 1

8 % 3 = 2
298 % 2 = 0
837 % 15 = 12
etc...

Aka, als geldt iets % 2 = 0, dan is iets een even getal, dus het 2de getal (tenzij je bij een even getal begint, maar als dit je in verwarring brengt, laat maar zitten dan:P)

Snap je wat ik bedoel?
Fabian schreef op 05.01.2009 00:13
Overal staat er voor de ' een \.
Goed, dat klopt dus niet. Ik gok dat bij jou de magic_quotes_gpc instelling ook aanstaat, waardoor quotes dus dubbel geëscaped worden aangezien je ook mysql_real_escape_string() gebruikt.
<?php
echo ini_get('magic_quotes_gpc');
?>
Controleer hiermee maar eens of dat inderdaad het geval is.

Het probleem is nu dat je allemaal nutteloze backslashes in je database hebt staan die de boel verzieken.

De oplossing is simpelweg het uitzetten van magic_quotes_gpc en eenmalig alle overbodige backslashes uit de data in je database verwijderen. Tip: stripslashes(). Uitzetten van magic_quotes_gpc doe je in je php.ini of via een .htaccess bestandje met de volgende regel:

php_flag magic_quotes_gpc off

Reageren