Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Explode и функции
 
 автор: RV   (16.03.2005 в 13:52)   письмо автору
 
 

есть функция примерно такая:

<?
function check()
{
$query "SELECT * FROM users WHERE name = '$name' AND password = '$pass' ";
         
connect();
         
$check mysql_query($query);
         
$result mysql_fetch_array($check);

         return 
$result['status'];           // тут строка  1:2:3:4:5:6:7:8

}
?>

Ниже идет следущая

<?
function status()
{
$string cookie($result['status']); 

$result_sting explode (":" $string);
$Zero $result_sting[0];
$Five $result_sting[5];
$Six $result_string[6];

return 
$Zero;
return 
$Five;
return 
$Six;
}
?>

потом далее код

<?
echo "Status is " cookie($result['status']);
echo 
"</br>Sstatus result string " status($result_sting);
echo 
"</br>Zero is " status($Zero);
echo 
"</br>Five is " status($Five);
echo 
"</br>Six is " status($Six);
echo 
"</br>---------------------------------";
$st "1:2:3:4:5:6:7:8";
$exp_st explode (":" $st);
$zero $exp_st[0];
$one $exp_st[1];
$five $exp_st[5];
echo 
"</br>Zero" $zero;
echo 
"</br>One" $one;
echo 
"</br>Five" $five;

?>

и это все выводит

Status is 1:2:3:4:5:6:7:8
Status result string 1
Zero is 1
Five is 1 //Почему сдесь 1 , когда должно быть 6
Six is 1 //А сдесь должно быть 7
---------------------------------
Zero 1 //
One 2 //
Five 6 // а сдесь выводится все нормально как надо.

   
 
 автор: cheops   (16.03.2005 в 14:27)   письмо автору
 
   для: RV   (16.03.2005 в 13:52)
 

Нестыковка вот какого плана: функция status объявлена без параметра, а вызывается с параметром?

   
 
 автор: RV   (16.03.2005 в 14:39)   письмо автору
 
   для: RV   (16.03.2005 в 13:52)
 

стоп. нестыковка

function cookie()   // а не функция check 

$query = "SELECT * FROM users WHERE name = '$name' AND password = '$pass' "; 

и тут мы ее соответсвенно вызываем. БЕЗ параметра

function status() 

$string = cookie($result['status']); 


почему же тут работает без параметра а в конце нет?

   
 
 автор: cheops   (16.03.2005 в 14:48)   письмо автору
 
   для: RV   (16.03.2005 в 14:39)
 

А вообще насмерть запутался :))) а тогда вызов функции
<?php
  $string 
cookie($result['status']);
?>

С передачей $result['status'] в качестве параметра, что означает? Ведь $result нет в момент вызыва и функции мы ничего передать не можем... Или вы хотите из функции через параметр передать значение? Тогда следует прибегать к передаче по ссылке, так как побочный эффект в виде измения значения параметра функции, после её вызова, запрещён.

PS Не навязываю вам собственный стиль программирования, но обычно, в случае сложного кода делают так: сначала создают код от начала до конца без использования функций, отлаживают его до рабочего состояния, а потом дробят на функции с проверкой работоспособнсти на каждом шаге. Функции отлаживать сложнее...

   
 
 автор: RV   (16.03.2005 в 14:57)   письмо автору
 
   для: cheops   (16.03.2005 в 14:48)
 

вот так:

<?
function cookie()
{
         
$query "SELECT * FROM users WHERE name = '$user_name' AND password = '$hash_pass' ";
         
connect();
         
$check mysql_query($query);
         
$result mysql_fetch_array($check);

         return 
$result['status'];


}


function 
status()
{
$string cookie($result['status']);

$result_sting explode (":" $string);
$Zero $result_sting[0];
$Five $result_sting[5];
$Six $result_string[6];

return 
$Zero;
return 
$Five;
return 
$Six;



}

echo 
"Status is " cookie($result['status']);
echo 
"</br>Sstatus result string " status($result_sting);
echo 
"</br>Zero is " status($Zero);
echo 
"</br>Five is " status($Five);
echo 
"</br>Six is " status($Six);
echo 
"</br>---------------------------------";
$st "1:2:3:4:5:6:7:8";
$exp_st explode (":" $st);
$zero $exp_st[0];
$one $exp_st[1];
$five $exp_st[5];
echo 
"</br>Zero " $zero;
echo 
"</br>One " $one;
echo 
"</br>Five " $five;
?>

Собственно это и есть отладка фуекции так без функции работает

   
 
 автор: isset   (16.03.2005 в 15:05)   письмо автору
 
   для: RV   (16.03.2005 в 14:57)
 


return $Zero;
return $Five;
return $Six; 

Функция status() возвращает $Zero и "останавливается". Поэтому везде и 1 выходит.
В функции можно использовать только один return

   
 
 автор: RV   (16.03.2005 в 15:20)   письмо автору
 
   для: isset   (16.03.2005 в 15:05)
 

>В функции можно использовать только один return
ну так и надо было в книге писать :)

   
 
 автор: cheops   (16.03.2005 в 15:22)   письмо автору
 
   для: isset   (16.03.2005 в 15:05)
 

Да, в функции можно использовать только один оператор return, но на PHP эту проблему можно очень элегантно решить для этого нужно возвращать массив.
<?php
function status() 

  
$string cookie($result['status']); 

  
$result_sting explode (":" $string); 
  
$Zero $result_sting[0]; 
  
$Five $result_sting[5]; 
  
$Six $result_string[6]; 

  return array(
$Zero$Five$Six); 
}
?>

А в месте вызова функции распотрошить массив при помощи кострукции list
<?php
 
list($Zero$Five$Six) = status();
?>

List() поместит значения соотвествующих элементов массива, возвращаемого функцией status() в переменные $Zero, $Five и $Six.

   
 
 автор: RV   (16.03.2005 в 16:35)   письмо автору
 
   для: cheops   (16.03.2005 в 15:22)
 

таак. а теперь мне надо получить значение $Zero (в данном случае должно возратить 1). что то сколько не пытался. так ничего и не вышло

   
 
 автор: cheops   (16.03.2005 в 19:15)   письмо автору
 
   для: RV   (16.03.2005 в 16:35)
 

Не очень понятно откуда его необходимо возратить - возвращается ли функцией массив? Если да, то нужное вам значение должно быть в первом элементе массива с индексом 0.

   
 
 автор: RV   (16.03.2005 в 19:31)   письмо автору
 
   для: cheops   (16.03.2005 в 19:15)
 

возратить надо из функции status().
пробовал например $status[0]

   
 
 автор: RV   (17.03.2005 в 15:17)   письмо автору
 
   для: RV   (16.03.2005 в 19:31)
 

ну так как получить данные $Zero, $Five, $Six из функции status() ??

   
 
 автор: isset   (17.03.2005 в 19:41)   письмо автору
 
   для: RV   (17.03.2005 в 15:17)
 


<?
function status()
{
global 
$Zero$Five$Six;
$string cookie($result['status']);

$result_sting explode (":" $string);
$Zero $result_sting[0];
$Five $result_sting[5];
$Six $result_string[6];
}
?>

использование:

<?
status
();
echo 
"</br>Zero is " $Zero;
echo 
"</br>Five is " $Five;
echo 
"</br>Six is " $Six;
?>

   
 
 автор: RV   (19.03.2005 в 20:35)   письмо автору
 
   для: isset   (17.03.2005 в 19:41)
 

>

>&lt;?
>function status()
>{
>global $Zero, $Five, $Six;
>$string = cookie($result['status']);
>
>$result_sting = explode (&quot;:&quot; , $string);
>$Zero = $result_sting[0];
>$Five = $result_sting[5];
>$Six = $result_string[6];
>}
>?&gt;
>

>использование:
>

>&lt;?
>status();
>echo &quot;&lt;/br&gt;Zero is &quot; . $Zero;
>echo &quot;&lt;/br&gt;Five is &quot; . $Five;
>echo &quot;&lt;/br&gt;Six is &quot; . $Six;
>?&gt;
>


а можно с этим по подробнее. вот я пишу после функции

<?
list($Zero$Five$Six) = status();
echo 
status($Five);
?>

выводит Array , а надо чтоб выводило содержимое $Five

   
 
 автор: isset   (19.03.2005 в 20:50)   письмо автору
 
   для: RV   (19.03.2005 в 20:35)
 


<?
list($Zero$Five$Six) = status();
echo 
$Five;
?> 

   
 
 автор: RV   (19.03.2005 в 20:52)   письмо автору
 
   для: isset   (19.03.2005 в 20:50)
 

странно. я веть так пробовал а оно вроде не работало. а сейчас работает. сенкс

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования