2015-07-19 5 views
-1

Я пытаюсь преобразовать свой код из MySQL в MySQLi. Я пытаюсь защитить от SQL-инъекции. Я научился не использовать pre_replace. Я пробовал разные параметры, как указано в моем коде ниже. Единственный другой вариант, который, похоже, работает, - это строка кода, в которой есть mysql_escape_string ниже. Я пробовал mysql_real_escape_string и $ db-> real_escape_string, как указано ниже. Однако это приводит к тому, что веб-сайт перестает функционировать вместе. Однако я не получаю сообщение об ошибке. Мне было интересно, почему первая строка кода для $ FName работает, и следующие две строки кода не будут работать. Я потратил около 2 часов, пытаясь все, что мог придумать. Извините, если этот вопрос является основным, но я не могу найти ответ. Любая помощь будет оценена по достоинству.Функция mysql_real_escape_string не работает

<?php require "connect.php"; ?> 
<?php 
    if(isset($_POST['Register'])) { 
    session_start(); 
    $FName = mysql_escape_string($_POST['FirstName']); 
    $LName = mysql_real_escape_string($_POST['LastName']); 
    $Email = $db->real_escape_string($_POST['Email']); 
    $UName = preg_replace('#[^A-Za-z0-9]#i', '', $_POST ["UserName"]);   

$PW = preg_replace('#[^A-Za-z0-9]#i', '', $_POST ["Password"]); 
$sql = $con->query("INSERT INTO BD (FirstName, LastName, Email, UserName, Password) Values('{$FName}', '{$LName}', '{$Email}', '{$UName}','{$PW}')"); 

    header('Location: login.php'); 
} 

>

+1

Дополнительная информация о вашем соединении необходима. Является ли '$ db' фактически объектом соединения MySQLi? Что имеется в 'connect.php'? –

+2

'mysql_real_escape_string()' будет работать только при активном подключении к базе данных. Наконец, если ваш код ничего не делает, он предполагает, что у вас нет 'display_errors'. Всегда при разработке и тестировании кода в верхней части вашего скрипта: 'error_reporting (E_ALL); ini_set ('display_errors', 1); 'и отключить' display_errors' снова в вашем живом коде. –

+0

Горе 'mysql_escape_string()' работает, когда соединение с базой данных не создано, что объясняет, что один работает. Так что это действительно так, чтобы проверить, что любое соединение, которое вы пытались сделать в 'connection.php', является допустимым объектом MySQLi. –

ответ

1

Вы заявили в комментариях, что это ваше соединение:

$con =new mysqli ("local host", "name", "PW", "users") 

пока вы используете $db в качестве переменной для $Email. Это должно быть $con.

Плюс, local host должно быть одним словом, localhost.

$con =new mysqli ("localhost", "name", "PW", "users") 

при проверке на наличие ошибок для него:

$con =new mysqli ("localhost", "name", "PW", "users"); 

if ($con->connect_error) { 
    die('Connect Error (' . $con->connect_errno . ') ' 
      . $con->connect_error); 
} 

Тогда они никогда не будут работать:

$FName = mysql_escape_string($_POST['FirstName']); 
$LName = mysql_real_escape_string($_POST['LastName']); 

как вы смешиваете MySQL API. Эти различные API/функции не смешиваются друг с другом. Вам нужно использовать то же самое от соединения с запросом.

В том числе:

$Email = $db->real_escape_string($_POST['Email']); 

Таким образом, весь этот блок:

$FName = mysql_escape_string($_POST['FirstName']); 
$LName = mysql_real_escape_string($_POST['LastName']); 
$Email = $db->real_escape_string($_POST['Email']); 

должен быть изменен на:

$FName = $con->real_escape_string($_POST['FirstName']); 
$LName = $con->real_escape_string($_POST['LastName']); 
$Email = $con->real_escape_string($_POST['Email']); 

Добавить error reporting в начало файла (ы) ich поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

Sidenote: Сообщения об ошибках не должно быть сделано только в постановке, и никогда производства.

+1

Мой друг. Я не могу вас поблагодарить. Несмотря на то, что я не был совершенно ясен в своем описании проблемы, вы поняли решение. Добавив $ con>, он сделал трюк. Моя проблема в том, что я читаю так много учебников, которые, кажется, предполагают, что я знаю, что у каждого есть. Мне просто нужно было увидеть пример, и твое было совершенным. Спасибо! –

+0

@ScottSchoener Добро пожаловать Скотт. Рад, что я помог, * ура * –

Смежные вопросы