Формирование динамической строки запроса

SparcoCF

Новичок
Формирование динамической строки запроса

Всем привет.

Есть textarea
<textarea name='number' cols=30 rows=5> </textarea>

В ней вводятся данные каждые с новой строки в моем случае это номера авто запчастей допустим:
00000041950070
00000041951946

И так как сделать что бы каждый номер запчасти введенный с новой строчки в textarea воспринимался как отдельный запрос ?
Следовательно нужно сделать так что бы запрос принял следующий вид:

WHERE Nomer LIKE 'значение1%' OR Nomer LIKE 'значение2%' и так далее по числу строк в textarea

Но загвоздка в том что я не знаю как правильно сделать массив из значений получаемых в поле textarea
Если делаю так:
<textarea name='number[]' cols=30 rows=5> </textarea>
и ввожу значения
00000041950070
00000041951946

получаю такой массив:
Array ( [0] => 00000041950070 00000041951946 )

Подскажите как решить правильно данный вопрос ?
 

SparcoCF

Новичок
Пишу сюда поскольку не хочу создавать новую тему, дело в том что вставляю данные в базу csv парсером, вставляется все отлично но дело в том что в самом csv файле встречается очень много кавычек (кстати в экселе их не видно только когда csv файл открыть каким то текстовым редактором но так как csv файл создаю не я нужно как то выходить из положения) и получается что вся база кишит кавычками " решил их вырезать с помощью функции str_replace но тут же натолкнулся на грабли ведь тогда функция получается такой str_replace(""", "", $temp[1]) и соответственно эта кавычка нарушает весь ПХП сценарий, как можно вырезать кавычку другим способом ?
 

SparcoCF

Новичок
zerkms
СПАСИБО ! )) работает

-~{}~ 03.07.09 15:15:

Что бы было понятнее, делаю поиск автозапчастей. Все работает нормально но нужно отладить некоторые важные нюансы.
Есть textarea для ввода списка запчастей:
<textarea name='number' cols=30 rows=5></textarea>

ее обработка следуюющая:
PHP:
$num=explode("\n",$_REQUEST['number']);
		 $num=array_map("trim",$num);
		 
		 if (empty($num[0])) unset($num[0]);
		 if (!empty($num))
{
$query="SELECT * FROM `".mysql_real_escape_string($_REQUEST['manufacturer'])."` WHERE";
for($i=0;$i<count($num);$i++)
 {
 $query.=" Nomer LIKE '$num[$i]%'";
 if ($i!=count($num)-1) $query.=" OR";
 }
$result=mysql_query($query);
}
Ищет все номера запчастей которые введены с новой строки, и все чудесно, только если ввести в textarea один номер, потом нажать ентер и не ввести следующего номера и сделать сабмит формы, находит первый номер и делает вывод всего содержимого базы. И это понятно поскольку LIKE получает % и выводит все.
Каким образом можно сделать так что бы проверялось если последующие строки пусты запрос не делать для них ?

Пробовал сделать так:
PHP:
$num=explode("\n",$_REQUEST['number']);
		 $num=array_map("trim",$num);
		 
		 if (empty($num[0])) unset($num[0]);
		 if (!empty($num))
{
$query="SELECT * FROM `".mysql_real_escape_string($_REQUEST['manufacturer'])."` WHERE";
for($i=0;$i<count($num);$i++)
 {
 $query.=" Nomer LIKE '$num[$i]%'";
 if (empty($num[1])) { unset($num[1]); }
 if ($i!=count($num)-1) $query.=" OR";
 }
$result=mysql_query($query);
}
Работает но только для второго номера запчасти, как сделать для каждого ?
 

Фанат

oncle terrible
Команда форума
Охохо. До меня только сейчас дошло.
Зачем в этой строчке функция mysql_real_escape_string? каков механизм ее работы в данном месте? Попробуй подумать.
что посоветуешь ?
Таблица должна быть одна. Одна на всех производителей.
 

SparcoCF

Новичок
Таблица должна быть одна. Одна на всех производителей.
Не могу сделать одну таблицу поскольку, у меня в прайсе для каждого производителя больше 500 000 номеров запчастей получиться тогда около 10 000 000 (десять миллионов) строк. Допустим если даже это не смертельно, пусть будет столько строк, но тогда очень не удобно обновлять эти прайсы (и их кстати нужно будет корректировать что бы подогнать под базу, и добавить уникальный идентификатор).

mysql_real_escape_string в данном месте выполняет как и повсюду функцию экранирования. Для выбора производителя использую селекты, еще их дополнительно проверяю регулярокой, на всяк случай от SQL инъекций.

Жду советов и критики.
 

SparcoCF

Новичок
экранирования чего от чего? какой принцип работы этого экранирования? приведи пример
Привести пример не могу поскольку не знаю как делать SQL инъекции, но в общем во всех статьях пишет что бы делать экранирование для всех элементов формы с которыми работать будут юзеры. Если советуете убрать, уберу.

в чем неудобство? приведи пример
Прайс имеет следующий вид:
Номер, Название, Аналог, Группа, Вес, Цена
И так для каждой марки. Для того что бы загнать все в одну таблицу нужно будет добавить:
Марка, Уникальный идентификатор. И добавить уникальный идентификатор в Екселе для всех 10 000 000 строк очень затруднительно во первых из за того что Ексель не поместит столько строк (там ограничение даже в *.xlsx) во вторых нет возможности автоматизировать нумерацию.

Даже если все сделать добавить Уникльный ИД, пришел новый прайс из Германии от Мерседеса, и опять добавляй ИД. А номер запчасти служить уникальным не может поскольку, если слить все таблицы некоторые номера повторяются.
 

Фанат

oncle terrible
Команда форума
Ты программист или шаман в пещере? Не пробовал понять, что в статье пишут, а не просто применять заклинание, которое там написано?
Приведи пример статьи

При чем здесь эксель?
Сочетание марки и номера запчасти может служить уникальным идентификатором?
При чем здесь все эти ничего не значащие мелочи, если речь идет об азбучных основах построения баз данных? База данных ничего не знает ни о мерседесах твоих, ни об экселе.
 
Сверху