Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > не могу дописать условие


Автор: knut 12.3.2008, 10:25
добрый день.
ситуация сслед.
есть один обший .php файл(test.php)  а на нем батон сабмит. и  двa button a
Код

<html>
    <form name = "Form" action="test.php" method="POST">
        <input type="submit" value="Add"/>
        <input type="submit" value="Remove"/>
    </form>
</html>

и две функции 
Код


function Showtree($parentId,$lvl){//...}  создает дерево 
function addtodatabase($title,$pid){//}   добавляет ветку()
if(//если клик а не рефреш)
addtodatabase("partition5",0);
Showtree(0,0);

так проблема у меня в том что у меня у меня функция addtodatabase вызовается и при нажатие на баттон и при 
рефреше.
как сделать так чтоб он вызовался толко при нажатие на  button

p.s если я с названием темы ляпнул сорри

Автор: Feldmarschall 12.3.2008, 10:49
Код

function Showtree($parentId,$lvl){//...}  создает дерево 
function addtodatabase($title,$pid){//}   добавляет ветку()
if($_SERVER['REQUEST_METHOD']=='POST') { 
  addtodatabase("partition5",0);
  header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 
  exit;
}
Showtree(0,0);


непонятно только, зачем оборачивать в функцию код, который выполняется ровно 1 раз

Автор: comcon1 12.3.2008, 11:14
а в чОм проблема проверить, какую кнопку сабмитит??

Автор: vintyara 12.3.2008, 11:32
один из вариантов - 
1. нажали на кнопку
2. страница перегрузилась и начался выполнятся пхп код. вот тут, после выполнения того что нам нада, в конце добавить редирект еще один (через тот же header("Location: куданада");). тогда небужет проблемы с рефрешем и повторной отправки данных.

Автор: knut 12.3.2008, 12:06
comcon1, 
Цитата

а в чОм проблема проверить, какую кнопку сабмитит??

проблема в том как сделать так чтоб функция addtodatabase если рефреш не выполнялас a 
толко при нажатие на баттон.

Feldmarschall, 
вот такой варрнинг получил
Цитата

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test.php:11) in C:\xampp\htdocs\test.php on line 71

вопрос 
вот при наличие такого иф а
if($_SERVER['REQUEST_METHOD']=='POST')  рефреш не удовлетворяет этому иф у?
у меня функция addtodatabase вызовется даже тогда если был рефреш
 

Автор: comcon1 12.3.2008, 12:19
Цитата

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test.php:11) in C:\xampp\htdocs\test.php on line 71

если ты не выведешь в HTML ни одного символа до выполнения header, даже пробел, то варнинг исчезнет. Попробуй.

Автор: knut 13.3.2008, 12:59
comcon1, 
решил проблему  буферизацией таким способом (хотел бы услышать от вас коментарии по этому методу чвляется ли он хорошым решениям)
Код

ob_start();
if($_SERVER['REQUEST_METHOD']=='POST') {
            addtodatabase("partition4.4",4);
            header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 
            exit;
}
ob_end_flush();


толко осталась одна мальенкая проблема как мне узнать был нажат add или remove? 

Автор: ksnk 13.3.2008, 13:06
Цитата(knut @  13.3.2008,  12:59 Найти цитируемый пост)
толко осталась одна мальенкая проблема как мне узнать был нажат add или remove? 

Нужно у кнопок поставить name, тогда в POST'е появится нужное поле
Код

<form ...>
...
<input type="submit" name="delete" value="delete">
<input type="submit" name="add" value="add">

</form>

Автор: Feldmarschall 13.3.2008, 13:19
knut, решение с буферизацией является просто ненужным.
Скорее всего, функция addtodatabase что-то выводит. но пользователь все равно этого не увидит. поэтому и выводить ничего не нужно.
а если ничего не выводить, то и ошибка не появится.

Автор: comcon1 13.3.2008, 13:53
ob_start и ob_end_flush - стандартное решение для таких случаев. Но если можешь избавиться от выводов лишних пробелов - то это лучше. У меня иногда бывал такой косяк. Я редактирую PHP в ultraedit-е (когда я в винде), так вот когда кодировка у меня UTF - он вставляет какие=то невидимые метасимволы в начало файла - вываливается твоя ошибка. Переводишь UTF->ASCII - метасимволы исчезают вместе с ошибкой.

Автор: knut 13.3.2008, 14:47
ksnk, 
я так и зделал.
Код

<html>
        <form name = "Form" action="test.php" method="POST">
            <input type="submit" name = "AddNode" value="Add"/>
            <input type="submit" name="RemoveRemove" value="Remove"/>            
        </form>
</html>

и после этого
Код

if($_SERVER['REQUEST_METHOD']=='POST') {
    if($POST['name'] = "AddNode"){
            addtodatabase("partition4.4",4);
            header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 
            exit;
    }
    
}

но не работает 

Автор: Canarat 13.3.2008, 15:20
Цитата

    if($POST['name'] = "AddNode"){

Нет такого суперглобального массива, есть $_POST smile

Автор: knut 13.3.2008, 15:57
Код

if($_SERVER['REQUEST_METHOD']=='POST') {
    if($_POST['name'] = "AddNode"){
            addtodatabase("partition4.4",4);
            header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 
            exit;
    }
    
}

тот же результат _POST['name'] пустой

Автор: Canarat 13.3.2008, 16:01
Цитата

 if($_POST['name'] = "AddNode"){

У тебя другое.
Код

 if($_POST['AddNode'] == "Add"){

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)