A kid from The Ural's
По задумке, скрипт должен выводить список пользователей со значением поля points в бд = 0. Тот пользователь которому это все показывается, кликает галочки на против тех, кого надо удалить и жмет кнопку delete. Но у меня почему-то грузится пустая страница :( думаю что проблема в нерправильном расположении конструкций if else, а именно там где проверяется нажата ли кнопка delete

Может кто-нибудь помочь :)?


читать дальше

@темы: PHP

Комментарии
14.06.2008 в 14:15

Будем же учиться хорошо мыслить - вот основной принцип морали (с) Паскаль
Внимательнее следи за использованием присваиваний и сравнений.
if ($_GET['action'] = "delete") всегда true поскольку ты проверяешь произошла ли операция присваивания переменной $_GET['action'] значение delete. А тебе надо сравнивать, то есть if ($_GET['action'] == "delete")
14.06.2008 в 14:33

Я не бог, я так низко не опускаюсь.
if($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");
14.06.2008 в 15:04

A kid from The Ural's
lugavchik

$delete по моей задумке из формы берется :), по крайней мере, я так думаю
 echo "<input name='delete' type='submit' id='delete' value='Delete' class='submit'>

Или мне бы следовало ее вот так где-нибудь перед if объявить
$delete=$_POST['delete']; ?

Сейчас при нажатии Delete ничего не удаляет, но выдает вот такой url :(
gviragon.ru/?action=delete
15.06.2008 в 14:05

Sanctus Satanas
Kevin McLean
Кстати, не нужно задавать и 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() — сомневаюсь, что здесь могут быть отрицательные числа.
15.06.2008 в 22:22

Будем же учиться хорошо мыслить - вот основной принцип морали (с) Паскаль
--==SS==-- Да, правильно. Спасибо что паправили ;)
16.06.2008 в 00:35

A kid from The Ural's
--==SS==--
Запихнул удаление в отельные фаил 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');
}

?>

Теперь печатает сообщение об успешном удалении, а на деле не удаляет отмеченные ряды. В чем тут может быть ошибка?
17.06.2008 в 11:10

Sanctus Satanas
Kevin McLean
Что-то я потерял логику тут. :) Ладно, начнём по порядку.

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 {
    делаем запрос к БД на удаление
    если прошёл успешно {
        выводим, что всё в порядке или делаем редирект и т.п.
    } иначе {
        если прошёл неуспешно, выводим ошибку
    }
} иначе {
    делаем запрос к БД с нужной выборкой
    выводим форму, в которой юзер может что-то отметить и т.д.
}

Остальное — дело вашей фантазии и владения мануалом. ;-)
22.06.2008 в 23:39

A kid from The Ural's
А все разобрал уже :) спасибо -)
10.11.2010 в 14:12

Простой пример Ajax для чайников, по нажатию на кнопку-картинку данные из html-страницы записываются в базу и сразу же выводятся на экран без перезагрузки страницы в виде таблицы. Маленький понятный код, в PHP используется метод $_POST, SQL запросы, функция createXMLHttp(), и немного стилей, все только нужное для понимания ajax, исчерпывающие комментарии в строках. Научитесь создавать динамические web-страницы без лишних громоздких библиотек своими руками. Работа со связкой PHP,MySQL,Apache, Javasсript становится легка и понятна каждому. Поняв суть данного примера вы в дальнейшем сможете создавать Ajax-страницы любой сложности. По этой программе можно научиться PHP MySQL и AJAX одновременно.

качать тут:
www.plati.ru/asp/pay.asp?idd=1040991

Расширенная форма

Редактировать

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail