Avatar
ddankool
Člen
Avatar
ddankool:

Sory za spam Prihlasovaci script Vsetko mi ide ako ma len ak napisem zle meno aj heslo tak mi to vyhodi toto:
Notice: Undefined offset: 2 in localhost\Web\lo­gin.php on line 33
Notice: Undefined offset: 2 in localhost\Web\lo­gin.php on line 34
Tato přezdívka nebyla nalezena.

Ale ked dam spravne meno a zle heslo tak mi to vypise iba:
Toto heslo není správné.

Ako odstranim tento error?
Tu je code:

<?php
 $db_host         =     "localhost";
 $db_uzivatel     =     "Skull";
 $db_heslo        =     "12345";
 $db_databaze     =     "authme";
 $db_tabulka      =     "authme";
 $hash            =     "SHA256";

 session_start();
 if(isset($_SESSION['uzivatel'])) {

 header ("Location: administrace.php");
 exit;
 } else {
 $mysqli = new mysqli($db_host, $db_uzivatel, $db_heslo, $db_databaze);
 if ($mysqli->connect_errno)
 {
    echo "Failed to connect to MySQL: " . $mysqli->connect_error;
    exit();
 }
 if (isset($_POST['nick']) && isset($_POST['heslo']))
 {
    if (!empty($_POST['nick']) && !empty($_POST['heslo']))
    {
             $nick = preg_replace('/\s+/', '', $_POST['nick']);
       $heslo = preg_replace('/\s+/', '', $_POST['heslo']);
       $result = $mysqli->query("SELECT password FROM ".$db_tabulka." WHERE username = '".$nick."'");
       $row = $result->fetch_assoc();
       switch ($hash) {
             case 'SHA256':
                 $userPasswordField = explode('$', $row['password']);
             $heslo = hash('sha256', $heslo);
             $heslo .= $userPasswordField[2];
             $heslo = '$SHA$' . $userPasswordField[2] . '$' . hash('sha256', $heslo);
             $heslicko = $heslo === $row['password'];
                 break;
         }
       $ip = $_SERVER['REMOTE_ADDR'];

       $query_nick = mysqli_query($mysqli, "SELECT username FROM ".$db_tabulka." WHERE username = '".$nick."'");
       if ($data_nick = mysqli_fetch_array($query_nick))
       {
          if ($heslicko)
          {
             $_SESSION['uzivatel'] = $nick;

 header ("Location: administrace.php");
 exit;
            }
          else
          {
             echo "<div style='color: red;'><strong>Toto heslo není správné.</strong></div>";
          }
       }
       else
       {
          echo "<div style='color: red;'><strong>Tato přezdívka nebyla nalezena.</strong></div>";
       }
    }
 }
 }
 ?>
 <!DOCTYPE html
 <html>
            <head>
                 <meta charset="utf-8" />
                                <title>Prihlasenie</title>
                 <link rel="stylesheet" href="CSS/Login.css" type="text/css" />
         </head>
 <body><center>
          <article>
                  <div id="centrovac">
             <section>
                            <br>
                                <div class="cistic"></div>
                                   <center>
                                        <div style="margin:80px auto 40px;">
                                    <div id="logo">Prihlasenie</div>
                                        </div>
                                    <div style="margin:80px auto 40px;">
                                         <center>
                       <form method='post'>
                        <input type="text" class="text-input" name='nick' placeholder="Nick na serveri">
                                           <div style="margin:10px auto 10px;">
                        <input type="password" class="text-input" name='heslo' placeholder="Heslo">
                                           <div style="margin:10px auto 10px;">
                        <button type="submit" class="button">Přihlásit!</button>
                       </form>
                                           <div style="margin:100px auto 50px;">
                                           <p>Ak niesi zaregistrovany na serveri<br> pokracuj v Offline rezime</p>
                                           <a href="Domov.php" class="button">Offline rezim</a>
                                         </center>
                                        </div>
                                   </center><br>
             </section>
           <div class="cistic"></div>
                  </div>
          </article>
 </center></body>
 </html>
 
Odpovědět 26.3.2015 19:59
Avatar
misaj
Člen
Avatar
Odpovídá na ddankool
misaj:

Problém je nejspíš zde:

$heslo .= $userPasswordField[2];
$heslo = '$SHA$' . $userPasswordField[2] . '$' . hash('sha256', $heslo);

Nejspíš explode nazafunguje na tvá data podle očekávání.

 
Nahoru Odpovědět 26.3.2015 21:28
Avatar
Fredep
Redaktor
Avatar
Odpovídá na ddankool
Fredep:

Z databáze taháš data podle nicku. Pokud ho tedy nevyplníš, dotaz na databázi vrátí prázdný výsledek. Poté tento prázdný dotaz, respektive prázdný string rozdělíš do pole, pomocí explode. Výsledné pole samozřejmě nic neobsahuje, ale ty přesto po něm požaduješ index číslo 2.
Doporučuji ti to obalit do podmínky, která ověří, zda vůbec z databáze bylo něco získáno.

$result = $mysqli->query("SELECT password FROM ".$db_tabulka." WHERE username = '".$nick."'");
if ($result->num_rows >= 1) {
  // Databáze vrátila jeden nebo více řádků, uživatel existuje, normálně se pokračuje
  switch ($hash) {
    case 'SHA256':
      $userPasswordField = explode('$', $row['password']);
      $heslo = hash('sha256', $heslo);
      $heslo .= $userPasswordField[2];
      $heslo = '$SHA$' . $userPasswordField[2] . '$' . hash('sha256', $heslo);
      $heslicko = $heslo === $row['password'];
      break;
  }
} else {
 // Uživatel neexistuje, zvolíš si, co se stane.
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 27.3.2015 7:16
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
ddankool
Člen
Avatar
ddankool:

Mam to Dakujem velmi si mi pomohol :)

 
Nahoru Odpovědět 27.3.2015 12:54
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.