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

Logowanie php - błąd - Uncaught Error: Call to undefined function fetch_assoc()

Object Storage Arubacloud
0 głosów
626 wizyt
pytanie zadane 19 kwietnia 2022 w PHP przez paulina_matczak Nowicjusz (120 p.)

Cały kod ma za zadanie rejestracje, a następnie logowanie (w dwóch oddzielnych div-ach) Rejestracja działa, więc nie będę podawała kodu do dodaj.php. Po kliknięciu przycisku ,,Zaloguj" na stronie wyskakuje błąd: Uncaught Error: Call to undefined function fetch_assoc()   (Ostatnie zdjęcie)

Czy ktoś może mi powiedzieć co w kodzie jest napisane źle?

INDEX.PHP

<html>
<head>
    <meta charset="UTF-8">
    <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
    <div id="naglowek">
        <a href="index.php"><img src="logo.png"></a>
        <div id="menu">
            <ol>
                <li><a href="index.php">Start</a>
                </li>

            </ol>
        </div>
    </div>
    <div id="srodek">


    <div id="rejestracja">
      <h3> Zarejestruj się </h3>
    <form method="POST" action="dodaj.php">
          <input type="text" name="name" placeholder="Imię i nazwisko" required><br>
          <input type="email" name="email" placeholder="E-mail" required><br>
          <input type="password" name="password" placeholder="Hasło" required><br><br>
          <input type="submit" name="submit" value="Zarejestruj"> 
  </form>
        <br> <h5> Jeśli twoja szkoła nie dała Ci adresu e-mail potrzebnego do tej strony, zobacz dział POMOC, na górnym menu </h5>
    </div>



    <div id="logowanie">
      <h3> Zaloguj się </h3>
    <form action="login.php" method='POST'> 
    <input type="text" name="nazwa" placeholder="E-mail" /> 
    <br/> 
    <input type="password" name="haslo" placeholder="Hasło" /> <br>
    <br/>
    <input type="submit" name="submit" value="Zaloguj"> 
    
  </form>
  

</div>





        <div id="prawy">

        <h3> Lista Uczniów </h3>
        <?php



            $servername = "localhost";
            $username = "root";
            $password = "";
            $dbname = "skarbnik";

            // Create connection
            $conn = new mysqli($servername, $username, $password, $dbname);
            $conn -> query ('SET NAMES utf8');
            $conn -> query ('SET CHARACTER_SET utf8_unicode_ci');
            // Check connection
            if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
            }

          
           
		
        $sql = "SELECT * FROM `uczniowie`";
            
       

             $result = $conn->query($sql);
             if ($result->num_rows > 0) {
               // output data of each row
                 echo "<table>";
                 echo "<th>id</th>";
                 echo "<th>Imię</th>";
                 echo "<th>Nazwisko</th>";
         echo "<th>Klasa</th>";
               while($row = $result->fetch_assoc()) {
                 echo "<tr>";
                 echo "<td>" . $row["id"]. "</td>";
         echo "<td>" . $row["imie"]. "</td>";
         echo "<td>" . $row["nazwisko"]. "</td>";
         echo "<td>" . $row["klasa"]. "</td>";
               }
                 echo "</table>";
     
             } else {
               echo "0 wyników";
             } 
         ?>  




    </div>



    </div>
    <div id="stopka">

    </div>
</body>
</html>

 

LOGIN.PHP

<html>
<head>
    <meta charset="UTF-8">
    <link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
    <div id="naglowek">
        <a href="index.php"><img src="logo.png"></a>
        <div id="menu">
            <ol>
                <li><a href="index.php">Start</a>
                </li>
                <li><a href="my.php">O Nas</a>
                </li>
                <li><a href="pomoc.php">Pomoc</a>
                </li>
        
                
            
            </ol>
        </div>
    </div>

<?php
include 'zmienne.php';
$polacz = mysqli_connect($serwer, $user, $haslo, $baza);

          
            

            
            
            
          
  
            if(!empty($_POST['nazwa'])&&($_POST['haslo'])) 
            { 
              $nazwa=$_POST['nazwa'];
              
              $nazwa=$_POST['nazwa'];
              $haslo=$_POST['haslo'];
               $proba="SELECT users.user_passwordhash FROM users WHERE users.user_email ='".$nazwa."'";

                $result = $polacz -> query("$proba"); 
                $row=fetch_assoc($result);
                $haslo=$_POST['haslo'];
              if (password_hash($haslo, PASSWORD_DEFAULT)==$row)  
              {  
                echo "Jestes zalogowany";  
              }  
            } 
            


              
      ?>
<div id="prawy">


<h3> Lista Uczniów </h3>
<?php



    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "skarbnik";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    $conn -> query ('SET NAMES utf8');
    $conn -> query ('SET CHARACTER_SET utf8_unicode_ci');
    // Check connection
    if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
    }

  
   
  
$sql = "SELECT * FROM `uczniowie`";
    


     $result = $conn->query($sql);
     if ($result->num_rows > 0) {
       // output data of each row
         echo "<table>";
         echo "<th>id</th>";
         echo "<th>Imię</th>";
         echo "<th>Nazwisko</th>";
 echo "<th>Klasa</th>";
       while($row = $result->fetch_assoc()) {
         echo "<tr>";
         echo "<td>" . $row["id"]. "</td>";
 echo "<td>" . $row["imie"]. "</td>";
 echo "<td>" . $row["nazwisko"]. "</td>";
 echo "<td>" . $row["klasa"]. "</td>";
       }
         echo "</table>";

     } else {
       echo "0 wyników";
     } 
 ?>  




</div>



</div>
<div id="stopka">

</div>
</body>
</html>




    } 

 

TABELA Z BAZY (USER)

-- phpMyAdmin SQL Dump
-- version 5.0.4
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Czas generowania: 19 Kwi 2022, 09:33
-- Wersja serwera: 10.4.17-MariaDB
-- Wersja PHP: 8.0.0

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Baza danych: `skarbnik`
--

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `user`
--

CREATE TABLE `user` (
  `user_id` bigint(20) NOT NULL,
  `user_fullname` varchar(128) COLLATE utf8mb4_polish_ci NOT NULL,
  `user_email` varchar(128) COLLATE utf8mb4_polish_ci NOT NULL,
  `user_password` varchar(255) COLLATE utf8mb4_polish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_polish_ci;

--
-- Zrzut danych tabeli `user`
--

INSERT INTO `user` (`user_id`, `user_fullname`, `user_email`, `user_password`) VALUES
(1, 'Student', 'student@wp.pl', '$2y$10$3h7xcIMQPVrkcGD/m8X9l.zJACfs6VMqwI3Zv3Yxi4M5Z20GwPEGi'),
(2, 'Student2', 'student2@wp.pl', '$2y$10$l2EfUKoI.Bl2XzJuqo0dMe6LCGK2q1vR1aMxKGztJIaA5SP24Yuw2'),
(3, 'Skarbnik2', 'skarbnik1@wp.pl', '123'),
(4, 'Jan Kowalski', 'Jankowalski@skarbnik.pl', 'tak123');

--
-- Indeksy dla zrzutów tabel
--

--
-- Indeksy dla tabeli `user`
--
ALTER TABLE `user`
  ADD PRIMARY KEY (`user_id`);

--
-- AUTO_INCREMENT dla zrzuconych tabel
--

--
-- AUTO_INCREMENT dla tabeli `user`
--
ALTER TABLE `user`
  MODIFY `user_id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

1 odpowiedź

0 głosów
odpowiedź 19 kwietnia 2022 przez wizarddos Nałogowiec (25,930 p.)
edycja 19 kwietnia 2022 przez wizarddos

Zajrzyj do dokumentacji

Co do praktyk. Dobrym pomysłem jest trzymanie się jednego 'stylu' łączenia się z bazą. To znaczy:skoro łączysz się wcześniej z bazą używając instrukcji proceduralnych, używaj instrukcji proceduralnych (a jeśli obiektowych to obiektowych)

Sam błąd tkwi w tych linijkach

$result = $polacz -> query("$proba"); 
$row=fetch_assoc($result);

Nie potrzebujesz tych cudzysłowów. W tym momencie zamiast zawarości zmiennej proba (czyli zapytania faktycznego) próbujesz wykonać zapytanie o treści $proba. To nie jest poprawne zapytanie i to może być właśnie problem

Oprócz tego nie istnieje taka funkcja jak fetch_assoc(). To jest metoda klasy mysqli więc albo używasz fetch_assoc() w taki sposób

$row=$polacz->fetch_assoc($result);

lub

$row=mysqli_fetch_assoc($result);

 

1
komentarz 19 kwietnia 2022 przez Comandeer Guru (600,730 p.)

Nie potrzebujesz tych cudzysłowów. W tym momencie zamiast zawarości zmiennej proba (czyli zapytania faktycznego) próbujesz wykonać zapytanie o treści $proba. 

Akurat zmienne wstawione w cudzysłowy są podstawiane: https://sandbox.onlinephpfunctions.com?s=s7EvyCjg5VIpSS0uUbBVUM8oTcpJTAIR6ta8XLxcqckZ-QpKYGklawA%2C&v=8.1.5

Zmienne w apostrofach nie są podstawiane: https://sandbox.onlinephpfunctions.com?s=s7EvyCjg5VIpSS0uUbBVUM8oTcpJTAIR6ta8XLxcqckZ-QrqYGmQgAIeAAA%2C&v=8.1.5

Więc tutaj nie ma błędu.

1
komentarz 19 kwietnia 2022 przez Comandeer Guru (600,730 p.)

No i fetch_assoc jest raczej na $result, nie na $polacz – bo to metoda od pobierania danych z wyniku, nie z połączenia

Podobne pytania

0 głosów
0 odpowiedzi 713 wizyt
0 głosów
1 odpowiedź 467 wizyt
0 głosów
3 odpowiedzi 5,544 wizyt

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...