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

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

  Все выпуски  

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

vladisslav
Статус: 5-й класс
Рейтинг: 695
∙ повысить рейтинг »
Nicolacha
Статус: 6-й класс
Рейтинг: 249
∙ повысить рейтинг »
Волков Алексей
Статус: 5-й класс
Рейтинг: 167
∙ повысить рейтинг »

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

Номер выпуска:1169
Дата выхода:22.10.2009, 15:30
Администратор рассылки:Товарищ Бородин, Академик
Подписчиков / экспертов:628 / 183
Вопросов / ответов:1 / 2
IRC-канал по теме:#php

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

Код:
Вопрос № 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.
Мне посоветовали в динамически создавать запрос INS ERT 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, 3-й класс :
Здравствуйте, Olegarh3000.
SQL запрос это простой текст, вы же переменной присваиваете null, но в запрос она должна попадать как 'null', т.е. строка.
Поэтому присваивайте переменной именно строку со значением 'null'
P.S. При вставке в текстовые поля значения должны быть заключены в одинарные кавычки, если это не null. Если есть данные, то вы должны заключить их в кавычки, если нет, то переменной присвойте строковое значение 'null'

Приложение:

Ответ отправил: Selax, 3-й класс
Ответ отправлен: 17.10.2009, 16:03

Оценка ответа: 5
Комментарий к оценке:
Спасибо за профессиональное разьяснение!

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255495 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Палян Александр Михайлович, 4-й класс :
    Здравствуйте, 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. В этом случае MySQ L не будет ругаться на то что вы пытаетесь оставить поля незаполненными.
    советую почитать документацию по MySQL http://dev.mysql.com/doc/refman/5.1/en/create-table.html
    И наконец последнее. То что Вы делаете, то есть загоняете сразу напрямую необработанные данные в запрос является кощунством и открытой дырой для взлома базы данных. Для того чтобы этого избежать советую хотя бы обрабатывать все данные php функцией addslashes();

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

    Приложение:

    Ответ отправил: Палян Александр Михайлович, 4-й класс
    Ответ отправлен: 17.10.2009, 19:55

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

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255497 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.10 от 20.10.2009

    В избранное