INSERT INTO med VALUE('$_POST') funkar inte

Permalänk
Medlem

INSERT INTO med VALUE('$_POST') funkar inte

har problem med att få in data i min MySQL databas
jag får in fält men dom är tomma. nån som kan tänkas varför?

har ett form som ser ut såhär:

<form action="database.php" method="post ">
<div id="headline">
<label for="headline">Headline</label><br />
<input type="text" name="headline">
</div>

<div id="Post">
<label for="Post">Post</label><br />
<textarea name="post" id="text"/></textarea>

<input id="send" type="submit" />
</div>
</form>

och ett .php som ser ut:

<?php
$con = mysql_connect("XXXX","XXXX","XXXX");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("XXXX", $con);

$sql="INSERT INTO blogg (headline, post)
VALUES
('$_POST[headline]','$_POST[post]')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";

mysql_close($con)
?>

Permalänk
Medlem

Om jag inte minns fel kan du inte använda själva $_POST direkt i mysql_query'n. Du måste definiera en variabel.

T.ex:

$headline = $_POST['headline']; $post = $_POST['post']; <?php $con = mysql_connect("XXXX","XXXX","XXXX"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("XXXX", $con); $sql="INSERT INTO blogg (headline, post) VALUES ('$headline','$post')"; if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } echo "1 record added"; mysql_close($con) ?>

Permalänk
Medlem
Skrivet av RuCKk:

('$_POST[headline]','$_POST[post]')";

Du har fnuttarna fel där. Ska vara $_POST['headline'] och $_POST['post']

Permalänk
Medlem

<?php // Show all errors error_reporting(E_ALL); $great = 'fantastic'; // Won't work, outputs: This is { fantastic} echo "This is { $great}"; // Works, outputs: This is fantastic echo "This is {$great}"; echo "This is ${great}"; // Works echo "This square is {$square->width}00 centimeters broad."; // Works, quoted keys only work using the curly brace syntax echo "This works: {$arr['key']}"; // Works echo "This works: {$arr[4][3]}"; // This is wrong for the same reason as $foo[bar] is wrong outside a string. // In other words, it will still work, but only because PHP first looks for a // constant named foo; an error of level E_NOTICE (undefined constant) will be // thrown. echo "This is wrong: {$arr[foo][3]}"; // Works. When using multi-dimensional arrays, always use braces around arrays // when inside of strings echo "This works: {$arr['foo'][3]}"; // Works. echo "This works: " . $arr['foo'][3]; echo "This works too: {$obj->values[3]->name}"; echo "This is the value of the var named $name: {${$name}}"; echo "This is the value of the var named by the return value of getName(): {${getName()}}"; echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}"; // Won't work, outputs: This is the return value of getName(): {getName()} echo "This is the return value of getName(): {getName()}"; ?>

Källa: http://php.net/manual/en/language.types.string.php

Permalänk
Medlem

Tack för svaren!
men de funkar fortfarande inte : / får in en post i databasen varje gång jag skickar formuläret, men de finns inget i^^

nu ser koden ut såhär:

<?php

$headline = $_POST['headline'];
$post = $_POST['post'];

$con = mysql_connect("xxxx","xxxx","xxxx");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("xxxx", $con);

$sql="INSERT INTO blogg (headline, post)
VALUES
('$headline','$post')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";

mysql_close($con)
?>

Permalänk
Medlem

Men... Du kör !mysql_query frågan men sedan kör du aldrig själva queryn?
borde det inte vara:

if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); } else { mysql_query($sql); echo "1 record added"; }

Permalänk
Medlem

Aj, jag dör lite inombords när jag läser den här tråden.
Vi tar det från början, du ska ALDRIG, ALDRIG och åter igen ALDRIG köra in en variable i en statisk query utan att först validera eller escapea variabeln.
Läs på om sql-injektioner. Annars töms databasen snabbare än vad du hinner säga säkerhet.

Sedan skickar du aldrig informationen när du trycker på Submit då du har valt metoden "post " och inte "post" (mellanrum efter post).
Ett tips är att göra en enkel validering av html-koden. Du har för övrigt också glömt att avsluta första input elementet.

Jag blir också oroligt över hur säkerhetstänket på resten av sidan är. Escapear du htmlkod när posterna ska visas t.ex.?

@Zelloxy, om du anropar en funktion/metod i ett uttryck så exekveras den (med undantag för Short-circuit evaluation). Hur skulle den annars kunna returnera något till uttrycket?

Visa signatur

citera!

Permalänk
Medlem
Skrivet av Dosshell:

Säkerhetsprat

Security är inte viktigt for en nybörjare. Först basics, så hardening code köret. En skal helst förstå va man säkrar.

Visa signatur

Bosna u <3

I7-6700K :-: 16gb DDR4 :-: ASUS 1080TI :-: MSI Gaming Carbon :-: NH-U14S :-: FD R5 :-: Seasonic X 760W

Permalänk
Medlem
Skrivet av Dosshell:

Aj, jag dör lite inombords när jag läser den här tråden.
Vi tar det från början, du ska ALDRIG, ALDRIG och åter igen ALDRIG köra in en variable i en statisk query utan att först validera eller escapea variabeln.
Läs på om sql-injektioner. Annars töms databasen snabbare än vad du hinner säga säkerhet.

Sedan skickar du aldrig informationen när du trycker på Submit då du har valt metoden "post " och inte "post" (mellanrum efter post).
Ett tips är att göra en enkel validering av html-koden. Du har för övrigt också glömt att avsluta första input elementet.

Jag blir också oroligt över hur säkerhetstänket på resten av sidan är. Escapear du htmlkod när posterna ska visas t.ex.?

@Zelloxy, om du anropar en funktion/metod i ett uttryck så exekveras den (med undantag för Short-circuit evaluation). Hur skulle den annars kunna returnera något till uttrycket?

Mmm ser det nu. Var längesedan jag försökte mig på koda. Får ta och uppdatera min "kunskap" lite

Permalänk
Medlem
Skrivet av Dosshell:

Aj, jag dör lite inombords när jag läser den här tråden.
Vi tar det från början, du ska ALDRIG, ALDRIG och åter igen ALDRIG köra in en variable i en statisk query utan att först validera eller escapea variabeln.
Läs på om sql-injektioner. Annars töms databasen snabbare än vad du hinner säga säkerhet.

Sedan skickar du aldrig informationen när du trycker på Submit då du har valt metoden "post " och inte "post" (mellanrum efter post).
Ett tips är att göra en enkel validering av html-koden. Du har för övrigt också glömt att avsluta första input elementet.

Jag blir också oroligt över hur säkerhetstänket på resten av sidan är. Escapear du htmlkod när posterna ska visas t.ex.?

Jag kommer mer från designhållet, läser virtuell design, men har kört HTML och CSS ett tag och vill få lite fart på grejerna om man säger^^kan egentligen inte php men tänkte börja lite smått.

inga variabler säger du, valideringen säger bara : Bad value post for attribute method on element form.
och menar du $_POST ['headline'] istället för $_POST['headline']?

"Escapear du htmlkod när posterna ska visas t.ex.?" förstår inte riktigt vad du menar, men de här är de ända formuläret, har bara sidan för att lära mig

Ni får ursäkta om jag är allt för bedrövlig, och ni ska ha stort tack

Permalänk
Medlem
Skrivet av zeleni:

Security är inte viktigt for en nybörjare. Först basics, så hardening code köret. En skal helst förstå va man säkrar.

Säkerhet är viktigt som ***. Jag tycker att man ska lära en nybörjare att alltid tänka på säkerheten.

Permalänk
Medlem
Skrivet av RuCKk:

och menar du $_POST ['headline'] istället för $_POST['headline']?

Nej. Det är din form som är fel.

<form action="database.php" method="post ">
ska vara
<form action="database.php" method="post">

Sen får du gärna använda [ html ] och [ php ] taggar för längre stycken kod

Ang. säkerheten så antar jag att du bara gör ett exempel. För det är väl ingen seriös sida som du håller på med? isåfall måste du kolla på sql injections

Permalänk
Medlem
Skrivet av Pie-or-paj:

Nej. Det är din form som är fel.

<form action="database.php" method="post ">
ska vara
<form action="database.php" method="post">

Ang. säkerheten så antar jag att du bara gör ett exempel. För det är väl ingen seriös sida som du håller på med? isåfall måste du kolla på sql injections

nu får jag ett felmedelande iaf:
(HTTP-fel 500 (Internal Server Error): Ett oväntat tillstånd gjorde att servern inte kunde uppfylla begäran.)

ne som sagt är de bara för att lära mig, få in nått i databasen över huvutaget^^

och jag läst lite om sql injections, låter inte så trevligt..

Permalänk
Medlem
Skrivet av RuCKk:

valideringen säger bara : Bad value post for attribute method on element form.

Bara och bara, den berättar för dig vad som är fel. Du har fel värde på attributet method på elementet form.
Observera mellanrummet:
Du har nu;

<form action="database.php" method="post ">

Du vill ha:

<form action="database.php" method="post">

Felet beror inte på php-koden utan på htmlkoden.

Om du senare ska visa upp informationen från databasen är det viktigt att du esceapar all html kod (Om någon annan än behöriga personer kan skiva), så att det inte kör html/js kod som någon obehörig användare har postat.
EDIT: Sorry Pie-or-paj, jag var lite seg att posta där

Visa signatur

citera!

Permalänk
Medlem

fan va najs, nu funkar de prima tack så mycket, guld värt!

Permalänk
Medlem

Prima och prima, du har en allvarlig säkerhetslucka. En bugg i säkerheten är så mycket viktigare än en bugg i koden eller dokumnentationen (Ja, många bland annat jag, anser att en bugg i dokumentationen är lika allvarlig som en bugg i programvaran). Ett tips är att preparera SQL frågorna innan du kör dem t.ex. mha att använda mysqli eller PDO. Du skickar alltså inga statiska frågor till SQL-servern.

Kolla här: http://www.php.net/manual/en/mysqli.prepare.php
Det är inte alls svårt och du slipper tänka på SQL-injektions.

Visa signatur

citera!

Permalänk
Medlem
Skrivet av Dosshell:

Prima och prima, du har en allvarlig säkerhetslucka. En bugg i säkerheten är så mycket viktigare än en bugg i koden eller dokumnentationen (Ja, många bland annat jag, anser att en bugg i dokumentationen är lika allvarlig som en bugg i programvaran). Ett tips är att preparera SQL frågorna innan du kör dem t.ex. mha att använda mysqli eller PDO. Du skickar alltså inga statiska frågor till SQL-servern.

Kolla här: http://www.php.net/manual/en/mysqli.prepare.php
Det är inte alls svårt och du slipper tänka på SQL-injektions.

klart en bugg i säkerheten är allvarlig, men jag är glad att de funka att få in nått över huvudtaget!

ja kolla där och jag förstod ju i princip vad han gör men inte fullt ut och inte hur jag ska applicera de här^^
kan ju som sagt inte så mycket inom php, men tack för att du hjälper till

Permalänk
Medlem

<form action="database.php" method="post"> <div id="headline"> <label for="headline">Headline</label><br /> <input type="text" name="headline"> </div> <div id="post"> <label for="Post">Post</label><br /> <textarea name="post" id="text"/></textarea> <input id="send" type="submit" /> </div> </form> <?php if(isset($_POST['headline'])) { mysql_connect("XXXX","XXXX","XXXX") or die('Could not connect: ' . mysql_error()); mysql_select_db("XXXX") or die('Could not select database: ' . mysql_error()); $headline = mysql_real_escape_string($_POST['headline']); $post = mysql_real_escape_string($_POST['post']); $query = "INSERT INTO blogg (headline, post) VALUES ('$headline', '$post')"; mysql_query($query) or die('Couldn\'t execute query: ' . mysql_error()); echo "<p>1 record added</p>"; } ?>

Nu kan det vara så att du bara har tappat formateringen för att du inte använde kodtaggar, men det såg rätt jävligt ut. Jag snyggade till det lite, exempelvis behöver du inte alla if-satser och som sagt bör du kolla variablerna först innan du lägger in dem i databasen, med exempelvis mysql_real_escape_string().

Permalänk

Jävligt cowboy att spara en HTTP POST rakt in i databasen.

Kopiera istället koden från:
http://www.php.net/manual/en/pdostatement.execute.php

Om du av någon anledning väljer att använda mysql_real_escape_string() istället så finns (fanns?) det risker om du använder multibyte-encoding men det är nog utanför scoopet för det här problemet.

Förövrigt refererar post i $_POST[post] en const och inte en nyckel (key) vid namn post, således vill du (förmodligen) använda $_POST['post'].

Visa signatur

Lee Adama is a bitch!