У меня такой вопрос: Делая страницу управления пользователями на сайте столкнулся с такой проблемой сделал что пользователей можно отмечать через чекбоксы а затем нажать проверить на соответствие определенного параметра и если у какого то из пользователей он не соответствует то вывести ошибку.
Так вот т.к через чекбоксы мы получаем массив с айдишниками пользователей я сделал так
$chk = $_POST["chk"]; // Массив с айди
$ids = implode(",", $chk);
$ids2 = implode(explode(",",$ids));
if (!is_numeric($ids2))
{
echo "<img src=\"images/error.png\" align=\"absmiddle\"> <font color=\"red\"><b>Ошибка! Попытка накрутки системы!</b></font>";
echo "</td></tr></table>";
include('footer.php'); exit();
}
Так вот а как организовать чтоб выполнялась проверка у кажного из выбраных пользователей и если где то ошибка то останавливалось выполнение и выводилось сообщение что у данного пользователя параметры не соответствуют ?
Заранее всем спасибо
Спустя 6 минут, 40 секунд (25.10.2010 - 00:01) blade написал(а):
массив получаем в таком виде номер ID,номер ID,номер ID и т.д
Спустя 18 минут, 29 секунд (25.10.2010 - 00:19) Invis1ble написал(а):
можно так:
$error_flag = false;
foreach ($_POST['chk'] as $id)
{
if (!is_numeric($id))
{
$error_flag = true;
break;
}
}
if ($error_flag)
{
echo "<img src='images/error.png' align='absmiddle'> <font color='red'><b>Ошибка! Попытка накрутки системы!</b></font>";
echo "</td></tr></table>";
include('footer.php');
exit();
}
Спустя 7 минут, 34 секунды (25.10.2010 - 00:27) blade написал(а):
мне нужна совсем другая проверка по БД а не по числу! Как вы можите видеть я ее уже осуществил.
Проверка по параметрам содержащимся в БД
Проверка по параметрам содержащимся в БД
Спустя 2 минуты, 27 секунд (25.10.2010 - 00:29) blade написал(а):
Чтоб данные брались из БД у пользователей ид которых содержится в массиве
Спустя 20 минут, 23 секунды (25.10.2010 - 00:50) Invis1ble написал(а):
Цитата |
Чтоб данные брались из БД у пользователей ид которых содержится в массиве |
тогда примерно так (если я правильно понял задачу) :
$error_flag = false;
foreach ($_POST['chk'] as $id)
{
if (!is_numeric($id))
{
$error_flag = true;
break;
}
}
if ($error_flag)
{
echo "<img src='images/error.png' align='absmiddle'> <font color='red'><b>Ошибка! Попытка накрутки системы!</b></font>";
echo "</td></tr></table>";
include('footer.php');
exit();
}
$users = array();
foreach ($_POST['chk'] as $id)
{
$query = "SELECT * FROM `users` WHERE `id`=" . (int)$id;
$result = mysql_query($query, $dblink);
while ($data = mysql_fetch_assoc($result))
$users[] = $data; // в этом массиве все данные пользователей с id, содержащимися в массиве $_POST['chk']
}
Спустя 7 часов, 13 минут, 23 секунды (25.10.2010 - 08:03) Michael написал(а):
Так:
$ids = array_map('intval', $ids); // для защиты от иньекций
$ids = implode(",", $ids);
$query = 'SELECT count(*) FROM users WHERE id IN(' . $ids . ') AND dostup != 1';
$res = mysql_query($query);
if ($res) {
$row = mysql_fetch_row($res);
if ($row[0] != 0) {
// значит среди этих пользователей имеются те, у которых например доступ не равен 1
}
} else {
// ошибку обрабатываем
}
Спустя 2 часа, 17 минут, 40 секунд (25.10.2010 - 10:21) blade написал(а):
Цитата (Michael @ 25.10.2010 - 05:03) |
Так:$ids = array_map('intval', $ids); // для защиты от иньекций |
Данный код не срабатывает
Спустя 22 минуты, 11 секунд (25.10.2010 - 10:43) blade написал(а):
все исправил теперь работает.
пытаюсь проверить с помощью этого кода на существование пользователей но что-то невыходит.
Что я делаю не так ?
пытаюсь проверить с помощью этого кода на существование пользователей но что-то невыходит.
Что я делаю не так ?
include('config.php');
$res = mysql_query("SELECT COUNT(*) FROM tb_users WHERE id IN(".$ids.")");
if ($res)
{
$row = mysql_fetch_row($res);
if ($row[0] == 0)
{
echo "<img src=\"images/error.png\" align=\"absmiddle\"> <font color=\"red\"><b>Ошибка! Выбраных пользователей не существует!</b></font>";
echo "<br><a href=\"place.php\">« Назад</a>";
echo "</td></tr></table>";
include('footer.php'); exit();
}
} else {
echo "<img src=\"images/error.png\" align=\"absmiddle\"> <font color=\"red\"><b>Ошибка! Запрос на выборку не прошел!</b></font>";
echo "<br><a href=\"place.php\">« Назад</a>";
echo "</td></tr></table>";
include('footer.php'); exit();
}
mysql_close();
Спустя 4 минуты, 25 секунд (25.10.2010 - 10:47) linker написал(а):
if (!mysql_num_rows($res))
{
echo "<img src=\"images/error.png\" align=\"absmiddle\"> <font color=\"red\"><b>Ошибка! Выбраных пользователей не существует!</b></font>";
echo "<br><a href=\"place.php\">« Назад</a>";
echo "</td></tr></table>";
include('footer.php'); exit();
}
Спустя 3 минуты, 20 секунд (25.10.2010 - 10:51) Michael написал(а):
Если на существование то лучше так же наверное:
if ($row[0] != count($ids)) {
// в списке есть "заяц"
}
Спустя 26 минут, 42 секунды (25.10.2010 - 11:17) linker написал(а):
Млин, чет я проглядел запрос
if (!mysql_result($res, 0))
{
...
}
Спустя 2 часа, 49 минут (25.10.2010 - 14:06) blade написал(а):
Данный код пропускает
т.е если через исходники поменять в чекбоксе ид на например 324324543 то при выборе код его пропускает вроде как пользователь есть хоть на самом деле его нет
include('config.php');
$res = mysql_query("SELECT COUNT(*) FROM tb_users WHERE id IN(".$ids.")");
if ($res)
{
$row = mysql_fetch_row($res);
if ($row[0]!=count($ids))
{
echo "<img src=\"images/error.png\" align=\"absmiddle\"> <font color=\"red\"><b>Ошибка! Среди выбраных пользователей, есть пользователи которых не существует!</b></font>";
echo "<br><a href=\"replace.php\">« Назад на страницу замены</a>";
include('footer.php'); exit();
}
} else {
echo "<img src=\"images/error.png\" align=\"absmiddle\"> <font color=\"red\"><b>Ошибка! Запрос на выборку не прошел!</b></font>";
echo "<br><a href=\"replace.php\">« Назад на страницу замены</a>";
include('footer.php'); exit();
}
mysql_close();
т.е если через исходники поменять в чекбоксе ид на например 324324543 то при выборе код его пропускает вроде как пользователь есть хоть на самом деле его нет
Спустя 35 минут, 18 секунд (25.10.2010 - 14:42) Michael написал(а):
ну если именно от этого защищаешься , то не SELECT COUNT(*), а SELECT id и сравни с тем, что из базы
Спустя 1 минута, 40 секунд (25.10.2010 - 14:43) blade написал(а):
я защищаюсь именно от подмены ID пользователя чтоб если подменили черезщ исходный код страницы сработала защита и выбило ошибку
Спустя 14 минут (25.10.2010 - 14:57) Michael написал(а):
Цитата (blade @ 25.10.2010 - 13:06) |
Данный код пропускает т.е если через исходники поменять в чекбоксе ид на например 324324543 то при выборе код его пропускает вроде как пользователь есть хоть на самом деле его нет |
Точно.
Там надо:
$ids2 = implode(",", $ids);
...
$res = mysql_query("SELECT COUNT(*) FROM tb_users WHERE id IN(".$ids2.")");
, чтобы $ids строка не перетирала массив, т.к. count($ids) считается
Спустя 24 минуты, 17 секунд (25.10.2010 - 15:22) blade написал(а):
$ids3 = implode(",", $ids);
include('config.php');
$res = mysql_query("SELECT COUNT(*) FROM tb_users WHERE id IN(".$ids3.")");
if ($res)
{
$row = mysql_fetch_row($res);
if ($row[0] != count($ids))
{
echo "<img src=\"images/error.png\" align=\"absmiddle\"> <font color=\"red\"><b>Ошибка! Среди выбранных пользователей есть несуществующие!</b></font>";
echo "<br><a href=\"replace.php\">« Назад на страницу замены</a>";
include('footer.php'); exit();
}
} else {
echo "<img src=\"images/error.png\" align=\"absmiddle\"> <font color=\"red\"><b>Ошибка! Запрос на выборку не прошел!</b></font>";
echo "<br><a href=\"replace.php\">« Назад на страницу замены</a>";
include('footer.php'); exit();
}
mysql_close();
Так даже запрос на выборку не проходит
Спустя 9 минут, 53 секунды (25.10.2010 - 15:31) Michael написал(а):
Цитата (blade @ 25.10.2010 - 14:22) |
Так даже запрос на выборку не проходит |
Ты всегда в программировании так общими фразами общаешься? Сильно интересно вытягивать из тебя ответы ...
Что значит не проходит? Ошибка что ли? Какая? Если нет, то чему равно $row[0]? А чему должно быть равно? Чему равен count($ids) ? А чему должен? и т.д.
p.s. Это все вопросы, которые программист должен уметь задавать сам себе при дебаге.
Спустя 31 минута, 44 секунды (25.10.2010 - 16:03) blade написал(а):
При использовании кода написаного мною выше выводится сообщение
"Ошибка! Запрос на выборку не прошел!".
А почему а не всевышний, и не такой уж асс в программировании поэтому и создал тему в разделе для новичков
"Ошибка! Запрос на выборку не прошел!".
А почему а не всевышний, и не такой уж асс в программировании поэтому и создал тему в разделе для новичков