Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Двойные ссылки в базе данных, созданные по заголовку

Автор вопроса: Artur LipińskiОтветов: 1

У меня проблема с двойными ссылками в моей базе данных. У меня есть форма файла php для новых сообщений. Существует $_POST['title'] Когда люди отправляют заголовок, php создает новый URL-адрес в базе данных из заголовка. Проблема в том, что пользователи отправляют заголовок, который уже существует в БД, потому что php создал двойную ссылку. Я хотел бы написать функцию, которая проверяет URL-адрес и, если он существует, создает другую ссылку для нового сообщения, например: если существует функция /posts/new_link, создайте другую, например: /posts/new_link_1. У меня был этот код:

$link = $_GET['url'];

$checkdb = mysql_query("SELECT `url` FROM `posts` WHERE `url`='$link'" ) or die("ERROR");
$howmanypost = mysql_num_rows($checkdb); //this is check links in db

if ($howmanypost = $newlinksfromtitle) {

// Here I would like the function that creates a new url to db

} else {

$newpost = "INSERT INTO `posts` (`id`, `title`, `img`, `tags`, `author`, `data`, `type`, `url`) VALUES ('', '$title', '$img', '$tags', '$author', '$data', 'img', '$url')";
$makepost = mysql_query($newpost);

}

Извините за мой плохой английский.

  • Хорошая дыра для SQL-инъекций. Marc B 13.11.2011

phpformsseohyperlink

Ответы

Ответ 1 · рейтинг 1 · nickb

Если вы знаете, что все сообщения с одинаковым заголовком имеют одинаковые URL-адреса, запросите это:

$title = mysql_real_escape_string( $title);
$result = mysql_query("SELECT `title` FROM `posts` WHERE `title`='$title'" );
$num_same = mysql_num_rows( $result);

if( $num_same > 0)
{
    // We know there's at least 1 post with the same title, so change the URL
    $url = $url . '_' . $num_same; // Or: ($num_same + 1)
}

$sql = "INSERT INTO `posts` (`id`, `title`, `img`, `tags`, `author`, `data`, `type`, `url`) VALUES ('', '$title', '$img', '$tags', '$author', '$data', 'img', '$url')";
$result = mysql_query( $sql);

Убедитесь, что вы правильно очищаете свои входные данные, чтобы ваши строки не подвергались SQL-инъекциям.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы