Permalänk
Medlem

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"; } } ?>

Visa signatur

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)

Permalänk
Medlem
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.

Visa signatur

Dator: Ryzen 5900X, 32GB RAM, RTX3080
Ljud: SMSL SU-8, HDVA600, HD800.

Permalänk
Medlem
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

Visa signatur

Citera om du vill ha svar :)

Permalänk
Hedersmedlem

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.

Visa signatur

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

Permalänk

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);

Permalänk
Medlem

("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.

Visa signatur

- Åldern har tagit ut sig i form av bekvämlighet -
------- Playstation 4/5 - Nintendo Switch -------

Permalänk
Medlem

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.

Permalänk
Medlem

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(); ?>

Visa signatur

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)