|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> PHP /MySQL Programmering >> Content

    Hur kontrollerar du data som ges av användaren med databasvärden med PHP från MySQL -databasen?

    Det finns flera sätt att kontrollera om användarnas tillhandahållande data matchar data i en MySQL-databas med PHP. Det bästa tillvägagångssättet beror på vad du jämför och hur du vill hantera potentiella avvikelser. Här är några exempel, med fokus på bästa praxis för säkerhet:

    1. Kontrollera för en enda användare (t.ex. inloggning):

    Detta är det vanligaste scenariot. Vi kontrollerar om ett användarnamn och lösenord matchar en post i databasen. avgörande, vi hash lösenordet innan du jämför det. Förvara aldrig lösenord i vanlig text!

    `` `php

    // databasuppgifter (ersätt dessa med dina faktiska referenser!)

    $ Servername ="Your_Servername";

    $ användarnamn ="your_username";

    $ lösenord ="your_password";

    $ dbname ="your_dbname";

    // Användarinmatning (sanera detta!)

    $ userNameInput =$ _post ["användarnamn"];

    $ PasswordInput =$ _Post ["Password"];

    // sanera användaringångar för att förhindra SQL -injektion

    $ userNameInput =mysqli_real_escape_string ($ conn, $ userNameInput);

    $ PasswordInput =mysqli_real_escape_string ($ conn, $ PasswordInput);

    // Skapa anslutning

    $ conn =new mysqli ($ servername, $ användarnamn, $ lösenord, $ dbname);

    // Kontrollera anslutningen

    if ($ conn-> connect_error) {

    Die ("Anslutning misslyckades:". $ conn-> connect_error);

    }

    // Förbered och binda

    $ stmt =$ conn-> förbereda ("Välj lösenord_hash från användare där användarnamn =?");

    $ stmt-> bind_param ("s", $ usernameInput);

    $ stmt-> execute ();

    $ resultat =$ stmt-> get_result ();

    if ($ result-> num_rows> 0) {

    $ rad =$ result-> Fetch_assoc ();

    $ hashedPassword =$ rad ["Password_hash"];

    // Verifiera lösenord med Password_Verify (PHP:s inbyggda lösenordshash-funktion)

    if (Password_verify ($ PasswordInput, $ hashedPassword)) {

    // Logga in framgångsrik

    Echo "Logga in framgångsrikt!";

    } annat {

    // Felaktigt lösenord

    echo "felaktigt lösenord.";

    }

    } annat {

    // Användarnamn hittades inte

    echo "Användarnamn hittades inte.";

    }

    $ stmt-> close ();

    $ conn-> close ();

    ?>

    `` `

    Förklaring:

    * databasuppgifter: Byt ut platshållarens referenser med dina faktiska MySQL -databasinformation.

    * Användarinmatning: Denna kod antar att användarnamnet och lösenordet skickas in via en postförfrågan. Sanit alltid användarinmatning För att förhindra SQL -injektionssårbarheter. `Mysqli_real_escape_string ()` är ett grundläggande steg, men beredda uttalanden (som används här) är mycket mer robusta.

    * Förberedd uttalande: Ett förberett uttalande förhindrar SQL-injektion genom att separera SQL-frågan från användarnas leveransdata. Det är avgörande för säkerhet.

    * Lösenordshashing: Databasen ska lagra lösenord *hash *, inte vanliga textlösenord. `Password_hash ()` skapar en säker hash, och `lösenord_verify ()` jämför användarens ingång mot den lagrade hashen.

    * Felhantering: Koden innehåller grundläggande felhantering för databasanslutning och frågefel.

    2. Kontrollera för flera matcher (t.ex. sökning av ett tabell):

    Om du behöver hitta flera matcher baserade på användarinmatning (som att söka efter produkter med ett specifikt namn) måste du anpassa frågan:

    `` `php

    // ... (databasanslutning som ovan) ...

    $ sökning =$ _post ["Searchterm"];

    $ sökning =mysqli_real_escape_string ($ conn, $ sökning); // Sanit!

    $ sql ="välj * från produkter där namn som '%$ Searchterm%'"; // Enkelt exempel - Använd förberett uttalande för bättre säkerhet!

    $ resultat =$ conn-> query ($ sql);

    if ($ result-> num_rows> 0) {

    medan ($ rad =$ result-> fetch_assoc ()) {

    // bearbeta varje matchande rad

    Echo "Produkt:". $ rad ["namn"]. "
    ";

    }

    } annat {

    echo "Inga produkter hittade.";

    }

    // ... (nära anslutning) ...

    ?>

    `` `

    Viktig anmärkning: Ovanstående sökexempel använder String Concatenation, som är sårbar för SQL -injektion om `$ Searchterm 'inte saneras . För en säker lösning, skriv om den med beredda uttalanden. Exempel:

    `` `php

    $ stmt =$ conn-> förbereda ("välj * från produkter där namn gillar?");

    $ sökning ="%". $ sökning. "%"; // Lägg till jokertecken för liknande

    $ stmt-> bind_param ("s", $ sökning);

    $ stmt-> execute ();

    // ... resten av koden för att hantera resultat ...

    `` `

    Kom ihåg att ersätta platshållartabellen och kolumnnamnen med ditt faktiska databasschema. Prioritera alltid säkerhet genom att använda beredda uttalanden och korrekt input sanering för att förhindra SQL -injektionsattacker. Överväg att använda parametrerade frågor för all interaktion med användarinmatning och din databas. För mer komplexa scenarier eller stora datasätt kanske du vill utforska mer avancerade tekniker som lagrade procedurer.

    Tidigare:

    nästa:
    relaterade artiklar
    ·PHP File Upload Typer
    ·Berätta mycket tydligt vad är skillnaden mellan SQL o…
    ·Hur du tar bort cookies med PHP
    ·Hur man skapar en array i PHP
    ·Hur Inkludera PHP funktioner från en annan fil
    ·Hur man berättar MySQL Query att hålla tomt utrymme
    ·Användning av klass Motsvarande i PHP
    ·Hur du ändrar ett typsnitt med PHP
    ·Lägga till en bild i en PHP -fil
    ·Hur kontrollerar du om MySQL körs?
    Utvalda artiklarna
    ·Hur man läser en fil byte för byte i C + +
    ·Hur man läser en Hex File
    ·Hur man tar bort vägen från en ODM
    ·Abstrakt klass Vs. Gränssnitt i Java
    ·Hur man skapar en Lisp makro
    ·Vad är karaktären på olika typdatorer?
    ·Hur man installerar C + + kompilatorer för NetBeans
    ·Hur man gör en GNU -fil för C + +
    ·XML Kodning & ASP
    ·Hur man lär sig C + + Arv Snabbt
    Copyright © Dator Kunskap https://www.dator.xyz