По задумке, скрипт должен выводить список пользователей со значением поля points в бд = 0. Тот пользователь которому это все показывается, кликает галочки на против тех, кого надо удалить и жмет кнопку delete. Но у меня почему-то грузится пустая страница

думаю что проблема в нерправильном расположении конструкций if else, а именно там где проверяется нажата ли кнопка delete
Может кто-нибудь помочь

?
читать дальше
<? $page_title = 'Удаление учеников';
include('header.php');
setlocale (LC_ALL, 'ru_RU.cp1251');
session_start();
if (!$_SESSION[login]) {
echo "Нужно <a href='login.php'>Войти</a>";
include ('footer.php');
} elseif(!in_array($_SESSION['userdata']['stat'], array("Директор", "Декан")))
{
echo "<a href='./login.php'>Доступ запрещен</a>";
}
else
{
include ('connection.php');
if ($_GET['action'] = "delete") {
if($delete){
$checkbox=$_POST[checkbox];
for($i=0;$i<count($checkbox);$i++){
$id = $checkbox[$i];
$querysub = "SELECT email, nick, faculty FROM test WHERE id='$id'";
$resultsub = mysql_query($querysub) or die("ERROR: $query.".mysql_error());
$row2 = mysql_fetch_assoc($resultsub);
$name = $row2['nick'];
$faculta = $row2['faculty'];
$email = $row2['email'];
include('emails/sending_details5.php');
mail($email, $subject, $message, $headers);
mysql_query("DELETE FROM test WHERE id=$id LIMIT 1");
if ($faculta == 'Элквуд') {
mysql_query("DELETE FROM ElwUsers WHERE `Name`='$name'");
} elseif ($faculta == 'Аквилмар') {
mysql_query("DELETE FROM AqmUsers WHERE `Name`='$name'");
} elseif ($faculta == 'Фокстейн') {
mysql_query("DELETE FROM FxtUsers WHERE `Name`='$name'");
}
$result = mysql_query($sql);
}
// Redirect to page if deleted ok.
if($result){
header("location: /delete.php");
}
}
}
else {
include ('connection.php');
$query = "SELECT stat FROM test WHERE nick = '".addslashes($_SESSION[login])."'";
$result = mysql_query($query) or die("ERROR: $query.".mysql_error());
$row = mysql_fetch_assoc($result);
switch($row[stat])
{
case 'Директор':
$query2 = "SELECT * FROM test WHERE (stat = 'Ученик' OR stat = 'Префект') AND points = '0' ORDER by faculty";
$result2 = mysql_query($query2) or die ("ERROR: $query2.".mysql_error());
if (mysql_num_rows($result2) > 0) {
// yes
// print them one after another
echo "<p><b>Списки учеников </b><br>
<form action='?action=delete' method='post' />
<table id=\"journal\">
<tr>
<td><b>Имя</b></td>
<td><b>Факультет</b></td>
<td><b>Курс</b></td>
<td><b>Баллы</b></td>
<td><b>Дата регистрации</b></td>
<td><b>Удалить? <input type='checkbox' name='sAll' 'selectAll(this)' /> (Отметить все)</b></td>
</tr>";
$num = $start;
$classnames = array(
"Префект" => "prf",
"Ученик" => "stu",
);
while($row2 = mysql_fetch_assoc($result2)) {
echo "<tr class='" . $classnames[$row2['stat']] . "'>";
echo " <td><a href=\"javasсript:void(0);\" \"openwin('inform.php?id=".$row2['id']."');return false\">".$row2['nick']."</a></td>";
echo " <td>".$row2['faculty']."</td>";
echo " <td>".$row2['course']."</td>";
echo " <td>".$row2['points']."</td>";
echo " <td>".$row2['date']."</td>";
echo " <td><input name='checkbox[]' type='checkbox' id='checkbox[]' value=\"".$row2['id']."\" /></td>";
echo "</tr>";
}
echo "</table>";
echo "<input name='delete' type='submit' id='delete' value='Delete' class='submit'>
Вернуться в <a href=\"menu.php\">главное меню</a></div>";
echo "</form></p>";
}
else {
echo '<div id="contenido"><center>Учеников с количеством баллов > 0 нет!<br>Вернуться в <a href=menu.php>глваное меню</a></center></div>';
}
break;
case 'Декан':
$query2 = "SELECT * FROM test WHERE faculty = '" . mysql_escape_string($_SESSION['userdata']['faculty']) . "' AND (stat = 'Ученик' OR stat = 'Префект') AND points = '0' ORDER by date";
$result2 = mysql_query($query2) or die ("ERROR: $query2.".mysql_error());
if (mysql_num_rows($result2) > 0) {
// yes
// print them one after another
echo "<p><b>Списки учеников </b><br>
<form action='?action=delete' method='post' />
<table id=\"journal\">
<tr>
<td><b>Имя</b></td>
<td><b>Факультет</b></td>
<td><b>Курс</b></td>
<td><b>Баллы</b></td>
<td><b>Дата регистрации</b></td>
<td><b>Удалить? <input type='checkbox' name='sAll' 'selectAll(this)' /> (Отметить все)</b></td>>
</tr>";
$num = $start;
$classnames = array(
"Префект" => "prf",
"Ученик" => "stu",
);
while($row2 = mysql_fetch_assoc($result2)) {
echo "<tr class='" . $classnames[$row2['stat']] . "'>";
echo " <td><a href=\"javasсript:void(0);\" \"openwin('inform.php?id=".$row2['id']."');return false\">".$row2['nick']."</a></td>";
echo " <td>".$row2['faculty']."</td>";
echo " <td>".$row2['course']."</td>";
echo " <td>".$row2['points']."</td>";
echo " <td>".$row2['date']."</td>";
echo " <td><input name='checkbox[]' type='checkbox' id='checkbox[]' value=\"".$row2['id']."\" /></td>";
echo "</tr>";
}
echo "</table>";
echo "<input name='delete' type='submit' id='delete' value='Delete' class='submit'>
Вернуться в <a href=\"menu.php\">главное меню</a></div>";
echo "</form></p>";
}
else {
echo '<div id="contenido"><center>Учеников с количеством баллов > 0 нет!<br>Вернуться в <a href=menu.php>глваное меню</a></center></div>';
}
break;
}
}
include('footer.php');
}
?>
if ($_GET['action'] = "delete") всегда true поскольку ты проверяешь произошла ли операция присваивания переменной $_GET['action'] значение delete. А тебе надо сравнивать, то есть if ($_GET['action'] == "delete")
а где переменная определена? и что она вообще должна значить?
$checkbox=$_POST['checkbox'];
foreach($checkbox as $id){
$id = intval($id);
$querysub = "SELECT email, nick, faculty FROM test WHERE id='$id'";
А, то мало ли что пошлют нам...
что-то типа: $_POST['checkbox']=array("0' or '1'='1");
$delete по моей задумке из формы берется
Или мне бы следовало ее вот так где-нибудь перед if объявить
$delete=$_POST['delete']; ?
Сейчас при нажатии Delete ничего не удаляет, но выдает вот такой url
gviragon.ru/?action=delete
Кстати, не нужно задавать и id и name в input'е. В данном случае принято, что они именуются по name.
И да, нужно было явно присвоить значение. Откуда оно просто так-то возьмётся? Разве что register_globals on (фу, гадость какая...). Только я не понимаю, зачем здесь вообще эта проверка, если форма одна?
checkbox=$_POST[checkbox];
Так писать вообще-то не стоит. Элементы ассоциативного массива указываются в кавычках:
$_POST['checkbox']
. А у тебя раз через раз. Без кавычек это считается константой. А если она не определена, то PHP преобразует текст в строку (единственное, почему такая конструкция, как у тебя, вообще работает).if (mysql_num_rows($result2) > 0)
Сравнение с нулём лишнее. Условный оператор работает с логическими значениями: false (ноль) или true (НЕ ноль). Поэтому любое значение больше нуля будет приравнено к true.
<input type='checkbox' name='sAll' 'selectAll(this)' />
Куда потеряли onclick? Или что там должно было быть...
<form action='?action=delete' method='post' />
Если запрос к серверу ведётся методом POST, то PHP не будет пытаться анализировать строку запроса и заполнять массив
$_GET[]
. Ваш action=delete лучше запихнуть скрытым полем (input type = hidden), раз он так нужен и брать тоже из$_POST[]
. Только он тут не нужен. Кроме того, обращаться к скрипту нужно по имени. Т.е., например, <form action="delete.php" method="POST" />.FVA
произошла ли операция присваивания переменной $_GET['action'] значение delete
Неудачная операция присваивания приведёт к ошибке со всеми вытекающими отсюда ворнингами и т.д.
Конструкция типа
if ($a = 'что-нибудь')
всего-лишь присвоит переменной значение и проверит не является ли оно нулём (точнее false) после приведения этого значения к логическому типу.lugavchik
Даже лучше
abs()
, а неintval()
— сомневаюсь, что здесь могут быть отрицательные числа.Запихнул удаление в отельные фаил user_del.php
if (isset($_GET['submit'])) {
include('connection.php');
$checkbox=$_POST['checkbox'];
foreach($checkbox as $id){
$id = intval($id);
$querysub = "SELECT email, nick, faculty FROM test WHERE id='$id'";
$resultsub = mysql_query($querysub) or die("ERROR: $query.".mysql_error());
$row2 = mysql_fetch_assoc($resultsub);
$name = $row2['nick'];
$faculta = $row2['faculty'];
$email = $row2['email'];
include('emails/sending_details5.php');
mail($email, $subject, $message, $headers);
mysql_query("DELETE FROM test WHERE id=$id LIMIT 1");
if ($faculta == 'Элквуд') {
mysql_query("DELETE FROM ElwUsers WHERE `Name`='$name'");
} elseif ($faculta == 'Аквилмар') {
mysql_query("DELETE FROM AqmUsers WHERE `Name`='$name'");
} elseif ($faculta == 'Фокстейн') {
mysql_query("DELETE FROM FxtUsers WHERE `Name`='$name'");
}
$result = mysql_query($sql);
}
// Redirect to page if deleted ok.
if($result){
header("location: gviragon.ru/delete.php");
}
}
else {
// print success message
include ('header.php');
echo "<center><div id='contenido'>Обитатели удалены<br><br><a href='menu.php'>Вернуться в главное меню</a><br />Вернуться к <a href='delete.php'>распределению<a/></div></center>";
include ('footer.php');
}
?>
Теперь печатает сообщение об успешном удалении, а на деле не удаляет отмеченные ряды. В чем тут может быть ошибка?
Что-то я потерял логику тут.
if (isset($_GET['submit'])){
include('connection.php');
$checkbox=$_POST['checkbox'];
Я ж уже написал, что не может быть и GET и POST одновременно. Либо, либо.
Сделаю небольшое лирическое отступление...
Что происходит, когда вы заходите на Google, вводите туда некий текст и нажимаете кнопку "Поиск в Google"? Браузер соединяется с сервером и посылает туда такой текст:
...
Сервер посылает ответ:
...
А теперь зайдём на какую-нибудь страницу с отправкой данных через POST.
...
Ответ будет примерно аналогичным, поэтому я его приводить не буду.
Чувствуете разницу? Я хочу сказать, что GET и POST это часть протокола HTTP, а не какая-то условность PHP или что-то вроде. И не может быть GET и POST одновременно. Вообще никак.
// Redirect to page if deleted ok.
if($result){
header("location: gviragon.ru/delete.php");
}
}else {
// print success message
У вас получается, что в обоих случаях всегда удаление успешно. Даже если в запросе не было никаких данных.
Вообще я так понимаю, что вы просто не можете удержать в голове всю логику этой программки. Поэтому стоит изначально её как-то распланировать, написать алгоритм или блок-схему (как больше нравится). Вкратце я вижу её суть так:
если есть запрос вида POST {
делаем запрос к БД на удаление
если прошёл успешно {
выводим, что всё в порядке или делаем редирект и т.п.
} иначе {
если прошёл неуспешно, выводим ошибку
}
} иначе {
делаем запрос к БД с нужной выборкой
выводим форму, в которой юзер может что-то отметить и т.д.
}
Остальное — дело вашей фантазии и владения мануалом.
качать тут:
www.plati.ru/asp/pay.asp?idd=1040991