Вопрос № 43722: Здравствуйте, уважаемые эксперты! Нужна ваша помощь. Есть две таблицы MySQL. Одна - страны-производители(id, country), в другой - товары(id, country_id). Строю список checkbox`ов из стран(см. приложение). Подскажите, пожалуйста, как сформировать запр...Вопрос № 43731: Здравствуйте, эксперты!
Помогите найти ошибку.
При выполнении кода выдает, что не возможно выполнить запрос, хотя к базе данных подключается нормально, и таблица, в которую нужно занести тоже открывается и дает к себе доступ....Вопрос № 43765: Здравствуйте. Сегодня выгрузил скрипт на unix сервер (на локалке стоял под win32).
Очень интересно получается:
1.
$DateCreated = "28-05-2004";
list( $day, $month, $year ) = explode( "-", $DateCreated );
$DateCr...Вопрос № 43776: Добрый вечер! У меня такой вопрос: можно ли сделать так чтобы только один посетитель мог внести изменения в файл на .php? Т.е. сначала первый вносит изменения, потом второй, потом третий и т.д. а не вместе, чтобы каждый последующий видел изменение пр...
Вопрос № 43.722
Здравствуйте, уважаемые эксперты! Нужна ваша помощь. Есть две таблицы MySQL. Одна - страны-производители(id, country), в другой - товары(id, country_id). Строю список checkbox`ов из стран(см. приложение). Подскажите, пожалуйста, как сформировать запрос для выборки товаров выбранных стран(возможно, еще нужно сменить способ построения списка группы checkox`ов)? Заранее благодарен!
Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Андрющенко Вячеслав Васильевич!
В форму добавляешь также скрытые поля:
1. Поле MinId (минимальный номер идентификатора страны)
2. Поле MaxId (максимальный номер идентификатора страны)
Будем считать, что форма передается методом POST, а таблица товары называется tovary :)
<form action="select.php" method=post>
В файле select.php тогда должен быть подобный скрипт:
<?php
if isset(isset($_POST["MinID"]) and isset($_POST["MaxID"]))
{
$query="SELECT * FROM `tovary` WHERE";
for ($id=$_POST["MinID"],$id<=$_POST["MaxID"])
{
if (isset($_POST[$id]) and $_POST[$id])=="on")
{
$query=$query."`country_id`=".$id." OR";
}
}
$query=$query." 1=2"
}
?>
В конце $query - это твой запрос для выборки.
Я добавляю в $query в конце 1=2 на тот случай если не выбрано ни одного checkboxa.
В этом случае после WHERE в запросе не будет ничего и MySQL будет долго ругаться :)
А от того что я добавляю заведомо ложное условия результат не изменится.
Удачи!!!
Приложение:
--------- Ответы на все вопросы - на сайте www.ya.ru :)
Отвечает: Константин
Здравствуйте, Андрющенко Вячеслав Васильевич!
А где ты берешь список нужных стран?
Допустим, нужно выбрать страны 1, 5, 26
Тогда запрос такой:
$sql = 'SELECT goods.id AS GoodID
FROM suppliers INNER JOIN goods ON suppliers.id=goods.country_id
WHERE suppliers.id = 1 OR suppliers.id = 5 OR suppliers.id = 26'
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result))
{
echo $row['GoodID']."<br>
";
}
Это выведет все товары, которые производят в странах с ID 1, 5, 26
Как работает SQL? Мы объединяем 2 таблицы по ID, потом выбираем нужные строки (т.е. с нужным ID)
После этого говорим что в запросе нам нужно только одно поле - ID товара, которое нам удобно называть по GoodID. Все. Потом уже идет пхп.
Посмотри справочники по SQL. И попробуй сложные SELECT-запросы в phpMyAdmin. Помогает :) Удачи.
--------- Лучше сделать и жалеть, чем жалеть о том что не сделал
Ответ отправил: Константин (статус: 5-ый класс)
Ответ отправлен: 21.05.2006, 11:54
Попробуйте таким способом:
echo "<form (с атрибутами)>";
$result = mysql_query('SELECT * FROM countries');
while ($row = mysql_fetch_array($result))
{
echo "<input type='checkbox' name='selected_country[]' value=".$row['id'].">".$row['country']."<br>";
";
}
А анализировать надо так:
$country_list=implode(",", $_REQUEST["selected_country"]);
$result = mysql_query('SELECT * FROM goods where country_id in (".$country_list.")');
Ответ отправил: PVS (статус: 1-ый класс)
Ответ отправлен: 22.05.2006, 10:30
Вопрос № 43.731
Здравствуйте, эксперты!
Помогите найти ошибку.
При выполнении кода выдает, что не возможно выполнить запрос, хотя к базе данных подключается нормально, и таблица, в которую нужно занести тоже открывается и дает к себе доступ.
Приложение:
Отправлен: 21.05.2006, 11:32
Вопрос задал: Godal (статус: 2-ой класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Godal!
Все поля, которые у Вас не числового типа нужно заключать в кавычки.
Т. е. Ваш запрос после его формирования выглядит так (echo $sql;):
INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (ddd,ddd,fff,gfhh,ffff);
(В скобочках значения для примера), а нужно вот так:
INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES ('ddd','ddd','fff','gfhh','ffff');
Числовые поля не обязательно заключать в кавычки. Я посчитал, что у Вас поле sum числовое, а остальные - нет. Запрос должен выглядеть так:
$sql = "INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES ('" . $_datadb[$i] . "'," . $_sum[$i] . ",'" . $_naim[$i] . "','" . $_kolvo[$i] . "','" . $_kateg[$i] . "')";
--------- Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: 10-ый класс)
Ответ отправлен: 21.05.2006, 11:41 Оценка за ответ: 5 Комментарий оценки: Сделал как Вы сказали, все работает. Спасибо.
Отвечает: Константин
Здравствуйте, Godal!
А типы всех полей - целочисленные?
Кавычки не стоят.
И MySQL выполняет запрос
INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (datadb, sum, naim, kolvo, kateg)
Если datadb, sum, naim, kolvo, kateg - это целые числа и data, sum, naim, kolvo, kategoria - это целочисленные поля, тогда причина неизвестна. если нет, то все ясно - надо ставить кавычки вокруг строк.
Т.е. INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES ('datadb', 'sum', 'naim', 'kolvo', 'kateg')
А вообще, для отладки можно было изменить код так:
for ($i = 1; $i<=3; $i++)
{
$sql = "INSERT INTO avans (data, sum, naim, kolvo, kategoria) VALUES (" . $_datadb[$i] . "," . $_sum[$i] . "," . $_naim[$i] . "," . $_kolvo[$i] . "," . $_kateg[$i] . ")";
if (!mysql_query($sql, $rc))
{
echo "Не могу выполнить запрос $sql<br>";
}
}
И ты бы увидел, что у тебя получается. Если ошибка в запросене видна, беремэтот запрос и выполняем в phpMyAdmin (я такделаю) или в консоли MySQL. Оба варианта говорят, в чем ошибка.
Еще ошибка может быть, если у пользователя test_lordfa нет прав на вставку в БД test_lordfa в таблицу avans.
--------- Лучше сделать и жалеть, чем жалеть о том что не сделал
Ответ отправил: Константин (статус: 5-ый класс)
Ответ отправлен: 21.05.2006, 15:16
Отвечает: Alexey Vilchinsky
Здравствуйте, Godal!
возможно у вас есть в таблице текстовые поля (при выполнении запроса их значения надо брать в одинарные кавычки 'привет').
Если все поля числовые, то проверьте, возможно у вас потерялось какое то значение и там пусто либо не число, тогда естественно будет выдаваться ошибка в запросе.
--------- Делая людям добро, мы возвращаем его многократно...
Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 22.05.2006, 08:31
Отвечает: PVS
Здравствуйте, Godal!
Насколько я понимаю $_kateg - текстовые данные. Их в базу надо писать ссответственно как тект (в одиночных кавычках), тоесть Ваш запрос должен выглядеть примерно так:
Ответ отправил: PVS (статус: 1-ый класс)
Ответ отправлен: 22.05.2006, 10:19
Вопрос № 43.765
Здравствуйте. Сегодня выгрузил скрипт на unix сервер (на локалке стоял под win32).
Очень интересно получается:
1.
$DateCreated = "28-05-2004";
list( $day, $month, $year ) = explode( "-", $DateCreated );
$DateCreated = mktime( 0, 0, 0, $month, $day, $year );
результат win32-1085670000, unix-1085691600
на локалке показал одну дату, на реальном другую, почему?
2. Регулярные выражения:
есть функция для проверки не пустого значения из форм:
function _null( $str ) {
if( preg_match( "/w/", $str, $tmp ) ) return false;
else
return true;
}
англиское слово все нормально, русские выдает что форма пустая
почему?
пока вроде все сюрпризы, может кто знает что еще ждет меня:)
Отвечает: Ерёмин Андрей
Здравствуйте, Оськин Дмитрий Владимирович!
1. Не считал, какая разница в этих значениях по времени, но здесь ошибок быть не может. Наиболее вероятные причины: а) Выполнение на локальном компьютере и на сервере велось не одновременно (менее значимый "отрыв"); б) Между вашим локальным временем и временем сервера разница в несколько часов. Например, если вы хоститесь на московских серверах, а сами с Дальнего Востока, то уже пойдёт разница в несколько часов - вот и видимый "разрыв". А вообще - попробуйте выполнить одновременно скрипты
у себя и на сервере и посчитать, сколько же минут/часов даст разница.
2. Потому что PHP изначально имеет английский интерфейс и русские он буквы он не знает и изучать пока что не собирается :-) Если хотите проверить, пуста ли строка - сделайте простым способом: if (strlen($str) > 0) { ... строка введена ... } А ещё есть удобные функции: ltrim() - удаляет пробелы из начала строки, rtrim() - из конца, trim() - и начала и из конца.
Удачи!
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор) Россия, Тула WWW:Программирование на DELPHI: Всё для программиста. ICQ: 286837644 ---- Ответ отправлен: 21.05.2006, 18:44 Оценка за ответ: 3 Комментарий оценки: Скрипт запускал практически одновременно. но он же не использует функцию time() а прсто берет с датой и переводит ее в стандартное числовое время. Так почему же проблема с датой
Отвечает: Stamm
Здравствуйте, Оськин Дмитрий Владимирович!
2) Следует включить русскую локаль ф-цией setlocale(). Все параметры спрашивайте у хостера
--------- В день - один, ну два подвига, не больше...
Ответ отправил: Stamm (статус: Студент)
Ответ отправлен: 22.05.2006, 08:22
Отвечает: Alexey Vilchinsky
Здравствуйте, Оськин Дмитрий Владимирович!
1. Возможно на юниксовом серваке стоит другая часовая зона (отличие в 6 часов с твоим временем)
2.
Напиши так
if( preg_match( "/S+/", $str, $tmp ) ) return false;
--------- Делая людям добро, мы возвращаем его многократно...
Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 22.05.2006, 08:36
Вопрос № 43.776
Добрый вечер! У меня такой вопрос: можно ли сделать так чтобы только один посетитель мог внести изменения в файл на .php? Т.е. сначала первый вносит изменения, потом второй, потом третий и т.д. а не вместе, чтобы каждый последующий видел изменение предыдущего, а скажем не первого! Извините, если задал вопрос криво, надеюсь, Вы поняли и сможете мне помочь! Заранее спасибо!
Отвечает: Alexey Vilchinsky
Здравствуйте, Грицай Алексей Юрьевич!
Я так думаю надо здесь настроить cvs.
--------- Делая людям добро, мы возвращаем его многократно...
Ответ отправил: Alexey Vilchinsky (статус: 8-ой класс)
Ответ отправлен: 22.05.2006, 08:38
Отвечает: Cybernetic_Creature
Здравствуйте, Грицай Алексей Юрьевич!
да есть такая функция.
http://php.net/manual/ru/function.flock.php
она временно блокирует файл, пока работает с ним.
Ответ отправил: Cybernetic_Creature (статус: Специалист)
Ответ отправлен: 22.05.2006, 14:40 Оценка за ответ: 5