Litet problem med att posta upp till min databas

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004

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?

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Registrerad
Jun 2011

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!

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Maj 2004

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

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004
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?

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Maj 2004
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

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004
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?

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Aug 2009
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.

7900x @ 4,7ghz - 1080ti @ 2100

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004
Skrivet av celoz:

Nej. Använd prepared statements.

Okej :/ kan du ge ett exempel?

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Registrerad
Jul 2010
Skrivet av pellski87:

Okej :/ kan du ge ett exempel?

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