есть 3 checkbox'a (Иванов, Петров, Сидоров). они не отмечены, т.е. ни на одном не стоит отметка CHECKED.
подскажите пожалйуста код PHP для выгрузки из MySQL, чтобы он выгружал информацию только по отмеченным, а если ничего не отмечено, то сразу по всем трем.
(т.е. если ничего не отмечено, то он выгружает по всем трем фамилиям, а если пользователь отмечает например Иванова, то запрос выгружает только информацию по Иванову).
Заранее, всем огромное спасибо за помощь!
Спустя 2 минуты, 47 секунд (30.04.2011 - 21:59) waldicom написал(а):
Давать имена чекбоксам в таком виде:
В принимающем скрипте проверять этот массив. Если пустой, то по всем трем
<input type="checkbox" name="person[]" />
В принимающем скрипте проверять этот массив. Если пустой, то по всем трем
Спустя 21 час, 35 секунд (1.05.2011 - 19:00) evgeny777 написал(а):
Цитата (waldicom @ 30.04.2011 - 18:59) |
Давать имена чекбоксам в таком виде:<input type="checkbox" name="person[]" /> В принимающем скрипте проверять этот массив. Если пустой, то по всем трем |
а как проверить пустой ли скрипт?
и у меня будет несколько групп чекбоксов, т.е. каждую группу проверять на пустоту? правильно?
Спустя 11 минут, 38 секунд (1.05.2011 - 19:12) sergeiss написал(а):
evgeny777 - чтобы было понятнее и чтобы меньше объяснять, ты просто задай эти несколько групп чекбоксов, для каждой должно быть задано своё имя. Так, как валдиком сказал.
В принимающем скрипте просто "тупо" выведи массив POST и посмотри, что ты там принимаешь. Я надеюсь, что в итоге ты сам поймешь, как проанализировать данные.
Ну, а если будут вопросы - спрашивай.
В принимающем скрипте просто "тупо" выведи массив POST и посмотри, что ты там принимаешь. Я надеюсь, что в итоге ты сам поймешь, как проанализировать данные.
Ну, а если будут вопросы - спрашивай.
Спустя 2 часа, 6 минут, 32 секунды (1.05.2011 - 21:18) evgeny777 написал(а):
Цитата (sergeiss @ 1.05.2011 - 16:12) |
evgeny777 - чтобы было понятнее и чтобы меньше объяснять, ты просто задай эти несколько групп чекбоксов, для каждой должно быть задано своё имя. Так, как валдиком сказал. В принимающем скрипте просто "тупо" выведи массив POST и посмотри, что ты там принимаешь. Я надеюсь, что в итоге ты сам поймешь, как проанализировать данные. Ну, а если будут вопросы - спрашивай. |
sergeiss, я только изучаю PHP поэтому мне проще объяснить на примере
существует код в HTML:
<form action="unload.php" method="post">
<div id="number">
<input type="checkbox" value="1" name="n1" />
<input type="checkbox" value="2" name="n2" />
<input type="checkbox" value="3" name="n3" />
</div>
<div id="letter">
<input type="checkbox" value="A" name="lA" />
<input type="checkbox" value="B" name="lB" />
<input type="checkbox" value="C" name="lC" />
</div>
</form>
и код из unload.php
$N1=$_POST['n1'];
$N2=$_POST['n2'];
$N3=$_POST['n3'];
$lA=$_POST['lA'];
$lB=$_POST['lB'];
$lC=$_POST['lC'];
$query = "select * from sqlbase where (number='$N1' OR number='$N2' OR number='$N3') AND (letter='$lA' OR letter='$lB' OR letter='$lC')";
Соотвественно колонки в базе SQL называются number и lettet
большое спасиьо за любую помощь!!!
Спустя 5 минут, 55 секунд (1.05.2011 - 21:24) sergeiss написал(а):
evgeny777 - во-первых, используй тэги оформления кода (кнопки справа над окном ввода);
во-вторых, смотри сюда:
сделай такую форму
В принимающем сприпте напиши
"Поиграйся" с данными, посмотри, что получаешь.
PS. А что касается SQL-запроса... Это потом. Сначала пойми, какие параметры получаешь.
во-вторых, смотри сюда:
сделай такую форму
<form action="unload.php" method="post">
<div id="number">
<input type="checkbox" value="1" name="n[]" />
<input type="checkbox" value="2" name="n[]" />
<input type="checkbox" value="3" name="n[]" />
</div>
<div id="letter">
<input type="checkbox" value="A" name="a[]" />
<input type="checkbox" value="B" name="a[]" />
<input type="checkbox" value="C" name="a[]" />
</div>
</form>
В принимающем сприпте напиши
echo '<pre>'; var_dump( $_POST ); echo '</pre>';
"Поиграйся" с данными, посмотри, что получаешь.
PS. А что касается SQL-запроса... Это потом. Сначала пойми, какие параметры получаешь.
Спустя 39 минут, 33 секунды (1.05.2011 - 22:04) evgeny777 написал(а):
sergeiss, а форму нужно парописывать через php, чтобы нумерация массива задавалась автоматически?
просто я до этого писаль через обычный html
просто я до этого писаль через обычный html
Спустя 9 минут, 47 секунд (1.05.2011 - 22:13) sergeiss написал(а):
evgeny777 - а где ты увидел в моем примере "нумерацию" массива? Введи тот код, что я тебе написал, ничего лишнего не добавляй. Никаких индексов массива не надо!!!
Спустя 6 часов, 11 минут, 26 секунд (2.05.2011 - 04:25) Гость_liw написал(а):
evgeny777
А что если взять и самому проверить?
Ну то есть добавить этот код в php файл и потом в html - открыть в браузере и посмотреть исходный код. - может тогда не будет таких вопросов.
А что если взять и самому проверить?
Ну то есть добавить этот код в php файл и потом в html - открыть в браузере и посмотреть исходный код. - может тогда не будет таких вопросов.
Спустя 6 часов, 24 минуты, 15 секунд (2.05.2011 - 10:49) evgeny777 написал(а):
Цитата (sergeiss @ 1.05.2011 - 19:13) |
evgeny777 - а где ты увидел в моем примере "нумерацию" массива? Введи тот код, что я тебе написал, ничего лишнего не добавляй. Никаких индексов массива не надо!!! |
Ага! суть понял!
я так понимаю сейчас массив "n" и "a" нужно проверять на пустоту и исходя из этого формировать запрос? правильно?
Спустя 5 минут, 12 секунд (2.05.2011 - 10:54) sergeiss написал(а):
evgeny777 - так что ты получил-то, какие величины в массиве ПОСТ?
Спустя 15 минут, 26 секунд (2.05.2011 - 11:10) evgeny777 написал(а):
sergeiss - по нажатии на кнопку submit получаю два массива [a] и [n]
ниже привожу то, что выводится на экран, если я выделяю все чекбоксы
array(2) {
["n"]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
}
["a"]=>
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "C"
}
}
ниже привожу то, что выводится на экран, если я выделяю все чекбоксы
array(2) {
["n"]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
}
["a"]=>
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "C"
}
}
Спустя 17 минут (2.05.2011 - 11:27) sergeiss написал(а):
Ну так ты выдели часть чек-боксов и подумай потом... Не выдели ничего - и тоже подумай.
Спустя 1 час, 14 минут, 33 секунды (2.05.2011 - 12:41) ИНСИ написал(а):
evgeny777 можешь так попробовать:
$number = array();
$letter = array();
foreach($_POST['n'] as $data) {
if($data == true) $number[] = "number='" . $data . "'";
}
foreach($_POST['a'] as $data) {
if($data == true) $letter[] = "letter='" . $data . "'";
}
$query = mysql_query("
SELECT *
FROM `sqlbase`
WHERE (" . implode(' OR', $number) . ") AND (" . implode(' OR', $letter) . ")
") or die(mysql_error());
Спустя 12 минут, 51 секунда (2.05.2011 - 12:54) evgeny777 написал(а):
sergeiss - проверяю массив n на пустоту, соответственно, если он пустой - прошу учитывать все значения, если не пустой - только выбранные, но что то как то не очень получается (значения N1, N2, N3 не выводятся):
if (empty($n)) {
echo 'массив пустой';
$N1==1;
$N2==2;
$N3==3;
echo $N1, $N2, $N3;
} else {
echo 'массив не пустой';
$N1=$_POST['n[]'];
$N2=$_POST['n[]'];
$N3=$_POST['n[]'];
echo $N1, $N2, $N3;
}
Спустя 6 минут, 58 секунд (2.05.2011 - 13:01) sergeiss написал(а):
evgeny777 - блин... Как ты думаешь, зачем я тебе предлагал сделать вывод в виде
да для того, чёрт побери, чтобы ты понял, какие именно индексы получаются у массива пост, где там вложенные массивы и т.д.
К тому же, что такое у тебя переменная $n? Откуда она взялась????????
echo '<pre>'; var_dump( $_POST ); echo '</pre>';
да для того, чёрт побери, чтобы ты понял, какие именно индексы получаются у массива пост, где там вложенные массивы и т.д.
К тому же, что такое у тебя переменная $n? Откуда она взялась????????
Спустя 18 минут, 17 секунд (2.05.2011 - 13:19) Guest написал(а):
И к слову:
$N1==1;
$N2==2;
$N3==3;
"==" не одно и тоже что "="
$N1==1;
$N2==2;
$N3==3;
"==" не одно и тоже что "="
Спустя 29 минут, 25 секунд (2.05.2011 - 13:49) evgeny777 написал(а):
Цитата (velbox @ 2.05.2011 - 09:41) |
evgeny777 можешь так попробовать:$number = array(); |
velbox спасибо за совет, но выдает ошибку
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 ') AND ()' at line 3
Спустя 6 минут, 25 секунд (2.05.2011 - 13:55) evgeny777 написал(а):
Цитата (sergeiss @ 2.05.2011 - 10:01) |
evgeny777 - блин... Как ты думаешь, зачем я тебе предлагал сделать вывод в виде echo '<pre>'; var_dump( $_POST ); echo '</pre>'; да для того, чёрт побери, чтобы ты понял, какие именно индексы получаются у массива пост, где там вложенные массивы и т.д. К тому же, что такое у тебя переменная $n? Откуда она взялась???????? |
если при проверке массива указываю if (empty(n)) - то ничего не получается.
Спустя 54 минуты, 4 секунды (2.05.2011 - 14:49) sergeiss написал(а):
Так откуда ты эту $n берешь-то??? Ты можешь ответить?
Спустя 3 часа, 2 минуты, 45 секунд (2.05.2011 - 17:52) evgeny777 написал(а):
Цитата (sergeiss @ 2.05.2011 - 11:49) |
Так откуда ты эту $n берешь-то??? Ты можешь ответить? |
sergeiss, какую n ты имеешь в виду?
1. if (empty($n)) - здесь n - это массив "n"
2. а в эти N я пытался перенести выбранные значения
$N1=$_POST['n[]'];
$N2=$_POST['n[]'];
$N3=$_POST['n[]'];
смысл в том, что сначала я проверяю массив на пустоту, если пустой, то $N1, $N2, $N3;
соответсвенно равны 1, 2 и 3, если не пустой, то в $N1, $N2, $N3 равняются соответтсвующим выбранным значениям, далее по этим N я пытался создать sql запрос, чтобы по ним вытащить нужные строки из таблицы
я понимаю что мой вариант не работает, поэтому и прошу помочь его исправить!
Спустя 21 минута, 58 секунд (2.05.2011 - 18:14) sergeiss написал(а):
Я в итоге так и не понял... Ты запускал "мой" код с разными вариантами выборки чек-боксов? Или не запускал? А если запускал, то что получил в итоге, заметил ли какую-либо систему? Сразу скажу: есть чёткая система
И тот код я не зря тебе дал.
Давай сначала с этим разберемся, а потом уже с переменными будем разбираться, которые ты "из воздуха" берешь и удивляешься, что там хрень полная.

Давай сначала с этим разберемся, а потом уже с переменными будем разбираться, которые ты "из воздуха" берешь и удивляешься, что там хрень полная.
Спустя 3 минуты, 54 секунды (2.05.2011 - 18:18) Renden написал(а):
sergeiss
evgeny777
Насколько я понял афтор хочет типа такого:
Зачем так, другой вопрос)
evgeny777
Насколько я понял афтор хочет типа такого:
if (empty($_POST['n'])) {
echo 'массив пустой';
$N1==1;
$N2==2;
$N3==3;
echo $N1, $N2, $N3;
} else {
echo 'массив не пустой';
$N1=$_POST['n'][0];
$N2=$_POST['n'][1];
$N3=$_POST['n'][2];
echo $N1, $N2, $N3;
}
Зачем так, другой вопрос)
Спустя 48 минут, 35 секунд (2.05.2011 - 19:06) evgeny777 написал(а):
Цитата (Renden @ 2.05.2011 - 15:18) |
sergeiss evgeny777 Насколько я понял афтор хочет типа такого:
Зачем так, другой вопрос) |
Renden большое спасибо!!! то что надо! только нужно было не == ставить а =
в итоге получилось:
if (empty($_POST['n'])) {
$N1=1;
$N2=2;
$N3=3;
} else {
$N1=$_POST['n'][0];
$N2=$_POST['n'][1];
$N3=$_POST['n'][2];
}
if (empty($_POST['a'])) {
$A1=A;
$A2=B;
$A3=C;
} else {
$A1=$_POST['a'][0];
$A2=$_POST['a'][1];
$A3=$_POST['a'][2];
}
$query = "select * from sqlbase where (number='$N1' OR number='$N2' OR number='$N3') AND (letter='$A1' OR letter='$A2' OR letter='$A3')";
$sql = mysql_query($query)
or die ("Невозможно выполнить запрос");
sergeiss с массвом я экспериментировал - просто не мог врубиться как передать значения в двумерный массив (так как только учу php и мало опыта)
Всем большое спасибо за помощь!!!
теперь буду думать как оптимизировать этот код...
Спустя 59 минут, 17 секунд (2.05.2011 - 20:06) sergeiss написал(а):
Ты плохо экспериментировал, наверное
Потому что если ты выберешь не все чек-боксы, то тогда в итоге не будут определены некоторые из переменных $N и $A с некоторыми цифрами. Поэтому предложенное тебе решение не является полноценным. Потому что надо проверять, что же было передано на самом деле. И лучше даже записывать то, что передано массивом, не в набор переменных, а в элементы массивов.

Спустя 16 минут, 34 секунды (2.05.2011 - 20:22) evgeny777 написал(а):
Цитата (sergeiss @ 2.05.2011 - 17:06) |
Ты плохо экспериментировал, наверное :) Потому что если ты выберешь не все чек-боксы, то тогда в итоге не будут определены некоторые из переменных $N и $A с некоторыми цифрами. Поэтому предложенное тебе решение не является полноценным. Потому что надо проверять, что же было передано на самом деле. И лучше даже записывать то, что передано массивом, не в набор переменных, а в элементы массивов. |
sergeiss я видел что те чекбоксы, которые я не отмечал, не определяются как элементы массива и не выводяться на экран. просто если чекбокс не выбран, то соответствующей переменной ничего и не передается и в sql-запросе эта переменная определяется как пусто и запрос тянет только те переменные,которые определились (где отмечены чекбоксы).
а что ты имеешь в виду под записывать массивом? может пример скинуть? и главное как потом по этому массиву вытащить данные из SQL? по аналогии что velbox пердлагал?:
$number = array();
$letter = array();
foreach($_POST['n'] as $data) {
if($data == true) $number[] = "number='" . $data . "'";
}
foreach($_POST['a'] as $data) {
if($data == true) $letter[] = "letter='" . $data . "'";
}
$query = mysql_query("
SELECT *
FROM `sqlbase`
WHERE (" . implode(' OR', $number) . ") AND (" . implode(' OR', $letter) . ")
") or die(mysql_error());
Спустя 1 час, 48 минут, 2 секунды (2.05.2011 - 22:10) sergeiss написал(а):
Если честно... То не хочу писать код за человека, который думать особо не хочет. Хотя, я считаю, уж куда как понятнее объяснили... И я, и velbox. Я пытаюсь сделать так, чтоб ты понял. velbox так вообще код написал. Который только немного доработать надо, чтоб он работал с неопределенным заранее числом чек-боксов. Для этого надо только немного подумать.
Спустя 7 минут, 3 секунды (2.05.2011 - 22:17) evgeny777 написал(а):
sergeiss спасибо и на этом - ты мне здорово помог!
Спустя 8 часов, 26 минут, 2 секунды (3.05.2011 - 06:43) ИНСИ написал(а):
Цитата |
чтоб он работал с неопределенным заранее числом чек-боксов |
А разве сейчас не так? Я вроде сделал чтобы с неограниченным числом чекбоксов работал скрипт. Мне просто самому интересно что еще надо дописать.
Спустя 7 минут, 44 секунды (3.05.2011 - 06:51) ИНСИ написал(а):
sergeiss да, я понял. Ведь может быть ошибка если не выбран не один из чекбоксов, так надо было доработать?
$number = array();
$letter = array();
foreach($_POST['n'] as $data) {
if($data == true) $number[] = "number='" . $data . "'";
}
foreach($_POST['a'] as $data) {
if($data == true) $letter[] = "letter='" . $data . "'";
}
if(sizeof($number) > 0 && sizeof($letter) > 0)
$query = "WHERE (" . implode(' OR', $number) . ") AND (" . implode(' OR', $letter) . ")";
else if(sizeof($number) > 0)
$query = "WHERE " . implode(' OR', $number);
else if(sizeof($letter) > 0)
$query = "WHERE " . implode(' OR', $letter);
$query = mysql_query("
SELECT *
FROM `sqlbase`
{$query}
") or die(mysql_error());
Спустя 3 часа, 35 минут, 44 секунды (3.05.2011 - 10:27) sergeiss написал(а):
velbox - извиняй, у тебя было более-менее сделано
Хотя последняя доработка сделала скрипт еще лучше.
Но и все равно осталась проблема: сравнение if($data == true) некорректно. Потому что в $data содержится текст, который был в value, а не логическое true/false. Эта проверка вообще не нужна!!! А вот защиты от SQL-инъекции нету
И, между прочим, последнюю многоэтажную конструкцию с "if-else if" можно заменить одной строкой. Просто сделать несколько "вложенных" implode. А потом, если длина полученной строки больше 0, формировать окончательное условие.....
PS. Но в любом случае я лично предпочитаю не писать код для человека до тех пор, пока он сам не начнет его писать.

Но и все равно осталась проблема: сравнение if($data == true) некорректно. Потому что в $data содержится текст, который был в value, а не логическое true/false. Эта проверка вообще не нужна!!! А вот защиты от SQL-инъекции нету

И, между прочим, последнюю многоэтажную конструкцию с "if-else if" можно заменить одной строкой. Просто сделать несколько "вложенных" implode. А потом, если длина полученной строки больше 0, формировать окончательное условие.....
PS. Но в любом случае я лично предпочитаю не писать код для человека до тех пор, пока он сам не начнет его писать.
Спустя 6 часов, 4 минуты, 18 секунд (3.05.2011 - 16:31) ИНСИ написал(а):
Цитата |
if($data == true) некорректно. Потому что в $data содержится текст, который был в value |
Скрипт ведь работает. Имею в виду проходит проверка на checked и value успешно вставляются.
Цитата |
А вот защиты от SQL-инъекции нету |
Я даже и не парился ее делать. Хоть что-то оставил автору.
Цитата |
И, между прочим, последнюю многоэтажную конструкцию с "if-else if" можно заменить одной строкой. |
Согласен, взял на заметку.
Цитата |
PS. Но в любом случае я лично предпочитаю не писать код для человека до тех пор, пока он сам не начнет его писать. |
И не буду


Спустя 5 часов, 45 минут, 27 секунд (3.05.2011 - 22:17) sergeiss написал(а):
Цитата (velbox @ 3.05.2011 - 17:31) |
Цитата if($data == true) некорректно. Потому что в $data содержится текст, который был в value Скрипт ведь работает. Имею в виду проходит проверка на checked и value успешно вставляются. |
Ну...
Во-первых, все-таки некорректно

Во-вторых, такое сравнение вообще делать не надо

И я написал "сравнение некорректно" имея ввиду именно то, что у меня тут "во-вторых".