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

question-closed PHP, dodawanie informacji do bazy danych

Object Storage Arubacloud
0 głosów
522 wizyt
pytanie zadane 7 grudnia 2017 w PHP przez Vorex444 Dyskutant (9,610 p.)
zamknięte 7 grudnia 2017 przez Vorex444

Hej, pomoże ktoś, jestem nowy w PHP, i nie mogę naprawić tego błędu.

Chodzi o mysql_query("INSERT INTO `uzytkownicy` (`email`, `password`, `password2`, `name`, ``lastname) VALUES ('".$email."','".$password1."','".$password2."','".$name."','".$lastName."');");

wyskauje mi taki błąd 
Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\xampp\htdocs\ajax\connect.php:27 Stack trace: #0 C:\xampp\htdocs\ajax\register.php(4): require_once() #1 {main} thrown in C:\xampp\htdocs\ajax\connect.php on line 27

else {
    
    if (isset($_POST['register']))
    {
        $email = $_POST['email'];
        $password1 = $_POST['password1'];
        $password2 = $_POST['password2'];
        $name = $_POST['name'];
        $lastName = $_POST['lastName'];
        // sprawdzamy czy login nie jest już w bazie

        if($password1 == $password2)
        {
            mysql_query("INSERT INTO `uzytkownicy` (`email`, `password`, `password2`, `name`, ``lastname) VALUES ('".$email."','".$password1."','".$password2."','".$name."','".$lastName."');");
            echo "Konto zostało utworzone";
        }
        else
        {
            echo "Hasła nie są takie same!";
        }
        
        mysqli_close($connect);
    }
}

 

komentarz zamknięcia: problem rozwiazny
komentarz 7 grudnia 2017 przez kubaapk Nałogowiec (44,270 p.)

2 odpowiedzi

+1 głos
odpowiedź 7 grudnia 2017 przez fyww Obywatel (1,450 p.)
wybrane 7 grudnia 2017 przez Vorex444
 
Najlepsza

Po pierwsze, tą część możesz usunąć, nie jest wymagana a tylko zwiększa długość kwerendy w kodzie, wystarczy że wpiszesz zmienne w takiej kolejności jak kolumny w tabeli: ("INSERT INTO `uzytkownicy` (`email`, `password`, `password2`, `name`, ``lastname) VALUES ('".$email."','".$password1."','".$password2."','".$name."','".$lastName."');");

Po drugie - tak się nie robi: "'.$email.'" , wystarczy dać zmienną w samych apostrofach np. '$email', '$password' itd.

Po trzecie zapisz sobie połączenie do bazy w zmiennej np. $connect

$database_servername = "localhost";
$database_username = "root";
$database_password = "";
$database_name = "nazwabazy";

$connect = new mysqli($database_servername, $database_username, $database_password, $database_name);


a potem możesz zrobić tak: $connect->query("tutaj polecenie do bazy");

Na przyszłość jak nie wiesz dlaczego ci polecenie nie działa chociaż wydaje ci sie że wpisujesz dobrze to polecam ci spróbować wykonać to polecenie w konsoli phpmyadmin, tam ładnie pokazuje wszystkie błędy

 

1
komentarz 7 grudnia 2017 przez xandros Nałogowiec (29,450 p.)

Doszlifuj php, bo masz lekkie braki. Mam nadzieje, że używasz edytora z podświetlaniem skladni. Jeśli masz problemy z jakimś zapytaniem SQL, to po prostu wklej sobie do osobnego pliku i wybierz SQL z listy skladni, lub zmien rozszerzenie pliku na sql.

Masz poprawnie zrobiony twoj przyklad:


function connect(): mysqli
{
    static $mysqli;
    if (null === $mysqli) {
        $mysqli = mysqli_connect(); // new mysqli();
        mysqli_report(MYSQLI_REPORT_STRICT);
    }

    return $mysqli;
}

function validateUser(string $email, string $password1, string $password2, string $name, string $lastname): bool
{
    if ($password1 != $password2) {
        return false;
    }

    if (existUser($email)) {
        return false;
    }

    return true;
}

function existUser(string $email): bool
{
    $stmt = connect()->prepare("SELECT COUNT(*) as `count` FROM `uzytkownicy` WHERE email = ?;");
    $stmt->bind_param('s', ...func_get_args());
    $stmt->execute();

    return $stmt->get_result()->fetch_assoc()['count'] > 0;
}

function addUser(string $email, string $password1, string $password2, string $name, string $lastname)
{
    $stmt = connect()->prepare("INSERT INTO `uzytkownicy` (`email`, `password`, `password2`, `name`, `lastname`) VALUES (?,?,?,?,?);");
    $stmt->bind_param('sssss', ...func_get_args());
    $stmt->execute();
}

Pożniej dajesz tylko: 


if(validUser($email, $password1, $password2, $name, $lastname)) {
    addUser($email, $password1, $password2, $name, $lastname);
}

Nie wiem, po co wrzucasz password2 do bazy.

Nie wiem, czemu nie szyfrujesz password1 w bazie

Zamiast wysylac kazdy parametr z osobna do funkcji mozna wyslac cala tablice, co jest lepsze.

Wypadaloby dodac lepszy walidator. Sprawdzić dlugość imienia, nazwiska, czy znaki są poprawne, czy email to email. etc

Nie używamy mysql_*, bo już nie jest supportowany przez php.

komentarz 7 grudnia 2017 przez Vorex444 Dyskutant (9,610 p.)
dzięki wielkie! A czy możesz mi powiedzieć gdzie jest błąd w moim przykadzie?
komentarz 7 grudnia 2017 przez xandros Nałogowiec (29,450 p.)

wyskauje mi taki błąd  
Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\xampp\htdocs\ajax\connect.php:27 Stack trace: #0 C:\xampp\htdocs\ajax\register.php(4): require_once() #1 {main} thrown in C:\xampp\htdocs\ajax\connect.php on line 27

 Nie używamy mysql_*, bo już nie jest supportowany przez php.

W twojej wersji php nie masz tej funkcji. Zmień wszystkie mysql na mysqli 

komentarz 7 grudnia 2017 przez Vorex444 Dyskutant (9,610 p.)

no jak to, mam mysqli wszdzie

 

<?php

$host = "localhost";
$user = "root";
$pass = "";
$base = "users";

$connect = new mysqli($host,$user,$pass,$base);

    //rejestracja
    if (isset($_POST['register']))
    {
        $email = $_POST['email'];
        $password1 = $_POST['password1'];
        $password2 = $_POST['password2'];
        $name = $_POST['name'];
        $lastName = $_POST['lastName'];
        // sprawdzamy czy login nie jest już w bazie

        if($password1 == $password2)
        {
            $connect->query("INSERT INTO `uzytkownicy` (`id`, `email`, `password`, `password2`, `name`, `lastname`) VALUES ('NULL', '$email','$password1','$password2','$name','$lastName')");
        }
        else
        {
            echo "Hasła nie są takie same!";
        }
    }
    
    //logowanie
    if(isset($_POST['login']))
    {
        $lemail = $_POST['lemail'];
        $lpass = $_POST['lpassword'];
        if ($connect->query("SELECT email, password FROM uzytkownicy WHERE email = '$lemail' AND password = '$lpass'"))
            {
               echo "Zalogowano";
            }
        else
            {
                echo "Wpisano złe dane";
            }
    }
?>

 

komentarz 8 grudnia 2017 przez xandros Nałogowiec (29,450 p.)
Z tego błędu wynika, że w pliku  connect.php na lini lini 27 uzywasz mysql_query.
0 głosów
odpowiedź 7 grudnia 2017 przez lolk45 Gaduła (3,210 p.)
Chyba pomyślałeś nazwę funkcji.

mysqli_query, zamiast

mysql_query.
komentarz 7 grudnia 2017 przez Vorex444 Dyskutant (9,610 p.)
nie pomogło

Podobne pytania

0 głosów
1 odpowiedź 294 wizyt
pytanie zadane 10 września 2022 w PHP przez TenOdGasnicy Nowicjusz (200 p.)
+1 głos
3 odpowiedzi 2,866 wizyt
pytanie zadane 2 kwietnia 2021 w PHP przez maciek3621 Nowicjusz (180 p.)
0 głosów
1 odpowiedź 382 wizyt
pytanie zadane 4 maja 2019 w PHP przez nibyykto Nowicjusz (140 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 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!

...