У меня есть две формы для регистрации. С первого шага я подбираю адрес электронной почты и имя пользователя, и со второго шага хочу забрать первое имя и фамилию и добавить его в БД. Но проблема в том, что переменные, которые у меня есть с первой формы POST
, а точнее, $bridge_username
, не доступны в инструкции IF ниже (первый снизу). Дело в том, что они видны где угодно, но не внутри этого конкретного заявления IF
. Я пробовал все, включая сеансы. Я могу ясно видеть, что переменная все еще существует (с использованием vardump
или просто echo
), везде, но не там, где мне это нужно ... Буду рад услышать ваши советы.PHP-переменная не видна внутри оператора IF
$bridge_email = $_POST['email'];
$bridge_username = $_POST['username'];
$bridge_pass = $_POST['password'];
$bridge_pass_conf = $_POST['passconf'];
$bridge_terms = $_POST['terms'];
$bridge_pass_counted = strlen($bridge_pass);
$bridge_username_counted = strlen($bridge_username);
if (isset ($_POST['email']) AND isset ($_POST['password']) AND isset ($_POST['passconf']) AND isset ($_POST['username'])) {
if ($bridge_email != '' AND $bridge_pass != '' AND $bridge_pass_conf != '' AND $bridge_username != '' AND $bridge_terms != '') {
if ($bridge_pass == $bridge_pass_conf) {
if ($bridge_pass_counted >= 33 OR $bridge_pass_counted <= 5) {
} else {
if ($bridge_username_counted >= 65 OR $bridge_username_counted <= 3) {
} else {
if (is_numeric(substr($bridge_username, 0, 1))) {
} else {
//CHECK IF USERNAME OR EMAIL ALREADY EXIST
$checkreguser = $mysqli->query("SELECT username FROM `engine_users` WHERE username = '$bridge_username' OR email = '$bridge_email' LIMIT 0, 1 ");
$checkreguser = $checkreguser->fetch_assoc();
if ($checkreguser == '') {
//CREATING A NEW USER
$mysqli->query("INSERT INTO `users` (`id`, `username`, `password`, `email`, `fname`, `lname`, `company`, `address`, `city`, `state`, `zip`, `country`, `currency`, `phone`, `vat`, `userlevel`, `created`, `notes`, `lastlogin`, `lastip`, `active`) VALUES\n"
. "(NULL, '$bridge_username', '1411678a0b9e25ee2f7c8b2f7ac92b6a74b3f9c5', '$bridge_email', '', '', NULL, '', '', '', '', '', '', '', NULL, 5, '2011-05-01 18:10:14', '', '2013-04-19 22:25:11', '127.0.0.1', 'y')");
}}}}}}}
$bridge_fname = $_POST['1_1_3'];
$bridge_lname = $_POST['1_1_4'];
if (isset ($_POST['1_1_3']) AND isset ($_POST['1_1_4'])) {
$mysqli->query("UPDATE `users` SET `fname` = '$bridge_fname',`lname` = '$bridge_lname' WHERE `users`.`username` = '$bridge_username'");
}
Возможно, это не ваша проблема, но вы обращаетесь к некоторым переменным '_POST', прежде чем вы обнаружите, что они существуют. Почему бы не изменить порядок? И что заставляет вас говорить «не видно»? Не могли бы вы показать результат vardump непосредственно перед и сразу после операторов if? – Floris
Значения внутри одинарных кавычек не расширяются ... У вас есть '' $ bridge_username '' в одинарных кавычках, что делает его строкой, а не переменной, если я не ошибаюсь. – Floris
Ваш скрипт может быть уязвим для SQL-инъекций. Обязательно проверьте и [правильно обработайте предоставленные пользователем параметры] (http://stackoverflow.com/q/60174/53114). – Gumbo