Php mysql update

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Marco  -

marco -

05/02/2017 18:48:00
Quote Anchor link
- SanThe - op 05/02/2017 18:43:53:
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?


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?
 
PHP hulp

PHP hulp

03/01/2025 12:22:13
 
- Ariën  -
Beheerder

- Ariën -

05/02/2017 18:48:49
Quote Anchor link
Allereerst werkt de DELETE-functie in MySQL op record basis, dus hoef je niet aan te geven dat de inhoud van bepaalde velden wilt verwijderen, waar jij blijkbaar nu een * gebruikt.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
    }
}

?>

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 -
 
Marco  -

marco -

05/02/2017 18:55:45
Quote Anchor link
**quoteknip**
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 -
 
- Ariën  -
Beheerder

- Ariën -

05/02/2017 19:01:40
Quote Anchor link
Als je meerdere submit knoppen hebt, dan kan je die isset er wel aan toevoegen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if(($_SERVER['REQUEST_METHOD'] == "POST") && (isset($_POST['delete'])) ) {
// doe iets!
?>
 
Marco  -

marco -

05/02/2017 19:01:59
Quote Anchor link
Ik heb wel al htmlspecialchars geleerd maar dat is alleen voor de text uit de database te halen toch?

Toevoeging op 05/02/2017 19:02:36:

Oke ik ga die er even aan toevoegen.
 
- Ariën  -
Beheerder

- Ariën -

05/02/2017 19:07:36
Quote Anchor link
htmlspecialchars is bedoeld om speciale HTML-karakters om te zetten naar entities. Zo wordt een < onschadelijk gemaakt naar een &lt; (Lower than) entitie. In het algemeen kan je met deze functie HTML-opmaak escapen en onschadelijk maken. Dit is geen oplossing tegen SQL-injection. het gebruik van die functie hoort alleen op de uitvoer te gebeuren, waar je de data dus op het scherm toont.

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 -
 
Marco  -

marco -

05/02/2017 19:15:24
Quote Anchor link
Oké, maar zoals ik zei ga ik me later bezig houden met beveiligingen.

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).
 
- Ariën  -
Beheerder

- Ariën -

05/02/2017 19:17:09
Quote Anchor link
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 -
 
Marco  -

marco -

05/02/2017 19:25:49
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

05/02/2017 19:27:54
Quote Anchor link
Als je niet weet wat de functies doen, dan kan je altijd op php.net/FUCNTIENAAM kijken.
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 -
 
- SanThe -

- SanThe -

05/02/2017 19:29:11
Quote Anchor link
Marco - op 05/02/2017 18:48:00:
De HTML quotes gebruik ik niet, gebruik ik bij andere html codes ook niet


Lekker slim...
 
Marco  -

marco -

05/02/2017 19:29:55
Quote Anchor link
Thnx ik ga dat zeker even doorlezen.

Toevoeging op 05/02/2017 19:30:14:

- SanThe - op 05/02/2017 19:29:11:
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?
 
- Ariën  -
Beheerder

- Ariën -

05/02/2017 19:40:32
Quote Anchor link
In HTML5 zijn quotes niet verplicht om attribuut waardes, dus je mag gewoon
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href=http://www.phphulp.nl>PHPhulp</a>
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.
 
Marco  -

marco -

05/02/2017 19:41:31
Quote Anchor link
Maakt het dan nog uit of je " of ' gebruikt?
 
- Ariën  -
Beheerder

- Ariën -

05/02/2017 19:43:05
Quote Anchor link
Binnen HTML gebruik ik altijd double-quotes. Verder verwijs ik je graag naar dit recente topic.
Gewijzigd op 05/02/2017 19:44:19 door - Ariën -
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.