Fexxi Ответов: 2

Попытка вставить переменную сеанса в таблицу - ничего не происходит


''''
     function AddUsertoDatabase(){
         global $connection;
         
         $username = $_POST['username'];
         
         $query = "INSERT INTO spiders (username) VALUES ('$username')";
         $result = mysqli_query($connection, $query);
         if($result){
             echo "added";
// the above echo added for testing purposes from my first plan
         }
     }
    }    


Зовущий:

''''
if(isset($_POST['login'])){
session_start();{
    LoginUser();
    
    
    $_SESSION['username'] = $_POST['username'];
    AddUsertoDatabase();
}    
   
}


Я пытаюсь вставить имя пользователя $_SESSION в таблицу, чтобы использовать "WHERE username", когда речь заходит о размещении других данных в таблице. Есть идеи, что здесь не так?

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

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

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

Я пробовал добавлять и удалять фигурные скобки на всякий случай, но все равно никакой радости.

Заранее спасибо за ваше время.

2 Ответов

Рейтинг:
17

MadMyche

Я не эксперт в PHP, но могу сказать вам, что вы, возможно, захотите переосмыслить это; похоже, он созрел для этого. SQL-инъекция

На этой странице учебника они используют mysqli_real_escape_string чтобы "избежать" любых потенциальных вредных персонажей.
Как вставить данные в таблицу базы данных MySQL с помощью PHP - Tutorial Republic[^]

В руководстве по PHP действительно есть страница, которая описывает различные сценарии и способы их смягчения.
PHP: SQL-инъекция - руководство пользователя[^]


[no name]

Я понимаю о SQLi и буду исправлять все это, прежде чем загрузить его на свой сервер с помощью real_escape_string. Мне сказали, что SQL-инъекцию можно остановить и с помощью нескольких модов Apache.

MadMyche

1. Проверьте значение переменной Session
2. Проверьте журнал приложений
3. Проверьте журнал своей базы данных.
Пока real_escape_string это приемлемо, ИМХО вам лучше с параметрами

Рейтинг:
1

Patrice T

Цитата:
Есть идеи, что здесь не так?

У вас должен быть журнал ошибок на сервере.
$query = "INSERT INTO spiders (username) VALUES ('$username')";

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


[no name]

Я понимаю о SQLi и буду исправлять все это, прежде чем загрузить его на свой сервер с помощью real_escape_string. Мне сказали, что SQL-инъекцию можно остановить и с помощью нескольких модов Apache.