Premiär! Fyndchans i SweClockers Månadens Drop

PHP insert into Mysql.. varför fungerar det inte?

Permalänk
Medlem

PHP insert into Mysql.. varför fungerar det inte?

Sitter och sliter hår på världens enklaste rad för att sätta in en ny rad i databasen.

Detta fungerar inte!

<?php include('../../kod/connect_databas.php'); ?> <?php $titel = $_POST['titel']; $poster = $_SESSION['loggedin']; $tid = date('Y M d'); $message = $_POST['nyhet']; $sql = "INSERT INTO nyheter (id, titel, poster, tid, message) VALUES ('', '$titel', '$poster', '$time', '$message')"; if ($con->query($sql) == TRUE) { echo "<div class='update'>Din nyhet kommer upp om 2 sekunder...</div>"; } else { echo "error"; } ?>

Men denna koden för att Uppdatera en nuvarande nyhet fungerar utan problem.. exakt samma kod men istället för "insert into" är det "Update"

<?php include('../../kod/connect_databas.php'); ?> <?php $id = $_GET['id']; $titel = $_POST['titel']; $message = $_POST['nyhet']; $sql = "UPDATE nyheter SET titel='$titel', message='$message' WHERE id='$id'"; if ($con->query($sql) == TRUE) { echo "<div class='update'>Din nyhet kommer vara uppdaterad om 2 sekunder...</div>"; } else { echo "error"; } ?>

har testat echo på alla strings

$titel = titel
$poster = namnet på den inloggade
$tid = visar tiden
$mesasge = visar texten jag skrev.

men jag hamnar ändå vid "echo "error""

Vart i SQL koden är det fel?

Permalänk
Medlem

Det underlättar om du beskriver "Det funkar inte" bättre. Vad exakt får du för fel?.

Min första tanke är att id inte tillåts att sättas till tom sträng, förmodligen förväntar den sig en integer. MEN eftersom du antagligen har auto increment på den så behöver du inte skicka in något där.

Ändra till

INSERT INTO nyheter (titel, poster, tid, message)

Och ta bort första elementet i VALUES ().

Förutom det är ett riktigt hett tips att se till att skydda mot SQL Injections, googla typ: php mysql sanitize

Permalänk
Medlem
Skrivet av dlq84:

Det underlättar om du beskriver "Det funkar inte" bättre. Vad exakt får du för fel?.

Min första tanke är att id inte tillåts att sättas till tom sträng, förmodligen förväntar den sig en integer. MEN eftersom du antagligen har auto increment på den så behöver du inte skicka in något där.

Ändra till

INSERT INTO nyheter (titel, poster, tid, message)

Och ta bort första elementet i VALUES ().

Förutom det är ett riktigt hett tips att se till att skydda mot SQL Injections, googla typ: php mysql sanitize

Laddade upp sidan på one.com för cirka 4 månader sedan och då fungerade allt , men idag så vägrar insert into koden fungera.

Hade jag fått ett riktigt error message hade jag kunnat läsa mig till det men får inget. Kommer bara till "else" echo.

one.com kanske har uppdaterat detta?. Ska titta på länken du skickade.

Permalänk
Medlem

Exakt samma sida fungerar bra på min egna xampp server

så one.com måste gjort något..

Permalänk
Medlem

Har ingen lösning på problemet i sig, men du har inte övervägt att använda PDO?

https://phpdelusions.net/pdo

Visa signatur

Endeavour OS(arch) - Cassini Nova

Permalänk
Medlem

[quote postid="17861504" userid="4151" name="downup"]
Sitter och sliter hår på världens enklaste rad för att sätta in en ny rad i databasen.

Detta fungerar inte!

<?php include('../../kod/connect_databas.php'); ?> <?php $titel = $_POST['titel']; $poster = $_SESSION['loggedin']; $tid = date('Y M d'); $message = $_POST['nyhet']; $sql = "INSERT INTO nyheter (id, titel, poster, tid, message) VALUES ('', '$titel', '$poster', '$time', '$message')"; if ($con->query($sql) == TRUE) { echo "<div class='update'>Din nyhet kommer upp om 2 sekunder...</div>"; } else { echo "error"; } ?>

För ett litet tag sedan uppdaterade One sina servrar, bl.a. installerade de PHP7.2.
Ett fel kan varat du inte satt session_start() överst i scriptet.
Ett annat fel kan vara om ID är en tom sträng.
Prova om:

<?PHP session_start(); include('../../kod/connect_databas.php'); $titel = isset($_REQUEST['titel']) ? $_REQUEST['titel'] : ""; $poster = isset($_SESSION['loggedin']) ? $_SESSION['loggedin'] : ""; $tid = date('Y M d'); $message = isset($_REQUEST['nyhet']) ? $_REQUEST['nyhet'] : ""; $sql = "INSERT INTO nyheter (titel, poster, tid, message) VALUES ('$titel', '$poster', '$time', '$message')"; if ($con->query($sql) == TRUE) { echo "<div class='update'>Din nyhet kommer upp om 2 sekunder...</div>"; } else { echo "error"; } ?>

fungerar som det ska.

Visa signatur

Asus C6H | R9-3900XT | 4x8GB G-Skill Ripjaws V 3600@3466 CL14 | Asus Radeon RX 580 8GB Strix Gaming OC | Asus Strix Raid DLX | Corsair Obsidian 750D AE

Permalänk
Medlem

När du väl är i farten och ändrar skulle jag rekommendera att se över hur du gör dina SQL queries. Koden du la upp nu är öppen för SQL injektioner (se tex https://www.php.net/manual/en/security.database.sql-injection....

Vad är $con för datatyp? Kör du till exempel PDO finns en hel del trevliga verktyg för att undvika detta.

Permalänk
Medlem
Skrivet av trexake:

När du väl är i farten och ändrar skulle jag rekommendera att se över hur du gör dina SQL queries. Koden du la upp nu är öppen för SQL injektioner (se tex https://www.php.net/manual/en/security.database.sql-injection....

Vad är $con för datatyp? Kör du till exempel PDO finns en hel del trevliga verktyg för att undvika detta.

Följer mest Youtube guider.

<?php $con = @mysqli_connect('hemsida.mysql', 'Databas', 'password', 'Databas'); if (!$con) { echo "Error: " . mysqli_connect_error(); exit(); } mysqli_set_charset($con,"utf8"); echo '' ?>

antar att den koden är inte bra.

Följer denna och det är fortfarande samma problem.
https://www.youtube.com/watch?v=XhLAB1wwzNk

INSERT INTO fungerar inte

$sql = "DELETE FROM"; --- Fungerar
$sql = "UPDATE"; --- Fungerar

Exakt samma koder men INSERT INTO istället.

Är bara på ONE.com host som det inte fungerar.

EDIT:
Löste det

Tittade på ONE.COM dbAdmin och tittade hur koden såg ut när man la in saker själv via DBadmin

Använde
$sql = "INSERT INTO nyheter (id, titel, poster, tid, message) VALUES ('', '$titel', '$poster', '$time', '$message')";

Bytte till

$sql = "INSERT INTO `nyheter` (`id`, `titel`, `poster`, `time`, `message`) VALUES (NULL, '$titel', '$poster', '$time', '$message');";

Fungerar nu!

Permalänk
Skrivet av downup:

EDIT:
Löste det

Tittade på ONE.COM dbAdmin och tittade hur koden såg ut när man la in saker själv via DBadmin

Använde
$sql = "INSERT INTO nyheter (id, titel, poster, tid, message) VALUES ('', '$titel', '$poster', '$time', '$message')";

Bytte till

$sql = "INSERT INTO `nyheter` (`id`, `titel`, `poster`, `time`, `message`) VALUES (NULL, '$titel', '$poster', '$time', '$message');";

Fungerar nu!

Om ditt fält id i databasen är satt som auto_increment så behöver du inte ha med det i din SQL-fråga alls. Men alltid bra att ha som vana att använda backticks runt kolumner och tabeller.

Permalänk
Medlem

One.com flyttade webbplatser till ny "infrastruktur" för att säkerställa framtida tillgänglighet, stabilitet och prestanda.
Läs mer om "strict mode" på:
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mod...

Permalänk
Medlem
Skrivet av dlq84:

Det underlättar om du beskriver "Det funkar inte" bättre. Vad exakt får du för fel?.

Min första tanke är att id inte tillåts att sättas till tom sträng, förmodligen förväntar den sig en integer. MEN eftersom du antagligen har auto increment på den så behöver du inte skicka in något där.

Ändra till

INSERT INTO nyheter (titel, poster, tid, message)

Och ta bort första elementet i VALUES ().

Förutom det är ett riktigt hett tips att se till att skydda mot SQL Injections, googla typ: php mysql sanitize

Även PDO är ytterst användbart, och om jag inte är helt fel ute (Har inte sysslat med php på länge) så är PDO det som gäller i dagsläget om man är intresserad av säkerhet i php/mysql

Visa signatur

Endeavour OS(arch) - Cassini Nova

Permalänk
Medlem

vet in om du löst det.

Här får du ett fungerande exempel från ett av mina gamla projekt.

<?php require 'connection.php'; $conn = Connect(); $gender = $conn->real_escape_string($_POST['gender']); $platform = $conn->real_escape_string($_POST['platform']); $interest = $conn->real_escape_string($_POST['interest']); $date = $conn->real_escape_string($_POST['date']); $query = "INSERT into tabell(gender,platform,interest,date) VALUES('" . $gender . "','" . $platform . "','" . $interest . "','" . $date . "')"; $success = $conn->query($query); if (!$success) { die("Couldn't enter data: ".$conn->error); } echo "<b><h1>Thanks for ... bla bla bla!</b></h1><br><br>"; echo "Gender: <b>$gender</b><br>"; echo "platform: <b>$platform</b><br>"; echo "Interest: <b>$interest</b><br>"; echo "Date: <b>$date</b><br>"; $conn->close(); ?>

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070