Trädvy Permalänk
Medlem
Plats
Härnösand
Registrerad
Apr 2003

php kod insert inte till sql

Har suttit och blivit tokig.
Kan inte hitta varför php inte funkar.
Kontakten till sql servern är ok samt inloggningen
Men på något sätt vill den inte skriva till sqldatabasen
Jag får ut echo något är galet hela tiden.
Har tittat och följt denna guide.
https://www.youtube.com/watch?v=scL-5u8l5-U

<?php require('connect.php'); $username= @$_POST['username']; $password= @$_POST['password']; $repass = @$_POST['repassword']; $email= @$_POST['email']; if(isset($_POST['submit'])) { if($username && $password && $repass && $email){ }else { echo "Fyll i alla uppgifter"; } } { if($query = mysql_query ("INSERT INTO users ('id','username','password','email') VALUES ('', '".$username."','".$password."','".$email."') ")) echo "Det funkar"; else { echo "Det funkar inte, något är galet"; } } ?>

K4 Jägare är härliga människor. Varför får inte rika människor bli rikare. Ja till EMU
We live for the one, we die for the one'
(Loggar man inte ut får man en extra rad i sin signatur :-) /VaCUm)

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jan 2010
Skrivet av Lady:

Har suttit och blivit tokig.
Kan inte hitta varför php inte funkar.
Kontakten till sql servern är ok samt inloggningen
Men på något sätt vill den inte skriva till sqldatabasen
Jag får ut echo något är galet hela tiden.
Har tittat och följt denna guide.
https://www.youtube.com/watch?v=scL-5u8l5-U

<?php
require('connect.php');
$username= @$_POST['username'];
$password= @$_POST['password'];
$repass = @$_POST['repassword'];
$email= @$_POST['email'];

if(isset($_POST['submit']))
{
if($username && $password && $repass && $email){

}else
{
echo "Fyll i alla uppgifter";
}

}

{
if($query = mysql_query
("INSERT INTO users ('id','username','password','email') VALUES ('', '".$username."','".$password."','".$email."') "))
echo "Det funkar";

else
{
echo "Det funkar inte, något är galet";
}
}

?>

Har inte sysslat med PHP på flera år men tror jag ser felet, du tycks aldrig köra din query. Bör se ut så här om jag inte är helt förvirrad.

<?php require('connect.php'); $username= @$_POST['username']; $password= @$_POST['password']; $repass = @$_POST['repassword']; $email= @$_POST['email']; if(isset($_POST['submit'])) { if($username && $password && $repass && $email){ $query = true; //Utan denna rad är query aldrig sant och kommer därför aldrig lägga till användaren. }else { echo "Fyll i alla uppgifter"; } } { if($query = mysql_query ("INSERT INTO users ('id','username','password','email') VALUES ('', '".$username."','".$password."','".$email."') ")) echo "Det funkar"; else { echo "Det funkar inte, något är galet"; } } ?>

Om du är nybörjare och endast ska använda servern lokalt fungerar detta bra men om servern är åtkomlig från internet bör ett antal förändringar ske för att göra det någorlunda säkert, nedan är tips på bra sökord om du vill lära dig mer om hur du bör säkra "user registration" sidan.

  • password hash - md5 var normalt när jag började men är nu alldeles för lätt att knäcka och bör köras i flera varv eller med starkare algoritm

  • Password salt - Varje användare bör få ett unikt salt som används i olika steg tillsammans med "hash" för att undvika "rainbow table" attacker

  • SQL injection - När jag var igång senast var det mysql_real_escape_string() som gällde vilket stoppar skadlig kod från att injekteras i dina text rutor

Slutligen bör du köra en kontroll om $password och $repassword är lika då du annars kunnat skippa $repassword helt (Förutsatt att detta inte görs i javascript redan).

SQL injection är något av det besvärligaste som finns för nybörjare och tyvärr finns det även second level SQL injection, vilket egentligen betyder att ingen kod körs första varvet men sparas i data-basen och körs sedan när sidan genereras. Här är en mycket bra video om du är intresserad.

Hoppas jag inte förvirrade dig allt för mycket men om du släpper lös server på internet och framförallt om du får fler användare än dig själv måste ovanstående vara gjort för allas säkerhet då de flesta återanvänder inloggnings uppgifter.

Dator: Intel S2600CP2J, 2x Xeon E5 2670V1, 128GB DDR3 1600MHz ECC, RX 480 8GB, EVGA Supernova G2 750W
Ljud: O2+ODAC, HD650, Blue Snowball.
Laptop: Sony Vaio PRO 13. Telefon: OnePlus One

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

SQL injection - När jag var igång senast var det mysql_real_escape_string() som gällde vilket stoppar skadlig kod från att injekteras i dina text rutor

SQL injection är något av det besvärligaste som finns för nybörjare och tyvärr finns det även second level SQL injection, vilket egentligen betyder att ingen kod körs första varvet men sparas i data-basen och körs sedan när sidan genereras. Här är en mycket bra video om du är intresserad.
https://www.youtube.com/watch?v=ciNHn38EyRc&ab_channel=Comput...

Nu är det väl PDO som gäller? fick massa gnäll när jag körde med real escape string

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
Okt 2010

Som redan skrivits, slopa hela mysql_ och gå över till mysqli (ett i på slutet) eller PDO.

Men får att få mer förståelse på problemet tycker jag det ser rätt ut.
Kan du dra på alla errors (typ error_reporting(E_ALL); högst upp) alt. dumpa ut vad $query är, antingen i när det går fel eller efter allting.

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Asus GTX 1080 Strix, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2016

Som tidigare nämnt gå över till PDO för då kan du köra enklare kod som ser ut såhär:

$dbname = ""; $dbhost = ""; $dbuser = ""; $dbpass = ""; $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname;charset=utf8", $dbuser, $dbpass); // Sätt eventuella inställningar för PDO: $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); function insertUserInDB($dbh) { $insert_user_sql = "INSERT INTO users (username, password) VALUES (:username, :password)"; $stmt = $dbh->prepare($insert_user_sql); // Hasha och lowercase $password = sha1($_POST['password']); $username = strtolower($_POST['username']); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute(); } // Kör funktionen och nu ska det fungera insertUserInDB($dbh);

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Nov 2005

("INSERT INTO users ('id','username','password','email') VALUES ('', '".$username."','".$password."','".$email."') "))

Felet är gissningsvis att fältet "id" är auto-increment och att du försöker skicka en tom sträng.

("INSERT INTO users ('username','password','email') VALUES ('".$username."','".$password."','".$email."') "))

Men som tidigare sagt så rekommenderas PDO eller mysqli.

Corsair Obsidian 650D / Silverstone Strider 1200w / Intel 2600K / Corsair H100 / ASUS Sabertooth Z77 / Corsair Vengeance 1866mhz 16GB / 2x Intel 520 240GB Raid0 / 5x WD 3TB / 2x Seagate 4TB / 2x GTX 680 4GB SLI / Philips BDM4065UC
Fyndtråden - Inet Fraktfritt

Trädvy Permalänk
Medlem
Plats
Härnösand
Registrerad
Jan 2016

Jag bruka göra en function på db_escape

function db_escape($post) { if (is_string($post)) { if (get_magic_quotes_gpc()) { $post = stripslashes($post); } return mysql_real_escape_string($post); } foreach ($post as $key => $val) { $post[$key] = db_escape($val); } return $post; }

på post värdet för göra bättre skydd mot SQL infektioner.

Trädvy Permalänk
Medlem
Plats
Härnösand
Registrerad
Apr 2003

Tack för hjälpen. har kollat runt lite men blir bara förvirrad.
löste sig när man förstod lite på w3c hemsida.
Löstes med följande kod men jag la behöva skriva om det för att den ska lägga in skriven data.

<?php $servername = "localhost"; $username = "root"; $password = "061126857"; $dbname = "php_forum"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "INSERT INTO users (username, password, email) VALUES ('John', 'Doe', 'john@example.com')"; if ($conn->query($sql) === TRUE) { echo "Användaren skapades"; } else { echo "Något är fel " . $sql . "<br>" . $conn->error; } $conn->close(); ?>

K4 Jägare är härliga människor. Varför får inte rika människor bli rikare. Ja till EMU
We live for the one, we die for the one'
(Loggar man inte ut får man en extra rad i sin signatur :-) /VaCUm)