Я продолжаю получать эти ошибки, и у меня возникают проблемы с исправлением этого, я не очень хорош в 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. Это не рекомендуется, поскольку он больше не считается безопасным для использования в качестве функции сохранения пароля.
Используйте одно из следующих действий:
crypt()
bcrypt()
scrypt()
password_hash()
PHP 5.5. Другие ссылки:
Важное примечание о длине столбца:
Если и когда вы решите использовать 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;