Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/17: Рейтинг темы: голосов - 17, средняя оценка - 4.82
I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
#1

Объявление и вызов функции

06.08.2010, 15:38. Просмотров 3072. Ответов 14
Метки нет (Все метки)

Программа отлично работает вне функции, но при заключении в функцию перестает передавать информацию в форму.
Так работает:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
    $checkbox=$_POST['checkbox'];
    $dies=$_POST['dies'];
    $cash=$_POST['cash'];
?>
<html>
<head></head>
<body>
<div align="center">
<form method="POST" action="test0.php">
<?php 
     if (empty($cash)) // если $cash не имеет значения, 
   { 
       $cash=100; // присваивается значение 100
       echo "<h1>My cash: ".$cash."\$</h1><br>";
   }
     
    for($i=0;$i<=5;$i++) 
    {   if(empty($checkbox[$i]))
        {
            $dies[$i]=rand(1,6); 
        }
        else
        {
            $dies[$i]=$checkbox[$i];
        }
        $display="\"k".$dies[$i].".gif\"";
        echo "<img src=".$display.">";
        echo "<input type=\"checkbox\" name=\"checkbox[$i]\" value=\"$dies[$i]\">"; 
    } 
    echo "<br><input type=\"submit\" value=\"Let's fucking ROCK\"><br>";
    
    echo"I keep: ";
    for($i=0;$i<=5;$i++)
    {
        echo $checkbox[$i]; 
    } 
?>
</form> 
</div>
</body>
</html>
Так не работает:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
    $checkbox=$_POST['checkbox'];
    $dies=$_POST['dies'];
    $cash=$_POST['cash'];
?>
<html>
<head></head>
<body>
<div align="center">
<form method="POST" action="test0.php">
<?php
rolldice();
function rolldice()
{ 
     if (empty($cash)) // если $cash не имеет значения, 
   { 
       $cash=100; // присваивается значение 100
       echo "<h1>My cash: ".$cash."\$</h1><br>";
   }
     
    for($i=0;$i<=5;$i++) 
    {   if(empty($checkbox[$i]))
        {
            $dies[$i]=rand(1,6); 
        }
        else
        {
            $dies[$i]=$checkbox[$i];
        }
        $display="\"k".$dies[$i].".gif\"";
        echo "<img src=".$display.">";
        echo "<input type=\"checkbox\" name=\"checkbox[$i]\" value=\"$dies[$i]\">"; 
    } 
    echo "<br><input type=\"submit\" value=\"Let's fucking ROCK\"><br>";
    
    echo"I keep: ";
    for($i=0;$i<=5;$i++)
    {
        echo $checkbox[$i]; 
    } 
}    
?>
</form> 
</div>
</body>
</html>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2010, 15:38
Ответы с готовыми решениями:

Объявление переменной из функции
Что то я прозевал где то в учебнике это. Есть функция которая принимает от...

Вызов js функции в php функции что в js
В общем имеем такое извращение &lt;script&gt; ... document.write(&quot;&lt;?php echo...

Вызов пользовательской функции из функции
Как Вызвать пользовательскую функцию из функции? Приведенный ниже код не...

Вызов функции
Люди добрые. Подскажите, какую либу ему надо?

Вызов функции
&lt;?php function s($str) { for($i = 0; $i &lt; strlen($str); $i++) ...

14
nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 334
06.08.2010, 16:07 #2
Попробуй вызов ниже объявления. А вообще функция должна возвращать значение, а не выводить результат в поток. За редким исключением. Этот пример - не исключение. Смысла в функции тут нет никакого.

Ой... Не посмотрел. А переменные то там пустые все. Их передать в неё надо. Или глобальными объявить. Последнее не очень хорошая идея, но общую твою концепцию не испортит
1
Nazz
WEB-developer
897 / 728 / 80
Регистрация: 12.03.2009
Сообщений: 2,802
Записей в блоге: 2
06.08.2010, 16:08 #3
вот так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
    $checkbox=$_POST['checkbox'];
    $dies=$_POST['dies'];
    $cash=$_POST['cash'];
?>
<html>
<head></head>
<body>
<div align="center">
<form method="POST" action="test0.php">
<?php
 
function rolldice()
{ 
     if (empty($cash)) // если $cash не имеет значения, 
   { 
       $cash=100; // присваивается значение 100
       echo "<h1>My cash: ".$cash."\$</h1><br>";
   }
     
    for($i=0;$i<=5;$i++) 
    {   if(empty($checkbox[$i]))
        {
            $dies[$i]=rand(1,6); 
        }
        else
        {
            $dies[$i]=$checkbox[$i];
        }
        $display="\"k".$dies[$i].".gif\"";
        echo "<img src=".$display.">";
        echo "<input type=\"checkbox\" name=\"checkbox[$i]\" value=\"$dies[$i]\">"; 
    } 
    echo "<br><input type=\"submit\" value=\"Let's fucking ROCK\"><br>";
    
    echo"I keep: ";
    for($i=0;$i<=5;$i++)
    {
        echo $checkbox[$i]; 
    } 
}    
rolldice();
?>
</form> 
</div>
</body>
</html>
вы визываете функцию прежде чем её описали...
0
I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
06.08.2010, 17:55  [ТС] #4
Nazz, перенес вызов функции вниз, после объявления - работает так же, не передает значение в форму.

Добавлено через 12 минут
Цитата Сообщение от nubo Посмотреть сообщение
А вообще функция должна возвращать значение, а не выводить результат в поток. За редким исключением. Этот пример - не исключение. Смысла в функции тут нет никакого.
Это часть программы, я её собираю отдельно, а в принципе это функция в программе. Что значит возвращать значение, а не выводить в поток? Т.е. я не правильно использую функцию?
Цитата Сообщение от nubo Посмотреть сообщение
Ой... Не посмотрел. А переменные то там пустые все. Их передать в неё надо. Или глобальными объявить. Последнее не очень хорошая идея, но общую твою концепцию не испортит
Вот, я пробовал задать переменные параметрами функции, вот так
PHP
1
function rolldice($checkbox,$dies,$cash)
но сервер отвечает
Warning: Missing argument 1 for rolldice(), called in /home/admin/domains/bambootonnels.com.ua/public_html/test0.php on line 41 and defined in /home/admin/domains/bambootonnels.com.ua/public_html/test0.php on line 12

Warning: Missing argument 2 for rolldice(), called in /home/admin/domains/bambootonnels.com.ua/public_html/test0.php on line 41 and defined in /home/admin/domains/bambootonnels.com.ua/public_html/test0.php on line 12

Warning: Missing argument 3 for rolldice(), called in /home/admin/domains/bambootonnels.com.ua/public_html/test0.php on line 41 and defined in /home/admin/domains/bambootonnels.com.ua/public_html/test0.php on line 12
Globals на сервере отключены. Скажи пожалуйста, как правильно передать переменные в функцию?
0
Nazz
WEB-developer
897 / 728 / 80
Регистрация: 12.03.2009
Сообщений: 2,802
Записей в блоге: 2
06.08.2010, 18:11 #5
обявление:
PHP
1
2
function rolldice($checkbox,$dies,$cash)
{
передача:
PHP
1
rolldice($_POST['checkbox'],$_POST['dies'],$_POST['cash']);
1
I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
06.08.2010, 18:21  [ТС] #6
Цитата Сообщение от Nazz Посмотреть сообщение
обявление:
PHP
1
2
function rolldice($checkbox,$dies,$cash)
{
передача:
PHP
1
rolldice($_POST['checkbox'],$_POST['dies'],$_POST['cash']);
В каком месте кода должна быть передача?

Добавлено через 3 минуты
Все, сообразил - передача и обращение к функции это одно и то же.
0
Dimarik__
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
06.08.2010, 18:33 #7
rolldice(empty($_POST['checkbox']),$_POST['dies'],$_POST['cash']);
так попробуй

Добавлено через 1 минуту
только возможно прийдётся малость изменить функцию
0
nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 334
06.08.2010, 18:47 #8
Что значит возвращать значение, а не выводить в поток? Т.е. я не правильно использую функцию?
возвращать - по английски - return. Есть одноименный оператор (как они программируют, непонятно. )
То есть в функцию передаются аргументы, а из неё возвращается результат работы. Это нужно для того, чтобы использовать вызов функции в разных местах программы. У тебя функция не возвращает результат, а производит действие. Выдает результат сразу в поток (echo).
Причем в самой функции есть куча разметки. Это подразумевает крайнюю узконаправленность функции. На грани целесообразности.
Императивному программированию это претит.
1
I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
06.08.2010, 20:55  [ТС] #9
Цитата Сообщение от nubo Посмотреть сообщение
возвращать - по английски - return. Есть одноименный оператор (как они программируют, непонятно. )
То есть в функцию передаются аргументы, а из неё возвращается результат работы. Это нужно для того, чтобы использовать вызов функции в разных местах программы. У тебя функция не возвращает результат, а производит действие. Выдает результат сразу в поток (echo).
Причем в самой функции есть куча разметки. Это подразумевает крайнюю узконаправленность функции. На грани целесообразности.
Императивному программированию это претит.
Теоретически понятно, пока я не понимаю как можно применить возвращение результата в моей программе. Я допишу её и обращусь к тебе, мне хочется научиться решать задачи максимально рационально.
0
nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 334
06.08.2010, 21:00 #10
Лучше это делать наоборот. Сначала научиться мыслить рационально, потом учиться писать программы. Правда не всегда выходит...
Вот давай по порядку. Сначала попытайся сформулировать задачу, которая стоит перед функцией.
Не мудря, просто своими словами. Это основы проектирования.
1
I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
06.08.2010, 22:06  [ТС] #11
rolldice() должна в первой сессии выводить картинки костей в случайном порядке и флажки, во второй сессии удерживать зафиксированные флажками в прошлой сессии значения и перебросить свободные. Передать значения выпавших комбинаций в следующую функцию.
В программе ещё две функции.
prize() которая должна высчитать выигрышные комбинации 2+2, 2+3, 3, 4, 5 и 5 по порядку. И соответственно комбинации начислить выигрыш. Передать значение выигрыша в bank().
И bank(), которая должна посчитать сколько у игрока в сумме денег и передать это значение для следующей игры.

Но, чтобы не забегать вперед я сейчас решаю более мелкую проблему:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<html>
<head></head>
<body>
<div align="center">
<form method="POST" action="test2.php">
<?php
$secondroll=$_POST['secondroll'];
    echo "<input type=\"hidden\" value=\"$secondroll\">";    
    if ($secondroll==FALSE)// если переменная $secondroll имеет значение FALSE - это первый бросок
   {
       $secondroll=TRUE;  // присвоить значение TRUE, для того чтобы следующий бросок считался вторым
       echo"<br>first roll<br>";   // отображаем оповещение, о том что это первый бросок
   }
   else 
   {
       $secondroll=FALSE; // и присваиваем переменной $secondroll значение FALSE, для того чтобы следующий бросок считался первым.
       echo "<hi><br>second roll</h2><br>"; // отображаем надпись "second roll"
   }
 
   echo "<input type=\"submit\" value=\"Drop Dead!\">";
?>
</form>
</div>
</body>
</html>
Суть этой части программы в том, что по факту второго броска должна запускаться функция prize(), а у меня сейчас все время первый бросок. Что в этой штуке не так?
0
nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 334
06.08.2010, 23:08 #12
Не понял сути, но как то так второй... Зачем только.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<html>
<head></head>
<body>
<div align="center">
<form method="POST" action="">
<?php
    $secondroll = !empty($_POST['secondroll'])?$_POST['secondroll']:0; 
    
   if (empty($secondroll))// если переменная $secondroll имеет значение 0 - это первый бросок
   {
       $secondroll = 1;  // присвоить значение 1, для того чтобы следующий бросок считался вторым
       echo"<br>first roll<br>";   // отображаем оповещение, о том что это первый бросок
   }
   else 
   {
       echo "<hi><br>second roll</h2><br>"; // отображаем надпись "second roll"
   }    
    
 
   echo "<input type=\"hidden\" name=\"secondroll\" value=\"$secondroll\">"; 
   echo "<input type=\"submit\" value=\"Drop Dead!\">";
?>
</form>
</div>
</body>
</html>
1
I159
4 / 4 / 1
Регистрация: 09.08.2009
Сообщений: 232
07.08.2010, 08:57  [ТС] #13
Поясни мне пожалуйста эту часть
PHP
1
$secondroll = !empty($_POST['secondroll'])?$_POST['secondroll']:0;
0
nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 334
07.08.2010, 09:19 #14
Тернарный оператор
Любопытное дело с этим тернарным оператором. Вообще он придуман для того, что бы упростить жизнь разработчика. И так оно и есть. Но почему то начинающие программисты никак не могут его усвоить. Хотя казалось бы - чего проще: Тернарный оператор в зависимости от результата выполнения выражения в аргументе
возвращает значение, находящееся слева или справа от двоеточия.



А вот никак не доходит с первого тычка. Хотя если опустить термины и попытаться объяснить своими словами, все гораздо проще.

Представьте ситуацию, когда муж пришел домой под градусом. Жена сразу же с порога задаст вопрос:

PHP
1
$жена = (Зарплату пропил)?

И в зависимости от того, что ответит муж, предпримет действия:

PHP
1
$жена = (Зарплату пропил)?"Скалкой по башке":"Поцелует в щечку";
То есть если ответ утвердительный, факт - целовать не станет.
Так же и с переменными. Выбираем переменную, в которую хотим записать одно из возможных значений:

PHP
1
$variable =
А потом ставим условие, как бы спрашивая (там даже знак вопроса специально) - правда или нет.

PHP
1
$variable = empty($var)?'Переменная $var пустая':'Переменная $var не пустая';
И в зависимости от состояния переменной $var запишет правое или левое от двоеточия значение. Причем порядок такой, как мы обычно и спрашиваем в жизни - ДА или НЕТ? Попробуйте спросить наоборот - НЕТ или ДА? Не звучит.
© http://irbis-team.com/15/5/11
2
Hagrael
БТР - мой друг
331 / 273 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
08.08.2010, 05:27 #15
nubo, спасибо, мне тоже очень помогло!
0
08.08.2010, 05:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2010, 05:27

Вызов функции
Доброго времени суток! Возникла проблема, есть 2 функции. function...

Вызов функции
Подскажите пожалуйста, возможен ли запуск функции пхп с помощью onclick? Если...

Вызов функции
Помогите правильно вызвать вот эту функцию в другом месте файла function...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru