[PHP] Połączenie z bazą danych

0

Witam

W pierwszych słowach mojego postu, chciałbym się przyznać, że jestem kompletnie zielony w pehapie, celem nauki chciałem wykonać prosty skrypcik logowania [ baza danych mysql ], znalazłem inspirację:
<url>
http://www.egrafik.pl/phpmysql-prosty-system-do-logowania,880.html</url>

zrobiłem wszystko jak autor kazał i psia kość nie mogę się połączyć. Otrzymuje komunikat, że zabroniony dostęp [ error 403 ] itd. Próbowałem już gmyrania w kodzie, ale stopień mojej zieloności nie pozwala mi na jakieś wielkie operacje. Problem na pewno jest banalny, podejrzewam że chodzi o połączenie z bazą danych. Ale pewny nie jestem. Chciałbym zaznaczyć, że działam lokalnie na xampie. To jest kod, praktycznie bez przeróbek

<?
// Na samej górze zadeklaruj sesję.
session_start();
// Sekcja wylogowywania, kasuje wszystkie zmienne sesyjne
session_destroy();
    $message=""; // Wiadomość po wylogowaniu

// Sekcja logowania
$login=$_POST[‘login’];
if($login) {
  // W momencie kliknięcia w przycisk formularza
  $uzytkownik=$_POST[‘user’];
  $md5_haslo=md5($_POST[‘password’]);
  // Koduje hasło funkcją md5().


// Połączenie z bazą.
  $host="localhost"; // Nazwa hosta.
  $db_user="admin@localhost"; // Nazwa użytkownika - MySQL.
  $db_password=""; // Hasło do bazy.
  $database="logowanie"; // Nazwa bazy.
    mysql_connect($host,$db_user,$db_password);
    mysql_select_db($database);
// Sprawdzenie nazwy użtkownika i hasła.
  $rezultat=mysql_query("select * FROM logowanie WHERE uzytkownik=’$uzytkownik’ AND haslo=’$md5_haslo’");
    if(@mysql_num_rows($rezultat)){
   session_register("uzytkownik"); // Zapamiętuje zmienną sesji
    header("//localhost/new/main.php"); // Przekierowanie do strony main.php
  exit;
  }else {
  $message="Nieprawidłowa nazwa użytkownika lub hasło";
  }
} // Koniec sprawdzania autoryzacji.
?>
<head>

<title>Dokument</title>
</head>
  <body>
<? echo $message; ?>
<form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">
  <table>
    <tr>
      <td>Użytkownik: </td>
      <td><input name="uzytkownik" type="text" id="uzytkownik" /></td>
    </tr>
    <tr>
      <td>Hasło: </td>
      <td><input name="haslo" type="password" id="haslo" /></td>
    </tr>
  </table>
<input name="login" type="submit" id="login" value="login" />
</form>
</body>
</html>
0

Pierwszy błąd jest już tu:

  $uzytkownik=$_POST[‘user’];
  $md5_haslo=md5($_POST[‘password’]);

Pobierasz dane z pól User i Password a nazwy twoich pól w formularzu to: uzytkownik i haslo:

      <td>Użytkownik: </td>
      <td><input name="uzytkownik" type="text" id="uzytkownik" /></td>
    </tr>
    <tr>
      <td>Hasło: </td>
      <td><input name="haslo" type="password" id="haslo" /></td>

a co do połączenia:
Jak masz włączonego XAMPA to w przeglądarce wpisz:
localhost/phpmyadmin
Sprawdź tam sobie jaki masz nick i hasło (jak wejdziesz bez logowania hasło jest puste)
Wtedy wypełnij sobie pola tak żeby się zgadzało:

  $db_user="admin@localhost"; // Nazwa użytkownika - MySQL.
  $db_password=""; // Hasło do bazy.

Kolejna sprawa czy w tej bazie danych masz stworzoną bazę danych o nazwie "logowanie"?

0

Zamiast:

  $db_user="admin@localhost";.
  $db_password="";

nie powinno być:

  $db_user="admin";.
  $db_password="";

?

Czy masz w bazie danych użytkownika admin? Pytam, bo z tego co wiem po instalacji MySQL istnieje tylko jeden użytkownik root.

Poza tym jeśli się uczysz radziłbym to robić tak:

  • nie przepisywać kodu jak leci!
  • najpierw stworzyć formularz, potem plik do którego dane z formularza są wysyłane. Tu widzę, że to ten sam plik - więc najpierw przepisujesz kod formularza,

Później zabierasz się za część PHP. Dodatkowo warto sprawdzić, warunkiem if czy inne instrukcje jak mysql_connect działają i dodać komunikaty w przypadku jeśli się nie uda. Np.

if($db_lnk=mysql_connect($server,$user,$password))
{
  echo("połączenie z MySQL działa<br/>");
}
else
{
  echo("brak połączenia<br/>");
};

Każdą utworzoną/zmodyfikowaną zmienną sprawdzasz instrukcją echo i sprawdzasz czy ma pożądaną wartość. Widzisz wówczas, co faktycznie dzieje się w kodzie. Przepisywanie "na chama" prowadzi właśnie do takich kwiatków jak ten kod ( bez urazy :) ).

0

nie mój kod, więc nie czuje się obrażony :). Dziękuję bardzo za podpowiedzi, zabieram się do głębszej analizy = ). Stworzyłem użytkownika admin w bazie logowanie, więc to nie tu jest pies pogrzebany.

0

jeszcze jedno pytanie, czy muszę jakoś specjalnie wskazać na miejsce "pobytu" bazy danych? Czy też zwykłe localhost wystarczy?

edyt.:

<?
// Na samej górze zadeklaruj sesję.
session_start();
// Sekcja wylogowywania, kasuje wszystkie zmienne sesyjne
session_destroy();
    $message=""; // Wiadomość po wylogowaniu

// Sekcja logowania
$login=$_POST[‘login’];
if($login) {
  // W momencie kliknięcia w przycisk formularza
  $uzytkownik=$_POST[‘user’];
  $md5_haslo=md5($_POST[‘password’]);
  // Koduje hasło funkcją md5().


// Połączenie z bazą.
  $host="localhost"; // Nazwa hosta.
  $db_user="admin"; // Nazwa użytkownika - MySQL.
  $db_password=""; // Hasło do bazy.
  $database="logowanie"; // Nazwa bazy.
    mysql_connect($host,$db_user,$db_password);
    mysql_select_db($database);
// Sprawdzenie nazwy użtkownika i hasła.
  $rezultat=mysql_query("select * FROM logowanie WHERE uzytkownik=’$uzytkownik’ AND haslo=’$md5_haslo’");
    if(@mysql_num_rows($rezultat)){
   session_register("uzytkownik"); // Zapamiętuje zmienną sesji
    header("location:main.php"); // Przekierowanie do strony main.php
  exit;
  }else {
  $message="Nieprawidłowa nazwa użytkownika lub hasło";
  }
} // Koniec sprawdzania autoryzacji.
?>
<head>

<title>Dokument</title>
</head>
  <body>
<? echo $message; ?>
<form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">
  <table>
    <tr>
      <td>Username: </td>
      <td><input name="user" type="text" id="user" /></td>
    </tr>
    <tr>
      <td>Password: </td>
      <td><input name="password" type="password" id="password" /></td>
    </tr>
  </table>
<input name="login" type="submit" id="login" value="login" />
</form>
</body>
</html>

niestety bez zmian. Baza danych logowanie istnieje, użytkownik admin również.

Co mam zrobić? Czemu takie rzeczy przytrafiają się dobrym ludziom?

:D

0

Stworzyłeś użytkownika admin w bazie logowanie mówisz?

Najpierw musisz połączyć się z serwerem bazodanowym MySQL. Domyślnie jego użytkownikiem jest root. To użytkownik serwera bazodanowego MySQL

Potem wybierasz bazę danych logowanie
select_db();

W bazie danych logowanie masz również tabelę logowanie - to może trochę mylić.

0

Spróbuj to zrobić ładniej (zajrzałem w manual za Ciebie!):

$query = sprintf("SELECT firstname, lastname, address, age FROM friends WHERE firstname='%s' AND lastname='%s'",
    mysql_real_escape_string($firstname),
    mysql_real_escape_string($lastname));

// Perform Query
$result = mysql_query($query);

Poza tym w sesji nie rejestruj nazwy użytkownika, jeśli już to id.

Sprawdzałeś na sztywno to zapytanie w bazie jak się zachowuje?

Czemu takie rzeczy przytrafiają się dobrym ludziom?

Nie ma dobrych, są tylko mniej lub bardziej źli ;)

0

Podzielę się kawałkiem fajnego kodu:

/* sprawdzenie połączenia z bazą danych */
  $db_server = "";
  $db_user   = "";
  $db_pass   = "";
  $db_base   = "";
  $table = "";

  if(!$db_lnk = mysql_connect($db_server,$db_user,$db_pass))
  {
    echo("Nie udało się nawiązać połączenia z serwerem MySQL!<br/>");
    exit;
  };

  if(!mysql_select_db("$db_base"))
  {
    echo("Baza danych niedostępna!<br/>");
    exit;
  };

  /* pobranie danych z fomularza rejestracyjnego */
  $login  = $_POST["login"];  
  $passw = md5($_POST["password"]);

  
  $query = "SELECT * FROM `$table` WHERE login='$login' AND password='$passw'";

  if(!$result = mysql_query($query,$db_lnk))
  {
    echo("Zapytanie nieprawidłowe!<br/>");
    exit;
  };

  $count = mysql_num_rows($result);
  
  if($count !=1)
  {
    echo("Użytkownik o podanym loginie oraz mailu nie istnieje<br/>");
    exit;
  };

  echo("Użytkownik rozpoznany - ustawianie sesji");
  /* ustawić sesję */

Uzupełnij zmienne:

$db_server
$db_user
$db_pass
$db_base
$table

i powiedz jaki komunikat się pokazuje. Dalej się zobaczy.

0

ok droga braci.

 <?php
  $db_server = "localhost";
  $db_user   = "admin";
  $db_pass   = "1234";
  $db_base   = "logowanie";
  $table = "logowanie";

  if(!$db_lnk = mysql_connect($db_server,$db_user,$db_pass))
  {
    echo("Nie udało się nawiązać połączenia z serwerem MySQL!<br/>");
    exit;
  };

  if(!mysql_select_db("$db_base"))
  {
    echo("Baza danych niedostępna!<br/>");
    exit;
  };

  /* pobranie danych z fomularza rejestracyjnego */
  $login  = $_POST["login"];
  $passw = md5($_POST["password"]);


  $query = "SELECT * FROM `$table` WHERE login='$login' AND password='$passw'";

  if(!$result = mysql_query($query,$db_lnk))
  {
    echo("Zapytanie nieprawidłowe!<br/>");
    exit;
  };

  $count = mysql_num_rows($result);

  if($count !=1)
  {
    echo("Użytkownik o podanym loginie oraz mailu nie istnieje<br/>");
    exit;
  };

  echo("Użytkownik rozpoznany - ustawianie sesji");
  /* ustawić sesję */
        ?>

tutaj jest screenshot bazy danych. Na tzw wszelki wypad.

user image

tutaj jest error jaki otrzymuje, ku uciesze własnej = ).

Nie udało się nawiązać połączenia z serwerem MySQL!

  $db_server = "localhost";
  $db_user   = "admin";
  $db_pass   = "1234";
  $db_base   = "logowanie";
  $table = "logowanie";

próbowałem z rootem i pustym hasłem

i błąd jest taki:

Zapytanie nieprawidłowe!

edyt:

błąd jest identyczny jak zostawię admina bez hasła

Zapytanie nieprawidłowe!

edyt 2.

wybaczcie wczorajszy brak wieści = ), ale miałem odruch wymiotny patrząc na netbeansa w godzinach wieczornych

0

Prawdopodobnie powinno być tak:

  $db_server = "localhost";
  $db_user   = "root";
  $db_pass   = "";
  $db_base   = "logowanie";
  $table = "logowanie";

Te dane pozwolą Ci połączyć się z SERWEREM MySQL.

Natomiast nie możesz się zalogować bo hasło otrzymywane z formularza jest kodowane algorytmem md5, natomiast hasło zapisane w tabeli logowanie, czyli 1234 nie jest kodem md5!

zrób tak:
Zamień w kodzie linijkę:

$passw = md5($_POST["password"]);

na:

$passw = $_POST["password"];

Dodatkowo tak jak pisałem na początku zmień zmienne początkowe na:

  $db_server = "localhost";
  $db_user   = "root";
  $db_pass   = "";
  $db_base   = "logowanie";
  $table = "logowanie";

zmień też zapytanie z :
$query = "SELECT * FROM $table WHERE login='$login' AND password='$passw'";
na
$query = "SELECT * FROM $table WHERE uzytkownik='$login' AND haslo='$passw'";

a pod spodem dodaj linijkę:
echo("QUERY: $query<br/>)";
W razie, gdyby dalej nie działało wrzucisz wynik tej instrukcji na forum.

A następnie odpal skrypt w przeglądarce i wpisz do formularza:
do pola użytkownik: admin
do pola hasło: 1234</b>

Powinno zadziałać, ale o godz. 00:13 nie jestem w stanie tego zagwarantować :D

0
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
  $db_server = "localhost";
  $db_user   = "root";
  $db_pass   = "";
  $db_base   = "logowanie";
  $table = "logowanie";

  if(!$db_lnk = mysql_connect($db_server,$db_user,$db_pass))
  {
    echo("Nie udało się nawiązać połączenia z serwerem MySQL!<br/>");
    exit;
  };

  if(!mysql_select_db("$db_base"))
  {
    echo("Baza danych niedostępna!<br/>");
    exit;
  };

  /* pobranie danych z fomularza rejestracyjnego */
  $login  = $_POST["login"];
  $passw = $_POST["password"];



$query = "SELECT * FROM `$table` WHERE uzytkownik='$login' AND haslo='$passw'";

  echo  "QUERY: $query<br/>";

  if(!$result = mysql_query($query,$db_lnk))
  {
    echo("Zapytanie nieprawidłowe!<br/>");
    exit;
  };

  $count = mysql_num_rows($result);

  if($count !=1)
  {
    echo("Użytkownik o podanym loginie oraz mailu nie istnieje<br/>");
    exit;
  };

  echo("Użytkownik rozpoznany - ustawianie sesji");
  /* ustawić sesję */
        ?>
    </body>
</html>

błąd następujący:

QUERY: SELECT * FROM `logowanie` WHERE uzytkownik='' AND passw=''
Zapytanie nieprawidłowe!

edyt:

mały przełom, na skutek durnej literówy w bazie danych nie mamy "uzytkownik" tylko "uztykownik". Stwierdziłem, też, że może w ramach testu podmienie to:

 $login  = $_POST["login"];
  $passw = $_POST["password"];

na to

  $login  = $_POST["admin"];
  $passw = $_POST["1234"];

i oto co się magicznie objawiło:

QUERY: SELECT * FROM `logowanie` WHERE uztykownik='' AND haslo=''
Użytkownik o podanym loginie oraz mailu nie istnieje

także było nie było jest jakiś progressssss

0

Jak już, to nie:

  $login  = $_POST["admin"];
  $passw = $_POST["1234"];

Bo odwołujesz się do zmiennej $admin przesłanej metodą POST.

Prawidłowo:

  $login  = 'admin';
  $passw = '1234';
0

dzięki ci demoniczny mnichu! Działa! = ).

QUERY: SELECT * FROM `logowanie` WHERE uztykownik='admin' AND haslo='1234'
Użytkownik rozpoznany - ustawianie sesji 

[diabel]

0

a jednak, nie chwal dnia przed zachodem

poprzedni kod działa, jednak gdy doszło do łączenia z poprzednim wykiełkował ten sam problem co ostatnio

        <?php
       $db_server = "localhost";
  $db_user   = "root";
  $db_pass   = "";
  $db_base   = "logowanie";
  $table = "logowanie";
  

    if($db_lnk=mysql_connect($db_server,$db_user,$db_pass))
{
  echo("połączenie z MySQL działa<br/>");
}
else
{
  echo("brak połączenia<br/>");
};
session_start();
session_destroy();
$login=$_POST[‘login’];
if($login) {
    // $login  = 'admin';
 // $passw = '1234';
   
  
  $login  = $_POST["usr"];
  $passw = $_POST["pswd"];


    mysql_connect($db_server,$db_user,$db_pass);
    mysql_select_db("$db_base");

 
  /* pobranie danych z fomularza rejestracyjnego */


$query = "SELECT * FROM `$table` WHERE uztykownik='$login' AND haslo='$passw'";


  
    if(@mysql_num_rows($query)){
   session_register("uzytkownik"); // Zapamiętuje zmienną sesji
    header("main.php"); // Przekierowanie do strony main.php
  exit;
  }else {
  $message="Nieprawidłowa nazwa użytkownika lub hasło";
  }


}
//  echo  "QUERY: $query<br/>";

 ?>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
<? echo $message; ?>
<form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">
  <table>
    <tr>
      <td>user: </td>
      <td><input name="user" type="text" id="usr" /></td>
    </tr>
    <tr>
      <td>password: </td>
      <td><input name="password" type="password" id="pswd" /></td>
    </tr>
  </table>
<input name="login" type="submit" id="login" value="login" />
    </form>

    </body>
</html>

ta funkcja

    if($db_lnk=mysql_connect($db_server,$db_user,$db_pass))
{
  echo("połączenie z MySQL działa<br/>");
}
else
{
  echo("brak połączenia<br/>");
};

pokazuje, że połączenie z bazą działa

natomiast reszta kodu zachowuje się dokładnie jak poprzedni, czyli zgłasza mi ten oto błąd

"zabroniony dostęp"
error 403

przy okazji

<form id="form1" name="form1" method="post" action="<? echo $PHP_SELF; ?>">

co robi ten fragment

action="<? echo $PHP_SELF; ?>"> ?

czy po prostu wywołuje on kod php, który jest napisany na górze dokumentu?

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