Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
 Аватар для posthuman
10 / 10 / 2
Регистрация: 26.09.2009
Сообщений: 93

чтение id url'a и добавление его в базу

11.04.2011, 10:24. Показов 2088. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Вот имеется страница с url view_article.php?id=12. id получается в коде отображения страницы.
В БД таблица с новостями имеет поле id.
PHP
1
2
if (isset($_GET['id'])) {$id = $_GET['id'];}
$select_article = mysql_query ("SELECT * FROM `article` LEFT JOIN article_section ON article.section = article_section.id_section WHERE `id`='$id'");
(отображается новостная страница)

В конце новости отображается комментрарии и поля для добавления. Класс обработки комментария:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
class Comment
{
    private $data = array();
    //Конструктор
    public function __construct($row)
    {
        $this->data = $row;
    }
    //Данный метод выводит разметку HTML для комментария
    public function markup()
    {
        //Устанавливаем псевдоним, чтобы не писать каждый раз $this->data:
        $d = &$this->data;
        
        $link_open = '';
        $link_close = '';
        //Если был введн URL при добавлении комментария, определяем открывающий и закрывающий теги ссылки
        if($d['url']){
            $link_open = '<a href="'.$d['url'].'">';
            $link_close =  '</a>';
        }
        //Преобразуем время в формат UNIX:
        $d['dt'] = strtotime($d['dt']);
        
        return '
            <div class="comment">        
                <div class="name">'.$link_open.$d['name'].$link_close.'</div>
                <div class="date" title="Added at '.date('H:i \o\n d.m.Y',$d['dt']).'">'.date('d.m.Y',$d['dt']).'</div>
                <p>'.$d['body'].'</p>
            </div>
        ';
    }
    //Данный метод используется для проверки данных отправляемых через AJAX. Он возвращает true/false в зависимости от правильности данных, и наполняет
    //массив $arr, который преается как параметр либо данными либо сообщением об ошибке.
    public static function validate(&$arr)
    {
        $errors = array();
        $data    = array();
        
        //Используем функцию filter_input, введенную в PHP 5.2.0
        if(!($data['email'] = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)))
        {
            $errors['email'] = 'Пожалуйста, введите правильный Email.';
        }
        //Если в поле URL был введн неправильный URL, действуем так, как будто URL не был введен:
        if(!($data['url'] = filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL)))
        {
            $url = '';
        }
        //Используем фильтр с возвратной функцией:
        if(!($data['body'] = filter_input(INPUT_POST,'body',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
        {
            $errors['body'] = 'Пожалуйста, введите текст комментария.';
        }
        
        if(!($data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
        {
            $errors['name'] = 'Пожалуйста, введите имя.';
        }
        //Если есть ошибки, копируем массив $errors в $arr:
        if(!empty($errors)){
            $arr = $errors;
            return false;
        }
        //Если данные введены правильно, подчищаем данные и копируем их в $arr:
        foreach($data as $k=>$v){
            $arr[$k] = mysql_real_escape_string($v);
        }
        //email дожен быть в нижнем регистре:
        $arr['email'] = strtolower(trim($arr['email']));
        
        return true;
        
    }
    //Данный метод используется как FILTER_CALLBACK
    private static function validate_text($str)
    {
        if(mb_strlen($str,'utf8')<1)
            return false;
        
        //Кодируем все специальные символы html (<, >, ", & .. etc) и преобразуем символ новой строки в тег <br>:
        $str = nl2br(htmlspecialchars($str));
        
        //Удаляем все оставщиеся символы новой строки
        $str = str_replace(array(chr(10),chr(13)),'',$str);
        
        return $str;
    }
 
}
?>
При отправке формы данные идут в submit.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
//Сообщение об ошибке:
error_reporting(E_ALL^E_NOTICE);
 
include 'db.php';
include 'comment.class.php';
 
//Данный массив будет наполняться либо данными, которые передаются в скрипт, либо сообщениями об ошибке.
$arr = array();
$validates = Comment::validate($arr);
 
if($validates)
{
    //Все в порядке, вставляем данные в базу:
    mysql_query("    INSERT INTO comments(name,url,email,body,id_article)
                    VALUES (
                        '".$arr['name']."',
                        '".$arr['url']."',
                        '".$arr['email']."',
                        '".$arr['body']."',
                        '".$_GET['id']."'
                    )");
    
    $arr['dt'] = date('r',time());
    $arr['id'] = mysql_insert_id();
 
    //Данные в $arr подготовлены для запроса mysql, но нам нужно делать вывод на экран, поэтому готовим все элементы в массиве:
    $arr = array_map('stripslashes',$arr);
    
    $insertedComment = new Comment($arr);
 
    //Вывод разметки только-что вставленного комментария:
    echo json_encode(array('status'=>1,'html'=>$insertedComment->markup()));
}
else
{
    //Вывод сообщений об ошибке
    echo '{"status":0,"errors":'.json_encode($arr).'}';
}
?>
Данные в таблицу заносятся нормально, тольков поле таблицы с комментариями (id_article) не заносится id из таблицы с новостями.
связь между таблица сделал
PHP
1
mysql_query("ALTER TABLE `comments` ADD CONSTRAINT foreign_article FOREIGN KEY (id_article) REFERENCES article (id)");
Как можно занести иформацию об id из таблицы с новостями, в таблицу с комментариями??? в таблице с комментариями имеется поле id (primary), но заносить необходимо в id_article.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2011, 10:24
Ответы с готовыми решениями:

Добавление urla
При добавлении URLa: &quot;Адрес http://site.ru может быть внесен в нашу базу данных (и, соответственно, проиндексирован) по адресу...

Открыть текстовый файл в необходимом режиме (на чтение, на чтение и запись, на добавление)
Открыть текстовый файл в необходимом режиме (на чтение, на чтение и запись, на добавление). (В файле должно быть не менее 30 строк)....

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

7
 Аватар для StagnantIce
125 / 105 / 40
Регистрация: 06.03.2011
Сообщений: 334
11.04.2011, 11:45
кавычки надо убрать... id - это число... при заносе в таблицу кавычки не нужны

PS: перед тем как подсовывать $_GET ['id'] лучше в целях безопасности удостоверится что там цифра, иначе это называется SQL-инъекция.

можно сделать так

PHP
1
2
3
4
5
6
7
8
9
10
$id = intval($_GET['id']);
 
mysql_query("    INSERT INTO comments(name,url,email,body,id_article)
                    VALUES (
                        '".$arr['name']."',
                        '".$arr['url']."',
                        '".$arr['email']."',
                        '".$arr['body']."',
                        $id
                    )");
1
 Аватар для posthuman
10 / 10 / 2
Регистрация: 26.09.2009
Сообщений: 93
13.04.2011, 08:42  [ТС]
Информация в поле id_article все равно передается со значением 0.

Добавлено через 19 минут
Сделал. Нужно было добавить в форму ввода скрытое поле со значением id статьи
PHP
1
<input name="id_article" id="id_article" type="hidden" value="<? echo $view_article['id']; ?>">
И уже информацию из этого поля заносить в бд
PHP
1
2
3
4
5
6
7
8
9
10
    if (isset($_POST['id_article'])) {$id_article = $_POST['id_article'];}
 
    mysql_query("   INSERT INTO comments(name,url,email,body,id_article)
                    VALUES (
                        '".$arr['name']."',
                        '".$arr['url']."',
                        '".$arr['email']."',
                        '".$arr['body']."',
                        $id_article
                    )");
0
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
08.08.2013, 18:49
Извиняюсь за некропостинг, просто допиливаю этот же код.
Передаю значение так же через скрытое поле и пытался прописать как:
MySQL
1
2
3
4
5
6
mysql_query("   INSERT INTO comments(id_art,author,text)
                    VALUES (
                        '".$arr['id_art']."',
                        '".$arr['author']."',                       
                        '".$arr['text']."'
                    )",$db);
Но заносит один фиг ноль, почему? Файрбаг показывает, что методом пост были отправлены данные из формы. Поидее конструктор создаст экземпляр-массив с ключами, что были указаны в name инпутов формы? Значит это должно работать.
Хотя если в функции validate принудительно прописываю:
PHP
1
$arr['id_art'] = 92;
, то тогда id_art = 92, иначе 0. Куда тереяется передаваемое постом значение?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.08.2013, 20:05
Цитата Сообщение от Sunman Посмотреть сообщение
Поидее конструктор создаст экземпляр-массив с ключами, что были указаны в name инпутов формы?
какой конструктор?
$arr != $_POST
0
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
09.08.2013, 06:16
Цитата Сообщение от KOPOJI Посмотреть сообщение
какой конструктор?
$arr != $_POST
Как тогда данные попадают в $arr? Что-то я запутался.
И подскажите как передать капчу? Генерируется в php файле в виде картинки, повесил событие на перезагрузку, как-то надо ее задействовать, только не соображу как это сделать без уязвимостей.

Добавлено через 8 минут
Зы. Код с картинки сохраняется в сессии после генерации.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.08.2013, 09:13
Цитата Сообщение от Sunman Посмотреть сообщение
Как тогда данные попадают в $arr?
там $_POST передается в класс
0
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
09.08.2013, 12:44
Цитата Сообщение от KOPOJI Посмотреть сообщение
там $_POST передается в класс
ну с помощью js? почему тогда не попадает в класс новый инпут?

Добавлено через 2 часа 5 минут
Опыт в ооп маловат и думал логика примерно такова:
JS скрипт обрабатывает форму и посылает массив наполненный значениями из инпутов, ключи которого равны name. Собственно этим массивом и инициализируется экземпляр. Я не прав?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.08.2013, 12:44
Помогаю со студенческими работами здесь

Oтслеживaние изменения URLa
Hi all Делo тaкoе: есть frameset. В первoм фрейме - другoй сaит (чужoй domain) Вo втoрoм - листик, кoтoрый дoлжен oтслеживaть...

Добавление в базу
В базе accees имееться следующая таблица: id|| user || pass || rol Я создал форму в которую вводяться эти данные, соответственно как...

Добавление в базу
Пытаюсь реализовать небольшую форму, на которой находится несколько компонентов, в которые бы пользователь вводил бы значения для...

Добавление в базу
Друзья, помогите пожалуйста! У меня есть база подключенная через Adoconnect. Суть дела в том что мне надо вносить имена детей в базу,...

Добавление в базу
база под названием -phpblog News_id - MediumInt длина 9 AutoIncrement, это будет primary key. Ntext - текст новости, тип Text. Ntitle...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru