#php
#php
Вопрос:
У меня возникают проблемы с отображением информации профиля пользователя при нажатии на их профиль. отображаемые данные являются моими собственными при входе в систему, поэтому они не переключаются. Я не могу найти проблему и задаюсь вопросом, где я, возможно, ошибаюсь?
Таким образом, информация должна отображаться на profile.php
if (isset($_GET['username']) === true amp;amp; empty ($_GET['username']) === false) {
$username = $_GET['username'];
if (user_exists($username) === true) {
$user_id = user_id_from_username($username);
$profile_data = user_data($user_id, 'first_name', 'last_name', 'email');
?>
<h1><?php echo $profile_data['first_name']; ?> profile</h1>
<p><?php echo $profile_data['email'] ?></p>
<?php
} else {
echo 'Sorry, that user does not exist';
}
} else {
header('Location: index.php');
exit();
}
Он показывает мою информацию, а не пользователя, которого я пытаюсь просмотреть. Если я ввожу фиктивное имя пользователя в URL, оно выдает ошибку и говорит, что они не существуют.
Вот мой скрипт для извлечения данных из базы данных:
if (logged_in() === true) {
$session_user_id = $_SESSION ['user_id'];
$user_data = user_data($session_user_id, 'user_id', 'username', 'password', 'first_name', 'last_name', 'email', 'type', 'profile');
if(user_active($user_data['username']) === false) {
session_destroy();
header('Location: index.php');
exit();
}
}
$errors = array();
Я использую файл .htaccess для инициализации URL-адреса тщеславия
RewriteEngine On
RewriteCon %{REQUEST_FILENAME} !-f
RewriteCon %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /profile.php?username=$1
итак, мой URL-адрес будет выглядеть следующим образом…
вот функция для user_data
function user_data($user_id) {
$data = array();
$user_id = (int)$unser_id;
$func_num_args = func_num_args();
$func_get_args = func_get_args();
if ($func_num_args > 1){
unset($func_get_args[0]);
$fields = '`' . implode('`, `', $func_get_args) . '`';
$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE 'user_id' = $user_id"));
return $data;
}
}
И это работает, изменяя мое имя, но не переключая данные пользователя на странице профиля на данные других пользователей.
По запросу: функция user_exists()
function user_exists($username) {
$username = sanitize($username);
$query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
return (mysql_result($query, 0) == 1) ? true : false;
}
Комментарии:
1. Похоже, проблема в
user_id_from_username()
том илиuser_data()
ином. Поскольку вы не опубликовали их, мы никак не можем помочь.2. Я добавил функцию user_data
3. подождите, вы говорите, что показывать вашу информацию при входе в систему неправильно? что-то я не понимаю, я думаю, я думал, что это будет правильное поведение
4. Эхо
user_id_from_username($username)
.5.
error_reporting
Теперь установите уровень, приемлемый для отладки.
Ответ №1:
Попробуйте это
function user_data($user_id, $fields = '*') {
// type cast to int
$user_id = (int) $user_id;
// if an array is passed, we implode the array to get fields,
// otherwise we return all rows
if (is_array($fields))
{
$fields = implode('`, `', $fields) . '`';
}
//build query, with LIMIT 1 , I assume username is unique
$qry = "SELECT {$fields} FROM `users` WHERE 'user_id' = {$user_id} LIMIT 1";
$sql = mysql_query($qry);
$result = mysql_fetch_assoc($sql);
// if we have a result, return it, otherwise return false
return (mysql_num_rows($sql) == 1) ? $result : false ;
}
будет использоваться:
$profile_data = user_data($user_id, array('user_id', 'username', 'password', 'first_name', 'last_name', 'email', 'type', 'profile'));
или
$fields = array(
'user_id',
'username',
'password',
'first_name',
'last_name',
'email',
'type',
'profile'
);
$profile_data = user_data($user_id, $fields);
Комментарии:
1. Кроме того, для новой разработки, если вы можете, используйте
PDO
mysqli_*
функции или.2. Используемая часть … это происходит profile.php ? что я заменяю?
3. У вас вообще есть skype?