Проблема со страницей регистрации - PullRequest
0 голосов
/ 18 июня 2011

Моя регистрационная форма и PHP скрипт: оба расположены на одной странице: index.php. У меня 4 вопроса:

  1. Код php успешно добавляет все информация в БД, но после клика отправить кнопка, появляется новая открытая страница пустой. Функция не возвращается к предыдущая страница после отправки формы
  2. При регистрации как узнать что будет идентификатором регистрации пользователя? я использовал $new_user_id = $db->insert_id(); для этой цели но это не работает правильно. Также формула "последний автоинкремент + 1" ненадежный. Потому что в гонке условия нет гарантии что другой пользователь не будет вставлять новый запись в то время как ваша функция выполнена это работает. Есть идеи?
  3. Как добавить новое поле в форму на лету и хранить их значение в дБ, как тот? http://prntscr.com/2303n (Contacts.google.com)
  4. И, наконец, я добавил

    foreach ($_POST as $key => $value) { 
      $_POST[$key] = mysqli_real_escape_string($value);
    }
    

    вверху страницы, но он опустошается некоторые значения. Какие ценности я должен дезинфицировать?

Мой код

 if($submit) {
    $sql = "INSERT INTO usr_table (fullname, dob, school, add_date, phone, adress, info) VALUES ('$fullname', '$dob', '$school', CURDATE(), '$phone', '$adress', '$info')";

$result = $db->query($sql) or die(mysqli_errno());

$new_user_id =  $db->insert_id();

$friend_arr = explode(',', $friends);

foreach($friend_arr as $friend_name) {
    $friend_name = trim($friend_name);

    if (empty($friend_name)) {
        continue;
    }

$sql = "SELECT id FROM usr_table WHERE `fullname` = '$friend_name' LIMIT 1";
$result = $db->query($sql);

    if (!$result) {
        echo "$sql failed " . mysqli_errno();
        exit;
    }

    if (mysqli_num_rows($result) == 0) {
        echo "Bazada ".$friend_name ." adlı adam yoxdur ";
    }

    $data = $db->fetch_array($result);
    $friend_id = $data['id'];

    $sql = "INSERT INTO usrfrnd_table (`user_id`, `friend_id`) VALUES ('$new_user_id', '$friend_id')";
    $success=$db->query($sql) or die(mysqli_errno());
    if($success) {header('Location: index.php');}
    else {die(mysqli_errno());}
}
}

Ответы [ 2 ]

3 голосов
/ 18 июня 2011

Вопрос 1

Вы должны опубликовать PHP / HTML / любой код, который этот сайт использует для отображения в вашем сообщении.Если вы используете PHP и сайт пуст, возможно, произошла ошибка, но вы деактивировали сообщение об ошибке.Вы должны активировать его для отладки предложений.

Вопрос 2

В своем запросе вы просто помещаете пользовательские значения в строку SQL и выполняете ее в базе данных.,Это делает ваш код очень вероятным объектом для SQL-инъекций.Что вы должны сделать:

  1. Создать PreparedStatement для вашей вставки.
  2. Привязать параметры (= ввод пользователя) кit.
  3. Выполните его в базе данных.
  4. Получите сгенерированный идентификатор из последней операции вставки.

Вопрос 3

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

Вопрос 4

Если вы используете PreapredStatement (как я упоминал в вопросе 2), вы можетеизбавь это полностью.

0 голосов
/ 18 июня 2011

Вам необходимо указать свою ссылку mysqli в качестве первого параметра для mysqli_real_escape_string:

foreach($_POST as $key => $value){
    $_POST[$key] = mysqli_real_escape_string($db, $value);
}

Кроме того, все входные данные пользователя должны быть обработаны правильной функцией: htmlspecialchars при выводе на страницу и mysqli_real_escape_string при отправке пользовательских данных в базу данных.

Ad @ m

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...