webForumDet fria alternativet

Inloggning

54 svar · 2 080 visningar · startad av B22

B22Medlem sedan mars 2004256 inlägg
#1

Hej!
Hoppas ni orkar titta genom koden. Jag försöker skriva ett inloggnings script vilket verkar fungera fint med denastående kod, men det som inte fungerar är att jag inte förs vidare till sidan databas.php efter inloggningen, vad har jag gjort för fel?

<?php
 
// Ok to login ???
    if( !empty($_POST["login"]) ){
  
      // Empty fields?
      if( empty($_POST["f1"]) || empty($_POST["f2"]) ){
        print "Tomma fält är inte tillåtna!<br/><br/><input type='button' value='Tillbaka' onClick='history.back()'/>";
        exit;
      }
//
// Check if correct username and passwotrd for admin
 
 
          $host="localhost"; // Host name
          $username="**"; // Mysql username
          $password="**"; // Mysql password
          $db_name="**"; // Database name
          $tbl_name="**"; // Table name
 
         // Connect to server and select databse.
         mysql_connect("$host", "$username", "$password")or die("cannot connect");
         mysql_select_db("$db_name")or die("cannot select DB");
 
        // username and password sent from signup form
          $myusername=$_POST['f1'];
          $mypassword=$_POST['f2'];
 
        //kryptera lösenordet med md5()
        $encrypted_mypassword=md5($mypassword);
 
 
        $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$encrypted_mypassword'";
        $result=mysql_query($sql);
 
        // Mysql_num_row is counting table row
        $count=mysql_num_rows($result);
        // If result matched $myusername and $mypassword, table row must be 1 row
 
       if($count==1){
     
        session_register("myusername");
        session_register("mypassword");
 
       header("location:welcome.php");
    include "databas.php";
    }
     else {
    echo "Wrong Username or Password";
     }
   
exit;
    }
 
?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html>
<head>
<title>Nyheter</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 
<style type="text/css">
.bold{
  font-weight: bold;
}
.border {
  border-style: solid;
border: 1px;
}
.noborder {border: 0px;}
.bt {
  font-size: 14px;
}
.loginBox
{
position: absolute;
left:50px;
top: 50px;
border: 1px solid #000055;
padding-left: 10px;
padding-top:10px;
padding-bottom:10px;
padding-right:20px;
background-repeat: no-repeat;
background-color: #ECEADE
}
INPUT.loginInput
{
width:120px;
border:solid 1px #000000
}
INPUT.loginButton
{
font-weight:bold;
border:solid 1px #000000
}
H2.login
{
  font-size:12px;
}
 
</style>
</head>
 
<body>
<form method="post" action="">
<!--
   Change password dialog
-->
<div class="loginBox" id="login">
  <table summary="">
    <tr>
      <td><img src="UKF.JPG" alt="" /></td>
    </tr>
    <tr>
          <td class="login" style="width:80px; align: left;">Användarnamn</td>
          <td class="login" align="right"><input class="loginInput" type="text" name="f1"/></td>
    </tr>
    <tr>
          <td class="login" align="left">Lösenord</td>
          <td class="login" align="right"><input class="loginInput" type="password" name="f2" /></td>
    </tr>
    <tr>
          <td class="login" ></td>
    </tr>
    <tr>
      <td></td>
          <td class="login" align="right" ><input class="loginButton" type="submit" name="login" value="Anslut" /></td>
    </tr>
  </table>
</div>
 
</form>
</body>
</html>
drewMedlem sedan mars 2007845 inlägg
#2
header("location:welcome.php");

Skickar dig vidare innan du kommer till include "databas.php";

B22Medlem sedan mars 2004256 inlägg
#3

Tack för svaret!
Hmm...det stämmer ju.
Jag har gjort så här istället nu att jag ska skickas vidare till databas.php från welcome.php, är det rätt?

<?php
session_start();
 
// Kolla om inloggad = sessionen satt, dirigera tillbaka till inloggningssidan om inte
if (!isset($_SESSION['sess_user'])){
  header("Location: adm_login.php");
 
 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>V&auml;lkommen</title>
</head>
<body>
 
V&auml;lkommen <?=$_SESSION['sess_user'] ?><br>
 
 
</body>
</html>
 
<?php
 

header("Location: databas.php");
  exit;
}
 
?>
MatteMedlem sedan aug. 20002 975 inlägg
#4

header() är en header, och måste därför sättas innan någon som helst output till webbläsaren.

I det här fallet så har din HTML-kod ingen som helst funktion, så du kan ta bort den. Därmed har du ingen output innan din header.

B22Medlem sedan mars 2004256 inlägg
#5

Nu har jag tagit bort html koden så att filer ser så här ut nu, men det fungerar fortfarande inte, jag loggas in och stannar på inloggningsrutan...

?php
session_start();
 
// Kolla om inloggad = sessionen satt, dirigera tillbaka till inloggningssidan om inte
if (!isset($_SESSION['sess_user'])){
  header("Location: adm_login.php");
 }
  
else{

   header("Location: databas.php");
  exit;
}
 
?>
aasahMedlem sedan mars 20034 471 inlägg
#6
  1. Kolla att du faktiskt sätter $_SESSION['sess_user'] på adm_login.php
  2. Pröva att ange absolut sökväg i header.
  3. Jag utgår ifrån att starten är <?php och att '<' bara fallit bort vid inklistringen här?

Använd taggarna [ php] istället för [ kod] så blir det mer lättläst. (Fast utan " " i första taggen så klart.)

MatteMedlem sedan aug. 20002 975 inlägg
#7

Lägg också följande överst i dina filer:

<?php

error_reporting(E_ALL);
ini_set("display_errors", "1");

session_start();

Får du då några felmeddelanden?

B22Medlem sedan mars 2004256 inlägg
#8

aasah skrev:

  1. Kolla att du faktiskt sätter $_SESSION['sess_user'] på adm_login.php
  2. Pröva att ange absolut sökväg i header.
  3. Jag utgår ifrån att starten är <?php och att '<' bara fallit bort vid inklistringen här?
  1. Var exakt i adm_login.php ska jag skriva $_SESSION['sess_user'] menar du? för det har jag inte, jag hade den bara i welcome.php som jag tog bort nu som du ser i den sista koden jag visade här.
    2)Absolut sökväg? de ligger på ett och samma ställe, har de inte i olika mappar eller så, även om jag skulle nu göra det, hur ser det ut?
  2. Ja..jag har bara missat att ta med ´<´när jag klistrade in här.
B22Medlem sedan mars 2004256 inlägg
#9

Matte skrev:

Lägg också följande överst i dina filer:

<?php

error_reporting(E_ALL);
ini_set("display_errors", "1");

session_start();

Får du då några felmeddelanden?

Menar du i båda filerna?
Ska testa idag så återkommer jag.

aasahMedlem sedan mars 20034 471 inlägg
#10

B22 skrev:

  1. Var exakt i adm_login.php ska jag skriva $_SESSION['sess_user'] menar du? för det har jag inte, jag hade den bara i welcome.php som jag tog bort nu som du ser i den sista koden jag visade här.

Det förklarar saken. Om du aldrig sätter $_SESSION['sess_user'] så kommer du ju alltid att åka iväg till filen adm_login.php. Då har du ju i princip än oändlig loop!

// Kolla om inloggad = sessionen satt, dirigera tillbaka till inloggningssidan om inte
if (!isset($_SESSION['sess_user'])){ //<--- Måste sättas i adm_login.php
  header("Location: adm_login.php");
 }
  
else{

   header("Location: databas.php");
  exit;
}

När du har konstaterat att personens namn och lösen stämmer måste du sätta denna sessionsvariabel.

En absolut sökväg är en sökväg som tar med hela adressen och alltså börjar med http://www....

B22Medlem sedan mars 2004256 inlägg
#11

Alltså det verkar som om jag inte kan använda funktionen session_register() eftersom jag inte använder cookies
http://se2.php.net/manual/sv/function.session-register.php

B22Medlem sedan mars 2004256 inlägg
#12

Nä..nu har jag rört till det ordentligt känns det som, admin.php ser så här ut nu..hjälp!

<?php

error_reporting(E_ALL); 
ini_set("display_errors", "1"); 
session_start();

// Ok to login ???
    if( !empty($_POST["login"]) ){
    // Empty fields?
      if( empty($_POST["f1"]) || empty($_POST["f2"]) ){
        print "Tomma fält är inte tillåtna!<br/><br/><input type='button' value='Tillbaka' onClick='history.back()'/>";
        exit;
      }

	// Check if correct username and passwotrd for admin	

          
         // Connect to server and select databse.
         $Link= mysql_connect("localhost", "*", "*" )or die("cannot connect" . mysql_error());
         mysql_select_db("*")or die("cannot select DB");

        // username and password sent from signup form
          $myusername=$_POST['f1'];
          $mypassword=$_POST['f2'];

        //kryptera lösenordet med md5()
        $encrypted_mypassword=md5($mypassword);

        $query ="SELECT username, password FROM Blabla WHERE username='$myusername' and password='$encrypted_mypassword'";
        $result=mysql_query($query );

        // Mysql_num_row is counting table row
        $count=mysql_num_rows($result);
        // If result matched $myusername and $mypassword, table row must be 1 row

       if($count==1){

        // Kolla om inloggad = sessionen satt, dirigera tillbaka till inloggningssidan om inte 
         if (!isset($_SESSION['sess_user'])){ //<--- Måste sättas i adm_login.php 
         header("Location: adm_login.php"); 
         echo "Wrong Username or Password";

         } 
   
         else{ 
             header("Location: databas.php"); 
             exit; 
            }

}
		
?>

html kod finns här
B22Medlem sedan mars 2004256 inlägg
#13

Matte skrev:

Lägg också följande överst i dina filer:

<?php

error_reporting(E_ALL);
ini_set("display_errors", "1");

session_start();

Får du då några felmeddelanden?

Jag fick fel på mysql_connect(); så jag tog bort variablerna och använder strängerna istället. Fick också fel i mysql_query() så jag tog bort variabeln &Link och skickar med bara &query som inparameter.

Innan jag la till denna kod i admin.php så fick jag fel i databas.php filen när jag skrev in fel uppgifter.
Nu får jag inget felmeddelande alls efter att jag la till denna kod, oavsett om jag skriver fel eller rätt uppgifter, stannar bara på samma sida med inloggningsrutan ...

if (!isset($_SESSION['sess_user'])){ 
adm_login.php 
  header("Location: adm_login.php"); 
} 
else{
   header("Location: databas.php"); 
  exit; 
}
MatteMedlem sedan aug. 20002 975 inlägg
#14

Att den stannar beror på parse error. Du måste koppla på felmeddelandena i php.ini för att du ska kunna se parse error. Något som varmt rekommenderas om det är en utvecklingsserver.

Vad hade du tänkt göra med "adm_login.php" i din kod? Det är denna rad du sannolikt får parse error på.

B22Medlem sedan mars 2004256 inlägg
#15

hmm det hjälper inte att jag slog på felmeddelandena där man slå på dem i webbhotellet, får inget meddelande ändå.

Är koden verkligen som som jag har skrivit den?

På webbplatsen har jag en två tabeller i en databas som jag vill att endast vissa personer ska komma åt för att lägga till tabort och visa data från, dessa personer vill jag själv ge inloognins uppgifter som jag har då sparat i en tabell i samma databasen.

Så admin.php har jag för att dessa personer ska först kunna logga in för att kunna visa sidan med databasen.

MatteMedlem sedan aug. 20002 975 inlägg
#16

Om du har koden som du visar i några inlägg ovan, då är visning av felmeddelande inte påkopplat.
I vilket fall, ta bort raden där du har ett ensamt adm_login.php.

Hur är sambandet mellan adm_login.php och admin.php?

B22Medlem sedan mars 2004256 inlägg
#17

Hmm vet inte varför den har hamnat där, men i min fil så står det så:

if (!isset($_SESSION['sess_user'])){
  header("Location: adm_login.php");
}
else{
   header("Location: databas.php");
  exit;
}

Ursäkta att jag skev fel filnamn, det är adm_login jag menade i mitt förra inlägg inte admin.php den har jag inte.

Nu har jag pratat med supporten för webbhotellet och de kollade och jag talade om hur jag slog på felmeddelandena för php.
De sa att jag gör rätt när jag slår på de och att det äringet fel på kopplingen till databasen och så för då hade jag fått felmeddelandet i webbläsaren, (vilket jag tidigare en gång har fått) utan att felet ligger i mitt script och att det är inget de hjälper till med... :-(

aasahMedlem sedan mars 20034 471 inlägg
#18

Förutsättningen för att komma vidare med inloggningen är att $_SESSION['sess_user'] är satt. Det betyder att när inloggningen fungerar måste du sätta den. Här vet du att inloggningen har funkat:

         // Connect to server and select databse.
        //....
        $query ="SELECT username, password FROM Blabla WHERE username='$myusername' and password='$encrypted_mypassword'";
        $result=mysql_query($query );

        // Mysql_num_row is counting table row
        $count=mysql_num_rows($result);
        // If result matched $myusername and $mypassword, table row must be 1 row

       if($count==1){ 
             //INLOGGNINGEN HAR FUNGERAT - sätt sessionsvärdet 
             //och skicka ev vidare till databas.php direkt 

       } 
       else { 
           // Inloggningen HAR INTE funkat
         header("Location: adm_login.php"); 
         echo "Wrong Username or Password";

         } 

}
		
?>
B22Medlem sedan mars 2004256 inlägg
#19

Jag hade alltså bytt plats på

if (!isset($_SESSION['sess_user'])){

  header("Location: adm_login.php");
}
else{
   header("Location: databas.php");
  exit;
}

Så tog jag bot exit; också.

Nu får jag felmeddelandet:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /customers/ukf.be/ukf.be/httpd.www/databas.php on line 31

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in /customers/ukf.be/ukf.be/httpd.www/databas.php on line 31

Den filen ser så här ut:

<?php

if (isset($_GET['logout']))
{
  session_unset();
  session_destroy();
  header("Location: index.php");

  exit;

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
<head>
<title>Lägg in nytt data</title>
<link href="ukf.css" rel="stylesheet" type="text/css"></link></head>

   <div id="start"> 
    	
     <div>
     <ul id="val_meny">
  <li><a href=""onclick="document.getElementById('visa_start').src='mem_insert.html'; return false;" >Registrera en medlem</a></li>
  <li><a href=""onclick="document.getElementById('visa_start').src='delete.html'; return false;" >Ta bort en medlem</a></li>
  <li><a href=""onclick="document.getElementById('visa_start').src='search_mem.html'; return false;" >Sök en medlem</a></li>

  <?php 
  echo "<li><a href="\"index.php?logout=\">Logga ut</a></li>";
  ?> 

    </ul>
    </div>
    
  </div> 
    
    <div><iframe id="visa_start" src="explain.html"></iframe></div>
    </body>
</html>
aasahMedlem sedan mars 20034 471 inlägg
#20

Det finns ett svar ovanför...

142 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)