• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Skrypt php jest wadliwy tak dokładniej "echo" nie zwraca się w przeglądarce

42 Warsaw Coding Academy
+1 głos
477 wizyt
pytanie zadane 11 grudnia 2021 w PHP przez lukas1231233 Nowicjusz (240 p.)
<?php

$conn = @mysqli_connect("localhost", "root" ,"", "klienci");

if($conn->connect_errno!=0)
{
    echo "Error: ".$conn->connect_errno;
}
else
{
    
    $login = $_POST['login'];
    $haslo = $_POST['haslo'];

    $sql="'SELECT * FROM users WHERE login='$login' AND haslo='$haslo'";
    
    if($result = @$conn->query($sql))
    {
        $users = $result->num_rows;
        if($users==1)
        {
            $row = $result->fetch_assoc();
            $login = $row['login'];
            
            
            
            $result->close();
            echo $login;
            
        }
        else
        {
            
        }
    }
    
    $conn->close();
}
?>

 


 

Szukałem literówek ale nic nie znalazłem na dole dam jeszcze kod z html.
 

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-COMPATIBLE" content="IE=edge,chrome=1"/>
    <link rel="stylesheet" href="logowanie.css" type="text/css" />
</head>    
<body>

<form action="logowanie.php" method="POST">

    <div id="container">
        <div class="logowanie">
            Login:     <div class="login"><input name="login" size="30" maxlength="30"> </div> <br><br>
            Hasło:     <div class="hasło"><input name="haslo" size="30" maxlength="30"> </div> <br><br>

            <button class="button">Zaloguj się</button>
        </div>
    </div>

</form>

</body>
</html>


 

Proszę o szybką odpowiedź w czym mam błąd.

komentarz 11 grudnia 2021 przez Wiciorny Ekspert (280,970 p.)
a gdzie ma zwrócić zawartość zmiennej, skoro nigdzie na html- nie zwracasz, czy też nie odbierasz danych ?
komentarz 11 grudnia 2021 przez lukas1231233 Nowicjusz (240 p.)
Form przekierowuje do pliku PHP w którym powinien wyświetlać się login osoby zalogowanej a nie wyświetla się. Pokaż mi twój pomysł.
komentarz 11 grudnia 2021 przez Wiciorny Ekspert (280,970 p.)
przedebuguj kod i sprawdź co zwracane masz z bazy, tak się pracuje ... jeśli nic nie przychodzi znaczy że na drodzę gdzies jest błąd sprawdź co zwraca Ci zapytanie
komentarz 12 grudnia 2021 przez lukas1231233 Nowicjusz (240 p.)

@lukas1231233, Dzięki wszystkim za odpowiedź.

3 odpowiedzi

+1 głos
odpowiedź 12 grudnia 2021 przez VBService Ekspert (256,600 p.)
edycja 12 grudnia 2021 przez VBService

Pomimo, że pierwszy <button> w formularzu np. w Chromie jest domyślnie typowany do submit dobrze jest to "jawnie" zapisać

<button type="submit" class="button">Zaloguj się</button>

a błąd Moim zdaniem masz tu, ten apostrof jest niepotrzebny - przed SELECT

$sql="'SELECT * FROM users WHERE login='$login' AND haslo='$haslo'"

dlatego zapytanie zwraca błąd przez co kod w if-e się nie wykonuje.  wink
 

 

P.S. Do sprawdzania czy formularz zwraca oczekiwane dane możesz użyć var_dump()

<?php
 
$conn = @mysqli_connect("localhost", "root" ,"", "klienci");
 
if($conn->connect_errno!=0)
{
    echo "Error: ".$conn->connect_errno;
}
else
{
    var_dump($_POST); // <= TUTAJ
    
    $login = $_POST['login'];
    $haslo = $_POST['haslo'];
 
    $sql="SELECT * FROM users WHERE login='$login' AND haslo='$haslo'";
     
    if($result = @$conn->query($sql))
    {
        $users = $result->num_rows;
        if($users==1)
        {
            $row = $result->fetch_assoc();
            $login = $row['login'];
             
             
             
            $result->close();
            echo $login;
             
        }
        else
        {
             
        }
    }
     
    $conn->close();
}
?>

 

Na Twoim miejscu "przerobiłbym" trochę ten skrypt php, ponieważ każde "wywołanie" logowanie.php w pierwszej kolejności "tworzy" połączenie do bazy danych ( @mysqli_connect ) przed sprawdzeniem zawartości zmiennych z formularza choćby najprostszym poleceniem np. empty()

0 głosów
odpowiedź 11 grudnia 2021 przez Wiciorny Ekspert (280,970 p.)

Teraz widzę problem.
Po pierwsze formularz nie zawiera "inputów" tylko divy, stąd  sprawdź podczas pracy jak normalny programista kod w trakcie pracy, co zwraca zapytanie i czy w ogóle formularz jest poprawnie przesłany.
 

<div class="login"><input name="login" size="30" maxlength="30"> </div> 

przesyłasz inputy w divie o tej samej nazwie okej, ale twój forumlarz powinien mieć "input" submit .... a masz 

 <button class="button">Zaloguj się</button>
   <input type="submit" name="submit" value="Zaloguj się" />

to nie przesyła formularza. nie wywołuje oczekiwanej akcji 
Ważne: Jeśli użyjesz elementu button w formularzu HTML, różne przeglądarki prześlą różne wartości. Internet Explorer prześle tekst między znacznikami i, podczas gdy inne przeglądarki prześlą zawartość atrybutu value.

1
komentarz 12 grudnia 2021 przez Comandeer Guru (607,060 p.)

button wewnątrz formularza domyślnie wysyła formularz, więc to akurat powinno działać.

Ważne: Jeśli użyjesz elementu button w formularzu HTML, różne przeglądarki prześlą różne wartości. Internet Explorer prześle tekst między znacznikami i, podczas gdy inne przeglądarki prześlą zawartość atrybutu value.

Mamy 2021 rok, IE ma jakieś 0.7% udziału w rynku. 

0 głosów
odpowiedź 12 grudnia 2021 przez Comandeer Guru (607,060 p.)

Skoro nic nie jest zwracane, to możliwe, że błędy są rzucane przez metody do obsługi bazy danych. Problem w tym, że wstawiłeś tam @, które tłumi błędy. Usuń to i zobacz, czy nic się nie pojawiło.

Podobne pytania

0 głosów
1 odpowiedź 570 wizyt
0 głosów
1 odpowiedź 877 wizyt
pytanie zadane 15 grudnia 2019 w PHP przez Lodomir Początkujący (480 p.)

93,389 zapytań

142,385 odpowiedzi

322,547 komentarzy

62,749 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...