Перейти к публикации
a-droid

PHP Не работает while после ajax запроса

Рекомендованные сообщения

a-droid

Здравствуйте, в общем есть приложение, всего две страницы - главная и настройки.Так вот по клику на кнопку настроек я поставил такую функцию :

function openSettings(){
$.get("index.php",{do:"settings"},function(data){
$('body').html(data);
});
}

В index.php стоит вот что:

include('db_connector.php');
include 'modules/user_info.php';
include 'modules/user_head.php';
 
switch($do){
 
case '':
 
$result=$mysqli->query("SELECT * FROM users WHERE uid='".$uid."'");
$i=-1;
$uid_arr=Array();
while($row=$result->fetch_assoc()){
$i++;
$uid_arr[i]=$row['uid'];
}
if(in_array($uid,$uid_arr)){
include "main.php";
}else{
$mysqli->query("INSERT INTO users(uid,rate) VALUES(".$uid.",0)");
include "modules/settings.php";
}
 
break;
 
case 'settings':
include "modules/settings.php";
break;
 
} 

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

$resultm=$mysqli->query("SELECT * FROM users WHERE uid='".$uid."'");
$i=-1;

while($row=$resultm->fetch_array()){
$i++;
$agew=$row['age'];
$fname=$row['fname'];
$lname=$row['lname'];
$city_n=$row['city'];
$country=$row['country'];
$photo=$row['photo'];
$country_id=$row['country_id'];
$regionn=$row['region'];
$photoo200=$row['photo_200'];
}

Если сделать вывод echo $i , то на главной странице он вернет 0,а в настройках -1, в чем может быть проблема ? Буду вам очень благодарен за любую помощь.

 

Попробовал так сделать :

    $arrresu=$resultm->fetch_array();
    echo $arrresu['age'];

Опять на главной робит,а в настройках не фурычит,значит почему-то пусто в выборке =(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TheAndrey
$.get("index.php",{do:"settings"},function(data){

do заключи в кавычки, т.к. это системное слово.

В index.php что-то я не вижу, чтобы переменной $do присваивалось значение.

И $uid тоже откуда берётся?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
volfing

@Andrey,

Отвечу за ТС(а),т.к вместе делаем....

$uid=$_GET['viewer_id'];
$do=$_GET['do']; 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TheAndrey

@volfing, лучше $_REQUEST использовать (чтобы при отправке методом POST работало).

А $_GET я никогда не пользуюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
volfing

@Andrey,Да get просто быстрее, ну ладно, сейчас попробую через post сделать, отпишусь.



@Andrey,Поменял на post, тоже самое :( 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sneakquie

@volfing, то же самое и должно было быть, так как Вы отправляете GET запросы с помощью AJAX, а на back-end'e принимаете так же GET запросы. Так что от того, что вы измените GET на REQUEST ничего не изменится. Andrey просто имел ввиду, что REQUEST удобнее тем, что можно посылать сразу и GET и POST запросы.

$uid=$_GET['viewer_id'];

 

По моему тут стоит фильтровать данные, так как метод query() класса mysqli не экранирует спецсимволы, это написано на php.net, стоит почитать.

Посмотрел, в этой части кода логика пи**ец какая гнустная

$result=$mysqli->query("SELECT * FROM users WHERE uid='".$uid."'");
$i=-1;
$uid_arr=Array();
while($row=$result->fetch_assoc()){
$i++;
$uid_arr[i]=$row['uid'];
}
if(in_array($uid,$uid_arr)){
include "main.php";
}else{
$mysqli->query("INSERT INTO users(uid,rate) VALUES(".$uid.",0)");
include "modules/settings.php";
}

 

То есть Вы выбираете `uid` по параметру `uid`, если кол-во результатов > 0, то в отдельный массив записываем УЖЕ ИЗВЕСТНЫЙ `uid`, чтобы потом проверить его наличие в этом массиве. Это жопа! Если это способ проверки поля на существование, то он довольно оригинальный, а если `uid` еще и unique, то логики тут еще меньше.

Вот как можно было переписать этот кусок

if(($uid = intval($_GET['id'])) <= 0) {
  die('Wrong id');
}
elseif($mysqli->query("SELECT 1 FROM users WHERE `uid` = {$uid}")->num_rows > 0) {
  include 'main.php';
}
else {
  $mysqli->query("INSERT INTO users(uid,rate) VALUES({$uid},0)");
  include 'modules/settings.php';
}

P.S. Дичайше извиняюсь, если я ошибся

Изменено пользователем sneakquie

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
volfing

@sneakquie,Пожалуйста, не нужно говорить как писать код и т.д И речь идет не про этот участок кода, хреновая логика, ок, нету практики, но речь не об этом. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TheAndrey

@volfing, только потом не жалуйтесь, что Вас "взломали".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
volfing

@Andrey,Аха, хорошо. 



Тему можно закрывать, вопрос решен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...