Avatar billede mettegp Nybegynder
10. april 2006 - 10:16 Der er 2 kommentarer

vedr: REQUEST_URI i redirect function

Jeg har fundet en bog The PHP Anthology, Volume II på nettet. I Kapitel 1 Access Control har de en class Authentication

I denne classe er der en metode redirect som skal dirigere brugeren hen til en specifik URL side. Denne metod kaldes i en login() metode som igen kaldes i konstruktoren til Authentication klassen.

function redirect($from = true)
{if($from){
    header('Location: ' . $this->redirect . '?from=' .
    $_SERVER['REQUEST_URI']);
}else{
    header('Location: ' . $this->redirect);
}
exit();
}

//her bruges aliaser
//absolute url 'http://localhost/phpfiler/Auth/frmLogin.php'
//relativ url  'frmLogin.php'

Når jeg instantierer Authentication class i en anden php fil og angiver en URL. Jeg har prøvet med både en relativ og absolut URL

$authentication = &new Authentication(&$db, 'http://localhost/phpfiler/Auth/frmLogin.php', 'secret');

får jeg følgende fejl

Notice Undefined index: REQUEST_URI in C:\\Inetpub\wwwroot\php\Authentication\Authentication.php on page 163

I bogen er der angivet en relativ url altså kun frmLogin.php, men jeg har prøvet begge dele - jeg forstår det ikke, kan den ikke læse url'en eller hvad er det der menes???

med venlig hilsen

mette
Avatar billede showsource Seniormester
10. april 2006 - 11:32 #1
Prøv med
$_SERVER["REQUEST_URI"]

eller

    header("Location: " . $this->redirect . "?from=" .
    $_SERVER["REQUEST_URI"]);
Avatar billede mettegp Nybegynder
10. april 2006 - 13:53 #2
Nej det hjælper ikke!

Jeg har prøvet at logge ind på min frmLogin.php for at se om jeg kunne komme ind på
SecurePage.php som er en foreløbig testside, hvor jeg initialiserer min Authentication class for at se det virker, ogsom jeg skal kunne komme ind på hvis login er en success. Hvis det ikke er skal jeg redirigeres til frmLogin.php
Der fik jeg at vide at den ikke kunne forbinde til server. Desuden fik jeg at vide
at nogle konstanter som jeg har defineret i Authentication classen var undefined

frmLogin.php
noget kode herfra
<?php
/**if $_GET['from'] comes from the Authentication class*/
if(isset($_GET['from']))
{
  $target = $_GET['from'];
}
else
//Default URL: usually index.php
{
  //$target = 'SecurePage.php';  //hvis jeg kun bruger denne får jeg ukendt filtype
  $target = 'http://localhost/phpfiler/Auth/SecurePage.php'; //derfor brugt denne
}
?>

Atuthentication.php
<?php
/**name to use for login e.g. $S_POST['login']*/
@define('USER_LOGIN_VAR', 'login');                      //undefined
/**name to use for password e.g. $S_POST['password']*/ 
@define('USER_PASSWORD_VAR', 'password');                //undefined

/**modify these constants to match your user login table*/
@define('USER_TABLE', 'user');                 //name of user table
@define('USER_TABLE_LOGIN', 'login');         //name of login column in  table
@define('USER_TABLE_PASSWORD', 'password');  //name of password column in  table
tabllen user ligger i en database der hedder bibliotek

function login()
  {
    //see if we have values already stored in the session
    if($this->session->get('login_hash'))
    {
      $this->confirmAuthentication();
      return;
    }
   
    //if this is a fresh login, check $_POST variables
    if(!isset($_POST[USER_LOGIN_VAR]) || !isset($_POST[USER_PASSWORD_VAR]))
    {
      $this->redirect();
    }
   
    if($this->md5)
    {
      $password = md5($_POST[$USER_PASSWORD_VAR]); //får undefined variable her
    }
    else
    {
      $password = $_POST[$USER_PASSWORD_VAR];
    }
   
    //escape the variables for the query
    $login = mysql_escape_string($_POST[$USER_LOGIN_VAR]);    //undefined index her
    $password = mysql_escape_string($password);
   
    //query to count users with this combination
    $sql = "SELECT COUNT(*) AS num_users
            FROM " . USER_TABLE . "
            WHERE " . USER_TABLE_LOGIN . "='$login' AND
                    " . USER_TABLE_PASSWORD . "='$password'"; 
                   
    $result = $this->db->query($sql);    //jeg får en undefinded fejl på query
    $row = $result->fetch();
   
    //if there isn't exactly one entry redirect
    if($row['num_users'] != 1)
    {
      $this->redirect();
    }
    else       
    {
      //else is a valid user, set session variables
      $this->storeAuthentication($login, $password);
    }   
  }   
?>

<?php
$serverHostName = 'localhost';     //hostname of MySQL server
$dbUserName = 'root';        //username for MySQL
$dbPassword = '';        //password for user
$dbName = 'bibliotek';        //name of database

//instantiate the MySQL class
$db = &new MySQL($serverHostName, $dbUserName, $dbPassword, $dbName);

//absolute url
$redirect = 'http://localhost/phpfiler/Auth/frmLogin.php';
//relative url
$redirectRelative = 'frmLogin.php';
//'C:\inetpub\wwwroot\php\Authentication\frmLogin.php'

//instantiate the Authentication class
$authentication = &new Authentication($db, 'http://localhost/phpfiler/Auth/frmLogin.php', 'secret');

?>
Jeg ved ikke om du udfra denne kode kan pejle dig ind på hvad der er i vejen. Men jeg kan hverken komme fra login formen ind på testsiden secure page eller omvendt. Det må da være et eller andet med min server eller database den ikke kan forbinde til.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester