[php] mysqli kolla om använder finns i database.

Permalänk
Avstängd

[php] mysqli kolla om använder finns i database.

Tja,

Har använt Google men verka som många kör på det gammal sättet.

Så nu till frågan vad gör jag för fel så att den inte funkar?

$servername = "127.0.0.1"; $username = "root"; $password = ""; $dbname = "game"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $query = SELECT name FROM User WHERE name = 'test' AND password = 'test'"; if ($conn->query($query) === FALSE) { echo 'test'; } $conn->close(); }

Tycker det är jobbigt att använda NotePad++ då den inte hjälper till så mycket.

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem
Skrivet av zxhosting:

...

Tycker det är jobbigt att använda NotePad++ då den inte hjälper till så mycket.

Hjälper ju skit mycket?

Ser du inte att färgerna blir fel vid $query?

$query = SELECT name FROM User WHERE name = 'test' AND password = 'test'";

Ser du något fel på den raden?
Jag ser ett litet fel och ett väldigt stort fel.

Visa signatur

Programmerare -> PHP | HTML | CSS | JS | Java.

Permalänk
Medlem

hade du använt notepad++ så hade du sett felet direkt, den hade highlightat det.

en annan sak, ska du hålla på med saker där en användare kan ge sina egna meningar, använd prepared statements
http://php.net/manual/en/mysqli.prepare.php

Visa signatur

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Permalänk
Medlem

Kan säga att det saknas ett "

$query = "SELECT name FROM User WHERE name = 'test' AND password = 'test'";

Använd notepad++ eller liknande

Visa signatur

i7-6700K | MSI Z170A | MSI 1080 8GB | 16GB Kingston HyperX | Intel 600P 256GB | Samsung EVO Basic 840 250GB x2 raid 0 | Corsair RM 750W | 3 x Dell U2414H

Permalänk
Skrivet av zxhosting:

Tja,

Har använt Google men verka som många kör på det gammal sättet.

Så nu till frågan vad gör jag för fel så att den inte funkar?

$servername = "127.0.0.1"; $username = "root"; $password = ""; $dbname = "game"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $query = SELECT name FROM User WHERE name = 'test' AND password = 'test'"; if ($conn->query($query) === FALSE) { echo 'test'; } $conn->close(); }

Tycker det är jobbigt att använda NotePad++ då den inte hjälper till så mycket.

Som tidigare nämnt så fattas det " efter $query.

Nu när du kör in eget data till databasen så är det ingen säkerhetsrisk, men sedan när du provar att köra med riktigt inloggningsinformation så måste du skydda datat. För att göra det så använder du real_escape_string() som är en inbyggd funktion i MySQLi-biblioteket.

Till exempel om du har:
$username = $_POST["username"];
$password = $_POST["password"];
För att skydda datat då så använder du din MySQLi instans.
$username = $conn->real_escape_string($_POST["username"]);
$password = $conn->real_escape_string($_POST["password "]);

För att sedan kolla om användaren finns i databasen använder du num_rows.
Så här:
if ($query = $conn->query($query))
{
if ($query->num_rows == 1){
//Användaren finns
} else {
//Användaren finns inte
}
}

Prova detta

Permalänk
Medlem

@pettersoft:
Sedan borde du ju kunna stryka detta om syftet är att "kolla om använder finns i database.":
AND password = 'test'

Om nu inte användare kommer ha lösenord lagrat i klartext som man på förhand vet om, annars kommer du aldrig hitta någon.

Permalänk
Medlem

Hej,

Prova köra med PHP's PDO istället, bra mycket mer säkerhet.

// Uppgifter $host = "127.0.0.1"; $user = "root"; $pass = ""; $name = "game"; // Anslut till MySQL try { $DBH = new PDO("mysql:host=$host;dbname=$name", $user, $pass); } catch(PDOException $e) { echo $e->getMessage(); } // Kontrollera om användaren finns. $username = "test"; $STH = $DBH->("SELECT name FROM user WHERE name = ':username'"); $STH->bindParam(':username', $username); $STH->execute(); // Kontrollera om några rader hittades. if ($STH->rowCount()) { // Användaren finns! }

Permalänk
Medlem
Skrivet av fruud:

Hej,

Prova köra med PHP's PDO istället, bra mycket mer säkerhet.

Nej. PDO och mysqli är lika säkra metoder för att hantera SQL data.

Det är bara hur man använder det som avgör hur säkert det är.

Så vilket man använder är helt upp till vilket man tycker är enklast för en själv.

Permalänk

@JBE:
Precis.
Queryn får uppdateras till:
$query = "SELECT id FROM users WHERE username = '".$username."' AND password = '".$password."'";

Tips till TS är att hasha och salta lösenorden. Finns jättemycket information om detta på google men ett exempel kan vara:
$password = password_hash("salt123" . $_POST['password'], PASSWORD_DEFAULT);

Permalänk
Medlem
Skrivet av hamre:

Nej. PDO och mysqli är lika säkra metoder för att hantera SQL data.

Det är bara hur man använder det som avgör hur säkert det är.

Så vilket man använder är helt upp till vilket man tycker är enklast för en själv.

Ja, men PDO tillför ett bättre arbetsflöde och man slipper göra manuell escaping. Det handlar väl i slutändan om en smaksak antar jag.

Permalänk
Legendarisk
Skrivet av fruud:

Ja, men PDO tillför ett bättre arbetsflöde och man slipper göra manuell escaping. Det handlar väl i slutändan om en smaksak antar jag.

Vill bara tillägga att även mysqli har stöd för prepared statements, om än med ett omständigare gränssnitt än PDO.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Spelar nog ingen roll om du kör pdo eller mysqli. Fördelen med PDO vad jag förstår om du ska byta databasmotor i framtiden så behöver du inte ändra koden.

Permalänk
Legendarisk
Skrivet av nighter:

Spelar nog ingen roll om du kör pdo eller mysqli. Fördelen med PDO vad jag förstår om du ska byta databasmotor i framtiden så behöver du inte ändra koden.

Gränssnittet mot PDO kommer vara detsamma, men det är inte avsett att helt abstrahera sådant och beroende på inställningar (t.ex. byte mellan emulerade och äkta prepared statements), databasens egenskaper och dialekt av SQL så kan du behöva skriva om queries ändå.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Tunnelsork:

Gränssnittet mot PDO kommer vara detsamma, men det är inte avsett att helt abstrahera sådant och beroende på inställningar (t.ex. byte mellan emulerade och äkta prepared statements), databasens egenskaper och dialekt av SQL så kan du behöva skriva om queries ändå.

Funktionerna kommer fortfarande vara desamma sen att dialekterna o egenskaper kan skilja sig åt är ganska underförstått.