Avatar billede ibandersson Juniormester
14. januar 2017 - 17:33 Der er 11 kommentarer

så er den gal igen med gammel functioner

Her er en simpel kode på et login, men når taster brugernavn og password ind sker der ikke en skid.
Kommer bare tilbage til loginsiden

<?php
  include("include/conn_mysqli.php");
  session_start();
 
  if($_SERVER["REQUEST_METHOD"] == "POST") {
      // username and password sent from form
     
      $username = mysqli_real_escape_string($conn,$_POST['username']);
      $password = mysqli_real_escape_string($conn,$_POST['password']);
     
      $sql = "SELECT id FROM A_users WHERE username = '$username' and password = '$password'";
      $result = mysqli_query($conn,$sql);
      $row = mysqli_fetch_assoc($result);
      //$active = $row['active'];
     
      $count = mysqli_num_rows($result);
     
      // If result matched $username and $password, table row must be 1 row
       
      if($count == 1) {
        $_SESSION['login_user'] = $username;
       
        header("location: welcome.php");
      }else {
        $error = "Your Login Name or Password is invalid";
      }
  }
?>
<html>
 
  <head>
      <title>Login Page</title>
     
      <style type = "text/css">
        body {
            font-family:Arial, Helvetica, sans-serif;
            font-size:14px;
        }
       
        label {
            font-weight:bold;
            width:100px;
            font-size:14px;
        }
       
        .box {
            border:#666666 solid 1px;
        }
      </style>
     
  </head>
 
  <body bgcolor = "#FFFFFF">
   
      <div align = "center">
        <div style = "width:300px; border: solid 1px #333333; " align = "left">
            <div style = "background-color:#333333; color:#FFFFFF; padding:3px;"><b>Login</b></div>
               
            <div style = "margin:30px">
             
              <form action = "" method = "post">
                  <label>UserName  :</label><input type = "text" name = "username" class = "box"/><br /><br />
                  <label>Password  :</label><input type = "password" name = "password" class = "box" /><br/><br />
                  <input type = "submit" value = " Submit "/><br />
              </form>
             
              <div style = "font-size:11px; color:#cc0000; margin-top:10px"><?php echo $error; ?></div>
                   
            </div>
               
        </div>
           
      </div>

  </body>
</html>
Avatar billede ibandersson Juniormester
14. januar 2017 - 17:34 #1
koden havde en session_register, men den er jo også udgået efter ver.5
Avatar billede olsensweb.dk Ekspert
14. januar 2017 - 18:46 #2
noget må der ske!, får du nogle fejl meddelelser ??
du burde få en fejl med at $error er ukendt. (står i login boxen)

jeg ville ligge session_som det første før include...
og så er din connection så vigtig så den ville jeg sette som require / require_once

>Kommer bare tilbage til loginsiden
forkert username/password
du har sendt noget til skærmen for din header location.
feks BOM, mellemrum, tom linje, fejl besked


afprøvede eks, og blev sparket vidre til welcome.php

debugheader.php

<?php
define('IN_DEBUG_MODE', true); // Sæt til false i production mode
if (IN_DEBUG_MODE) {
    ini_set("display_startup_errors", "on");
    ini_set("display_errors", "on");
    ini_set("html_errors", "false");
    error_reporting(-1); // -1 viser alle slags fejl beskeder
    ini_set("ignore_repeated_errors", 0);
} else {
// Turn off all error reporting
    error_reporting(0);
}
?>



din login.php

<?php
session_start();
include("include/debugheader.php");
require_once("include/conn_mysqli.php");

$error = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // username and password sent from form

    $username = mysqli_real_escape_string($conn, $_POST['username']);
    $password = mysqli_real_escape_string($conn, $_POST['password']);

    $sql = "SELECT id FROM A_users WHERE username = '$username' and password = '$password'";
    $result = mysqli_query($conn, $sql) or die(mysqli_error($conn));
    $row = mysqli_fetch_assoc($result);
    //$active = $row['active'];

    $count = mysqli_num_rows($result);

    // If result matched $username and $password, table row must be 1 row

    if ($count == 1) {
        $_SESSION['login_user'] = $username;
        header("location: welcome.php");
    } else {
        $error = "Your Login Name or Password is invalid";
    }
}
?>
<html>
    <head>
        <title>Login Page</title>
        <style type = "text/css">
            body {
                font-family:Arial, Helvetica, sans-serif;
                font-size:14px;
            }

            label {
                font-weight:bold;
                width:100px;
                font-size:14px;
            }

            .box {
                border:#666666 solid 1px;
            }
        </style>
    </head>
    <body bgcolor = "#FFFFFF">
        <div align = "center">
            <div style = "width:300px; border: solid 1px #333333; " align = "left">
                <div style = "background-color:#333333; color:#FFFFFF; padding:3px;"><b>Login</b></div>
                <div style = "margin:30px">
                    <form action = "" method = "post">
                        <label>UserName  :</label><input type = "text" name = "username" class = "box"/><br /><br />
                        <label>Password  :</label><input type = "password" name = "password" class = "box" /><br/><br />
                        <input type = "submit" value = " Submit "/><br />
                    </form>
                    <div style = "font-size:11px; color:#cc0000; margin-top:10px"><?php echo $error; ?></div>
                </div>
            </div>
        </div>
    </body>
</html>
Avatar billede ibandersson Juniormester
14. januar 2017 - 18:58 #3
Det hjalp ikke
Avatar billede ibandersson Juniormester
14. januar 2017 - 19:00 #4
stadig ingen fejl, bare tilbage til login siden
Avatar billede ibandersson Juniormester
14. januar 2017 - 19:00 #5
Det virker som om det er session der driller
Avatar billede olsensweb.dk Ekspert
14. januar 2017 - 19:20 #6
>Det virker som om det er session der driller
prøv at indsætte en print_r lige efter din body.

...
    <body bgcolor = "#FFFFFF">
<?php
print_r($_SESSION);
?>

        <div align = "center">
...

session_start har også sammen problem med der ikke må være sendt noget til skærmen før den states

prøv at bytte om på disse 2 linjer
session_start();
include("include/debugheader.php");

så det bliver
include("include/debugheader.php");
session_start();

forbedrings forslag:
1) krypterer dit password, hvis en hacker får adgang til din database har han alle brugeres brugernavne/password.
du burde som administrator ikke kunne se en brugers password i klar tekst, tænk på en bruger har ofte sammen password flere steder.

2) skriv i OOP syntax, det er nutiden og fremtiden.

3) omskriv til Prepare Statement
http://www.computerworld.dk/uploads/eksperten-guider/1480-Prepared-Statements-under-MySQLI-kom-igang.pdf
Avatar billede ibandersson Juniormester
14. januar 2017 - 22:21 #7
nothing, bare tom skærm

http://mikkelsen-transport.dk/login.php
Avatar billede olsensweb.dk Ekspert
14. januar 2017 - 23:10 #8
>Array ( )
det betyder du får started din session :)
så kan du godt slette den test

jeg kommer med et lang skud, kunne det tænkes du har flere brugere der har sammen, username/password ??
prøv at udskrive din $count.


$count = mysqli_num_rows($result);
echo $count;
// If result matched $username and $password, table row must be 1 row

if ($count == 1) {


hvis den er 0 er det forkert brugernavn/password
hvis den er størrer en 1 har du flere brugere med sammen brugernavn/password

du kunne også prøve at trimme dit indput, for at sikre der ikke er blanke tegn i starten eller slutningen

endelig prøv at udskrive din sql.


jeg tester mod denne tabel.

CREATE TABLE `a_users` (
  `id` int(11) NOT NULL,
  `firstname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `lastname` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `postnummer` varchar(4) COLLATE utf8_danish_ci NOT NULL,
  `lande_id` int(1) NOT NULL,
  `username` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `password` varchar(255) COLLATE utf8_danish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;


INSERT INTO `a_users` (`id`, `firstname`, `lastname`, `postnummer`, `lande_id`, `username`, `password`) VALUES
(1, 'rip', 'and', '4000', 1, '1', '1234'),
(3, 'rap', 'and', '2500', 1, '3', '1234'),
(4, 'rup', 'and', '8000', 1, '4', '1234'),
(5, 'mickey', 'mouse', '4000', 1, '5', '1234'),
(6, 'Joakin von', 'and', '6000', 1, '6', '1234'),
(7, 'bimmer', 'vildmand', '4000', 1, '7', '1234'),
(8, 'jule', 'mand', '2412', 2, '8', '1234');


ALTER TABLE `a_users`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_username_password` (`username`,`password`),
  ADD KEY `idx_lastname` (`lastname`);

ALTER TABLE `a_users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;



samlet ser den nu sådan ud

<?php
session_start();
include("include/debugheader.php");
require_once("include/conn_mysqli.php");

$error = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // username and password sent from form

    $username = trim(mysqli_real_escape_string($conn, $_POST['username']));
    $password = trim(mysqli_real_escape_string($conn, $_POST['password']));


    $sql = "SELECT id FROM A_users WHERE username = '$username' and password = '$password'";
    echo $sql; // test
    $result = mysqli_query($conn, $sql) or die(mysqli_error($conn));
    $row = mysqli_fetch_assoc($result);
    //$active = $row['active'];

    $count = mysqli_num_rows($result);
    echo $count; // test
    // If result matched $username and $password, table row must be 1 row

    if ($count == 1) {
        $_SESSION['login_user'] = $username;
        header("location: welcome.php");
    } else {
        $error = "Your Login Name or Password is invalid";
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Login Page</title>
        <style type = "text/css">
            body {
                font-family:Arial, Helvetica, sans-serif;
                font-size:14px;
            }

            label {
                font-weight:bold;
                width:100px;
                font-size:14px;
            }

            .box {
                border:#666666 solid 1px;
            }
        </style>
    </head>
    <body bgcolor = "#FFFFFF">
        <div align = "center">
            <div style = "width:300px; border: solid 1px #333333; " align = "left">
                <div style = "background-color:#333333; color:#FFFFFF; padding:3px;"><b>Login</b></div>
                <div style = "margin:30px">
                    <form action = "" method = "post">
                        <label>UserName  :</label><input type = "text" name = "username" class = "box"/><br /><br />
                        <label>Password  :</label><input type = "password" name = "password" class = "box" /><br/><br />
                        <input type = "submit" value = " Submit "/><br />
                    </form>
                    <div style = "font-size:11px; color:#cc0000; margin-top:10px"><?php echo $error; ?></div>
                </div>
            </div>
        </div>
    </body>
</html>
Avatar billede olsensweb.dk Ekspert
14. januar 2017 - 23:15 #9
>nothing, bare tom skærm
hvad mener du med dette ??
bliver den på sammen side ?? eller går den til welcome.php
Avatar billede ibandersson Juniormester
15. januar 2017 - 09:02 #10
samme side, altså tilbage til login formen

Password krypteringen ville jeg sætte ind når det virkede .;-)

prøv denne www.mikkelsen-transport/login.php

undskyld det er lang tid siden jeg har rodet med dette. 1995-2008 var jeg expert.
men blev skilt og kørt lastbilen lige siden, så jeg er lidt rusten, hvad du også kan se på hjemmesiden.
MEN jeg kan mærke det spirer i ryggen.

hvad er debugheader.php
Avatar billede olsensweb.dk Ekspert
15. januar 2017 - 10:13 #11
>hvad er debugheader.php
den slår debug informationerne til/fra og overstyrrer det der står i din php ini, på disse områder.
overstyringen gælder kun for denne fil.
primært er det for at enable error_reporting, display_errors.

------------

du kunne evt sætte en exit på efter din header location, det hindre resten af siden indlæsses

if ($count == 1) {
    $_SESSION['login_user'] = $username;
    header("location: welcome.php");
    exit(0);
} else {
    $error = "Your Login Name or Password is invalid";
}


--------------

har du sat et charset på din connection ??
ref http://php.net/manual/en/mysqli.real-escape-string.php

Security: the default character set
The character set must be set either at the server level, or with the API function mysqli_set_charset() for it to affect mysqli_real_escape_string(). See the concepts section on character sets for more information.



min connection ser sådan ud
conn_mysqli.php

<?php
$conn = new mysqli ( "localhost", "root", "", "test" );
if (! $conn) {
    echo 'Der opstod en fejl.';
    exit ();
}
// mysqli_set_charset($conn, "utf8");
$conn->set_charset( "utf8" );

?>



du kan evt prøve at fjerne mysqli_real_escape_string så
$username = trim(mysqli_real_escape_string($conn, $_POST['username']));
$password = trim(mysqli_real_escape_string($conn, $_POST['password']));
   
se sådan ud:
$username = $_POST['username'];
$password = $_POST['password'];   

bare for at se om det skulle være det der driller.
-------------

som Prepare Statement kunne din php code se sådan ud, ikke noget med mysqli_real_escape_string, men man kunne overveje at trimme

<?php
session_start();
require_once("include/conn_mysqli.php");

$error = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // username and password sent from form

    $id = 0;
    $sql = "SELECT id FROM A_users WHERE username = ? and password = ?";
    if ($stmt = $conn->prepare($sql)) {
        /* Bind parametre */
        $stmt->bind_param('ss', $username, $password);
        /* Sæt værdier på parametrene */
        $username = $_POST['username'];
        $password = $_POST['password'];
        /* Eksekver forespørgslen */
        $stmt->execute();
        /* Bind resultatet */
        $stmt->bind_result($_id);
       
        /* Hent rækker og udskriv data */       
        /*
        // flere rækker
        while ($stmt->fetch()) {
            $id = $_id;
        }
        */
        // kun 1 række
        if($stmt->fetch()) {
            $id = $_id;
        }
        /* Luk statement */
        $stmt->close();
    }
    else {
        /* Der er opstået en fejl */
        echo 'Der opstod en fejl i erklæringen: ' . $conn->error;
    }
    if ($id > 0) {
        $_SESSION['login_user'] = $username;
        header("location: welcome.php");
        exit(0);
    } else {
        $error = "Your Login Name or Password is invalid";
    }
}
?>
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

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