webForumDet fria alternativet

Problem med inloggning php/mysql!

24 svar · 740 visningar · startad av hagmund

hagmundMedlem sedan feb. 20068 inlägg
#1

Hej! Detta blir mitt första inlägg här :-)
Använder följande kod för att logga in:

 <?
session_register(nick,losen); 

if(!strlen(trim($nick)) || !strlen(trim($losen)) ) {
echo("Du fyllde inte i login sakerna");
}
else {

$my_id=mysql_connect("localhost","jappjapp","jappjapp");

mysql_select_db("databasen");

$sql = mysql_query("SELECT * FROM users where nick = '$nick'");

if(mysql_query("SELECT * FROM users where nick = '$nick'") )  
{
  if($losen == mysql_result($sql,0,"losen")) 
  { 
//    echo "<br>"; 
//    echo "inloggad som <b>$nick</b> <br><br>"; 
//    echo "<a href='showinfo.php'>Visa Info</a>";
header("location: ../index.html"); // ladda om sidan     
  } 
  else 
  { 
//    echo "<br>"; 
//    echo("FEL.<br>\n<a href=\"login.php\">logga in</a> igen"); 

    $nick= NULL; // töm variablerna
    $losen = NULL;

    session_unregister("nick,losen"); // avregistrera 
    session_destroy(); // döda sessionen

 header("location: ../index.html"); // ladda om sidan

  } 
} 
  else 
{ 
  echo "<br>"; 
  echo("FEL.<br>\n<a href=\"login.php\">logga in</a> igen");  

} 

}

mysql_close($my_id);

?>

Men jag får följande felmeddelande när jag försöker logga in:
Du fyllde inte i login sakerna
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in /home/hagman2/public_html/tjockis.se/login/login.php on line 52

Vad kan vara fel tror ni? tack som tusan på förhand :-)

henkeMedlem sedan dec. 1999271 inlägg
#2

Välkommen till webForum!

Fungerar anslutningen till databasen korrekt? Du kan testa det m h a följande kodsnutt som är hämtad från php-manualen:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
   die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';

Annars är det inte nödvändigt att ange en s k link identifier för mysql_close. Saknas den stängs helt enkelt den senast öppnade anslutningen.

hagmundMedlem sedan feb. 20068 inlägg
#3

Anslutningen till databsen fungerar korrekt!
Testade med kodsnutten du bifogade också!
Något annat man kan testa?
Tack för hjälpen och välkomnandet! :-)

Kent.JMedlem sedan aug. 2001151 inlägg
#4

Du har glömt citat-tecknerna på "session_register(nick,losen); "

Och att du kör mysql_close längst ner även när du inte öppnat anslutningen till databasen. Flytta upp den raden till rätt else-klasul

hagmundMedlem sedan feb. 20068 inlägg
#5

Kent.J skrev:

Du har glömt citat-tecknerna på "session_register(nick,losen); "

Och att du kör mysql_close längst ner även när du inte öppnat anslutningen till databasen. Flytta upp den raden till rätt else-klasul

Hej och tack för svar. Hjälpte inte med session_register('nick','losen');
ej heller att flytta mysq_close!
Får samma felmeddelande ändå.

aasahMedlem sedan mars 20033 451 inlägg
#6

Du kollar resultatet på fel sätt. Byt ut:

$sql = mysql_query("SELECT * FROM users where nick = '$nick'");

if(mysql_query("SELECT * FROM users where nick = '$nick'") )  
{
  if($losen == mysql_result($sql,0,"losen")) 
  { 
//    echo "<br>"; 
//    echo "inloggad som <b>$nick</b> <br><br>"; 
//    echo "<a href='showinfo.php'>Visa Info</a>";
header("location: ../index.html"); // ladda om sidan

mot

$sql = "SELECT * FROM users where nick = '$nick'";
$res = mysql_query($sql) or die("Felaktig fråga"); 
if ($userInfo=mysql_fetch_array($res)) {
  if($losen == $userInfo['pass']) {//Om lösenordskolumnen heter pass i db:n 
//    echo "<br>"; 
//    echo "inloggad som <b>$nick</b> <br><br>"; 
//    echo "<a href='showinfo.php'>Visa Info</a>";
header("location: ../index.html"); // ladda om sidan

Obs dock att du antingen kan skriva ut eller skicka vidare.

Edit: La till Måsvingen som var på utflykt... se Compusas svar längre ner...

hagmundMedlem sedan feb. 20068 inlägg
#7

aasah:
Testade att byta ut koden med den du skickade.
Då får jag ett annat felmeddelande istället:
Parse error: parse error, unexpected T_ELSE in /home/hagman2/public_html/tjockis.se/login/login.php on line 39

o line 39 är det bara en else.

CompusaMedlem sedan jan. 20022 952 inlägg
#8

Det saknades en måsvinge i det som aasah skrev

 $sql = "SELECT * FROM users where nick = '$nick'";
$res = mysql_query($sql) or die("Felaktig fråga");
if ($userInfo=mysql_fetch_array($res)) {
  if($losen == $userInfo['pass']) { //HÄR SAKNADES EN MÅSVINGE
//    echo "<br>";
//    echo "inloggad som <b>$nick</b> <br><br>";
//    echo "<a href='showinfo.php'>Visa Info</a>";
header("location: ../index.html"); // ladda om sidan

Sedan underlättar det om du postar en uppdaterad revision av koden när ändringar har gjorts.

aasahMedlem sedan mars 20033 451 inlägg
#9

hagmund skrev:

aasah:
Testade att byta ut koden med den du skickade.
Då får jag ett annat felmeddelande istället:
Parse error: parse error, unexpected T_ELSE in /home/hagman2/public_html/tjockis.se/login/login.php on line 39

o line 39 är det bara en else.

Att du får ett annat fel beror på att det ursprungliga är löst. :)

Vilken rad är rad 39? Skicka med lite kod före och efter med rad 39 makerad. Och posta koden innanför php-taggar, dvs mellan [ PHP] och . (Fast utan mellanslag mellan [ och p.)

Såvida inte Compusas svar ovan löste problemet! Ursäkta! Jag tappade tydligen en måsvinge på vägen... Har stoppat in den ovan.

hagmundMedlem sedan feb. 20068 inlägg
#10

Hallå hallå, ni är verkligen grymt snälla som hjälper en nybörjare som mig med detta :-)

Den uppdaterade koden jag kör med nu är:

<?
session_register(nick,losen); 

if(!strlen(trim($nick)) || !strlen(trim($losen)) ) {
echo("Du fyllde inte i login sakerna");
}
else {

$my_id=mysql_connect("localhost","hemlis","hemlis");

mysql_select_db("databasen");

 $sql = "SELECT * FROM users where nick = '$nick'";
$res = mysql_query($sql) or die("Felaktig fråga");
if ($userInfo=mysql_fetch_array($res)) {
  if($losen == $userInfo['losen']) { //HÄR SAKNADES EN MÅSVINGE
//    echo "<br>";
//    echo "inloggad som <b>$nick</b> <br><br>";
//    echo "<a href='showinfo.php'>Visa Info</a>";
header("location: ../index.html"); // ladda om sidan

  } 
  else 
  { 
//    echo "<br>"; 
//    echo("FEL.<br>\n<a href=\"login.php\">logga in</a> igen"); 

    $nick= NULL; // töm variablerna
    $losen = NULL;

    session_unregister("nick,losen"); // avregistrera 
    session_destroy(); // döda sessionen

 header("location: ../index.html"); // ladda om sidan

  } 
} 
  else 
{ 
  echo "<br>"; 
  echo("FEL.<br>\n<a href=\"login.php\">logga in</a> igen");  

} 

}

mysql_close($my_id);

?>

Nu är dock det gamla felmeddelandet tillbaka:
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in /home/hagman2/public_html/tjockis.se/login/login.php on line 50

CompusaMedlem sedan jan. 20022 952 inlägg
#11

Glöm det, ska kolla upp det..

hagmundMedlem sedan feb. 20068 inlägg
#12

samma felmeddelande igen :(

CompusaMedlem sedan jan. 20022 952 inlägg
#13

Nu har jag indenterat din kod och lagt till en koll ifall du lyckas skapa en anslutning eller inte. Ett annat fel var att din kod också försökt stänga databasen även om du aldrig anslöt mot dent. Ett tips är att läsa på lite om indentering, det blir mycket enklare att göra rätt då och hitta fel :)

Observera att det fortfarande finns en del brister i koden, du stänger inte alltid anslutningen mot databasen, kolla dina conditions så ser du nog.

Testa detta och återkom med eventuella felmeddelanden.

<?
session_register(nick,losen);

if(!strlen(trim($nick)) || !strlen(trim($losen)) ) {
    echo("Du fyllde inte i login sakerna");
}
else {
    $my_id = mysql_connect ("localhost","hemlis","hemlis")
        or die ("Could not connect");
    print ("Connected successfully");
    
    mysql_select_db("databasen");
    $sql = "SELECT * FROM users where nick = '$nick'";
    $res = mysql_query($sql) or die("Felaktig fråga");
    if ($userInfo=mysql_fetch_array($res)) {
        if($losen == $userInfo['losen']) { //HÄR SAKNADES EN MÅSVINGE
            // echo "<br>";
            // echo "inloggad som <b>$nick</b> <br><br>";
            // echo "<a href='showinfo.php'>Visa Info</a>";
            header("location: ../index.html"); // ladda om sidan
        }
        else {
        	// echo "<br>";
            // echo("FEL.<br>\n<a href=\"login.php\">logga in</a> igen");
            $nick= NULL; // töm variablerna
            $losen = NULL;
            session_unregister("nick,losen"); // avregistrera
            session_destroy(); // döda sessionen
            header("location: ../index.html"); // ladda om sidan
        }
    }
    else {
        echo "<br>";
        echo("FEL.<br>\n<a href=\"login.php\">logga in</a> igen");  
    }
    mysql_close($my_id);
}
?>
aasahMedlem sedan mars 20033 451 inlägg
#14

Compusa skrev:

... Ett annat fel var att din kod också försökt stänga databasen även om du aldrig anslöt mot dent. ...

Observera att det fortfarande finns en del brister i koden, du stänger inte alltid anslutningen mot databasen, kolla dina conditions så ser du nog.

Du behöver å andra sidan inte stänga databasanslutningen överhuvudtaget. Den stängs ändå med automatik när skriptet kört klart. Så du kan ta bort mysql_close helt om du vill.

hagmund skrev:

Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in /home/hagman2/public_html/tjockis.se/login/login.php on line 50

Vilken rad är nr 50?

CompusaMedlem sedan jan. 20022 952 inlägg
#15

aasah skrev:

Du behöver å andra sidan inte stänga databasanslutningen överhuvudtaget. Den stängs ändå med automatik när skriptet kört klart. Så du kan ta bort mysql_close helt om du vill.

Visst är det så att php:s skräphanterare göra detta, men jag skulle ändå rekommendera att man alltid strukturerar sin kod så att man enkelt kan stänga anslutningen manuellt, när man inte längre behöver använda den.

aasahMedlem sedan mars 20033 451 inlägg
#16

Compusa skrev:

Visst är det så att php:s skräphanterare göra detta, men jag skulle ändå rekommendera att man alltid strukturerar sin kod så att man stänger anslutningen manuellt, när man inte längre behöver använda den.

Varför? Det är ju ingen skillnad? :q

CompusaMedlem sedan jan. 20022 952 inlägg
#17

Därför ;)

Although this isn't strictly speaking necessary, PHP will automatically close the connection when the script ends, you should get into the habit of closing what you open. If you start developing more serious applications, or move to other, less tolerant languages, you will find the transition more difficult if you haven't learnt the basics well from the beginning.

hagmundMedlem sedan feb. 20068 inlägg
#18

Compusa skrev:

Nu har jag indenterat din kod och lagt till en koll ifall du lyckas skapa en anslutning eller inte. Ett annat fel var att din kod också försökt stänga databasen även om du aldrig anslöt mot dent. Ett tips är att läsa på lite om indentering, det blir mycket enklare att göra rätt då och hitta fel :)

Observera att det fortfarande finns en del brister i koden, du stänger inte alltid anslutningen mot databasen, kolla dina conditions så ser du nog.

Hallå igen!
Körde nu med koden du skrev här och nu får jag endast: Du fyllde inte i login sakerna. som felmeddelande.

aasahMedlem sedan mars 20033 451 inlägg
#19

hagmund skrev:

Hallå igen!
Körde nu med koden du skrev här och nu får jag endast: Du fyllde inte i login sakerna. som felmeddelande.

Det betyder att koden fungerar, för det är ju ditt valda felmeddelande. :)

Om du fyllde i saker så det borde funkat, betyder det ett strul i kopplingen mellan inloggningssidan och denna. Hur ser din formulärsida ut egentligen? :q Lagrar du någonsin formulärdata i sessions? Vad har du för version av PHP?

Compusa

Although this isn't strictly speaking necessary, PHP will automatically close the connection when the script ends, you should get into the habit of closing what you open. If you start developing more serious applications, or move to other, less tolerant languages, you will find the transition more difficult if you haven't learnt the basics well from the beginning.

(Min fetstil.) Det här är ju direkt larvigt. Det är ju som att försöka allokera minne i Java därför att det behövs om man kör C... :OO (Bortsett ifrån att Java saknar metoder för det.) Varje språk har ju sina egna begränsningar och höjdpunkter.

Om man nu håller på med en applikation med så många samtidiga anslutningar att man slår i taket och måste stänga anslutningen så snart det bara går, så är det naturligtvis en annan sak. Men för att det ska vara någon vits måste anslutningen då stängas före det sista skriptet gör. Behovet av detta borde dock inte tillhöra vanligheterna.

henkeMedlem sedan dec. 1999271 inlägg
#20

Håller med Compusa, man bör tveklöst stänga databasanslutning. Inte för att man måste utan för att det hör till bra och snygg programmering att göra det.

hagmund, en liten detalj att ha i åtanke. För säkerhets skull är det bra om man kör exit efter en redirect. Från php-manualen:

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>
Genererad på 410 ms · cache AV · v20260730165559-full.f96bc7eb