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

Форум PHP

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

 

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

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

тема: Вывод массива в функции
 
 автор: mister_pipin   (14.07.2011 в 01:14)   письмо автору
 
 

Привет,
Вот пример кода в котором хочу выводить нужные переменные из масива в таком виде $tit[id], $tit[title] и тд. Подскжаите как правильно написать данную функцию?
function zapros()
{
    $title_array = mysql_query("SELECT * FROM f_index WHERE sort='index'");
    $title = mysql_fetch_assoc($title_array);

    do
    {
        echo $title[title];
    }
    while($title = mysql_fetch_assoc($title_array));

    return $tit;
}
echo zapros();

  Ответить  
 
 автор: ONYX   (14.07.2011 в 02:39)   письмо автору
 
   для: mister_pipin   (14.07.2011 в 01:14)
 


<?
function zapros() 

    
$title_array mysql_query("SELECT * FROM f_index WHERE sort='index'"); 

    while(
$title mysql_fetch_assoc($title_array))
    { 
        echo 
$title['id'].'-'.$title['title']; 
    } 

echo 
zapros();
?>

  Ответить  
 
 автор: mister_pipin   (14.07.2011 в 02:44)   письмо автору
 
   для: ONYX   (14.07.2011 в 02:39)
 

не совсем то что я хотел, если на словах не получается, то думаю так будет ясно

echo zapros($title[и тут любое значение, которое нужно подставить]);


это уже вывод функции

  Ответить  
 
 автор: mister_pipin   (14.07.2011 в 14:21)   письмо автору
 
   для: mister_pipin   (14.07.2011 в 02:44)
 

Могли бы подсказать что я не так делаю или что я не понимаю в работе с функциями?
За ранее спасибо

  Ответить  
 
 автор: cheops   (14.07.2011 в 14:27)   письмо автору
 
   для: mister_pipin   (14.07.2011 в 02:44)
 

Пока ничего не понятно... Массив $title где формируется внутри функции или вне её?

PS В любом случае если вы используете echo внутри функции, его не нужно второй раз применять при вызове функции, если нужно, чтобы функция возвращала строку, то не нужно использовать в ней echo, нужно собирать данные передавать их наружу при помощи return.

  Ответить  
 
 автор: mister_pipin   (14.07.2011 в 14:46)   письмо автору
 
   для: cheops   (14.07.2011 в 14:27)
 

Я всю обработку хочу засунуть в функцию, чтобы вне функции, где мне нужно я подставлял только переменную
function zapros()
{
    $title_array = mysql_query("SELECT id,meta_d,meta_k,title,text FROM f_index WHERE sort='index'");
    $title = mysql_fetch_assoc($title_array);

    do
    {
        echo $title[title];
    }
    while($title = mysql_fetch_assoc($title_array));

    return $tit;
}
zapros();

при данном запросе из базы выбирается только одна строка
к примеру мне нужно подставить эту функцию в
<Title>тут вывод функции</title>
 <meta name="keywords" content="тут тоже вывод только переменная таже но значение в ней другое" />

и тд

  Ответить  
 
 автор: cheops   (14.07.2011 в 15:08)   письмо автору
 
   для: mister_pipin   (14.07.2011 в 14:46)
 

Т.е. функция должна возвращать название? В WHERE значение index откуда берется? Оно всегда одно и тоже
Посмотрите следующую функцию, насколько она далеко от того, что вам требуется? И что она должна делать еще?
<?php
function zapros() 

  
$query "SELECT id,meta_d,meta_k,title,text 
            FROM f_index
            WHERE sort='index'"
  
$title_array mysql_query($query); 
  if(!
$title_array)
  {
    echo 
"Ошибка выполнения запроса ".mysql_error();
    return 
false;
  }
  
$title = array();
  while(
$result mysql_fetch_assoc($title_array))
  {
    
$title[] = $result['title']; 
  } 
  if(!empty(
$title)) return implode(", "$title);
  else return 
false
}
?>

  Ответить  
 
 автор: mister_pipin   (14.07.2011 в 21:47)   письмо автору
 
   для: cheops   (14.07.2011 в 15:08)
 

Спасибо за помощь, как бы почти то, что нужно,
1. функция должна возвращать массив значений, которые можно будет подставлять в разных местах страницы(тоесть эти значения id,meta_d,meta_k,title,text )
2. в WHERE sort='index'" - index может меняться, я его возьму с $_GET[for] и при вызове функции в нужном месте передам этоn параметр
$for = $_GET[for];
function zapros($for)
{
тут код
}
zapros($for);


Данная функция, которую Вы предоставили в этой части кода
while($result = mysql_fetch_assoc($title_array))
  {
    $title[] = $result['title']; 
  } 

возвращает только одно значение, можно ли было сделать так, чтобы я смог выводить данную функцию примерно в виде
echo zapros($title[id]); или
echo zapros($title[meta_k]);

простите нуба если это настолько банально

  Ответить  
 
 автор: cheops   (14.07.2011 в 21:59)   письмо автору
 
   для: mister_pipin   (14.07.2011 в 21:47)
 

Хорошо, давайте введем параметр $filed
<?php 
function zapros($field='title')  
{  
  
$query "SELECT $field  
            FROM f_index 
            WHERE sort='index'" 
  
$title_array mysql_query($query);  
  if(!
$title_array
  { 
    echo 
"Ошибка выполнения запроса ".mysql_error(); 
    return 
false
  } 
  
$title = array(); 
  while(
$result mysql_fetch_assoc($title_array)) 
  { 
    
$title[] = $result[$field];  
  }  
  if(!empty(
$title)) return implode(", "$title); 
  else return 
false;  

?>
вместо
echo zapros($title[id]); или 
echo zapros($title[meta_k]);
нужно писать
echo zapros('id'); или 
echo zapros('meta_k');
PS Правильно ли я понял, что функция должна возвращать только одно значение одного поля или как сейчас много значений через запятую?

  Ответить  
 
 автор: mister_pipin   (14.07.2011 в 22:09)   письмо автору
 
   для: cheops   (14.07.2011 в 21:59)
 

Наверно я не правильно объяснил(
к примеру этот запрос

  $query = "SELECT id, meta_k,meta_d,text  
            FROM f_index 
            WHERE sort='index'" 
  $title_array = mysql_query($query);

мы можем брать из него любое значение поля $title_array[тут название поля] и выводим в любом месте страницы,

по этому примеру, на сколько понимаю,
function zapros($field='title') 

вместо title я могу ли подставить переменную $_GET[for] ? чтото попробовал да не получилось подставив переменную(
и этот GET поставить вместо index?

  Ответить  
 
 автор: cheops   (14.07.2011 в 22:21)   письмо автору
 
   для: mister_pipin   (14.07.2011 в 22:09)
 

Вместо этого аргумента вы можете подставить значение любого поля из списка id, meta_k,meta_d,text в виде строки, т.е.
echo zapros('id');
echo zapros('meta_k');
echo zapros('meta_d');
echo zapros('text');
Вместо строки, может быть и переменная $_GET['for'], если она содержит имя одного из допустимых полей.

  Ответить  
 
 автор: psychomc   (14.07.2011 в 22:07)   письмо автору
 
   для: ONYX   (14.07.2011 в 02:39)
 

echo при вызове явно лишнее

  Ответить  
 
 автор: mister_pipin   (14.07.2011 в 22:45)   письмо автору
 
   для: psychomc   (14.07.2011 в 22:07)
 

оно не содержит, грубо говоря по переменной $_GET[for] определяется какие данные будут выводится на страницу, вместо индекс можно писать $_GET[for] и мы получим нужный массив. вот только у меня так и не получается что хочется
я хочу этим способом оптимизировать код, вот этот

if (!isset($_GET[for]) OR $_GET[for] == 'index')
{

    //echo zapros();
    // выборка главной страницы
    $title_array = mysql_query("SELECT * FROM f_index WHERE sort='index'");
    $title = mysql_fetch_assoc($title_array);
}
else
{
    // выборка категорий
    $title_array = mysql_query("SELECT * FROM f_index WHERE sort='$_GET[for]'");
    $title = mysql_fetch_assoc($title_array);
    $title_row= mysql_num_rows($title_array);
}


вот так все работает

<title><?php echo htmlspecialchars($title[title]); ?></title>
<meta name="description" content="<?php echo htmlspecialchars($title['meta_d']);?>">
<meta name="keywords" content="<? echo htmlspecialchars($title['meta_k']); ?>">


с помощью функции не получается сделать первую часть условия(( вместо этих значений
<?php echo htmlspecialchars($title['meta_d']);?>

я хочу подставлять как Вы написали
zapros('meta_k');

но так и не получается, подскажите какую полезную литературу прочитать чтобы это все понять и сделать

  Ответить  
 
 автор: mister_pipin   (15.07.2011 в 00:51)   письмо автору
 
   для: mister_pipin   (14.07.2011 в 22:45)
 

Спасибо Вам большое, с Вашей помощью разобрался немного, вот что хотел сделать с первого раза но ни как не смог объяснить доступным языком

function zapros($id,$tt)
{
    $title_array = mysql_query("SELECT * FROM f_index WHERE sort='$id'");
    $title = mysql_fetch_assoc($title_array);
    if(!$title_array) 
    { 
        echo "Ошибка выполнения запроса ".mysql_error(); 
        return false; 
    }
    
    $tit = $title[$tt];

    return $tit;
}
if(isset($_GET[for]))    {$id = $_GET[for];}    else {$id = 'index';}

//zapros($id,'title');

  Ответить  
Rambler's Top100
вверх

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