Litet problem med att posta upp till min databas

Permalänk
Medlem

Litet problem med att posta upp till min databas

Håller på att försöka koda en blogg modell ala super simpel, allting fungerar förutom om man i texten har ' symbolen då får jag

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '

post.php

<?php $host="localhost"; $user="******"; $pass="******"; $dbname="*****"; $con=mysqli_connect($host,$user,$pass,$dbname); if (mysqli_connect_errno($con)) { echo "<h1>Failed to connect to mysql server " . mysqli_connect_error() ."</h1>"; } $title=$_POST['title']; $post=$_POST['html']; $author=$_POST['selectlist1']; $datetime=date('y-m-d h:i:s',time()); $category=$_POST['selectlist2']; $sql="INSERT INTO blogposts(title,post,author,datetime,category) VALUES('$title','$post','$author','$datetime','$category')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } else mysqli_close($con); header("Location:../blog/admin.php"); ?>

Antar det är nånting modell enklare som bör ändras?

post i databasen ser ut som följande:

name: post
type: text
collation: latin1_swedish_ci
null: No
defaults: None

kanske nån som kan peka mig i rätt riktning?

Visa signatur

Citera om du vill ha svar :)

Permalänk

Längesen jag höll på med PHP+MYSQL combon men kan vara värt att tänka på att inte använda så generiska variabelnamn såsom "datetime" och "post"... Försök att hitta på något unikt som inte kan krocka med de inbyggda/globala variablarna. Kan orsaka mycket felsökning i onödan!

Permalänk
Medlem

Utan att gå in på säkerhetsfrågor rörande om man ska stoppa in $_POST-variabler direkt in i queryn, så kan du titta på http://php.net/manual/en/mysqli.real-escape-string.php

Permalänk
Medlem
Skrivet av thulin82:

Utan att gå in på säkerhetsfrågor rörande om man ska stoppa in $_POST-variabler direkt in i queryn, så kan du titta på http://php.net/manual/en/mysqli.real-escape-string.php

Ska kika på det och uppdatera min kod, men löser det även mitt problem?

Visa signatur

Citera om du vill ha svar :)

Permalänk
Medlem
Skrivet av pellski87:

Ska kika på det och uppdatera min kod, men löser det även mitt problem?

Det löser ditt problem, kolla länken, exakt samma problem tas upp i exemplena

Permalänk
Medlem
Skrivet av thulin82:

Det löser ditt problem, kolla länken, exakt samma problem tas upp i exemplena

Tack för hjälpen! ändrade koden till följande

<?php $con=mysqli_connect(localhost,******,******,******); if (mysqli_connect_errno($con)) { echo "<h1>Failed to connect to mysql server " . mysqli_connect_error() ."</h1>"; } $title = mysqli_real_escape_string($con, $_POST['title']); $post = mysqli_real_escape_string($con, $_POST['html']); $author = mysqli_real_escape_string($con, $_POST['selectlist1']); $datetime = date('y-m-d h:i:s',time()); $category = mysqli_real_escape_string($con, $_POST['selectlist2']); $sql="INSERT INTO blogposts(title,post,author,datetime,category) VALUES('$title','$post','$author','$datetime','$category')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } else mysqli_close($con); header("Location:../blog/admin.php"); ?>

och nu fungerar det som det ska, hur som helst följer denna kod god praxis?

Visa signatur

Citera om du vill ha svar :)

Permalänk
Medlem
Skrivet av pellski87:

Tack för hjälpen! ändrade koden till följande

<?php $con=mysqli_connect(localhost,******,******,******); if (mysqli_connect_errno($con)) { echo "<h1>Failed to connect to mysql server " . mysqli_connect_error() ."</h1>"; } $title = mysqli_real_escape_string($con, $_POST['title']); $post = mysqli_real_escape_string($con, $_POST['html']); $author = mysqli_real_escape_string($con, $_POST['selectlist1']); $datetime = date('y-m-d h:i:s',time()); $category = mysqli_real_escape_string($con, $_POST['selectlist2']); $sql="INSERT INTO blogposts(title,post,author,datetime,category) VALUES('$title','$post','$author','$datetime','$category')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } else mysqli_close($con); header("Location:../blog/admin.php"); ?>

och nu fungerar det som det ska, hur som helst följer denna kod god praxis?

Nej. Använd prepared statements.

Visa signatur

AW3423DW QD-OLED - Ryzen 5800x - MSI Gaming Trio X 3090 - 64GB 3600@cl16 - Samsung 980 Pro 2TB/WD Black SN850 2TB

Permalänk
Medlem
Skrivet av celoz:

Nej. Använd prepared statements.

Okej :/ kan du ge ett exempel?

Visa signatur

Citera om du vill ha svar :)

Permalänk
Skrivet av pellski87:

Okej :/ kan du ge ett exempel?

Här finns det information: https://secure.php.net/manual/en/mysqli.quickstart.prepared-s...