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

Есть вопрос? Задай его профессиональным веб-мастерам, SEO и другим специалистам!

  • 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...