Avatar billede smeier Nybegynder
17. august 2004 - 18:08 Der er 15 kommentarer og
1 løsning

Problemer med login script.

Hej Eksperter. Jeg har følgende login script, som jeg efter lidt omrokering, har fået fucked helt op. Hvis der findes nogle derude som kan hjælpe mig lidt ville det være kanon.
Den melder fejlmedelelse hver gang jeg forsøger at logge ind.
Er virkelig kørt død i den. Håber at nogle gider hjælpe.

Login.php--------
<?php
print_r($_POST);
require_once('login_funcs.php');


if ($LOGGED_IN = user_isloggedin()) {
    user_logout();
    $_COOKIE['username'] = '';
    unset($LOGGED_IN);
}

// Return-koder
define('ACCT_OK', 0 );
define('ACCT_NOTCONFIRMED', 1);
define('ACCT_NOTNOTFOUNDORPWINCORRECT', 2);

// Input variablerne
if( isset($_POST['username']) )
  $username = $_POST['username'];
else
  $username = '';

if( isset($_POST['password']) )
  $password = $_POST['password'];
else
  $password = '';

// Besked til brugeren
$feedback_str = '';

if( !empty($username) && !empty($password) ) {
  $res = user_login($username,$password);
 


  switch($res) {
      case ACCT_OK:
        header("location; index.php");
        exit;
        break;

      case ACCT_NOTCONFIRMED:
        $feedback_str = 'ERROR--You may not have confirmed your account yet';
        break;

      case ACCT_NOTNOTFOUNDORPWINCORRECT:
        $feedback_str = 'ERROR--User not found or password incorrect';
        break;
  }
}
else {
  if( count($_POST) != 0 )  // Brugeren har trykket submit (eller return)
      $feedback_str = 'ERROR--Please supply username and password';
}

// vis html-form som før.

$php_self = $_SERVER['PHP_SELF'];

$login_form = <<< EOLOGINFORM
<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 ALIGN=Center Width=621>
<tr>
<td rowspan=2></td></tr>
<tr>
<td>
$feedback_str
<p class="bold">LOGIN</P>
<form action="$php_self" method="post">
<p class="bold">Username<BR>
<input type="text" name="username" value="" size="15" maxlength="20"></p>
<p class="bold">password<br>
<input type="password" name="password" value="" size="15" maxlength="20"></p>
<p><input type="submit" name="submit" value="login"></p>
</form>
</td>
</tr>
</table>
EOLOGINFORM;
echo $login_form;

?>
---------------------------------------------------------

Login_funcs.php----

<?php

include_once('db_vars.inc');

$supersecret_hash_padding = 'A string that is used to pad out short strings for md5 encryption';

$LOGGED_IN = false;
unset($LOGGED_IN);

function user_isloggedin() {
    global $supersecret_hash_padding, $LOGGED_IN;

    if (isSet($LOGGED_IN)) {
        return $LOGGED_IN;
    }

    if (isset($_COOKIE['username']) && isset($_COOKIE['id_hash'])) {
        $hash = md5($_COOKIE['username'].$supersecret_hash_padding);
        if ($hash == $_COOKIE['id_hash']) {
            return true;
        }
        else {
            return false;
        }
    }
    else {
        return false;
    }
}

/*function user_login() {
    if (!$_POST['username'] || !$_POST['password']) {
        $feedback = 'ERROR--Missing username or password';
        return $feedback;
    }
    else {
        $username = strtolower($_POST['username']);
        $password = strtolower($_POST['password']);
        $crypt_pwd = md5($password);
        $query = "SELECT username, is_confirmed
        FROM login
        WHERE username = '$username'
        AND password='$crypt_pwd'";
        $result = mysql_query($query);
        if (!$result || mysql_num_rows($result) < 1){
            $feedback = 'ERROR--User not found or password incorrect';
            return feedback;
        }
        else {
            if (mysql_result($result, 0, 'is_confirmed') == '1') {
            user_set_tokens($username);
            return 1;
            }
            else {
                $feedback = 'ERROR--You may not have confirmed your account yet';
                return $feedback;
            }
        }
    }
}*/

function user_login($username,$password) {
  $username = strtolower($username);
  $password = strtolower($password);
  $crypt_pwd = md5($password);
  $query = "SELECT username, is_confirmed
    FROM login
      WHERE username = '$username'
      AND password='$crypt_pwd'";
  $result = mysql_query($query);

  if (!$result || mysql_num_rows($result) < 1)
      return ACCT_NOTNOTFOUNDORPWINCORRECT;

  if (mysql_result($result, 0, 'is_confirmed') == '1') {
      user_set_tokens($username);
      return ACCT_OK;
  }
  else {
      return ACCT_NOTNOTFOUNDORPWINCORRECT;
    }
}

function user_logout() {
    setcookie('username', '', (time()+2592000), '/', '', 0);
    setcookie('id_hash', '', (time()+2592000), '/', '', 0);
}

function user_set_tokens($username_in) {
    global $supersecret_hash_padding;
    if (!$username_in) {
        $feedback = 'ERROR--No username';
        return false;
    }
    $username = strtolower(username_in);
    $id_hash = md5($username.$supersecret_hash_padding);

    setcookie('username', $username, (time()+2592000), '/', '', 0);
    setcookie('id_hash', $id_hash, (time()+2592000), '/', '', 0);

}

?>
---------------------------------------------
Avatar billede dennismp Nybegynder
17. august 2004 - 18:10 #1
hvilken fejl får du?
Avatar billede Slettet bruger
17. august 2004 - 18:13 #2
ja.. det er ret væsentligt :S
Avatar billede smeier Nybegynder
17. august 2004 - 18:16 #3
Arh er det dig igen. Jeg ville ikke tillade mig at tage mere af din tid så jeg åbnede et nyt spgm. Men hvis du gider så ok.

Warning: mysql_query(): Access denied for user: 'ODBC@localhost' (Using password: NO) in c:\programmer\easyphp1-7\www\spillesteder\admin\login_funcs.php on line 70

som vises nedenfor.
Men jeg har rettet sådan at forbindelsen burde gå i gennem. Kan ikke finde fejlen.

function user_login($username,$password) {
  $username = strtolower($username);
  $password = strtolower($password);
  $crypt_pwd = md5($password);
  $query = "SELECT username, is_confirmed
    FROM login
      WHERE username = '$username'
      AND password='$crypt_pwd'";
  $result = mysql_query($query);  <-------- line 70

  if (!$result || mysql_num_rows($result) < 1)
      return ACCT_NOTNOTFOUNDORPWINCORRECT;

  if (mysql_result($result, 0, 'is_confirmed') == '1') {
      user_set_tokens($username);
      return ACCT_OK;
  }
  else {
      return ACCT_NOTNOTFOUNDORPWINCORRECT;
    }
}
Avatar billede Slettet bruger
17. august 2004 - 18:17 #4
det er fordi du ikke logger på mysql....
Avatar billede smeier Nybegynder
17. august 2004 - 18:19 #5
sorry. Glem det lige et øjeblik. Tror at jeg har løst det.
Avatar billede smeier Nybegynder
17. august 2004 - 18:25 #6
nu er forbindelse oprettet, problemet er nu at lige meget hvad jeg trykker ind siger den "ERROR--User not found or password incorrect" ikke med sql men på login siden når jeg forsøger at logge ind.

plus der står dette i toppen af min side.
Array ( [username] => hej [password] => hej [submit] => login )
Avatar billede dennismp Nybegynder
17. august 2004 - 19:09 #7
print_r($_POST);

laver

Array ( [username] => hej [password] => hej [submit] => login )

Så den linje fjerner du bare.

Prøv evt at omskrive user_login til følgende:
function user_login($username,$password) {
  $username = strtolower($username);
  $password = strtolower($password);
  $crypt_pwd = md5($password);
  $query = "SELECT is_confirmed
    FROM login
      WHERE username = '$username'
      AND password='$crypt_pwd'";

  $result = mysql_query($query) or die(mysql_error());
  $row = mysql_fetch_array($result);
  if ( $row == false )
      return ACCT_NOTNOTFOUNDORPWINCORRECT;

  if ( $row[0] == '1') {
      user_set_tokens($username);
      return ACCT_OK;
  }
  else {
      return ACCT_NOTNOTFOUNDORPWINCORRECT;
    }
}
Avatar billede smeier Nybegynder
17. august 2004 - 19:26 #8
Jeg har siddet og kigget lidt på det, men måske har jeg bare misforstået det.

HVorfor hedder det i funktionen function user_set_tokens($username_in)
Hvorfor hedder dette $username_in. istedet for blot $username. Jeg er ikke sikker på
Avatar billede dennismp Nybegynder
17. august 2004 - 20:20 #9
hvad man kalder parameteren i funktions-defintionen er sådan set ligemeget, bare man så bruger $username_in konsekvent i selve koden.. Men der bliver både brugt $username og $username_in :-)  Een af dem skal rettes så det bliver samme navn hele vejen igennem. Godt set :)
Avatar billede smeier Nybegynder
17. august 2004 - 20:41 #10
dennismp-->Det hjalp ikke. Jeg må desværre se mig selv opgive det nu. Gider ikke mere. Du har vel ikke tilfældigvis et brugbart og relativt sikkert login script. Det behøver kun have en bruger der kan logge ind. Det behøver ikke engang hente navn osv fra en db, det skal bare være sikkert.
Avatar billede dennismp Nybegynder
17. august 2004 - 21:12 #11
Hvordan ser din login tabel ud? Hvis du gider at vise mig det, så skal jeg se på det. (Så kan jeg selv teste det)
Avatar billede sukos Juniormester
17. august 2004 - 21:29 #12
Lidt loginscripts kan du finde bl.a. her:
http://www.showsource.dk/php/?list=Login
Avatar billede smeier Nybegynder
21. august 2004 - 19:26 #13
hej dennismp---<
H´vis du stadig er på så skriv lige. er desværre kun på et par gange om ugen da jeg ikke har internet derhjemme.
HVis du stadig kan/gider hjælpe må du meget gerne.
Min logintabel er nedenfor.
Men den er blot lavet for at passe til scriptet, kan ligesågodt være den der er fejl i!:

# Database: : `spillestederdk`
#

# --------------------------------------------------------

#
# Struktur dump for tabellen `login`
#

CREATE TABLE `login` (
  `is_confirmed` varchar(10) NOT NULL default '',
  `username` varchar(25) NOT NULL default '',
  `user_name` varchar(25) NOT NULL default '',
  `password` varchar(25) NOT NULL default ''
) TYPE=MyISAM;

#
# Data dump for tabellen `login`
#

INSERT INTO `login` VALUES ('1', 'hej', 'hej', 'hej');
Avatar billede smeier Nybegynder
21. august 2004 - 19:54 #14
Hej Dennis.
Bliver desværre nødt til at smutte så kan først læse dit svar imorgen(22 aug), men håber at du gider svare alligevel.
Avatar billede smeier Nybegynder
24. august 2004 - 11:57 #15
Lukker.
Avatar billede dennismp Nybegynder
24. august 2004 - 12:18 #16
Hej - jeg kunne ikke finde dit indlæg, så jeg har ikke fået set på det endnu. Men hvis du stadig har mod på det, så kan vi gør det idag.
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