[PHP][MySQL] Logowanie/rejestracja

0

Siemka,
Wiem, że jest tysiące skryptów w google o logowaniu i rejestracji, ale chciałem napisać to sam, żeby coś zrozumieć :) No i mam kilka pytań, bo oczywiście prawie przy każdym skrypcie pojawiają mi się jakieś problemy :P

  1. Napisałem taki kod rejestracji użytkownika (badziewny, bez szyfrowania itd):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="keywords" content="algorytmy, algorytmika" />
<title>Strona główna - algorytmika</title>
<link rel="stylesheet" type="text/css" href="cascade.css">
</head>
<body>
<div id="left_image"></div>
<div id="right_image"></div>
<div id="container">
<div id="logo">
<img src="logo.jpg" alt="obrazek" />
</div>
<div id="box">
<div id="pasek_nawigacyjny">
<div id="pas_tytul">Menu główne</div>
<div id="kol_pasek_naw"><br /><a href="index_wybor_podstawy.html"><img src="Podstawy.JPG" alt="obrazek" /></a><br />
<a href="index_wybor_algorytmy.html"><img src="Algorytmy.JPG" alt="obrazek" /></a><br />
<a href="kalkulatory.php"><img src="Kalkulatory.JPG" alt="obrazek" /></a><br />
<a href="index.html"><img src="Download.JPG" alt="obrazek" /></a><br /></div><br />
</div>
<div id="tresc" style="height: 473px">
<h1 style="text-align: center">Rejestracja</h1><br />
<?php
     echo ("<form method=\"post\" action=\"rejestracja.php\"><table><tr><td width=\"50px\">Nazwa użytkownika:</td><td><input type=\"text\" name=\"login\"></td></tr>
           <tr><td width=\"50px\">Hasło:</td><td><input type=\"text\" name=\"haslo\" /></tr></tr>
           <tr><td width=\"50px\">Potwierź hasło:</td><td><input type=\"text\" name=\"haslo2\" /></tr></tr>
           <tr><td><input type=\"submit\" name=\"submit\" value=\"Zarejestruj!\" /></td></tr></table></form>");

     $connect = mysqli_connect('host', 'login', 'haslo', 'baza') or die ("Nie moglem sie polaczyc z serwerem");

     $_POST['login'] = $login;
     $_POST['haslo'] = $haslo;

     if(isset($_POST['login'])and isset($_POST['haslo']) and isset($_POST['haslo2']) and isset($_POST['submit']))
     {
       if($_POST['haslo']==$_POST['haslo2'])
       {
           $zapytanie = "INSERT INTO users VALUES('1', '$login', '$haslo')";
           mysqli_query($connect, $zapytanie);
           echo "Konto zostało utworzone";
       }
       else
       {
       echo "Podane hasła nie zgadzają się.";
       }
     }
?>
</div>
</div>
</div>
</body>
</html>

No i mam takie pytanie - czemu jak kilkam submit to nie wyświetla się żaden komunikat i nic się nie zapisuje do tabeli?

  1. Takie pytanie dla upewnienia - czy musze robić wszystkie podstrony drugi raz, jeśli chcę, żeby zalogowany użytkownik miał więcej opcji na stronie?

  2. Co zrobić, żeby podczas podawania hasła pokazywało się ono za pomocą gwiazdek (*)?

0

Po pierwsze czemu przypisujesz coś do zmiennej $_POST ? Powinno być na odwrót czyli:

$login=$_POST['login'];
$haslo=$_POST['haslo'];

A jeżeli chcesz mieć kropki/gwiazdki zamiast hasła to piszesz <input type="password"> a nie <input type="text">

Pzdr ;)

0

Takie pytanie dla upewnienia - czy musze robić wszystkie podstrony drugi raz, jeśli chcę, żeby zalogowany użytkownik miał więcej opcji na stronie?

O warunkach słyszał? Przykładowo dla zalogowanego użytkownika podczas logowania dajesz:

$_SESSION['zalogowany'] = 1;

(Zakładając że masz wystartowaną sesję)

I wtedy najprostsza rzecz to warunek, przykładowo dodając pozycje do menu:

echo('<a href="cos.php">Cośtam dla niezalogowanych</a>');
if ($_SESSION['zalogowany']) {
   echo('<a href="wyloguj.php">Wyloguj sie (tylko dla zalogowanych)</a>');
}
echo('<a href="cos2.php">Cośtam dla niezalogowanych2</a>');

Polecam poczytać o mechanizmie sesji w PHP i przestać do cholery pisać:

echo "abc123";

Ten zapis ssie i znacznie pogarsza czytelność kodu, echo() to nie jest żadna nadzwyczajna funkcja, żeby nie pisać do niej argumentów w nawiasach.

0

Dzięki. O warunkach słyszałem, o sesjach nie ;)

0
session_start();
0

Ok, zrobiłem tak. Jeśli użytkownik w pliku index.html kliknie zaloguj, to przeniesie go do pliku login.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="keywords" content="algorytmy, algorytmika" />
<title>Strona główna - algorytmika</title>
<link rel="stylesheet" type="text/css" href="cascade.css">
</head>
<body>
<div id="left_image"></div>
<div id="right_image"></div>
<div id="container">
<div id="logo">
<img src="logo.jpg" alt="obrazek" />
</div>
<div id="box">
<div id="pasek_nawigacyjny">
<div id="pas_tytul">Menu główne</div>
<div id="kol_pasek_naw"><br /><a href="index_wybor_podstawy.html"><img src="Podstawy.JPG" alt="obrazek" /></a><br />
<a href="index_wybor_algorytmy.html"><img src="Algorytmy.JPG" alt="obrazek" /></a><br />
<a href="kalkulatory.php"><img src="Kalkulatory.JPG" alt="obrazek" /></a><br />
<a href="index.html"><img src="Download.JPG" alt="obrazek" /></a><br /></div><br />
<div id="log_tytul">Logowanie</div>
<div id="log_panel"><br />Login:&nbsp;&nbsp;<input type="text" name="login" width="50px" /><br />
                          Hasło:&nbsp;&nbsp;<input type="password" name="haslo" width="50px" /><br />
                          <a href="login.php"><input type="submit" name="submit" value="Zaloguj" /></a><br /> // tutaj
                          Zapomniałeś hasła? <a href="rejestracja.php">Zarejestruj się!</a>
</div>
</div>
</div>

<div id="prawy-pasek">
<div class="shoutbox_tytul">Shoutbox</div>
<div class="shoutbox">Zaloguj się, aby zobaczyć shoutbox</div>
</div>

<div id="tresc">
<b>Witajcie,</b><br />
na stronie poświęconej algorytmice. Znajdziecie tu dokładne, napisane prostym językiem przykłady wielu algorytmów, oraz ich
implementację w jednym z najbardziej popularnych języków programowania - C++. Znajdują się tu także porady do wykonywania
algorytmów, jak i dokładne opisy algorytmiki od zera dla zupełnie początkujących. Serwis jest nowy, więc miejcie litość jak
będziecie go komentować ;).<br /><br />
<b>Rekrutacja:</b>
<ul>
    <p><li>Ludzie, znający języki programowania inne niż C++, do pisania implementacji algorytmów</li>
    <li>Ktoś, kto mógłby pisać artykuły na stronie</li>
    <li>Grafik, który pomagał by ulepszyć design strony</li></p>
</ul>
Jeśli chcecie pomóc, piszcie <a href="mailto:[email protected]?subject:algorytmika.site90.com">tutaj</a>.<br /><br />
Jak na razie stronę możecie komentować wchodząc w zakładkę "kalkulatory".
</div>
</div>
</div>
</body>
</html>

W pliku login php jest sprawdzane, czy login i hasło się sprawdzają, oraz jeżeli tak, to przekierowuje do pliku index-log.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta name="keywords" content="algorytmy, algorytmika" />
<title>Strona główna - algorytmika</title>
<link rel="stylesheet" type="text/css" href="cascade.css">
</head>
<body>
<div id="left_image"></div>
<div id="right_image"></div>
<div id="container">
<div id="logo">
<img src="logo.jpg" alt="obrazek" />
</div>
<div id="box">
<div id="pasek_nawigacyjny">
<div id="pas_tytul">Menu główne</div>
<div id="kol_pasek_naw"><br /><a href="index_wybor_podstawy.html"><img src="Podstawy.JPG" alt="obrazek" /></a><br />
<a href="index_wybor_algorytmy.html"><img src="Algorytmy.JPG" alt="obrazek" /></a><br />
<a href="kalkulatory.php"><img src="Kalkulatory.JPG" alt="obrazek" /></a><br />
<a href="index.html"><img src="Download.JPG" alt="obrazek" /></a><br /></div><br />
<div id="log_tytul">Logowanie</div>
<div id="log_panel"><br />Login:&nbsp;&nbsp;<input type="text" name="login" width="50px" /><br />
                          Hasło:&nbsp;&nbsp;<input type="password" name="haslo" width="50px" /><br />
                          <a href="login.php"><input type="submit" name="submit" value="Zaloguj" /></a><br />
                          Zapomniałeś hasła? <a href="rejestracja.php">Zarejestruj się!</a>
</div>
</div>
</div>

<div id="prawy-pasek">
<div class="shoutbox_tytul">Shoutbox</div>
<div class="shoutbox">Zaloguj się, aby zobaczyć shoutbox</div>
</div>

<div id="tresc">
<?php
     if (isset($_POST['login']) and isset($_POST['haslo']) )
     {
       $connect = mysqli_connect('...') or die ("Nie moglem sie polaczyc z serwerem");
       $zapytanie="SELECT id FROM user WHERE Login='".$_POST['login']."' and Haslo ='".$_POST['haslo']."'";
       $temp=mysqli_query($connect, $zapytanie) or die("Wystąpił błąd");
       $ile=mysqli_num_rows($temp);
       if ($ile==1)
         {
         $baza = mysqli_connect('..') or die ("Nie moglem sie polaczyc z serwerem");
         $redirectTo = 4;
         $zapytanie = mysqli_query($baza, "SELECT Link FROM Przekierowania WHERE ID = ".$redirectTo);
         $przekierowanie = mysqli_fetch_row($zapytanie);
         $przekierowanie = $przekierowanie[0];
         mysqli_query($baza, "UPDATE Przekierowania SET Klikniecia = Klikniecia + 1 WHERE ID = ".$redirectTo);
         header('Location: '.$przekierowanie);
         exit();
         }
         else  { echo "Podales zle dane."; }
     }
?>
</div>
</div>
</div>
</body>
</html>

Problem w tym, że do tego pliku nie przenosi. Co jest źle? I czy to jest w ogóle dobry sposób na logowanie?

0

<B>Człowieku, ile razy ci mówiłem, że nagłówek location MUSI być wysłany na początku?</b> Po cholerę dodajesz jakieś opakowanie HTMLowe do pliku który zajmuje się tylko przetwarzaniem danych? W login.php wywal wszystko co jest poza tagami <?php ?>

0

Wiem wiem, ale nie mogłem wymyślić innego sposobu, żeby przeniosło na index-log.php i jednocześnie sprawdziło, czy login i hasło się zgadzają. Ktoś klika przycisk zaloguj, i do jakich plików dalej przekierowywać, żeby to zrobić?

0

Nie wiem co ty tu kręcisz. Przetestuj po prostu to:

index.php

<?php
session_start();
if ($_SESSION['zalogowany'] == 1) {
   $login = 1;
} else {
   $login = 0;
}

echo('Witaj!<br>');
if (!$login) { echo('<a href="login.php">Zaloguj się</a>'); }
if ($login) {  echo('Tajna informacja to: dupa.8'); }
?>

login.php

//Tu formularz

login2.php

session_start();

if ($_POST['pass'] == 'wtf32') {
   $_SESSION['zalogowany'] = 1;
   header('Location: index.php');
   exit();
} else {
   header('Location: login.php?error=badpass');
   exit();
}

I nie ma potrzeby tworzenia żadnych osobnych indexów, kombinowania, i dowalania bezmyślnie htmla do każdego pliku.

0

Dzięki, wreszcie chyba to rozumiem :) Możesz mi jeszcze tylko powiedzieć, czemu po wpisaniu odpowiedniego hasła nie przekierowuje mnie do index.php? Chyba coś pokręciłem w formularzu, napisałem go tak:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
</head>
<body>
<form action="login2.php" method="post">
     Login:&nbsp;&nbsp;<input type="text" name="login" width="50px" /><br />
     Hasło:&nbsp;&nbsp;<input type="password" name="pass" width="50px" /><br />
     <a href="login2.php"><input type="submit" name="submit" value="Zaloguj" /></a>
</form>
</body>
</html>

Próbowałem też zrobić to w php, ale dawało taki sam wynik.

0

Ale co? No bo nie rozumiem. Wpisujesz te wtf32 i sie pokazuje błąd, czy po prostu traktuje cie jakbyś podał złe hasło?

0

Traktuje mnie, jakbym podał złe hasło.

0

Użyłeś dokładnie mojego kodu? Pokaż login.php i login2.php

0

Użyłem twojego kodu, zmieniłem tylko hasło, żeby wykluczyc złe wpisanie w formularzu.

index.php

<?php
session_start();
if ($_SESSION['zalogowany'] == 1) {
   $login = 1;
} else {
   $login = 0;
}

echo('Witaj!<br>');
if (!$login) { echo('<a href="login.php">Zaloguj się</a>'); }
if ($login) {  echo('Tajna informacja to: dupa.8'); }
?>

login.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
</head>
<body>
<form action="login2.php" method="post">
     Login:&nbsp;&nbsp;<input type="text" name="login" width="50px" /><br />
     Hasło:&nbsp;&nbsp;<input type="password" name="pass" width="50px" /><br />
     <a href="login2.php"><input type="submit" name="submit" value="Zaloguj" /></a>
</form>
</body>
</html>

login2.php

<?php
     session_start();

if ($_POST['pass'] == 'a') {
   $_SESSION['zalogowany'] = 1;
   header('Location: index.php');
   exit();
} else {
   header('Location: login.php?error=badpass');
   exit();
}
?>
0

zaraz za session_start() w login2.php walnij:

var_dump($_POST);
exit();

I powiedz jakie będą wyniki przy wpisaniu dobrego hasła, złego etc.

0

Nic się nie zmieniło. Dzieje się to samo co wcześniej przy wpisaniu dobrego i złego hasła.

0

To ciekawe, bo powinien się wyświetlić dump po wysłaniu formularza -_-
Może nie tu gdzie trzeba zapisujesz plik?

0

Hmm, plik zapisuje na pewno tam gdzie trzeba...może to przez to, że oprócz tych trzech plików w folderze mam jeszcze kilkanaście innych?

0

<a href="login2.php"><input type="submit" name="submit" value="Zaloguj" /></a>

Po cholerę to ?

0

Lol, nawet nie zauważyłem, ale ciekawe... ciekawe. Masz przyczynę traktowania zawsze hasła jako błędnego.

0

Ano właśnie, dzięki :) Teraz działa jak należy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1