Door
lars h
op 25-05-2017 22:06
gewijzigd op 25-05-2017 22:18
1.646 views
Hoi allen,
Ik ben middels een online cursus mijn website aan het inrichten alleen loop ik ergens tegenaan en dat is bij het inrichten van mijn formulieren pagina. Hier heb ik dus een aantal inputvelden die ingevuld worden en vervolgens via een script zouden deze naar mijn mysql database moeten worden verstuurd.
Ik heb al van alles geprobeerd maar het lukt me maar niet om het werkend te krijgen.
Zelf dacht ik dat het komt omdat de $conn niet goed wordt opgeroepen maar die functie heb ik omschrijven op mijn db/db.php pagina dus dat zou niet het punt moeten zijn toch?
Je $_POST variabelen in je query horen buiten quotes en moet je escapen tegen SQL-injection.
Ook vraag je niet aan MySQL wat er fout gaat, dit kan met mysqli_error($con). Gebruik dit alleen maar voor test en ontwikkeldoeleinden, en geef dergelijke foutmeldingen niet openbaar aan je bezoekers. Ze vinden dit vaak 'eng' en je maakt hackers ook meer wijs dan ze moeten weten.
Ook vergeet je de Location-header mee te sturen in de header() functie.
<?php
// Met tabjes en enters maak je de query beter leesbaarder....
$ins_sql = "INSERT INTO producten (score, titel, prijs, info, afbeelding, link, datum, einddatum )
VALUES ('".mysqli_real_escape_string($conn,$_POST['score'])."',
'".$title."',
'".mysqli_real_escape_string($conn,$_POST['prijs'])."',
'".mysqli_real_escape_string($conn,$_POST['info'])."',
'".$image_db_path."',
'".mysqli_real_escape_string($conn,$_POST['link'])."',
'".$datum."',
'".mysqli_real_escape_string($conn,$_POST['einddatum'])."'
)";
if(mysqli_query($conn,$ins_sql)){
header('Location: index.php');
exit(); // nooit vergeten bij een location redirect!
} else {
$error = '<div class="alert alert-danger">The query was not working, because: '.mysqli_error($conn).'</div>';
}
?>
hey arien bedankt voor de snelle reactie. Dit was niet mijn volledige code. Ik heb deze hieronder geplaats. Is het dan daadwerkelijk nodig om per input een mysqli_real_exape_string toe te voegen of kan je ook deze 1malig doen en dan via een kommo ofzo 1 lijn van code creeren zoals
VALUES ('".mysqli_real_escape_string($conn,$_POST['score'])."','".$title."', ('$_POST['prijs'])."') etc.
Dat mysqli_real_escape_string() moet per value in je query.
Je kan onmogelijk één functie gebruiken om alles in één klap te escapen. je moet altijd selectief zijn wat je escaped.
Dit doe je alleen bij manipuleerbare waardes in je query. Waaronder $_POST, $_GET, $_FILES, $_COOKIE, $_SESSION en $_ENV.
Je kan je natuurlijk ook richten op 'Prepared Statements'
Het beveiligt je tegen schadelijke tekens die kwade dingen met je query kunnen doen (SQL-injection). Maar ook onbedoeld kan je die tekens gebruiken. Voeg voor de grap eens een single quote (') in in een onbeveiligde query. Je zal dan een foutmelding krijgen met mysqli_error(...).