Как создать URL профиля для пользователя, используя $ _GET ['id'] - PullRequest
1 голос
/ 04 августа 2010

Может ли кто-нибудь сообщить мне, правильно ли я выполняю следующие шаги:

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

$sql="INSERT INTO Members (fldFullName, fldEmail, Password, Gender, DOB)
VALUES
('$fname','$email','$pass', '$gender', '$date')";

В частности, когда я писал приведенный выше код, я был немного новичком в PHP / MySQL и до сих пор.Поэтому все поля, перечисленные выше, я сделал вручную в таблице через phpmyadmin .Кроме того, я также добавил поле ID вручную через phpmyadmin , в качестве первого поля с автоинкрементом и первичным ключом .Почему я сделал это вручную, я не могу вспомнить причину.Но я почти уверен, что это может быть причиной возникновения проблем.

Что я пытаюсь сделать, так это то, что когда пользователь регистрируется на сайте, я хочу, чтобы для него / нее был создан URL профиля.Например, поле в таблице может называться ProfileURL, тогда как фактическое значение может быть http://www.domain.com/profile.php?id=1, где id наследуется от фактического ID в таблице.Как я могу сделать это с моим кодом выше?Я сделал что-то не так, когда решил сохранить все поля вручную через phpmyadmin?Примечание: я также создавал таблицы, базы данных, поля вручную через phpmyadmin.Тем не менее, его значения INSERT редактируются автоматически, конечно.Я даже на правильном пути?

Спасибо.

Ответы [ 4 ]

1 голос
/ 04 августа 2010

Как указано выше, вам не нужно сохранять URL профиля в базе данных. Я предполагаю, что все URL профиля будут следовать некоторой стандартной форме (т.е. www.example.com/profile.php?id=1)?

Что ж, если вы сохранили все эти данные в своей базе данных и решили, что собираетесь изменить формат на что-то вроде www.example.com/profile/1, у вас будет много устаревших данных в вашей базе данных. Вам нужно будет просмотреть каждую запись и обновить ее, а это может быть опасно для таблицы базы данных, скажем, с миллионами строк.

Следовательно, решение состоит в том, чтобы иметь скрипт, который принимает параметр. Скажи profile.php. Как и выше, вы должны проверить профиль, используя данные в массиве $_GET:

<?php
if (isset($_GET['id'])) {
    $id  = mysql_real_escape_string($_GET['id']);
    $sql = "SELECT * FROM members WHERE id = '$id' LIMIT 1";
    $res = mysql_query($sql);
    if (mysql_num_rows() > 0) {
        $member = mysql_fetch_object($res);
        // handle displaying of member's profile here
    }
    else {
        // member does not exist with ID
    }
}
?>

Таким образом, если вы решите изменить имя сценария или использовать URL-адреса, удобные для поисковых систем, вам не нужно менять структуру базы данных.

1 голос
/ 04 августа 2010

Вы делаете правильно.Теперь напишите SQL следующим образом:

$sql = sprintf("SELECT * FROM Members WHERE ID=%d", mysql_real_escape_string($_GET['id']));

И вы сможете получать данные пользователя по $ _GET ['id'].Не забудьте использовать mysql_real_escape_string для защиты ваших запросов от внедрения SQL.sprintf также полезен для замены правильных типов данных, таких как числа или строки.

1 голос
/ 04 августа 2010

Вам не нужно сохранять URL профиля.
Вы должны построить его динамически.
Поскольку большая часть URL остается самой, меняется только id.
Итак, получите идентификатор из базы данных и добавьте его в URL.

1 голос
/ 04 августа 2010

В profile.php проверьте $_GET['id'], затем, если он существует, используйте запрос SELECT для того же ID в базе данных. Это будет выглядеть примерно так.

<?php
if (isset($_GET['id']))
{
    $id = (int) $_GET['id'];
    $sql = 'SELECT * FROM Members WHERE ID = ' . $id;

    // Then the rest of the code to check the results goes here
}
?>

Пользователь с идентификатором 1 будет profile.php?id=1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...