WebHU - Programozási kérdések és válaszok

Hogyan juthat hozzá a felhasználó egyéb adataihoz, amikor bejelentkezik a felhasználónevével?

Kezdő vagyok a programozásban. Azt szeretném kérdezni, hogy van-e mód arra, hogy egy másik oldalon lekérjem a felhasználók adatait a MySQL-ből, ha csak a felhasználónevével és jelszavával jelentkeznek be. Amivel szemben állok, az

  1. Van egy bejelentkezési oldalam és egy főoldalam
  2. Van egy felhasználói adatbázisom, amely tartalmazza a felhasználói azonosítót, a felhasználónevet, a jelszót és a szerepazonosítót

Amikor a felhasználó bejelentkezik, megkaphatom a felhasználónevét a $SESSION-on keresztül, de igazán szeretném a szerepazonosítójukat, így feltételként használhatom a felhasználó korlátozására. Mint az Admin, kaphat egy fejlécet, amely több gombbal és funkcióval rendelkezik.

De amikor megpróbáltam az sql lekérdezést használni, csak a táblázatban jelenít meg egyetlen szöveget, amelyet használhatok. Bármilyen ötlete?

főoldal.php

<?php
// Initialize the session
session_start();

$user = $_SESSION['username'];
$conn = new mysqli('localhost','root','','mes');
$sql = "SELECT role_id from users where username = $user";
$result = $conn->query($sql);
echo $result;

// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}

// condition to limit the user
if( (isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] == true) && ($result === '202000') ){
    include_once "premierHeader.php";
}
    else{
      include_once "header.php";
    }

?>
10.06.2020

  • $sql = "SELECT role_id from users where username = $user"; sql injekció várakozik 10.06.2020
  • A query eredményobjektumot ad vissza, nem karakterláncot. fetch kell. Paraméterezze a lekérdezést is. Ez az SQL nem működik úgy, ahogy van, és mivel nem keresi a hibákat, ezt még nem tudja. Illetve hol van beállítva a $_SESSION["loggedin"], és nincs szükség jelszóra a bejelentkezéshez? 10.06.2020
  • A $_SESSION["loggedin"] beállítása folyamatban van a bejelentkezési oldalon, ott is jelszó szükséges. 10.06.2020
  • Valami frissítés ehhez a problémához? Megoldódott? Elég volt a válasz? Ha igen, szíveskedjen elfogadni a választ. :) 12.06.2020

Válaszok:


1

FIGYELMEZTETÉS ahogy néhányan már rámutattak a megjegyzés szakaszban, Ön nyitott az SQL-injekciókra (SQLI Attacks). Erősen javaslom, hogy használja a paraméterezett, előkészített utasításokat mysqli vagy PDO használatával.

Ha ez nem történik meg, a válaszomhoz kifejezetten mysqli által készített állításokat fogok használni.

Amit meg kell értened, hogy amikor megkapod a lekérdezés eredményét, akkor kapsz egy objektumot. Az érték tényleges megszerzéséhez fetch();_ kell megadnia azt.

Példa:

<?php
// Initialize the session
session_start();

// Username variable via session
$user = $_SESSION['username'];

// DB variables
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mes";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if($conn->connect_error){
  die("Connection failed: " . $conn->connect_error);
}

// Declare the query
$sql = "SELECT role_id from users where username = ?";

// Prepare and bind
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $user);

// Execute the query
$stmt->execute();

// Bind result variable and fetch value
$stmt->bind_result($role_id);
$stmt->fetch();

// Close connection
$stmt->close();
$conn->close();

// Optionally, you can put the role id into a session variable
$_SESSION["role_id"] = $role_id;
?>
11.06.2020
  • szóval úgy érted, hogy valaki feltörheti az SQL-emet a bemenetén keresztül, ezért váltanom kell erre a struktúrára? Olvastam valamennyit, de kicsit tanácstalan vagyok, hogy a PDO megfelelő-e a php kódomhoz és az sql adatbázisomhoz? vagy a mysqli-t kell használnom? 11.06.2020
  • Igen, ha nem használ paraméterezett, előkészített nyilatkozatokat, az emberek rosszindulatú lekérdezéseket szúrhatnak be az adatbázisába, és mindenféle dolgot megtehetnek. Inkább akadályozza meg. Az, hogy a mysqli-t vagy a PDO-t választja, kizárólag Önön múlik. Ez pusztán preferencia. Én személy szerint jobban szeretem a mysqli-t, ezért ezt használtam a válaszomhoz. 11.06.2020
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..