Mss een hele stomme vraag, denk dat ik het ook over mijn hoofd zie. maar ik probeer een rij te verwijderen uit mijn database door op de knop delete te drukken in mijn webrowser. Maar hij wil niet verwijderen


<tr>
    	<td><?php echo $i; ?></td>
        <td><?php echo $Fname; ?></td>
        <td><?php echo $Lname; ?></td>
        <td><?php echo $Email; ?></td>
        <td><?php echo $created; ?></td>
        <td>
        	<a href="Users.php?delete=<?php echo $id; ?>" onclick="return confirm('Weet je het zeker dat je deze gebruiker wilt verwijderen?') ">Delete</a> <!-- Hier  gaat het volgens mij fout.-->
        </td>
    </tr>
    <?php
	
	$i++;
	}
	if(isset($_GET['delete'])){
		$delete_id = $_GET['delete'];
		
		mysqli_query($con, "DELETE FROM user WHERE UserID = $delete_id'");
		
		//header('location: Admin.php');
	}

Zo te zien is "user" een gereserveerd woord. Dit had je kunnen zien als je iets aan foutafhandeling deed.
Ben van Velzen op 05/10/2015 22:30:10

Zo te zien is "user" een gereserveerd woord. Dit had je kunnen zien als je iets aan foutafhandeling deed.

Kijk ik er zo overheen? Zie hem nog steeds niet
Wat doet die single quote in je query ?
Pipo Clown op 05/10/2015 23:05:55

Wat doet die single quote in je query ?


Dank je dat was het probleem uiteindelijk
Het is met dit script ook wel grappig om op regel 8 de url te wijzigen in

Users.php?delete=0%20or%20userid%3e0
Ik zou inderdaad even een mysqli_escape toevoegen of een prepared statement gebruiken.
ik zit eigenlijk ook nog te wachten op de opmerking "ik moet altijd 2x klikken voor hij uit de lijst verdwenen is".

(hetgeen komt doordat je eerst de lijst ophaalt met select en op het scherm zet, en pas daarna de delete-actie uitvoert.)

die regel 20 met een header:
dat gaat een headers-already-sent error opleveren. Wat wederom samenhangt met de verkeerde volgorde van werken: eerst de aanpassings query's en pas als de database stabiel is, de data ophalen en naar het scherm.

<?php
 mysqli_query($con, 'DELETE FROM `user` WHERE `UserID` = ' . intval($delete_id));
?>
:)

In plaats van intval() is het wellicht beter om je input te filteren en te controleren of $_GET['id'] een numerieke waarde betreft. Het heeft anders geen zin om de query uit te voeren, of de dappere poging van intval() er nu in slaagt om van iets wat mogelijk geen getal is toch een getal te maken, of niet.

@Joni een real_escape_string() functie toepassen is alleen niet genoeg. Deze escaped namelijk niets als er niets te escapen valt! Dus tenzij je dit doet in combinatie met quotes om de waarde (wat nogal vreemd is, sinds het een id betreft) is dat niet per definitie veilig.

Als je bijvoorbeeld in $_GET['id'] het volgende zet:

OR 1 = 1

Wordt er NIETS GEESCAPED met real_escape_string(), OMDAT ER NIETS TE ESCAPEN VALT. Hiermee kieper je dus effectief al je users weg.

De enige remedie in deze (en bij queries met id's) is dus eigenlijk: input filtering.

Wees nog steeds HEEL VOORZICHTIG met het gebruik van real_escape_string(), dit maakt je query niet automagisch veilig.

Reageren