PDA

Volledige versie bekijken : problemen varanderen id


ctiČ
%Europe/Berlin %536 %2006, 12:52
ik ben bezig met een database.

mijn database is af en werkt goed

alleen heb ik een probleem met mijn php script.

als ik mijn swf uitvoer online. pakt hij automaties het eerste record van mijn database.
het maakt niet uit of ik de variable die flash stuurd naar 2 verander. hij verandrt dat getal terug naar 1 en dus wordt weer mijn eerste record gebruikt.

ik gebruik het volgende script om de gegens op te vragen:

if ($flashid <= 1){
$flashid = 1;
}

$id = $flashid;

$select = "SELECT * FROM vissiegast WHERE id='$id'";
$query = mysql_query($select)or die(mysql_error());

while($list = mysql_fetch_object($query)){

$naam = "$list->name";
$comment = "$list->comment";

echo"&naam=$naam&comment=$comment&id=$id&flashid=$flashid";
}

weet iemand wat ik fout doe en wat ik er aan moet doen om het werkend te krijgen.
ik heb al wat tutorials van de site gehaald en die maken het op de zelfde manier. en als ik die test heb ik ook dat probleem

w00
%Europe/Berlin %541 %2006, 12:59
Je gebruikt het $list gedeelte verkeerd, jij hebt dit


while($list = mysql_fetch_object($query)){

$naam = "$list->name";
$comment = "$list->comment";


Maar het moet zo zijn:

while($list = mysql_fetch_object($query)){

$naam = $list->name;
$comment = $list->comment;


Je kan ook beter mysql_fetch_assoc gebruiken, fetch_object is verouderd.

while($list = mysql_fetch_assoc($query)){

$naam = $list['name'];
$comment = "$list['comment'];


En in je query zet je $id tussen single quotes, maar id is altijdeen nummer dus deze moet je altijd buiten quotes zetten anders kan je gevaar hebben voor sql injections!

$select = "SELECT * FROM vissiegast WHERE id='$id'";
Moet zijn:

$select = "SELECT * FROM vissiegast WHERE id=$id"; //<-- zonder quotes dus.

josko
%Europe/Berlin %623 %2006, 14:57
$id = '1 UNION DELETE FROM vissiegast';
$select = "SELECT * FROM vissiegast WHERE id=$id";
tuurlijk, geen sql injectie hoor woo :)
<?php

$flashid = $_POST['flashid']; // neem aan dat het post is.
if ($flashid <= 1)
{
$flashid = 1;
}

$id = $flashid;
$id = mysql_real_escape_string( $id );
$select = "SELECT * FROM vissiegast WHERE id='$id'";
$query = mysql_query($select)or die(mysql_error());
$iterance = 0;
while($list = mysql_fetch_object($query)){

$naam = $list->name;
$comment = $list->comment;

echo"&naam=$naam&comment=$comment&id=$id&flashid=$flashid";
}
?>
Verder: je fout was vrij simpel.
$flashid is niet gelijk $_POST['flashid'];

w00
%Europe/Berlin %625 %2006, 15:00
bij een oudere php-nuke versie werd een ID uit de URL opgehaald en ook als string verwerkd, dus tussen aanhalingstekens '$id', waardoor ze dus een sql injection konden doen.
Hoezo is het volgens jou dan niet zo..?

josko
%Europe/Berlin %630 %2006, 15:08
kijk eventjes naar de post bovenaan jong:

$id = '1 UNION DELETE FROM vissiegast';
$select = "SELECT * FROM vissiegast WHERE id=$id";

Sql word dan:
SELECT * FROM vissiegast WHERE Id=1 UNION DELETE FROM vissiegast
Dus ja, er is dan nog sql injectie.

w00
%Europe/Berlin %638 %2006, 15:20
owja, ik las eigenlijk gelijk deze zin van je:

tuurlijk, geen sql injectie hoor woo


Maar dan zitten we in elk geval weer op 1 lijn :)