Just nu i M3-nätverket
Jump to content

Är jag helt fel ute??


MrHall

Recommended Posts

Jag vill skapa en inloggning...

Jag har via ett html-formulär registrerat "User" och "Password" i MySQL...

 

Nu vill jag hämta alla uppgifter för användaren när jag loggar in med korrekt användarnamn och lösen.

 

Jag har gjort en liten login.php

<?php
$sqlid=@mysql_connect("******", "*******", "*********");
   if ($sqlid=="") {
     print("<i>Det gick inte att få kontakt med servern.</i>");
     exit;
   }

$databas=mysql_select_db("******");
   if ($databas=="") {
     print("<i>Databasen finns inte.</i>");
     exit;
   }

$user = $_POST['user'];
$password = $_POST['password'];

   # Skapa SQL-fråga
   $sqlquery="SELECT * FROM Deltagare WHERE User='$user' AND Password='$password'";
  if ($sqlquery=="") {
     print("<i>Felaktigt användarnamn eller lösen.</i>");
     exit;
     header("Location: login.php");
   }
   # Ställ SQL-frågan
   $sqlresult=mysql_query("$sqlquery");

 # Hämta svaret och skriva ut det
 while($svar=mysql_fetch_array($sqlresult)) {
   print("$svar[0] $svar[1] $svar[2], $svar[3]<br>");
 }

   mysql_close($sqlid);

?> 

Den röda texten...

Om jag ändrar detta och skriver in det korrekta lösenordet istället för variabeln fungerar det att hämta data ur MySQL.

Så fort jag använder en variabel händer ingenting.

Vad är fel???

 

Den Blåa texten...

Jag vill ju att man helt enkelt kommer tillbaka till inloggningssidan med ett meddelande om man anger fel lösen eller användarnamn.

 

Det jag skrivit fungerar inte alls... :s

 

//Ola

 

[inlägget ändrat 2009-05-22 21:01:11 av MrHall]

 

Tråden flyttad från MySQL av moderator

 

[inlägget ändrat 2009-05-22 21:17:55 av Cluster]

Link to comment
Share on other sites

nu ser jag inga röda eller blå markeringar men antar att det är $password resp header: location du syftar på.

Set sistnämnda kan du lösa genom att skicka med en querystring:

Header('location: login.php?error=No_such_user'), fånga upp det av loginsidan och skriva ut ett förståerligt felmeddelande.

 

Förresten, den kommer aldrig skicka till login.php då du kollar om sqlsträngen innerhåller ngt, och det gör den alltid, men user och password kanske inte gör det. Så felhantering där, samt felhantering om inga rader påträffades.

Dessutom, är inte namnet password reserverat?! prova skriva `User` resp `Password`

 

Gällande variabeln: input-fältet heter "password" eller?

prova byta till pwd där och när du hämtar upp värdet:

$pwd= $_POST['pwd'];

samt i SQLen och testa om det fungerar.

 

Glöm inte att skydda dig mot injektioner. Man kan lätt radera hela din databas i nuvarande form.

 

[inlägget ändrat 2009-05-22 21:18:08 av Jonas_Bo]

[inlägget ändrat 2009-05-22 21:20:08 av Jonas_Bo]

Link to comment
Share on other sites

Aha, det var ju konstigt med rött och blått... :S

 

jaja, men du listade ut det ändå! ;)

 

Det funkade när jag bytte ut "password" mot "pwd" :)

 

Men en fråga...

 

Jag är inte sådär jättehaj på det här med .php...

 

Du skrev såhär...

 

Det sistnämnda kan du lösa genom att skicka med en querystring:

Header('location: login.php?error=No_such_user'), fånga upp det av loginsidan och skriva ut ett förståerligt felmeddelande.

 

Skulle du kunna utveckla det?

...kanske med ett konkret exempel?

 

...och det där med injektioner...

Hur skyddar jag mig mot det??

 

...om man kan besvära om exempel på det med kanske??

 

:s

 

Tacksam i förväg!

 

Link to comment
Share on other sites

Jag kan inte använda:

   if ($sqlquery=="") {
     print("<i>Felaktigt användarnamn eller lösen.</i>");
     exit;

eftersom den kontrollerar om det finns ett värde...

 

Hur skriver jag för att kontrollera om två värden finns i tabellen och returnerar "felaktigt svar" om värdena inte finns i en "AND" string?

 

 

 

Link to comment
Share on other sites

injektioner:

man använder sig av mysql_real_escape_string för att ta bort otillåtna tecken från en sträng

$usrname = mysql_real_escape_string($_POST["username"]);
$pwd= mysql_real_escape_string($_POST["pwd"]);

 

Header('location: login.php?error=No_such_user');

Du skriver just så, sedan fångar du upp med get

switch ($_GET["error"]){
 case "No_such_user":
   echo "Hittade ingen sådan användare";
   break;
 case "Wrong_input":
   echo "Använarnamn eller lösenord är tomt";
   break;
 case "Wrong_username_or_password":
   echo "Felaktigt användarnamn eller lösenord"
   break;
 default :
   //gör ingenting
   break;
}

 

Eftersom sqlsträngen alltid innehåller något skall du ju kontrollera variablarna $username och $pwd

if ($username=="" || $pwd=="") Header("Location: login.php?error=Wrong_input");

 

Till sist kontrollerar du inte om man angivet ett felaktig användare och lösen. Du kontrollerar om sqlsträngen är tom (vilket den aldrig är) samt om man missat att fylla i användarnamn eller lösenord. Om det kriteriet är uppfyllt kontrollerar den mot databasen, men om den inte hittar någon rad med dessa värden skall man få ett felmeddelande.

 

Det blir hemläxan för idag! Lycka till. Använd gärna google.

 

Link to comment
Share on other sites

  • 2 weeks later...

Jag märker att jag kan för lite om det här... :(

 

Jag får inte alls rätt på det!!!!

 

 

Jag fattar inte var jag ska stoppa in allt...

Ett problem är att loginsidan är en htm-fil...

 

Jag kan väl inte lägg in en .php-kod på den???

 

En annan fråga...

 

  while($svar=mysql_fetch_array($sqlresult)) {
       header('Location: visa1.php');

 }

 

Varför kommer jag inte till sidan "visa1.php" efter att resultatet hämtats????

[inlägget ändrat 2009-06-06 11:59:49 av MrHall]

Link to comment
Share on other sites

nej, loginsidan måste ha filändelsen php för att kunna köra php.

 

Varför i hela friden gör du så i en loop?

Vad vill du göra egentligen? Du gör ju inget med resultatet.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...