Prosty problem (dla mnie) nie do rozwiazania

Odpowiedz Nowy wątek
2019-11-08 11:13
0

Czesc, mam problem z przechwyceniem danych z POST, mianowicie

login.php

<?php include_once("header.php"); ?>

<div class="parent">
    <div class="child">
      <?php
      if(!login_functions::checkLoginState($dbh)){
        echo '<script>alert("uzytkownik nie byl zalogowany");</script>'; #dziala popra;wnie
        if(!empty($_POST['username'])  && !empty($_POST['password'])){ #DO SRODKA TEGO IFA MOJ KOD NIE WCHODZI TAK JAKBY PROGRAM NIE WIDZIAL WARTOSCI PRZESLANEJ Z FORMULARZA
          #echo '<script>alert("username i haslo jest wpisane")</script>';
          $query = "SELECT * FROM users   WHERE user_username = :username AND user_password = :password ;";
          $username = $_POST['username'];
          $password = $_POST['password'];
          $stmt = $dbh->prepare($query);
          $stmt->execute(array(':username' => $username,
                               ':password' => $password));
          $row = $stmt->fetch(PDO::FETCH_ASSOC);
          echo '<script>alert("'.$row.'");</script>';
          if($row['user_id']>0){
            echo '<script>alert("wchodze do ifa");</script>';
            login_functions::createSessionRecord($dbh, $row['user_id'], $row['user_username']);
            header("location:index.php");
          }
        }
        else{
          echo '
                <div class="container">
                  <h2>Formularz logowania</h2>
                  <p>Aby się zalogować, podaj swój login oraz hasło</p>
                  <form class="form-inline" action="login.php" method="post">
                    <label for="username">Login:</label>
                      <input type="text" class="form-control" id="username" placeholder="Wpisz login" name="username">
                    <label for="password">  Hasło:</label>
                      <input type="password" class="form-control" id="password" placeholder="Wpisz hasło" name="password">
                    <button type="submit" class="btn btn-primary">Zatwierdź</button>
                  </form>
                </div>';

        }
      }
       ?>
    </div>
</div>
<?php
include_once('footer.php');
?>

Połączenie z DB dziala.
Wypisac wartosci z tabeli users moge bez problemu, ale wartosc pola $_POST['username'] i $_POST['password'] jest pusta. Dlaczego formularz nie chce przesłac wartości? Za każdym razem jak przesyłam formularz, nie wazne czy mam wpisane dane w formularz czy też nie, kompilator odczytuje puste dane w $_POST[*] i wyswietla formularz raz jeszcze, zamiast stworzyc rekord sesji.
Niby proste, a patrze się już na to jakis czas i nie mam wiecej pomysłów.
Bardzo prosze o pomoc :)

edytowany 4x, ostatnio: cerrato, 2019-11-08 11:30
Kompilator? - Delor 2019-11-08 13:56

Pozostało 580 znaków

2019-11-08 11:58
1

Hm, patrzę na kod i nie widzę żadnych oczywistych błędów.

  • Odpal sobie narzędzia developerskie w przeglądarce (F12) i sprawdź, czy wysyłany formularz faktycznie zawiera dane.
  • Spróbuj może powypisywać sobie zawartość $_POST (np. przez print_r()) - może nieopatrznie ją gdzieś nadpisujesz?

Pozostało 580 znaków

2019-11-08 12:07
1

Juz udało mi się dojść do roziązania, miałem literówke.
Mam za to następny problem. Chciałbym, aby w mojej zmiennej $row2 byl array z użytkownikami ktorych user_username = $_POST['username']. Natomiast print_r w ponizszym kodzie zwraca

PDOStatement Object ( [queryString] => SELECT * FROM users WHERE user_username = :username2 ; )

Co może być przyczyną tego, że nie zwraca mi tablicy z userami?
Dopiero się uczę PHP i troche to dla mnie nie jasne.

$username = "user";
$query2 = 'SELECT * FROM users WHERE user_username = :username2 ;';
          $stmt2 = $dbh->prepare($query2);
          $stmt2->execute(array(':username2' => $username));
          $row2 = $stmt2->fetchAll();
          print_r($stmt2);

Mam jeszcze pytanie, dlaczego print_r nie zwraca

PDOStatement Object ( [queryString] => SELECT * FROM users WHERE user_username = "user" ; )

tzn w miejscu :username2 od razu wstawia wartosc $username?

edytowany 1x, ostatnio: 42zeroo, 2019-11-08 12:11

Pozostało 580 znaków

2019-11-08 12:10
1
42zeroo napisał(a):
          $row2 = $stmt2->fetchAll();
          print_r($stmt2);

Wypisujesz $stmt2, czyli zmienną przechowującą zapytanie SQL - a nie tę przechowującą jego wynik ($row2).

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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