[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вызов функции
Millenium
Занялся изучением PHP и появилось куча вопросов..
Вот есть Html где:
 <form method="post" action="index1.php"> tt<br><br>
Введите число<input name="chislo" type="text" maxlength="10" size="5" value="" />
<br><br>
Введите степень <input name="stepen" type="text" maxlength="2" size="3" value="" />
<br><br> <input
type=submit value="Выполнить..."></form>


передаем параметры в index1.php где создаю функию и выполняю вычисления, как вывести результат на страницу Html?
В функции function ST($chislo, $stepen) правильно переданы параметры с Html?
<?php

if (!empty($_POST["chislo"])&&!empty($_POST["stepen"]))
{
echo "Данные:<br>";
echo "Число - ";
echo $_POST["chislo"];
echo "<br>Степень - ";
echo $_POST["stepen"];
}
else
{
echo "Введите данные!";
}


function ST($chislo, $stepen)
{
\\
}

?>




Спустя 3 минуты, 18 секунд (6.11.2011 - 19:39) walerus написал(а):
Цитата
как вывести результат на страницу Html?

на эту же страницу html ? или просто вывести результаты...

Цитата
В функции function ST($chislo, $stepen) правильно переданы параметры с Html?
- нет, я вообще не вижу чтоб они были переданы.

Спустя 2 минуты, 17 секунд (6.11.2011 - 19:41) bulgakov написал(а):
Вы в функцию передаете неинициализированные переменные $chislo и $stepen, я бы посоветовал обработать входные данные и потом уже их передавать в функцию например так:

$chislo = (int)$_POST["chislo"]
$stepen = (int)$_POST["stepen"]
/*
*
*
*/

function ST($chislo, $stepen)

Спустя 1 минута, 57 секунд (6.11.2011 - 19:43) bulgakov написал(а):
Полный код:
Свернутый текст


<?php

if (!empty($_POST["chislo"]) && !empty($_POST["stepen"]))
{
$chislo = (int)$_POST["chislo"];
$stepen = (int)$_POST["stepen"];
echo "Данные:<br>";
echo "Число - ";
echo $chislo;
echo "<br>Степень - ";
echo $stepen;
}
else
{
echo "Введите данные!";
}


function ST($chislo, $stepen)
{
// напишите саму функцию и как вариант прямо в функции вызвать echo с результатом или использовать return в какую-то переменную которую потом вывести
}

ST($chislo, $stepen);

?>



Спустя 9 минут, 7 секунд (6.11.2011 - 19:52) Millenium написал(а):
walerus
на эту же, чтоб при вводе данных и клике выводился результат
bulgakov
{
echo "Данные:<br>";
echo "Число - ";
echo $_POST["chislo"];
echo "<br>Степень - ";
echo $_POST["stepen"];
//echo " лет";
$chislo = (int)$_POST["chislo"];
$stepen = (int)$_POST["stepen"];
}
else
{
echo "Введите данные!";
}


function ST($chislo, $stepen)
{
$res = 1;

while($stepen > 0)
{
if ($stepen % 2 == 0)
{
$stepen /= 2;
$chislo *= $chislo;
}
else
{
$stepen--;
$res *= $chislo;
}
}


return $res;
echo $res;
}

?>

сделал..безрезультатно

Спустя 6 минут, 20 секунд (6.11.2011 - 19:58) bulgakov написал(а):
Цитата
сделал..безрезультатно

Так нука подробнее, что пишет, какие ошибки, добавьте в начало скрипта error_reporting(E_ALL)

Спустя 49 секунд (6.11.2011 - 19:59) bulgakov написал(а):
Просмотрите что приходит в $_POST:
print_r($_POST);

Можно еще action пустым сделать если скрипт в одном файле делается:
<form method="post" action=""> tt<br><br>

Спустя 1 минута, 42 секунды (6.11.2011 - 20:01) walerus написал(а):
bulgakov а если переменные не придут ?
if (!empty($_POST["chislo"]) && !empty($_POST["stepen"])) 

не сработает и вызов функции,
ST($chislo, $stepen);

нужно ставить в условие, а не после нее, иначе она вызываться будет и при НЕ введенных данных, что позовет за собой нотисы.

И первому вопросу никто не ответил...

Спустя 4 минуты, 14 секунд (6.11.2011 - 20:05) bulgakov написал(а):
Цитата
bulgakov а если переменные не придут ?

Да не уследил, спасибо
if (!empty($_POST["chislo"]) && !empty($_POST["stepen"])) 
{
$chislo = (int)$_POST["chislo"];
$stepen = (int)$_POST["stepen"];
echo "Данные:<br>";
echo "Число - ";
echo $chislo;
echo "<br>Степень - ";
echo $stepen;

ST($chislo, $stepen);
}
else
{
echo "Введите данные!";
}


function ST($chislo, $stepen)
{
// напишите саму функцию и как вариант прямо в функции вызвать echo с результатом или использовать return в какую-то переменную которую потом вывести
}

Спустя 7 минут, 19 секунд (6.11.2011 - 20:12) walerus написал(а):
if ( isset( $_POST["chislo"] ) && trim( $_POST["chislo"] ) != '' && isset( $_POST["stepen"] ) && trim( $_POST["stepen"] ) != '' ) 
{
function ST($chislo, $stepen)
{
// bcpow ( string x, string y [, int scale]) - Возводит x в степень y.
// Необязательный параметр scale используется для установки количества цифр после десятичного разделителя в результате.


return bcpow( $chislo, $stepen );
}

$chislo = (int)$_POST["chislo"];
$stepen = (int)$_POST["stepen"];

// Вызвали функцию
$result = ST($chislo, $stepen);

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . $result . "<br>\n";
}
else
{
?>
<form method="post" action="">
Форма:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить...">
</
form>
<?php
}


Вот так.

Спустя 3 минуты, 29 секунд (6.11.2011 - 20:16) walerus написал(а):
empty($_POST["chislo"])
тоже не подойдет, а если я пробел введу ? )), только isset - проверка на существование, и trim - проверка на пустоту.

Спустя 1 минута, 26 секунд (6.11.2011 - 20:17) Millenium написал(а):
bulgakov
не выдает ни каких ошибок, выводит только :
Данные:
Число - 12
Степень - 12
а результатов нет
Цитата
Просмотрите что приходит в $_POST:

Степень - 12Array ( [chislo] => 12 [stepen] => 12 )
Цитата
Можно еще action пустым сделать если скрипт в одном файле делается:
:

Сделал! но тогда перехода на index1.php нет, хотя находятся в одной папке " на денвере"..
walerus
Подскажите новичку как это сделать?

Спустя 3 минуты, 33 секунды (6.11.2011 - 20:21) bulgakov написал(а):
Цитата
тоже не подойдет, а если я пробел введу ? )), только isset - проверка на существование, и trim - проверка на пустоту.

C каких пор trim стал проверять на пустоту?

Спустя 1 минута, 3 секунды (6.11.2011 - 20:22) walerus написал(а):
Millenium
я же написал весь код, запихиваешь его в index.php, и вызываешь в броузере именно index.php.

Или Вам нужно чтоб из index.html передавались данные в index1.php, а результаты выводились опять в index.html ???, если так - то не будет так работать...
только index.php.

Спустя 4 минуты, 3 секунды (6.11.2011 - 20:26) Millenium написал(а):
walerus
Цитата
а результаты выводились опять в index.html ???

Да именно так я планировал..Сейчас сделаю по-вашему:)
walerus
bulgakov
спасибо мужики!

Спустя 15 секунд (6.11.2011 - 20:26) walerus написал(а):
Цитата (bulgakov @ 6.11.2011 - 17:21)
Цитата
тоже не подойдет, а если я пробел введу ? )), только isset - проверка на существование, и trim - проверка на пустоту.

C каких пор trim стал проверять на пустоту?

$string = ' ';
$string_2 = '';

if ( trim( $string ) == '' )
echo "Пусто в строке<br>";
else
echo "НЕ пусто в строке<br>";


if ( trim( $string_2 ) == '' )
echo "Пусто в строке<br>";
else
echo "НЕ пусто в строке<br>";


Что выдает ? у меня выдает что в обоих строках пустота, хотя в 1й строке стоит пробел, может я не корректно выразился, но это как бы защита от ввода пустой строки, либо с пробелами, как я сделал поправку выше :rolleyes:

Спустя 7 минут, 36 секунд (6.11.2011 - 20:34) bulgakov написал(а):
Вот еще вариант:

Свернутый текст
header("Content-type: text/html; charset=utf-8");
if ($_SERVER["REQUEST_METHOD"] == "POST")
{

$chislo = (int)trim($_POST["chislo"]);
$stepen = (int)trim($_POST["stepen"]);
if($chislo and $stepen){
// Вызвали функцию
$result = pow($chislo, $stepen);

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . $result . "<br>\n";
}
}

else
{
?>
<form method="post" action="">
Форма:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить...">
</
form>
<?php
}


Спустя 2 минуты, 27 секунд (6.11.2011 - 20:36) bulgakov написал(а):
Если хочеш чтобы вычисления были в одном файле а результаты и форма ввода в другом тогда у тебя должно быть два php файла - index.php action.php например, ну и соответственно логика работы скрипта немножко меняется.

Спустя 2 минуты, 5 секунд (6.11.2011 - 20:38) walerus написал(а):
bulgakov - Не рабочий Ваш вариант, введите два пробела в поля или даже один любой, - в ответ будет пустота, потому что

$_SERVER["REQUEST_METHOD"]
поступил, а данных НЕТУ ! B)

Спустя 9 минут, 21 секунда (6.11.2011 - 20:48) bulgakov написал(а):
walerus
А так?

Свернутый текст
<?php
header("Content-type: text/html; charset=utf-8");
if ($_SERVER["REQUEST_METHOD"] == "POST")
{

$chislo = (int)trim($_POST["chislo"]);
$stepen = (int)trim($_POST["stepen"]);
if($chislo and $stepen){
// Вызвали функцию
$result = pow($chislo, $stepen);

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . $result . "<br>\n";
}
else{
?>
<form method="post" action="">
Форма:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить...">
</
form>
<?php
}
}

?>


Спустя 8 минут, 2 секунды (6.11.2011 - 20:56) walerus написал(а):
Опять Ошибка, не дописали кусок кода...

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{

$chislo = (int)trim($_POST["chislo"]);
$stepen = (int)trim($_POST["stepen"]);
if($chislo and $stepen){
// Вызвали функцию
$result = pow($chislo, $stepen);

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . $result . "<br>\n";
}
else
{
?>
<form method="post" action="">
Форма:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить...">
</
form>
<?php
}
}

else
{
?>
<form method="post" action="">
Форма:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить...">
</
form>
<?php
}


И теперь сравнить размеры моего кода и этого, туча ненужных операций и проверок, это для тех кто зарабатывает на количестве строк кода - самое то :D

P.S. Никого не хотел обидеть или как то задеть B)

Спустя 12 минут (6.11.2011 - 21:08) bulgakov написал(а):
Раз уж начали мерятся кодами, попробуйте в свой код ввести два нуля, вот еще один мой вариант:

<?php
header("Content-type: text/html; charset=utf-8");
if ($_SERVER["REQUEST_METHOD"] == "POST")
{

$chislo = (int)trim($_POST["chislo"]);
$stepen = (int)trim($_POST["stepen"]);
if($chislo and $stepen){
// Вызвали функцию
$result = pow($chislo, $stepen);

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . $result . "<br>\n";
}
}

?>
<form method="post" action="">
Форма:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить...">
</
form>

Спустя 14 минут, 52 секунды (6.11.2011 - 21:23) walerus написал(а):
У меня дописать всего лишь нужно было проверку на ноль, да, мой косяк, не учел, НО в моем коде используется функция как просил ТС и теперь еще добавлена проверка на ввод ТОЛЬКО цифр, а у Вас можно и буквы вводить <_<

Свернутый текст

if ( 
isset( $_POST["chislo"] ) && trim( $_POST["chislo"] ) != '' &&
$_POST["chislo"] && preg_match('~^[\d]+$~', trim( $_POST["chislo"] )) &&

isset( $_POST["stepen"] ) && trim( $_POST["stepen"] ) != '' &&
$_POST["stepen"] && preg_match('~^[\d]+$~', trim( $_POST["stepen"] ))
)

{
function ST($chislo, $stepen)
{
// bcpow ( string x, string y [, int scale]) - Возводит x в степень y.
// Необязательный параметр scale используется для установки количества цифр после десятичного разделителя в результате.
//


return bcpow( $chislo, $stepen );
}

$chislo = (int)$_POST["chislo"];
$stepen = (int)$_POST["stepen"];

// Вызвали функцию
$result = ST($chislo, $stepen);

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . $result . "<br>\n";
}
else
{
?>
<form method="post" action="">
Форма:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить...">
</
form>
<?php
}



тут покороче код, без функции
Свернутый текст

if ( 
isset( $_POST["chislo"] ) && trim( $_POST["chislo"] ) != '' &&
$_POST["chislo"] && preg_match('~^[\d]+$~', trim( $_POST["chislo"] )) &&

isset( $_POST["stepen"] ) && trim( $_POST["stepen"] ) != '' &&
$_POST["stepen"] && preg_match('~^[\d]+$~', trim( $_POST["stepen"] ))
)

{
$chislo = (int)$_POST["chislo"];
$stepen = (int)$_POST["stepen"];

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . bcpow( $chislo, $stepen ) . "<br>\n";
}
else
{
?>
<form method="post" action="">
Форма:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить...">
</
form>
<?php
}

Спустя 4 минуты, 47 секунд (6.11.2011 - 21:27) bulgakov написал(а):
Цитата
У меня дописать всего лишь нужно было проверку на ноль, да, мой косяк, не учел, НО в моем коде используется функция как просил ТС и теперь еще добавлена проверка на ввод ТОЛЬКО цифр, а у Вас можно и буквы вводить dry.gif

Просто у меня желание что бы ТС уже сам допер до проверок и я хочу спать и лениво писать полноценный код) А за замечания все равно спасибо) Неплохо подискутировали.
И кстати насчет использования функции вы схалтурили применив библиотечную функцию, если уж пишем свою функцию то можно было бы реализовать полностью свою функцию вычисления степени, а не использовать функцию обертку, это к вопросу о придирках к коду) И буквы у меня вводятся но никак не участвуют в вычислениях потому как после (int) они превращаются в нули.

Спустя 5 минут, 18 секунд (6.11.2011 - 21:33) Millenium написал(а):
walerus
bulgakov

Спасибо
Придется тогда без Нtml обойтись
теперь буду писать функцию "быстрого возведения в степень" ибо стандартные операторы сказали не брать.

Спустя 1 минута, 7 секунд (6.11.2011 - 21:34) Millenium написал(а):
За праверки ввода отдельное спасибо:)

Спустя 16 минут, 38 секунд (6.11.2011 - 21:50) walerus написал(а):
bulgakov
Цитата
после (int) они превращаются в нули

А нули и на нули как мы знаем нельзя возводить в степень...
Да беседа веселая оказалась :D, раз пошла такая пьянка, со своей функцией ...
function ST( $chislo, $stepen )
{
$result = 1;

while( $stepen > 0 )
{
if ( $stepen % 2 == 0 )
{
$stepen /= 2;
$chislo *= $chislo;
}
else
{
$stepen--;
$result *= $chislo;
}
}


return $result;
}

if (
isset( $_POST["chislo"] ) && trim( $_POST["chislo"] ) != '' &&
$_POST["chislo"] && preg_match('~^[\d]+$~', trim( $_POST["chislo"] )) &&

isset( $_POST["stepen"] ) && trim( $_POST["stepen"] ) != '' &&
$_POST["stepen"] && preg_match('~^[\d]+$~', trim( $_POST["stepen"] ))
)

{
$chislo = (int)$_POST["chislo"];
$stepen = (int)$_POST["stepen"];

echo "Данные:<br>";
echo "Число - " . $chislo. "<br>\n";
echo "Степень - " . $stepen . "<br>\n";
echo "Результат - " . ST( $chislo, $stepen ) . "<br>\n";
}
else
{
?>
<form method="post" action="">
Форма:<br><br>
Введите число - <input name="chislo" type="text" maxlength="10" size="5" value=""><br><br>
Введите степень - <input name="stepen" type="text" maxlength="2" size="3" value="" ><br><br>
<
input type=submit value="Выполнить...">
</
form>
<?php
}

Спустя 22 часа, 39 минут, 9 секунд (7.11.2011 - 20:30) Millenium написал(а):
сделал следующее :
$x = decbin ( $chislo);
число приставил в двоичном виде. В си фором бегаю всегда..
в РНР нужно в массив загонять или можно побитово в перемнной пробижать и выполнить тело цикла?

Спустя 2 минуты, 29 секунд (7.11.2011 - 20:32) Millenium написал(а):
вывод результата выполнения функции лучше "в теле" фунции делать или после фунции оператором echo?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.