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

  Все выпуски  

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


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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 354
от 29.05.2006, 00:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 306, Экспертов: 48
В номере:Вопросов: 10, Ответов: 37


Вопрос № 43911: я просто в шоке... что такое... Есть код: <? echo "Opening... "; $f = @file("out.fil") or exit("error"); echo "OK<br>"; echo count($f); ?> --- Дома работает все п...
Вопрос № 43930: Доброго времени суток! Меня интересует как можно стандартными средствами PHP прочитать pdf файл. Требуется примитивное преобразование в txt файлы, никакого особого анализа структуры мне пока что не надо. Ежели стандартными средствами это сдел...
Вопрос № 43931: Приветствую, ув. Эксперты. Появилась проблема такого плана: как реализовать автоматические создание thumbnail'а (маленькой копии) загружаемой картинки? Чтобы к примеру в папке была и сама картинка и ее уемньшенная до нужного размера копия. За...
Вопрос № 43939: продолжение к вопросу № 43867 у меня провлема в том, что когда клиент заполнил форму несколько полей и нажал кнопку добавить запись в базу первым проверяется поле -телефон - существеут ли этот номер в базе или нет если да , то кому прин...
Вопрос № 43949: Здравствуйте эксперты! Скрипт на php выполняеться около 2 часов , как сделать чтобы он продолжил выполняться в не зависимости закрыл ли пользаватель браузер или нажал кнопку обнавить ...
Вопрос № 43951: Здравствуйте эксперты! Подскажите почему запросы на бд MsQL вида INSERT INTO таблица (имена полей через запятую) VALUES (значения);INSERT INTO таблица (имена полей через запятую) VALUES (значения); INSERT INTO таблица (имена полей через...
Вопрос № 43962: Здрава эксперты! Я тут писал сайт и вдруг наткнулся на неожиданную и глупую проблему, а справочник куда-то делся. Вобщем мне надо определить количество составляющих массива, тоесть у меня есть динамический массив, значений в нём может ...
Вопрос № 43983: Допустим делается добавление записи в mysql-таблицу, в которой первое поле id - autoincrement. В перле после выполнения Insert-a (mysql) можно получить текущее значение поля id с помощью mysql_insertid ($dbh -> {'mysql_insertid'}.). Как в PH...
Вопрос № 44010: Здравствуйте, уважаемые эксперты! Очень нужна ваша помощь. Есть три таблицы MySQL: вакцины, страны-производители и консерванты. вакцины: id AUTO_INCREMENT, country INT, kons TINYTEXT. страны :id AUTO_INCREMENT, country VARCHAR(30). консер...
Вопрос № 44030: Привет, Всем! Приведите, пожалуйста, пример регулярного выражения проверяющего валидность URL-адреса. Причем небоходимо учитывать не только "http://domain.ru", но и директории на сайте с параметрами. Пример для проверки: "http:...

Вопрос № 43.911
я просто в шоке... что такое...
Есть код:
<?
echo "Opening... ";
$f = @file("out.fil") or exit("error");
echo "OK<br>";
echo count($f);
?>
---
Дома работает все прекрасно. Выгружаю на сервер, и после запуска вижу: Opening...
все! :/

В какую сторону хоть смотреть???
Отправлен: 23.05.2006, 00:10
Вопрос задал: XMF (статус: 6-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Драк Георгий
Здравствуйте, XMF!
Я бы на твоём месте убрал @ и посмотрел какую ошибку напишет PHP. Проставь показ ошибок:
ini_set('display_errors', 1);
error_reporting(E_ALL^E_NOTICE);
Скорее всего проблема в правах на файл. Либо в регистре имени. Если дома win, а на сервере unix, то эта проблема вполне может возникнуть.
---------
Sonic always help you, if he wish...
Ответ отправил: Драк Георгий (статус: 3-ий класс)
Ответ отправлен: 23.05.2006, 00:28
Оценка за ответ: 3
Комментарий оценки:
Регистры все оке.. не новичек...
Ошибок нет. Ставил error_reporting, тоже самое... просто эффект как будто там стоит exit;

Отвечает: Alexey Vilchinsky
Здравствуйте, XMF!
а на том сервере, на котором ты пытаешься открыть файл не стоит ли случайно запрет на чтение файла скриптом?
Попробуй заменить
$f = @file("out.fil") or exit("error");
на
$f = file("out.fil") or exit("error");
если ошибка есть, она покажется.
и еще возможно out.fil ищется не в той папке.
А возможно стоит разрешение на чтение и открытие файлов только определенных типов (расштрений), потому не дает открыть твой *.fil
---------
Делая людям добро, мы возвращаем его многократно...
Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 08:20
Оценка за ответ: 2
Комментарий оценки:
Если не прочитал бы, написал error.
тоже думал что права... поставил 777... Да и потом, если бы были бока с правами, рнр бы написало.

Отвечает: Cybernetic_Creature
Здравствуйте, XMF!
вот почему я иногда не люблю РНР.
нету дебаггера как в Делфях например.
жмешь спокойно Ф7 и находишь ошибку.
вообщем размечтался.
в вашем случае нужно быть самому в роли дебаггера.
с самого начала ставим error_reporting(E_ALL)
сначала убираем 2-ю строку(ставим комменты).
смотрим пишет ли ошибку что переменная не initialize.
если пишет значит ок идем дальше.
открываем комменты во второй строке.
убираем ор екзит (комменты)
вмсето екзит используем die()
убираем эхо.
вместо этого используем вывод на файл.
по эксперементируйте в роли дебаггера.
дайте ссылку если опять не получится.
Ответ отправил: Cybernetic_Creature (статус: Специалист)
Ответ отправлен: 25.05.2006, 15:31
Оценка за ответ: 2
Комментарий оценки:
Такой метод "дебагера" подходит в perl'е.

РНР сама показывает где ошибка..
Спасибо


Вопрос № 43.930
Доброго времени суток!
Меня интересует как можно стандартными средствами PHP прочитать pdf файл. Требуется примитивное преобразование в txt файлы, никакого особого анализа структуры мне пока что не надо.
Ежели стандартными средствами это сделать нельзя, то может быть есть какая-нибудь библиотека (желательно бесплатная) для этих целей?
Ссылки приветствуются!
Заранее спасибо!
Отправлен: 23.05.2006, 07:07
Вопрос задал: demar (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 10)

Отвечает: Alexey Vilchinsky
Здравствуйте, demar!
php предоставляет возможность создать pdf-файл, а вот считать - это вряд ли, так как сам формат не дает такой возможности.
---------
Делая людям добро, мы возвращаем его многократно...
Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 08:22

Отвечает: Cybernetic_Creature
Здравствуйте, demar!
в документации РНР есть функции для работы с такими файлами
http://php.net/manual/ru/ref.pdf.php
Ответ отправил: Cybernetic_Creature (статус: Специалист)
Ответ отправлен: 23.05.2006, 14:55

Отвечает: Santana
Здравствуйте, demar!
Помоему pdf это ваще набор картинок. кста все мои попытки конвертировать pdf закончились неудачей
:(
Ответ отправил: Santana (статус: 2-ой класс)
Ответ отправлен: 23.05.2006, 18:04

Отвечает: Samum
Здравствуйте, demar!
Вот этот класс может оказаться полезным при изучении темы:
http://www.phpclasses.org/browse/download/targz/package/702/name/pdf_search-2002-08-23.tar.gz
Описание здесь: http://www.phpclasses.org/browse/package/702.html
Он на самом деле просто строка за строкой "перебирает" pdf документ, и ищет текст (печатный, т.е. неформатированный). Его легко можно модифицировать для получения "PlainText".
И на последок, рекоменду ознакомиться с устройством формата PDF (вам сюда: http://www.kuban.ru/forum_new/forum25/modpage/faq/acrobat_02.shtml)
---------
Если бы программистам за их ошибки отрывали части тела, то в конце концов им пришлось бы использовать голову!
Ответ отправил: Samum (статус: Специалист)
Ответ отправлен: 23.05.2006, 18:32
Оценка за ответ: 5
Комментарий оценки:
По-моему это то, что мне нужно! Спасибо!
Не до конца понял, правда, что значит неформатированный текст. В моем понимании текст курсивом - это уже форматированный текст. У тебя, кстати, нет этого класса? А то ведь там надо регистрироваться чтобы скачать.


Вопрос № 43.931
Приветствую, ув. Эксперты.
Появилась проблема такого плана: как реализовать автоматические создание thumbnail'а (маленькой копии) загружаемой картинки? Чтобы к примеру в папке была и сама картинка и ее уемньшенная до нужного размера копия.
Заранее благодарен
Отправлен: 23.05.2006, 07:28
Вопрос задал: Гусаров Андрей Андреевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Alexey Vilchinsky
Здравствуйте, Гусаров Андрей Андреевич!
ты можешь создавать копию прямо в онлайне.
Для этого в src картинки укажи скрипт, который будет формировать уменьшенную копию.

Приложение:

---------
Делая людям добро, мы возвращаем его многократно...

Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 08:25
Оценка за ответ: 5

Отвечает: Cybernetic_Creature
Здравствуйте, Гусаров Андрей Андреевич!
смотрите в приложении

Приложение:

Ответ отправил: Cybernetic_Creature (статус: Специалист)
Ответ отправлен: 23.05.2006, 15:16
Оценка за ответ: 5


Вопрос № 43.939
продолжение к вопросу № 43867
у меня провлема в том, что
когда клиент заполнил форму несколько полей и нажал кнопку добавить запись в базу первым
проверяется поле -телефон - существеут ли этот номер в базе или нет если да , то кому принадлежит
($sqlnat="select v.sp09, v.pno,
pd.code, pd.name
from bis.v_phone v, podrdetail pd , phones p
where pd.recid=v.pdid and v.pno=p.pno and v.pno='$PARAMETER2'
union select v.sp09,v.pno, trim(c.name),''
from bis.v_phone v, company c , phones p
where c.recid=v.compid and v.pno=p.pno and v.pno='$PARAMETER2'" ;)
v.sp09,-сокращенная абравеатура
v.pno,-телефон
pd.code,-код производства
pd.name-название производства

СУТЬ В ТОМ ,ЧТО ЕСЛИ ЭТОТ ТЕЛЕФОН ЕСТЬ В БАЗЕ -- IF (!PNO==0)
ТО ОКОШКО ПРЕДУПРЕЖДЕНИЯ --{ALETR (ТЕЛЕФОН $V.PNO ПРИНАДЛЕЖИТ $V.SP09 N $PD.NAMEN $PD.CODE)}
У МЕНЯ НЕ ПОЛУЧАЕТСЯ ПЕРЕДАТЬ ДАННЫЕ ИЗ ЭТОГО SQL- ЗАПРОСА В
ОКНО ПРЕДУПРЕЖДЕНИЯ --{ALETR }
Отправлен: 23.05.2006, 09:05
Вопрос задала: NAG (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Zysoftik
Здравствуйте, NAG!

Первая ошибка: ALETR :) Надо alert.

Вторая:
Вы используете переменные с теми же именами, что и в запросе, хотя они не существуют (исходя из приведенного кода).

Когда Вы выполняете запрос, Вы получаете идентификатор ресурса MySQL, описывающего результат его выполнение.

При этом, Вы можете разделить этот ответ на части построчно так:

$res=mysql_query($sqlnat); //Выполняем

while ($row=mysql_fetch_array($res))
{
//Тут можно что-то делать с массивом $row, т.е. строкой таблицы ответа
}
К массиву $row можно обращаться двумя путями - по индексам (зависит от последовательности следования параметров в запросе), и по именации (параметры запроса являются ключами массива).

Чтобы быть точно уверенным в именах, можно выполнить

print_r($row);

Правильно было бы сделать так (на отстраненном примере):

$sql="select id,name,tel from my_users";
$res=mysql_query($sql);
while ($row=mysql_fetch_array($res))
echo 'User "'.$row['name'].'" (id='.$row['id'].') has phone number '.$row['tel'].'<br>';

Этот пример выведет все записи из таблицы, разбитые по полям.
Ответ отправил: Zysoftik (статус: 5-ый класс)
Ответ отправлен: 23.05.2006, 11:47


Вопрос № 43.949
Здравствуйте эксперты!
Скрипт на php выполняеться около 2 часов , как сделать чтобы он продолжил выполняться в не зависимости закрыл ли пользаватель браузер или нажал кнопку обнавить
Отправлен: 23.05.2006, 09:50
Вопрос задал: Cimus (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Alexey Vilchinsky
Здравствуйте, Cimus!
по идее, если скрипт ничего не возвращает, то он так и должен выполняться, даже если пользователь закрыл браузер.
Вот только вопрос, неужели хостинг-провайдер разрешил твоему скрипту так долго выполняться? (если конечно это не твой хост)
---------
Делая людям добро, мы возвращаем его многократно...
Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 10:40
Оценка за ответ: 4
Комментарий оценки:
по поводу закрытия браузера спорить не буду , хотя меня терзают сомнения , а как избежать нажатия кнопки "обнавить" ?

Отвечает: Алексей Смуриков
Здравствуйте, Cimus!
Что бы избежать кнопки обновить можно использовать Cookie, т.е. когда скрипт запускается то проверяем определённую переменную в Cookie и если допустим установлена в заначение что скрипт в данный момент выполняется то выводим просто соотв. сообщение!
Другой вариант для всех посещаемых пользователей просто вместо Cookie используем какой-нибудь файл или значение из БД, но лучше файл и то же самое при завершения выполнения скрипта он будет записывать исходное значение в файл!
Что же касается продолжительности выполнения скрипта то тут проблема не в закрытии браузера, а в маскимально разрешённом времени выполнения скрипта прописанном в php.ini!
p.s. Но вообще можно попробовать в скрипте поставить в начало команду @Set_Time_Limit(0);
---------
Speccy Rulezz!!!
Ответ отправил: Алексей Смуриков (статус: Практикант)
Ответ отправлен: 23.05.2006, 11:38
Оценка за ответ: 5

Отвечает: Zysoftik
Здравствуйте, Cimus!

По умолчанию скрипт врядли сможет выполняться так долго.

Для того чтобы это допустить, нужно использовать в начале такую конструкцию:

ini_set('max_execution_time',0); //Снимаем лимит по времени
ignore_user_abort(true); // Будем продолжать выполняться, даже если пользователь
// закрыл окно, или нажал на "стоп"
Насчет "обновить", могу сказать что для этого нужны флаги. А где - в куках, сессии, базе, файлах или еще где - решать вам
Ответ отправил: Zysoftik (статус: 5-ый класс)
Ответ отправлен: 23.05.2006, 11:56
Оценка за ответ: 5

Отвечает: Ерёмин Андрей
Здравствуйте, Cimus!
В данном случае - вероятно, никак. Воспользуйтесь лучше установленными заданиями - Crontab например. Там можно указать команду и время, когда она будет выполняться. Например, запрограммируете свой скрипт на 12:00 - будет выполняться в 12:00. Только вот скрипты, работающие так долго обычно автоматически убиваются демонами, стоящими на серверах. Продлить время выполнения скрипта можно примерно так (в данном случае - на один час):
set_time_limit(3600);
ini_set("max_execution_time","3600");

А вообще, советую как-то разделить скрипт на несколько составляющих, ибо 2 часа непрерывной нагрузки на сервер - это слишком. Такое обычно разрешается только на VIP-серверах.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 23.05.2006, 12:25
Оценка за ответ: 5

Отвечает: XMF
Здравствуйте, Cimus!
--
1. Для того, чтобы позволить выполнятся скрипту независимо от пользователя до тех пор, пока скрипт сам не выполнится, следует добавить в начало 2 строки:
set_time_limit(0);
ignore_user_abort(1);

2. Если вы хотите чтобы скрипт продолжил выполнятся после закрытиая браузера, но не хотите чтобы он повторно начал выполнятся при нажатии кнопки Ф5, для этого я предлагаю следуеще.. При первом запуске скрипта, создать в папке файл pid.txt, после завершения скрипта - удалить.. Также при запуске проверять, если файл существует, значит копия скрипта уже запущенна!

Таким образом в начало пишите:
<?
set_time_limit(0);
ignore_user_abort(1);
if(file_exists("pid.txt")) exit("Wait...");
$fp=fopen("pid.txt", "w");
fclose($fp);
...
unlink("pid.txt");
?>

P.S.: Внимание! Вам необходимо проверить права на папку перед тем как в нее писать!
Ответ отправил: XMF (статус: 6-ой класс)
Ответ отправлен: 23.05.2006, 16:56
Оценка за ответ: 5


Вопрос № 43.951
Здравствуйте эксперты!
Подскажите почему запросы на бд MsQL вида

INSERT INTO таблица (имена полей через запятую) VALUES (значения);INSERT INTO таблица (имена полей через запятую) VALUES (значения); INSERT INTO таблица (имена полей через запятую) VALUES (значения);
(тоесть за один раз посылаеться несколько запросов разделённые (;))

не выполняються в php скрипте , а путём ввода этого же запроса в пхпмайадмин выполняеться на ура
Отправлен: 23.05.2006, 10:02
Вопрос задал: Cimus (статус: Посетитель)
Всего ответов: 8
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Андрей_26rus
Здравствуйте, Cimus!

Строка запроса НЕ должна заканчиваться точкой с запятой
---------
- = Tertium non datur = -
Ответ отправил: Андрей_26rus (статус: 4-ый класс)
Ответ отправлен: 23.05.2006, 10:09
Оценка за ответ: 2
Комментарий оценки:
Ты уверен ??
Каждый запрс должен заканчиваться точкой с запятой !!!
Но если посылаеться только один запросс то этот символ можно опустить.

Отвечает: PVS
Здравствуйте, Cimus!
Скорее всего потому, что phpMyAdmin делает из них отдельные запросы и запускает по очереди.
Ответ отправил: PVS (статус: 1-ый класс)
Ответ отправлен: 23.05.2006, 10:34

Отвечает: Madproger
Здравствуйте, Cimus!

Насколько я знаю multiple queries появились только в пятом мускуле.

На сайте www.php.net не нашел специальных флагов для включения режима мультизапросов, хотя в C API это есть.

единственное в разделе по функции mysql_query() есть дофига комментовЮ среди них нашел такой

function multiple_query($q,$link)
{
$tok = strtok($q, ";; ");
while ($tok)
{
$results=mysql_query("$tok",$link);
$tok = strtok(";; ");
}
return $results;
}

Что-то подобное скорее всего и делается в рнр-админе
---------
И будет вам счАстиЕ!
Ответ отправил: Madproger (статус: 6-ой класс)
Ответ отправлен: 23.05.2006, 10:34
Оценка за ответ: 5

Отвечает: Alexey Vilchinsky
Здравствуйте, Cimus!
в php это сделано для того чтобы при запросе типа селект за раз возвращался результат только одного запроса (иначе как ты себе это представляешь?)
в пхпмайадмин же программно обрабатывается (парсится) твой запрос и разделяется на отдельные запросы. (или еще как то)
---------
Делая людям добро, мы возвращаем его многократно...
Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 10:45
Оценка за ответ: 5
Комментарий оценки:
Наверно так и есть

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Cimus!

MySQL и не даст выполнить такой запрос. Это сделано с целью контроля всего процесса вставки значений.
Поэтому тебе нужно выполнять каждую вставку в отдельном запросе.
А PHPMyAdmin действительно отправляет этот запрос как несколько разных, потому и создается видимость того, что это работает.
---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: 10-ый класс)
Ответ отправлен: 23.05.2006, 12:09
Оценка за ответ: 5

Отвечает: Ерёмин Андрей
Здравствуйте, Cimus!
Наверное, вы ошибаетесь в синтаксисе запроса. Во-первых, названия таблиц и полей должны быть заключены в апострофы (`table` , `field`). Во-вторых, значения обязательно должны быть заключены в кавычки ( 'mytext' ). В-третьих, строки запроса должны быть разделены точкой с запятой (...; ...). Прочитав предыдущие ответы, удивился, но по-моему несколько запросов в одной строке должны отлично работать. Единственное - попробуйте сделать перенос строки после ";". Как правило, запросы и посылаются группами и прекрасно выполняются.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 23.05.2006, 12:31
Оценка за ответ: 5
Комментарий оценки:
синтакс запросов верен , а вот перенос строки я не делал , попробую.

Отвечает: RedDevil
Здравствуйте, Cimus!
В документации сказано, что mysql_query предназначен для отправки Запроса к серверу mysql. Думаю, это и понятно. Функция должна возвращать результат запроса, а что она будет возвращать если один запрос был успешный, а другой нет?

По синтаксису mysql, это можно делать вот так:
INSERT INTO таблица (имена полей через запятую) VALUES (значения), (значения), (значения), ...

И еще - "Строка запроса НЕ должна заканчиваться точкой с запятой."
---------
Есть 10 типов людей: те, кто знаком с двоичной системой, и те, кто нет.
Ответ отправил: RedDevil (статус: Студент)
Ответ отправлен: 23.05.2006, 14:28

Отвечает: Cybernetic_Creature
Здравствуйте, Cimus!
а потому что РНР майадмин разделяет запросы
попробуйте так
$q=explore(';','INSERT INTO таблица (имена полей через запятую) VALUES (значения);INSERT INTO таблица (имена полей через запятую) VALUES (значения); INSERT INTO таблица (имена полей через запятую) VALUES (значения);');
foreach($q as $query) mysql_query($query);
Ответ отправил: Cybernetic_Creature (статус: Специалист)
Ответ отправлен: 23.05.2006, 14:59


Вопрос № 43.962
Здрава эксперты! Я тут писал сайт и вдруг наткнулся на неожиданную
и глупую проблему, а справочник куда-то делся.
Вобщем мне надо определить количество составляющих массива,
тоесть у меня есть динамический массив, значений в нём может
быть сколько угодно, и вот мне надо определить сколько там
значений. Заранее спасибо.
Отправлен: 23.05.2006, 11:02
Вопрос задал: Ploter (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: AllCash
Здравствуйте, Ploter
функцией sizeof($array);

$array=array('1','2','3');
echo sizeof($array);
Ответ отправил: AllCash (статус: 2-ой класс)
Ответ отправлен: 23.05.2006, 11:05
Оценка за ответ: 5

Отвечает: Асташов Андрей Александрович
Здравствуйте, Ploter!

Также можно использовать функцию count.

$array=array('1','2','3');
echo count($array);

---------
Бросил курить сам - Брось курить другому!!!
Ответ отправил: Асташов Андрей Александрович (статус: Студент)
Ответ отправлен: 23.05.2006, 11:07
Оценка за ответ: 5

Отвечает: PVS
Здравствуйте, Ploter!
Вам нужна функция count :
$cnt=count($array);

Ответ отправил: PVS (статус: 1-ый класс)
Ответ отправлен: 23.05.2006, 11:11
Оценка за ответ: 5

Отвечает: Cybernetic_Creature
Здравствуйте, Ploter!
function count
http://php.net/manual/ru/function.count.php
Ответ отправил: Cybernetic_Creature (статус: Специалист)
Ответ отправлен: 23.05.2006, 15:07

Отвечает: Alexey Vilchinsky
Здравствуйте, Ploter!
я так понял количество элементов массива? Тогда так:
count($имя массива);
---------
Делая людям добро, мы возвращаем его многократно...
Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 16:31

Отвечает: Stamm
Здравствуйте, Ploter!
Если есть массивы внутри массива, то надо сделать ф-кцию, которая пробегается по всем вложенным массивам. См. код приложения

Приложение:

---------
В день - один, ну два подвига, не больше...

Ответ отправил: Stamm (статус: Студент)
Ответ отправлен: 23.05.2006, 21:54


Вопрос № 43.983
Допустим делается добавление записи в mysql-таблицу, в которой первое поле id - autoincrement.
В перле после выполнения Insert-a (mysql) можно получить текущее значение поля id с помощью mysql_insertid ($dbh -> {'mysql_insertid'}.).
Как в PHP можно получить этот последний добавленный id?
Желательно без дополнительного select-а.
Отправлен: 23.05.2006, 14:22
Вопрос задал: Rusland (статус: Специалист)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Straight
Здравствуйте, Rusland!
Вам поможет mysql_insert_id();
Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 23.05.2006, 14:41
Оценка за ответ: 5
Комментарий оценки:
Как раз эта функция и требовалась.

Отвечает: Cybernetic_Creature
Здравствуйте, Rusland!
function mysql_insert_id
http://php.net/manual/ru/function.mysql-insert-id.php
Ответ отправил: Cybernetic_Creature (статус: Специалист)
Ответ отправлен: 23.05.2006, 15:09

Отвечает: Alexey Vilchinsky
Здравствуйте, Rusland!
без дополнительного селекта никак (если ты конечно не знаешь какой был до этого id(хотя при большом посещении сайта такое не прокатит))
а так select max(id) from имя таблицы
---------
Делая людям добро, мы возвращаем его многократно...
Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 23.05.2006, 16:33

Отвечает: Станкевич Александр Алексеевич
Здравствуйте, Rusland!
Вам поможет php функция mysql_insert_id().
Ответ отправил: Станкевич Александр Алексеевич (статус: 2-ой класс)
Ответ отправлен: 23.05.2006, 22:52


Вопрос № 44.010
Здравствуйте, уважаемые эксперты! Очень нужна ваша помощь. Есть три таблицы MySQL: вакцины, страны-производители и консерванты.
вакцины: id AUTO_INCREMENT, country INT, kons TINYTEXT.
страны :id AUTO_INCREMENT, country VARCHAR(30).
консерванты: id AUTO_INCREMENT, country VARCHAR(30).
Никак не получатся посторить запрос на поиск вакцины с использованием checkbox`ов. Т.е. выбираем несколько стран, несколько консервантов, и достаются из таблицы те вакцины, которые произведены в этих странах и не содержат данных консервантов. Подскажите, пожалуйста!!!

Приложение:

Отправлен: 23.05.2006, 18:09
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Zysoftik
Здравствуйте, Андрющенко Вячеслав Васильевич!

У Вас есть несколько путей:

1. Использовать функцию MySQL POSITION (str IN fld). Это поиск вхождения строк одной в другую. Ф-ция возвращает 0 если строка не найдена. Вы можете написать в условии выборки так: where ..... and ((POSITION['консервант1'] IN vakc.kons)=0 and (POSITION['консервант8'] IN vakc.kons)=0).

2. Использовать функцию MySQL REGEXP, которая работает с регулярными выражениями. Синтаксис:

поле REGEXP "регулярное_выражение"

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

Ответ отправил: Zysoftik (статус: 5-ый класс)
Ответ отправлен: 23.05.2006, 20:39

Отвечает: Константин
Здравствуйте, Андрющенко Вячеслав Васильевич!
Приведенная БД не может ответить на этот запрос только с помощью SQL.
Можно доствать, парсить, но это не интересно. Правильно сделать так:
Таблица с консервантами(kons):
ID(primary key)
KonsName
CountryID(index)
Таблица со странами(countries):
ID(primary key)
ContryName
Таблица с вакцинами(vact):
ID(primary key)
VactName
Вспомогательная таблица, отражающая связь N:M между вакцинами и консервантами(vact_kons):
VactID
KonsID
(primary key на двух полях)
Теперь допустим у нас есть страны с номерами 1,2 и консерванты, которых не должно быть номер

3,4.
SQL-запрос:
SELECT vact.VactName
FROM ((countries INNER JOIN kons ON kons.CountryID=countries.ID)
INNER JOIN vact_cons ON vact_kons.KonsID=kons.ID) INNER JOIN vact ON

vact_cons.VactID=vact.ID
WHERE (countries.ID=1 OR countries.ID=2) AND kons.ID<>3 AND kons.ID<>4;

Этот запрос объединяет 4 таблицы с помощью их ключевых атрибутов (полей), извлекает из них

всех только поле с названием вакцины и выбирает из всех записей те, у которых страна

такая-то или такая-то, а консервантов таких-то нет.

Из своих чекбоксов ты получаешь IDшники, их и ставишь.

2 совета:
1)привязывайся к сути задачи, а не к "чекбоксам". Здесь суть в том, что тебе нужен

SQL-запрос, над ним и надо думать. Чекбоксы - это так, для прикола :))
2)почитай любую хорошую книгу по БД (Дейт, например), искать в Яндексе.
---------
Лучше сделать и жалеть, чем жалеть о том что не сделал
Ответ отправил: Константин (статус: 5-ый класс)
Ответ отправлен: 23.05.2006, 23:20

Отвечает: PVS
Здравствуйте, Андрющенко Вячеслав Васильевич!
Конечно не помешала бы таблица с двумя полями: ID_вакцины,ID_консерванта. В нее нужно вносить соответствующие записи при создании записи о вакцине. Но можно и с Вашим способом помучатся:

$countrylist=implode(",",$selected_countries);
$konservlist=implode("%')and not(kons like '%",$selected_konservants);
$request="select * from vakcines where (country in (".$countrylist."))and(kons like '%".$konservlist."%')";
/*Для отладки:*/
echo $request;
Ответ отправил: PVS (статус: 1-ый класс)
Ответ отправлен: 24.05.2006, 13:02


Вопрос № 44.030
Привет, Всем!
Приведите, пожалуйста, пример регулярного выражения проверяющего валидность URL-адреса. Причем небоходимо учитывать не только "http://domain.ru", но и директории на сайте с параметрами.
Пример для проверки: "http://domain.ru/dir/dir2/megadir/mega.php?bu=fu&ugu".
Заранее БОЛЬШОЕ спасибо! :)
Отправлен: 23.05.2006, 21:27
Вопрос задал: 3BEPEK (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Stamm
Здравствуйте, 3BEPEK!
Можно конечно сделать самому, но это сделал за нас Дмитрий Котеров(dklab.ru):

Приложение:

---------
В день - один, ну два подвига, не больше...

Ответ отправил: Stamm (статус: Студент)
Ответ отправлен: 23.05.2006, 22:01


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

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.33 от 25.05.2006
Яндекс Rambler's Top100

В избранное