Member 14732224 Ответов: 2

Фатальная ошибка как получить правильный ответ перепробовал много решений


Fatal error: Uncaught Error: Call to undefined function VALUES() in C:\xampp\htdocs\signuptest\Signup.php:32 Stack trace: #0 {main} thrown in C:\xampp\htdocs\signuptest\Signup.php on line 32


Что я уже пробовал:

<?php
session_start();
$_SESSION['message']='';

$mysqli = new mysqli('localhost','root', '' , 'signuptest');

if ($_SERVER['REQUEST_METHOD'] == 'POST')  {
    
    //two passwords are equal to each other
    
    if($_POST['password'] == $_POST['confirmpassword']) {
        
        $firstname = $mysqli->real_escape_string($_POST['firstname']);
        $lastname = $mysqli->real_escape_string($_POST['lastname']);
        $email = $mysqli->real_escape_string($_POST['email']);
        $phonenumber = $mysqli->real_escape_string($_POST['phonenumber']);
        $password = md5($_POST['password']); //md5 hash password for security
        $avatar_path = $mysqli -> real_escape_string('image/'.$_FILES['avatar']['name']);
        
        //make sure file type
        
        if (preg_match("!image!", $_FILES['avatar']['type'])) {
           
            //copy image to images/ folder
            
            if(copy($_FILES['avatar']['tmp_name'], $avatar_path)){
                
                $_SESSION['firstname']= $firstname;
                $_SESSION['avatar']= $avatar_path;
                
                $sql = "INSERT INTO users(firstname,lastname,email,phonenumber,password,avatar)"
                .VALUES ('$firstname','$lastname','$email','$phonenumber','$password','$avatar_path');
               
                
                // if the qurey is succesful, redirect to welocme.php page, done!
                
                if ($mysqli -> query($sql) === true) {
                    $_SESSION['message'] = 'Registration Succesful! Added $username to the database!';
                    header("location: welcome.php");
                }
                
                else{
                    $_SESSION['message'] = 'User could not be added to the database';
                  
                }
            }
            
            else{
                $_SESSION['message'] = "File upload failed!";
            }
        }
        else{
            $_SESSION['message'] = "Please only upload JPG files";
        }
    }
    
    else{
        $_SESSION['message'] = "Two Passwords Doesn't match";
    }
}

Richard Deeming

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

PHP: SQL-инъекция - руководство пользователя[^]

Richard Deeming

Кроме того, использование MD5 для хранения паролей просто неправильно. MD5 был сломан с 1996 года и считается непригодным для использования с 2010 года.

Вместо этого используйте встроенные функции PHP для хранения паролей:
PHP: password_hash[^]
РНР: функцию password_verify[^]

2 Ответов

Рейтинг:
2

Patrice T

$sql = "INSERT INTO users(firstname,lastname,email,phonenumber,password,avatar)"
                .VALUES ('$firstname','$lastname','$email','$phonenumber','$password','$avatar_path');

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
1

Richard MacCutchan

Вы пропускаете двойную кавычку вокруг второй строки команды SQL. Так и должно быть:

$sql = "INSERT INTO users(firstname,lastname,email,phonenumber,password,avatar)"
. "VALUES ('$firstname','$lastname','$email','$phonenumber','$password','$avatar_path');";