Jump to content

Гуру php нужна небольшая помощь


Recommended Posts

Привет всем! В общем вот код у меня, который выводит данные из таблицы по id пользователя через запрос из браузера user.php?id=1:

<?php

$id = mysql_real_escape_string($_GET['id']);
$data = mysql_query("SELECT * FROM users WHERE id = '$id'") or die(mysql_error());
$row = mysql_fetch_assoc($data);


    $id = isset($_GET['id']) ? (int)$_GET['id']: false;
    if(!isset($_GET['id'])){echo "Right";}
    elseif(!(int)($_GET['id'])){echo "The id does not exist";}else{
    $id = mysql_real_escape_string($_GET['id']);      }
    $sql = "SELECT * FROM `users` WHERE `id` = '$id'";
    $result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);

    if ( mysql_num_rows( $result ) )
    {
        $row = mysql_fetch_assoc($result);
        
?>

Хотелось бы сделать, чтобы была возможность также вывода данных через запрос логина из браузера типа так: user.php?login=user

Какие значения нужна дополнить в код? Спасибо!

Link to post
Share on other sites
  • VIP
$id = !empty( (int)$_GET['id'] ) ? (int)$_GET['id'] : false;
$login = !empty( $_GET['login'] ) ? mysql_real_escape_string( $_GET['login'] ) : false;

if ( $id ) $query_where = "`id` = '$id'";
if ( $login && !$id ) $query_where = "`login` = '$login'";
if ( !$login && !$id ) die();

$sql = "SELECT * FROM `users` WHERE $query_where";
$result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);

Я так понимаю, что Ваш код вырван из общего кода, часть из этого непонятно к чему относится. Переписал так. ID идёт в приоритете, так как там передаётся численное значение, то оно безопаснее, в первую очередь работаем с ним. Если ID нет, но есть login, работает с ним (тут желательно для валидации применять более сложные фильтры от разного рода sql-инъекций и так далее). Если нет ни того, ни другого - прерывать выполнение скрипта.

Link to post
Share on other sites

Привет всем! В общем вот код у меня, который выводит данные из таблицы по id пользователя через запрос из браузера user.php?id=1:


Хотелось бы сделать, чтобы была возможность также вывода данных через запрос логина из браузера типа так: user.php?login=user

Какие значения нужна дополнить в код? Спасибо!

Если по колхозному, то так

$query = false;
$queryString = 'SELECT * FROM `users` WHERE';
$error='';

if(isset($_GET['id'])) {
	$id = (int)$_GET['id'];
	if(!$id) {
		$error = "Id isn't number \n";
	} else {
		$queryString .= " `id`='".$id."'";	
		$query = true;	
	}
}
    
if(isset($_GET['login'])) {
	$login = mysql_real_escape_string($_GET['login']);
	if(strlen($login)>0) {
		$error = "Login is empty \n";
	} else {
		if($query) $queryString .= ' and';
		$queryString .= " `login`='".$login."'";	
		$query = true;	
	}
}   
if(!$query){
	die($error!=''?$error:'Please send id or login');
}
$result = mysql_query($queryString) or die(mysql_error() ."<br/>". $sql);

if ( mysql_num_rows( $result ) ){
        $row = mysql_fetch_assoc($result);
}

Не проверял, может где опечатался

Link to post
Share on other sites

В общем отказался от этой идеи совмещать файл ... и решил сделать просто отображение данных через запрос по логину ... ну всё переделал, но всё равно сообщает что пользователя нет такого в базе данных, сделал так, может посмотрите, где у меня глаза не видят ошибку?

<?php

$login = mysql_real_escape_string($_GET['login']);
$data = mysql_query("SELECT * FROM users WHERE login = '$login'") or die(mysql_error());
$row = mysql_fetch_assoc($data);


    $login = isset($_GET['login']) ? (int)$_GET['login']: false;
    if(!isset($_GET['login'])){echo "Right";}
    elseif(!(int)($_GET['login'])){echo "The user does not exist";}else{
    $login = mysql_real_escape_string($_GET['login']);      }
    $sql = "SELECT * FROM `users` WHERE `login` = '$login'";
    $result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);

    if ( mysql_num_rows( $result ) )
    {
        $row = mysql_fetch_assoc($result);
        
?>
Link to post
Share on other sites

Сделай

    $sql = "SELECT * FROM `users` WHERE `login` = '$login'";
    var_dump($sql);exit();
    $result = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);

И отправь ручками запрос

The user does not existstring(41) "SELECT * FROM `users` WHERE `login` = '0'"

 

Но пользователь однозначно в таблице есть )

Link to post
Share on other sites

Ну так вы не видите, что у вас в запросе скорей всего отправляется не логин а id

Что-т не вижу ((( ... везде вроде поменял id на login

запрос делаю так user_info.php?login=Admin

Но ничего не работает

Link to post
Share on other sites

Что-т не вижу ((( ... везде вроде поменял id на login

запрос делаю так user_info.php?login=Admin

Но ничего не работает

Весь кода покажите, у вас вместо логина передается 0

"SELECT * FROM `users` WHERE `login` = '0'"

Link to post
Share on other sites

Весь кода покажите, у вас вместо логина передается 0

"SELECT * FROM `users` WHERE `login` = '0'"

Отправил в личку ... да я вижу, что ноль и это странно для меня ... просто у меня есть страница, где выбор по id ... этот код я и пытаюсь переделать, но только выбор по логину, все, что связано с id я вроде исправил

Link to post
Share on other sites

The user does not existarray(1) { ["login"]=> string(5) "Admin" }

А точно, тут косяк

 

$login = isset($_GET['login']) ? (int)$_GET['login']: false;

исправь

 

$login = isset($_GET['login']) ? $_GET['login']: false;

 

и замени везде 

(int)$_GET['login']  на $_GET['login'

 

и вообще там косяков много, я писал код выше, его используй

Link to post
Share on other sites

А точно, тут косяк

 

$login = isset($_GET['login']) ? (int)$_GET['login']: false;

исправь

 

$login = isset($_GET['login']) ? $_GET['login']: false;

 

и замени везде 

(int)$_GET['login']  на $_GET['login'

 

и вообще там косяков много, я писал код выше, его используй

Спасибо! Вроде заработало ... а так учимся ) просто код по id работает корректно ... решил переделать под login и не понимал, почему не пашет! а fnhb,en ште - он вообще зачем нужен был?

Link to post
Share on other sites

Спасибо! Вроде заработало ... а так учимся ) просто код по id работает корректно ... решил переделать под login и не понимал, почему не пашет! а fnhb,en ште - он вообще зачем нужен был?

Он преобразует значение в тип Integer 

Link to post
Share on other sites

Он преобразует значение в тип Integer 

Понятно ) Это для меня лес пока что )

Модеры - тему можно закрывать, проблема решена )

Спасибо тем, кто помогал и большое спасибо e2site

Link to post
Share on other sites

Интересно, а чем Вас мой код в самом начале не устроил?)))

Ты тут не помощник))))))  :lol:

 

Пропустил ТС твой код вероятно, а может быть просто не стал пробовать  :mellow:

Link to post
Share on other sites

Интересно, а чем Вас мой код в самом начале не устроил?)))

 

Да не, всё устроило, но я действительно не стал прорабатывать, так как хотелось всё же понять, что не так в моём было дело + там встроено изменение данных через формы ), поэтому не стал! Но всё равно и за Ваше сообщение спасибо! Я его отработаю, но уже на чём-нить другом )

 

Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...