Php mysql update
- SanThe - op 05/02/2017 18:43:53:
Er is niks goed aan.
Je mist alle dubbele html quotes.
En eventueel ook de action mist.
Verder probeer je de value op "Delete!" te zetten.
Ik neem niet aan dat jij in de database een id hebt met die waarde.
Dus er wordt niks verwijderd.
Marco - op 05/02/2017 18:35:31:
<form method=post><input type=submit name=delete id=delete value=Delete!></form>
Is toch niks mis mee?
Is toch niks mis mee?
Er is niks goed aan.
Je mist alle dubbele html quotes.
En eventueel ook de action mist.
Verder probeer je de value op "Delete!" te zetten.
Ik neem niet aan dat jij in de database een id hebt met die waarde.
Dus er wordt niks verwijderd.
De HTML quotes gebruik ik niet, gebruik ik bij andere html codes ook niet en die werken wel.
de action is gewoon het zelfde bestand dus die hoeft niet?
Ja de value is toch wat op de button komt te staan?
De query DELETE FROM todo WHERE id=2 voldoet prima.
Los daarvan is je query onbeveiligd tegen SQL-injection. Iemand met kwaadwillende bedoelignen kan nu je query manipuleren met een hoop ander kwaads, dus moeten we de inhoud van $id escapen met $conn->real_escape_string.
Ook het versturen van je formulier gaat niet helemaal op de juiste manier. je wilt immers niet controleren of een knop bestaat, maar of het formulier is verstuurd.
Dat alles bij elkaar levert deze code op:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
$id = $conn->real_escape_string($_GET['id']); // of $_POST['id'] indien het uit een formulier komt.
$sql_delete = "DELETE FROM todo WHERE id='".$id."'";
if ($conn->query($sql_delete) === TRUE) {
echo "<script type= 'text/javascript'>alert('Verwijderd!');</script><a onclick=window.open('index.php','name','width=600,height=400') class=edit >Ga terug!</a>";
} else {
echo "<script type= 'text/javascript'>alert('Error: " . $sql . "<br>" . $conn->error."');</script>";
}
}
?>
if($_SERVER['REQUEST_METHOD'] == "POST"){
$id = $conn->real_escape_string($_GET['id']); // of $_POST['id'] indien het uit een formulier komt.
$sql_delete = "DELETE FROM todo WHERE id='".$id."'";
if ($conn->query($sql_delete) === TRUE) {
echo "<script type= 'text/javascript'>alert('Verwijderd!');</script><a onclick=window.open('index.php','name','width=600,height=400') class=edit >Ga terug!</a>";
} else {
echo "<script type= 'text/javascript'>alert('Error: " . $sql . "<br>" . $conn->error."');</script>";
}
}
?>
Als je site in productie is is, en dus publiekelijk op het internet, dan zou ik sowieso geen technische foutmeldingen uit bijv. $conn->error tonen. Gebruikers hebben daar weinig aan, en hackers maak je meer wijs dan ze zouden moeten weten.
Je kan een variabele in je configuratiebestand (config.php) plaatsen waarin je dergelijke uitgebreide foutmeldingen aan kan zetten, wat handig is tijdens ontwikkeldoeleinden. Uiteraard is het ook verstandig om zulke foutmeldingen te loggen in een log-file. Dit kan met de error_log functie in .htaccess.
Gewijzigd op 05/02/2017 18:49:36 door - Ariën -
Dit werkt opzich wel, alleen er zit ook nog een andere submit button om het een en ander aan te passen en als je dus die button gebruikt word het gene ook verwijderd en dat is niet de bedoeling.
Van de real_escape_sting wist ik niet. Er is mij verteld dat bij een ID oid niet zo veel kan gebeuren. Ja dit 'project' is op een openbare host maar niemand weet van die host. Maar ik ga me zeker ook verdiepen in het beveiliging gedeelte, maar dat komt later pas. Want als je bijna niks van php kan valt er ook weinig te beveiligen :P
- Ariën -:
Het is niet nodig het eerst voorgaande berichtte quoten. Alvast bedankt.
Gewijzigd op 05/02/2017 18:59:10 door - Ariën -
Toevoeging op 05/02/2017 19:02:36:
Oke ik ga die er even aan toevoegen.
Dus NIET voordat je het in de database zet. Je wilt de data namelijk niet verminken.
Gewijzigd op 05/02/2017 19:09:42 door - Ariën -
Het is gelukt en het werkt, maar wat ik raar vind is:
Als ik een isset maak voor gegevens naar de databse te sturen dat die wel gewoon werkt, maar als ik dan een isset maak voor het verwijderen van gegevens dat die dan niet werkt. Maar het werkt en ik zal dit zeker onthouden. Bedankt voor je hulp (alweer :P).
Marco - op 05/02/2017 19:15:24:
Oké, maar zoals ik zei ga ik me later bezig houden met beveiligingen.
Kijk....en dan verlies je steken, en is de kans op lekken groter. Dit is juist de bron waarin veel veiligheidslekken al worden misbruikt. Een huis beveilig je ook vanaf het moment dat de deur erin zit. Meteen komt er een slot op!
Ook een goede tip voor iedereen is om oude code grondig door te nemen, en te patchen indien nodig. Op die manier heb ik ooit eens een lek gevonden in een grote website.
Gewijzigd op 05/02/2017 19:20:32 door - Ariën -
Ja ik snap wat je bedoelt, maar ik ben nog lang niet bezig met grote / openbare projecten. Ik ben van mening als ik eerst de PHP codering onder de knie dat de beveiliging dan makkelijker gaat. Ik kan wel een htmlspecialchars of een real_escape_string achter iets plakken, maar ik heb dan eigenlijk geen idee van wat ik doe. natuurlijk ik realiseer me al te goed dan als je beveiliging niet goed is dat je website ook niet veilig is.
http://php.net/htmlspecialchars
http://php.net/mysqli_real_escape_string
etc...
het belangrijkste is dat je altijd weet wat je doet. Op die manier begrijp je jouw code, en zal je script door PHP in vloeiende stappen verlopen.
Gewijzigd op 05/02/2017 19:29:01 door - Ariën -
Marco - op 05/02/2017 18:48:00:
De HTML quotes gebruik ik niet, gebruik ik bij andere html codes ook niet
Lekker slim...
Toevoeging op 05/02/2017 19:30:14:
- SanThe - op 05/02/2017 19:29:11:
Lekker slim...
Marco - op 05/02/2017 18:48:00:
De HTML quotes gebruik ik niet, gebruik ik bij andere html codes ook niet
Lekker slim...
Maakt toch niet veel uit?
gebruiken. Maar ik raad gebruik ervan gewoon aan. Puur omdat het een string betreft, en zodat de syntax tussen PHP en HTML op dit punt hetzelfde blijven.
Maakt het dan nog uit of je " of ' gebruikt?
dit recente topic.
Binnen HTML gebruik ik altijd double-quotes. Verder verwijs ik je graag naar Gewijzigd op 05/02/2017 19:44:19 door - Ariën -