Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как передать в ссылке большую строковую переменную содержащую апострофы и кавички?
 
 автор: PyccHeBa   (26.09.2007 в 04:37)   письмо автору
 
 

Привет! Мне нужно передать строковую переменную sql запрос, содержащий ковычки и апострофы. Почему то не получается. Пока что передаю кучу переменных для запроса и запрос строю уже на новой странице. Хотелось бы упростить скрипт

   
 
 автор: kasmanaft   (26.09.2007 в 05:50)   письмо автору
 
   для: PyccHeBa   (26.09.2007 в 04:37)
 

Попробуйте обработать запрос с помощью urlencode().
Только потом не удивляйтесь, если этот запрос кто-нибудь немного "подправит".

   
 
 автор: PyccHeBa   (27.09.2007 в 00:11)   письмо автору
 
   для: kasmanaft   (26.09.2007 в 05:50)
 

Помогает!! А какие могут быть проблемы? Как запрос могут подправить?

   
 
 автор: PyccHeBa   (27.09.2007 в 00:11)   письмо автору
 
   для: kasmanaft   (26.09.2007 в 05:50)
 

Помогает!! А какие могут быть проблемы? Как запрос могут подправить? Данные могут снести из базы что-ли?

   
 
 автор: bronenos   (27.09.2007 в 00:29)   письмо автору
 
   для: PyccHeBa   (27.09.2007 в 00:11)
 

да, скл-инъекцией, перед подстановкой значений в запрос обабатывайте их mysql_escape_string()

   
 
 автор: PyccHeBa   (27.09.2007 в 01:15)   письмо автору
 
   для: bronenos   (27.09.2007 в 00:29)
 

у меня данные и так передаются со слэшами перед апострофами. А вот как избаваться от слэшев не знаю, sql не принимает запрос, содержащий слеши

   
 
 автор: kasmanaft   (27.09.2007 в 08:13)   письмо автору
 
   для: PyccHeBa   (27.09.2007 в 00:11)
 

Как я понял, Вы в урле передаете весь sql запрос, так ведь?
Этот запрос может изменить кто угодно, кто увидит такой урл. Например, вместо "SELECT * FROM `users` " напишет "TRUNCATE TABLE `users`". Без проблем может посмотреть пароль админа, изменить при надобности.. Да что угодно.

> А вот как избаваться от слэшев не знаю, sql не принимает запрос, содержащий слеши
Можно попробовать stripslashes(), но лучше об этой затее забыть вообще.

   
 
 автор: PyccHeBa   (28.09.2007 в 03:37)   письмо автору
 
   для: kasmanaft   (27.09.2007 в 08:13)
 

Да.... передавать запрос в адресной строке плохая идея.

Может мне стоит вообще сделать полностью по другому.

Кто может дать наводку как удобнее всего записать данные в csv файл из sql запроса?

select into outfile очень хорошая вещь, но он не сработает если файл уже существует. Нумеровать кучу файлов не вариант. Нужно чтобы запрос писал данные в один csv файл.

   
 
 автор: kasmanaft   (28.09.2007 в 15:03)   письмо автору
 
   для: PyccHeBa   (28.09.2007 в 03:37)
 

Расскажите для чего Вы всё это делаете, а то так трудно советовать.

Может быть можно эти скрипты объединить? или include..
Может быть сохранить все параметры для запроса в сесии?

И если первый скрипт откуда-то достал эти параметры, почему их не может добыть второй?

   
 
 автор: PyccHeBa   (29.09.2007 в 01:31)   письмо автору
 
   для: kasmanaft   (28.09.2007 в 15:03)
 

У меня выводиться на экран таблица (не более 500 строк) с данными из sql запроса. Там лимит 500. А сверху ссылка "скачать все". Ссылка на файл php в котором делается полный запрос без лимита и потом данные сохраняются в csv файл и файл скачивается. Сам файл php ничего не отображает, он делает запрос, создает файл посылает его на юзеру аттачмент вот так вот

Странно то что у меня абсолютно две одинаковые страницы, одна работает, а другая вместо того чтобы открыть csv файл, выводит данные в браузере. Почему не могу разобраться. Запросы работают отлично. В файлы все записывается.

Я знаю что можно как то проще построить csv файл, но пока делаю так.


<?
require('includes/config.php');
require('includes/db_connect.php');
//we will outputting a EXCEL file

$sqlCond= $HTTP_GET_VARS['sqlCond'];
$sqlCond = stripslashes($sqlCond);

$SqlFull = тут мой запросик
$result = mysql_query($SqlFull);

тут делаем файлик

header('Content-type: application/xls');
header('Content-Disposition: attachment; filename="файлик.csv"');
readfile('файлик.csv');

?>

   
 
 автор: PyccHeBa   (29.09.2007 в 02:13)   письмо автору
 
   для: PyccHeBa   (29.09.2007 в 01:31)
 

Ухх..... С облегчением вздыхаю два дня копал код, перелопачивал. Оказалось в одном из инклюдов проблемного файла были переносы строк. Это и было причиной что файл не скачивался, а отображался в браузере.

Файл я строю довольно рутинно по строкам.

$i = 0;
$str2="";
$file_handle=fopen("newcsv.csv",'w');


$j = mysql_num_fields($result) ;

while ($i < $j ) {
$meta = mysql_fetch_field($result, $i);
if($i == $j-1 ) $str2 .= "$meta->name \n";
else $str2 .= "$meta->name,";
$i++;
}

fputs($file_handle,$str2);
$x = 0;
$str2 ="";

while($row = mysql_fetch_array($result)){

$i=0;
while ($i < $j) {
if($i == $j-1 )$str2 .= "$row[$i] \n";
else $str2 .= "$row[$i]," ;
$i++;
}
fputs($file_handle,$str2);
$str2="";
$x++;

}
//write the last itsybitsy bit and cleanup
fputs($file_handle,$str2);
fclose($file_handle);
$str2="";



Можно как то делать это проще SELECT INTO OUTFILE но файл нельзя переписать если он уже существует. Может быть его стоит каждый раз стирать после скачки. Что думаете?

   
 
 автор: kasmanaft   (29.09.2007 в 10:39)   письмо автору
 
   для: PyccHeBa   (29.09.2007 в 02:13)
 

Может быть стереть...
Может быть стирать только тогда, когда в новый файл будет отличаться от текущего (когда в БД что-нибудь обновилось).
Может быть создать новый файл с другим именем.
Обратите еще внимание на fputcsv()


По теме: как строится запрос? Тот скрипт, который его строит не может сам отдать файл?
Или тот, который файл отдает, не может сам построить запрос?


PS забудьте уже про $HTTP_GET_VARS (и его братьев), используйте $_GET.

   
 
 автор: PyccHeBa   (03.10.2007 в 01:35)   письмо автору
 
   для: kasmanaft   (29.09.2007 в 10:39)
 

Там пользователь сам выбирает параметры запроса. Маловероятно чтобы запросы повторялись.
Скрипт мой прекрасно работает. Но я подозреваю что SELECT * INTO OUTFILE будет работать быстрее. У меня 50 000 данных собирается в файл. Уходит до 1 минуты на создание файла. Так как он создается построчечно.


Хотелось бы проверить быстрее ли будет это делать SELECT * INTO OUTFILE
Прилаживаю его в скрипт, но вот не пойму где он файлы сохраняет? Пишется что запросик прошел. Но файла вообще не нахожу.

Что думаете? Будет ли скрипт выигрывать в скоросте? Будет ли быстрее с fputcs() ?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования