Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RFpro.ru: Программирование на PHP


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10864
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4193
∙ повысить рейтинг »
vladisslav
Статус: Практикант
Рейтинг: 1353
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / PHP

Номер выпуска:1252
Дата выхода:14.09.2012, 19:00
Администратор рассылки:Устинов С.Е. (Профессионал)
Подписчиков / экспертов:103 / 48
Вопросов / ответов:3 / 7

Консультация # 173356: Из формы (16 полей) получаю массив $_POST В форме 11 полей обязательных и 5 нет т. е от 1 до 5 полей могут прийти пустыми. В скрипте я создаю таблицу

Код :
]<?php
// создаём таблицу 
$CT_UTK="CREATE TABLE IF NOT EXIST
...
Консультация # 20037: Здравствуйте, уважаемые эксперты! Есть два вопроса (оба по взаимодействию php c MySQL): 1. Задача такая. Я выбираю из базы данных поля по дате. Дату записываю обычно, к примеру, 20.04.2005. Если дата есть в базе, то вывожу инфу по этой дате. Если даты такой нет, то вывожу сообщение, что ничего нет. Но вся проблема в том, что почему-то дата ...
Консультация # 105130: Здравствуйте ! У меня такой вопрос. Обьясните мне пожалста как передавать параметры через url адрес , или как там правильно)). Ну допустим хотя бы взять адрес этой страницы, где я задаю вопрос : http://rusfaq.ru/?Step=ask&ID0=5&ID1=3&ID2=22 У нас есть 4 параметра: step, id0, id1, id2. Каждый получает определенное значение в з...

Консультация # 173356:

Из формы (16 полей) получаю массив $_POST

В форме 11 полей обязательных и 5 нет т. е от 1 до 5 полей могут прийти пустыми.

В скрипте я создаю таблицу

Код :
]<?php
// создаём таблицу 
$CT_UTK="CREATE TABLE IF NOT EXISTS `$USER_TABLE_KOMAND` 
(id INT NOT NULL AUTO_INCREMENT, id1 TEXT, id2 TEXT, id3 TEXT, id4 TEXT, id5 TEXT, id6 TEXT, id7 TEXT, id8 TEXT, id9 TEXT, id10 TEXT, id11 TEXT, id12 TEXT, id13 TEXT, id14 TEXT, id15 TEXT, id16 TEXT, PRIMARY KEY ( `id` ))";
mysql_query ($CT_UTK) or die (mysql_error());
?>


Теперь в эту таблицу надо внести данные из $_POST, но что делать с путыми переменными? Притом их кол-во варьируется от 1 до 5.
Мне посоветовали в динамически создавать запрос INSERT INTO с помощью цикла который поможет не включать пустые переменные в запрос, но я не знаю как это реализовать:(

Пробовал просто присвоить пустой перменной null

Код :
if (empty($_POST[S5]))
{$_POST[S5] = null;}
$II_UTK = "INSERT INTO `$USER_TABLE_KOMAND` (id1, id2, id3, id4, id5, id6, id7, id8, id9, id10, id11, id12, id13, id14, id15, id16) 
VALUES(".$Gk.", ".$Ld.", ".$Cd1.", ".$Cd2.", ".$Rd.", ".$Lm.",".$Cm1.", ".$Cm2.",".$Rm.",".$Cf1.", ".$Cf2.", ".$S1.", ".$S2.",".$S3.", ".$S4.",".$S5.")";
mysql_query ($II_UTK) or die (mysql_error());


но SQL всё равно ругается:( (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 2)

Помогите, пожалуста решить эту беду:)

Дата отправки: 17.10.2009, 15:21
Вопрос задал: Olegarh3000
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Selax (5-й класс):

Здравствуйте, Olegarh3000.
SQL запрос это простой текст, вы же переменной присваиваете null, но в запрос она должна попадать как 'null', т.е. строка.
Поэтому присваивайте переменной именно строку со значением 'null'
P.S. При вставке в текстовые поля значения должны быть заключены в одинарные кавычки, если это не null. Если есть данные, то вы должны заключить их в кавычки, если нет, то переменной присвойте строковое значение 'null'

Приложение:

Консультировал: Selax (5-й класс)
Дата отправки: 17.10.2009, 16:03

5
Спасибо за профессиональное разьяснение!
-----
Дата оценки: 17.10.2009, 19:34

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует freedayko:

Здравствуйте, Olegarh3000.
Во-первых. Начнем с Вашего запроса для вставки данных. Вы вставляете текст и при этом не берете его в кавычки. Отсюда и появляется Ваша ошибка.
Если на то пошло то запрос должен быть таким:
$II_UTK = "INSERT INTO `$USER_TABLE_KOMAND` (id1, id2, id3, id4, id5, id6, id7, id8, id9, id10, id11, id12, id13, id14, id15, id16)
VALUES('".$Gk."', '".$Ld."', '".$Cd1."', '".$Cd2."', '".$Rd."', '".$Lm."','".$Cm1."', '".$Cm2."','".$Rm."','".$Cf1."', '".$Cf2."', '".$S1."', '".$S2."','".$S3."', '".$S4."','".$S5."')";
Далее если Вы хотите не заполнять некоторые поля, то вам либо при создании нужно указать им NULL либо сделать DEFAULT. В этом случае M ySQL не будет ругаться на то что вы пытаетесь оставить поля незаполненными.
советую почитать документацию по MySQL http://dev.mysql.com/doc/refman/5.1/en/create-table.html
И наконец последнее. То что Вы делаете, то есть загоняете сразу напрямую необработанные данные в запрос является кощунством и открытой дырой для взлома базы данных. Для того чтобы этого избежать советую хотя бы обрабатывать все данные php функцией addslashes();

В итоге у Вас должно получиться чтото вроде такого:

Приложение:

Консультировал: freedayko
Дата отправки: 17.10.2009, 19:55

4
Ответ привилен и доходчиво обьяснён, но вот с советами типа "То что Вы делаете, то есть загоняете сразу напрямую необработанные данные в запрос является кощунством и открытой дырой для взлома базы данных" не видя весь код, лучше не спешить.
Также и "советую почитать документацию по MySQL http://dev.mysql.com/doc/refman/5.1/en/create-table.html" для новичков не совсем полезен:
1. Не все знают английский
2. Не все и с русской документацией умеют работать
Лучше посоветовали по какой книге Вы учились и с чего начинали:)

-----
Дата оценки: 17.10.2009, 23:46

Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 20037:

Здравствуйте, уважаемые эксперты!
Есть два вопроса (оба по взаимодействию php c MySQL):
1. Задача такая. Я выбираю из базы данных поля по дате. Дату записываю обычно, к примеру, 20.04.2005. Если дата есть в базе, то вывожу инфу по этой дате. Если даты такой нет, то вывожу сообщение, что ничего нет. Но вся проблема в том, что почему-то дата не находится. Я явно указываю дату, которая есть в базе, а выходит сообщение, что записей не найдено. Код я прилагаю. Помогите, пожалуйста, разобраться, почему не находится дата. Может я неправильно запрос делаю?
2. И второй вопрос. Подскажите, пожалуйста, как можно прервать вывод данных из базы, вставить рекламу, а затем снова продолжить вывод. Т.е. Я вывожу из базы статью. В середину статьи хочу поместить рекламный баннер. А как его туда вставить?
Надеюсь получить ответы. Заранее благодарен!

Дата отправки: 21.04.2005, 00:42
Вопрос задал: sedojded
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Смирных Сергей Владимирович:

Здравствуйте, sedojded!
значение полей всегда должно быть в кавычках!
пример: select * from base where field=\'20.04.2005\'

Консультировал: Смирных Сергей Владимирович
Дата отправки: 21.04.2005, 08:05
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Rusland:

Здравствуйте, sedojded!
На первый вопрос вам уже ответили.
По второму: тут все просто, вывод осуществляется через PHP следовательно можно при выводе вести подсчет - если счетчик равен например 20, то делать вывод рекламного баннера

Консультировал: Rusland
Дата отправки: 21.04.2005, 09:41
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 105130:

Здравствуйте ! У меня такой вопрос. Обьясните мне пожалста как передавать параметры через url адрес , или как там правильно)).
Ну допустим хотя бы взять адрес этой страницы, где я задаю вопрос :

http://rusfaq.ru/?Step=ask&ID0=5&ID1=3&ID2=22

У нас есть 4 параметра: step, id0, id1, id2. Каждый получает определенное значение в зависимости от выбранной мною категории. Так вот мне интересно, а как это все работает.

К примеру:
Мне нужно чтобы в зависимости от выбранной пользователем ссылки на экране появлялась та или иная информация. Допустим у меня есть сайт со сборником книг. На странице находится 30 ссылок , каждая представляет собой определенный раздел: скажем фантастика, детективы..... В зависимости от нажатой пользователем ссылки отображается список книг данного раздела. Возможно ли все это запихать в один php файл ?
Просто не хочется создавать 30 html файлов , а потом еще для каждой книги свой файл.

Обьясните пожалста как все это организовать. Если можно с исходником. Спасибо.

Дата отправки: 12.10.2007, 00:53
Вопрос задал: Whiteman
Всего ответов: 3
Страница онлайн-консультации »


Консультирует Миленин Александр (Студент):

Здравствуйте, Whiteman!
Есть множество вариантов:
1) В зависимости от параметра подгружать нужную страницу файл (нужно быть осторожным, т.к. можно будет подставить в запрос любой сторонний файл)
Запрос http://somesite.ru/script.php?file=fantastic подгрузит fantastic.html

2) Запихать всё в один файл (получится очень большой файл)

Приложение:

Консультировал: Миленин Александр (Студент)
Дата отправки: 12.10.2007, 01:08
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Nexus:

Здравствуйте, Whiteman!

Не соглашусь с предыдущим экспертом - какой смысл инклудить хтмл\'и в пхп файл - если уж все-равно эти 30 хтмл файлов создавать, так лучше их оставить обычным хтмлом, роботам с ними проще работать

Для каталога лучше использовать базу. Описания и названия книг и категорий хранятся в базе. Создается один html для книги (темплейт страницы), в котором вставками пхп-кода выводятся описание/название той книги, идентификатор который скрипт получил в качестве параметра. Ну и аналогично с категорией. Потом еще в идеале при помощи mod_rewrite перевести урл в псевдостатический, т.е. вместо http://site.com/book.php?id=1 будет например http://site.com/book1.html.

По базе - в самом простом случае нужно 2 таблицы - категорий и книг. Если в каталоге не может быть подкатегорий то все просто:

Categories
-------------
id
name
description

Books
-------------
id
cat_id
name
description

если могут быть подкатегории - для каталога нужно хранить еще либо parent_id (проще в реализации), либо left, right, level - работает быстрее, но такое дерево реализовать сложнее.

приводить код думаю смысла особого нет - десятью строчками тут не обойдешься, а полный - у меня есть только полноценный интернет-магазин, там многовато будет :)

Консультировал: Nexus
Дата отправки: 12.10.2007, 15:49
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Hid:

Здравствуйте, Whiteman!
Дам пример с использованием базы данных.
Для начала создаете таблицу в базе данных из трех полей ID; link и name (с именем book_kateg например). Первое поле - индекс с параметром автозаполнение, второе имя таблицы базы данных с инфой о книгах определнного раздела (фантастика, детективы)(таблицы кстати тоже нужно создать). После этого в файле например index.php создаете скрипт, в котором сперва проверяете передачу параметров через url то есть методом GET например так:
<?php
if (!isset($_GET[\'kateg\']))// если в урле ничего не передается выводим список категорий
{
include(\'modul/home.php\');..подключаем файл с сылками на категории
}
else
{
//запрашиваем имя таблицы категорий из таблицы book_kateg по переменной $_GET[\'kateg\'с индексом на таблицу и далее выводим инфу из таблицы с книгами соответствующей категории (фантастика, детективы)

}
?>

в файле home.php пишете скрипт запроса к таблице book_kateg и вывода в браузер тех самых 30 ссылок на категории программ вида
echo \'<p><a href="http://www.vash_sait/index.php?kateg=\'.$kateg.\'">\'.$name.\'</a>.; При формировании ссылок в цикле вместо $kateg скрипт поставит числа 1,2,3..., а вместо $name название категории, значения которых беруться из таблицы book_kateg. Кстати в таблицу можно добавить еще одно поле с описанием категории и выводить еще и его после названия.
Примерно так. Полностью скрипт не привожу. Его нужно писать под конкретную базу данных, но основная идея, я думаю, понятна. Не мешает еще сделать скрипт безопасным - выполнять проверку переменных, полученных методом GET.
Кстати этот тот же принцип можно использовать и при хранении информации и в текстовых файлах. Если нужны пояснения пишите в личку, либо на мыло serg-gor@yandex.ru
Удачи!

Консультировал: Hid
Дата отправки: 12.10.2007, 20:08
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное