mysqli_real_escape_string () ожидает ровно 2 параметра, 1 при условии Fatal Error

Я продолжаю получать эти ошибки, и у меня возникают проблемы с исправлением этого, я не очень хорош в PHP, потому что все еще учился. Я работаю над формой регистрации и использую PHP 5.6. Я посмотрел на другие ответы на старые вопросы, но мне это не удалось.

Вот мой код:

<?php session_start(); if (isset($_SESSION['user']) != "") { header("Location: index.html"); } include_once 'dbconnect.php'; if (isset($_POST['signup'])) { $fname = mysqli_real_escape_string($_POST['fullname']); $tphone = mysqli_real_escape_string($_POST['telephone']); $uemail = mysqli_real_escape_string($_POST['email']); $urole = mysqli_real_escape_string($_POST['role']); $upass = md5(mysqli_real_escape_string($_POST['upass'])); $uname = trim($uname); $tphone = trim($tphone); $email = trim($email); $urole = trim($role); $upass = trim($upass); // email exist or not $query = "SELECT email FROM users WHERE email='$uemail'"; $result = mysqli_query($query); $count = mysqli_num_rows($result); // if email not found then register if ($count == 0) { if (mysqli_query("INSERT INTO users(firstname,telephone,email,role,pass) VALUES('$fname','$tphone','$uemail','$urole',$upass')")) { ?> <script>alert('successfully registered ');</script> <?php } else { ?> <script>alert('error while registering you...');</script> <?php } } else { ?> <script>alert('Sorry Email ID already taken ...');</script> <?php } } ?> 

Ошибки, которые я продолжаю получать:

Предупреждение: mysqli_real_escape_string () ожидает ровно 2 параметра, 1 заданных в C: \ Apache24 \ htdocs \ Timewise \ landing \ login.php в строке 12

Предупреждение: mysqli_real_escape_string () ожидает ровно 2 параметра, 1 заданных в C: \ Apache24 \ htdocs \ Timewise \ landing \ login.php в строке 13

Предупреждение: mysqli_query () ожидает не менее двух параметров, указанных в C: \ Apache24 \ htdocs \ Timewise \ landing \ login.php в строке 18

Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, null указан в C: \ Apache24 \ htdocs \ Timewise \ landing \ login.php в строке 19

Предупреждение: mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, null указан в C: \ Apache24 \ htdocs \ Timewise \ landing \ login.php в строке 21

Не могли бы вы помочь мне в этом, мне нужно знать, как я должен это исправить.

Чтобы технически ответить на это, обе эти функции требуют передачи db-соединения и в качестве первого параметра, в соответствии с руководствами:

Затем в комментариях вы указываете, что используете PDO для подключения.

Эти различные API-интерфейсы MySQL не смешиваются. Вы должны использовать тот же самый из подключения к запросам. Поэтому, если вы хотите продолжить использование PDO-соединения, вам нужно будет использовать функции PDO для запроса, а не mysqli_* .

А для подготовленных PDO заявлений:

Также проверьте наличие ошибок:

Пароли

Я также заметил, что вы пытаетесь хранить пароли MD5. Это не рекомендуется, поскольку он больше не считается безопасным для использования в качестве функции сохранения пароля.

  • Если вы намереваетесь продолжать LIVE с этим, не делайте этого.

Используйте одно из следующих действий:

  • CRYPT_BLOWFISH
  • crypt()
  • bcrypt()
  • scrypt()
  • НА ОТКРЫТОМ
  • PBKDF2
  • PBKDF2 на PHP.net
  • Функция password_hash() PHP 5.5.
  • Пакет совместимости (если PHP <5.5) https://github.com/ircmaxell/password_compat/

Другие ссылки:

  • PBKDF2 для PHP

Важное примечание о длине столбца:

Если и когда вы решите использовать password_hash() или crypt, важно отметить, что если длина текущего столбца пароля меньше 60, его нужно будет изменить на это (или выше). В руководстве предлагается длина 255.

Вам потребуется ALTER length вашей колонки и начать с нового хеша, чтобы он вступил в силу. В противном случае MySQL будет терпеть неудачу.


Как я уже сказал:

if (isset($_SESSION['user']) != "") даст вам ложный результат.

Синтаксис: if isset AND equals to , а не if isset equals to которому это то, что в настоящее время интерпретируется как.

Использование:

if (isset($_SESSION['user']) && $_SESSION['user'] != "")

Что касается ваших POST-массивов.

Убедитесь, что форма HTML, которую вы используете, использует метод POST и что все элементы имеют соответствующие атрибуты имени.

Т.е.: <input type="text" name="fullname"> и т. Д.

Обратите внимание, что name="fullname" и name="FullName" являются двумя разными животными.

  • Они чувствительны к регистру.

Также предлагается добавить exit; после каждого заголовка, иначе ваш код может продолжить выполнение.

 header("Location: index.html"); exit;