Работа с функциями PHP

Приветствую всех, сегодня рассмотрим такой момент — Работа с функциями PHP. Очень много вопросов по работе с ними, от людей которые стали недавно заниматься веб-разработкой и изучили основы работы с PHP и MySQL. Это совершенно нормально, я сам очень долго не умел с ними работать и осложнял тем самым себе жизнь :)

Так что, посмотрите это видео и Вы все поймете.
Я наконец-то спросил у гугла, какой размер видео нужен для youtub’a, так что теперь можете смотреть в HD качестве :)

Выставляйте качество 720р

Скачать файлы урока

И вот примеры кода с урока.

Файл index.php

<body>
<?include('functions.php');?>

<?
db_connect();
$data = select_data('articles');

foreach($data as $item):
    echo $item['title']; echo "<br />";
    echo $item['text']; echo "<br /><br />";
endforeach;
?>

</body>

Файл function.php

Функция подключения к БД

function db_connect()
{
    $user = 'test';
    $pswd = 'admin123';
    $host = 'localhost';
    $db = 'test';
    $connection = mysql_connect($host, $user, $pswd);
    mysql_query("SET NAMES utf8");
    if(!$connection || !mysql_select_db($db))
    {
        return false;
    }
    return $connection;
}

Функция выборки данных из БД

function select_data($table)
{
    $query = mysql_query("SELECT * FROM $table ORDER BY $table.id DESC");
    if(mysql_num_rows($query) > 0)
    {
        $count = 0;
        while($row = mysql_fetch_array($query))
        {
            $result[$count] = $row;
            $count++;
        }
        return $result;
    }
    else
    {
        return false;
    }
}

Если урок Вам был полезен, нажмите на любую кнопку ниже— буду благодарен :) Всем удачи и следите за ходом событий ;)

Комменты

  • Здравствуйте Дмитрий!
    Всё сделано по Вашему курсу «Экстримальное создание сайтов…»
    Всё работает, нов админке, на двух страницах — Главная и Пользователи, вверху выскакивает ошибка «Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /var/www/vhosts/u6958973.plsk.regruhosting.ru/jvvsitejob.ru/db_fns.php on line 30″
    и это строка function db_result_to_array($result)
    {
    $res_array = array();
    $count = 0;
    while ($row = mysql_fetch_array($result)) // строка #30
    {
    $res_array[$count] = $row;
    $count++;
    }
    return $res_array;
    }
    Проверил всё! Не понятно. Решил обратится к «создателю» :-), думаю так будет быстрее.

    • Дмитрий Валак: 15-01-2014 в 20:59

      Здравствуйте. Ошибка не в этой функции, а в той, которая вызывается на странице Главная и Пользователи, проверьте их, неправильно работаете с параметрами.

      • Дмитрий извините, но Вы о чём?
        На странице Главная вызывается как у Вас:

        <img src="userfiles/news/» alt=»» width=»200″ />

        ссылка
        <img src="admin/images/admin/edit.png" alt="» title=»» />
        <a href="#" onclick="alert('’);»><img src="admin/images/admin/delete.png" alt="» title=»» />

        ну и в Пользователи тоже:

        <img src="userfiles/news/» alt=»» width=»200″ />

        ссылка
        <img src="admin/images/admin/edit.png" alt="» title=»» />
        <a href="#" onclick="alert('’);»><img src="admin/images/admin/delete.png" alt="» title=»» />

        Насколько я понимаю эту ошибку = проблема в запросе т.к.
        после добавления после $result = mysql_query($query); строчку if(!$result)die(mysql_error()); в function select_data($table,$lang) файла db_fns.php.
        То показывает ошибочку:
        «You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘index WHERE index.lang = ‘ru’ ORDER BY index.id DESC’ at line 1″
        Вот так то…

        • Дмитрий Валак: 16-01-2014 в 11:59

          Я это и написал, что проблема не в той функции, которую вы мне сначала показали, а в другой, которая вызывается на тех страницах.
          И я написал, что не правильно работаете с параметрами. А конкретней, Вы принимаете язык сайта $lang и Вам нужно подставить его в запрос, например так:
          $query = sprintf( «SELECT * FROM pages WHERE pages.lang = ‘%s’ «, mysql_real_escape_string($lang));
          Попробуйте.

          • Давайте по порядку! Я написал выше про функцию select_data($table,$lang) — это моя ошибка, речь конечно же идёт вот о этих двух запросах:
            1. function get_main_news($lang)//
            {
            db_connect();
            $query = sprintf(«SELECT * FROM news WHERE news.lang = ‘%s’ ORDER BY news.id DESC LIMIT 4″, mysql_real_escape_string($lang));
            $result = mysql_query($query);
            if(!$result)die(mysql_error());
            $result = db_result_to_array($result);
            return $result;
            }

            2. function get_users()
            {
            db_connect();
            $query = «SELECT username FROM users ORDER BY users.status DESC»;
            $result = mysql_query($query);
            if(!$result)die(mysql_error());
            $result = db_result_to_array($result);
            return $result;
            }

            именно на этих двух страницах в верху страниц админки появляется надпись ошибки:
            «Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /var/www/vhosts/u6958973.plsk.regruhosting.ru/jvvsitejob.ru/db_fns.php on line 30″
            и я уже перепробовал много вариантов построения запросов. Но именно на этих двух страницах ошибка не пропадает, но функции информацию на них выводят.
            Попробую Ваш

          • Евгений: 23-11-2016 в 18:38

            «»»Я это и написал, что проблема не в той функции, которую вы мне сначала показали, а в другой, которая вызывается на тех страницах.
            И я написал, что не правильно работаете с параметрами. А конкретней, Вы принимаете язык сайта $lang и Вам нужно подставить его в запрос, например так:
            $query = sprintf( «SELECT * FROM pages WHERE pages.lang = ‘%s’ «, mysql_real_escape_string($lang));
            Попробуйте.»»»

            Дмитрий дайте пожалуйста ещё какую нибудь наводку по этому поводу, я никак не могу исправить эти ошибки, это нужно написать ещё один дополнительный запрос или дополнить этот:

            function select_data($table, $lang){
            db_connect();
            $query = «SELECT * FROM $table WHERE $table.lang = ‘$lang’ ORDER BY $table.id DESC»;
            $result = mysql_query($query);
            $result = db_result_to_array($result);
            return $result;

  • Здраствуйте.Как сделать на сайте поиск всех материалов, что нужно для этого сделать.Какую функцию нужно написать?

  • Дмитрий, спасибо огромное! Ваши видеоуроки очень помогли! Все доступно и наглядно. один момент только интересует: как сделать нумерацию страниц на главной? товаров много- все сразу не хочется выводить. у вас есть такой урок, но я пока плохо разбираюсь…..подскажите, как его адаптировать под интернет-магазин?

  • Здраствуйте, Дмитрий.Как можно быстро загрузить на сервер видеоролики, например видео с продолжительностью 20 минут, сколько время идет на это?

    • Дмитрий Валак: 16-10-2013 в 10:47

      Здравствуйте, я бы это сделал при помощи FTP клиента, например FileZilla.

  • Круто. молодец!!!!!

  • Здраствуйте, Дмитрий! Я пишу сайт на PHP, у меня такая ошибка выводить Warning: mysql_fetch_array (): аргумент не является допустимым результате MySQL ресурсов.Есть ли решение для этого, пожалуйста помогите.

  • По вашему видео у меня ничего не работает! Только ошибки сыпятся…

  • Дмитрий добрый день. подскажите, как бороться с иероглифами в результате вывода из БД.
    mysql_query(«SET NAMES utf8″); не помогает. есть какие то еще варианты? спасибо.

    • Дмитрий Валак: 26-08-2013 в 7:54

      Здравствуйте. Перейдите, пожалуйста, в раздел сайта «Контакты», там под формой есть раздел часто задаваемых вопросов. Первый вопрос — то что вам нужно.

  • По моему полезной функцией будет форум на данном сайте!

  • Warning: mysql_fetch_array (): supplied argument is not a valid MySQL result resource in C:\AppServ\www\katalog\db_fns.php on line ап

    Ругается на функцию

    function db_result_to_array ($result)

    Та же проблема была. Долго искал откуда ноги растут. Многим эта проблема известна.
    Разобрался:

    В функции выборки данных из таблицы, где в SELECT ставятся переменные, например «SELECT * FROM $table ORDER BY $table.id» и т.д. переменные надо экранировать вот этим символом(`) причем хитро: например `$table`.`id`, а с известными значениями такой привередливости php я не заметил.В итоге имеем примерно такой синтаксис:
    $result = mysql_query(» SELECT * FROM `$table` WHERE `$table`.`parent` = ‘none’ AND `$table`.`url` != ‘signup’ «);

  • здравствуйте как реализовать ф-цию фильтра товаров?

  • Да просто голову людям морочите… у меня чуть крыша не поехала от такого количества запутанного кода, так и желание программировать отпадет….

    • Дмитрий Валак: 07-12-2012 в 13:54

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

  • а запрос к БД тоже 2 строчки:
    $db = mysql_connect ("localhost","root","666666");
    mysql_select_db ("test",$db);
     

  • Честное слово хоть убейте не понимаю ЗАЧЕМ заниматься таким геморроем когда запрос к базе занимает всего какие то жалкие 2 строчки и пишешь их в нужном месте страницы:
    $result = mysql_query ("SELECT * FROM articles ORDER BY id DESC");    
    $myrow = mysql_fetch_array ($result);
    Берешь любую переменную
    $title = $myrow['title'];
    или выводишь в цикле
    do { echo "$myrow["title"]; }
    while ($myrow = mysql_fetch_array ($result));

     

    • Дмитрий Валак: 07-12-2012 в 0:16

      Делайте как хотите, Вас никто не заставляет делать так как на видео

  • Дмитрий, здравствуйте, Помогите. В Вашем курсе "Экстримальное создание сайтов…"
    есть функция get_menu — вывод меню сайта:
    function db_result_to_array($result) // пишем функцию для перебора записей
        {
            $res_array = array();
            
            $count = 0;
            
            while($row = mysql_fetch_array($result)) //пишем цикл прохода по всем записям таблицы pages
            {
                $res_array[$count] = $row;
                $count++;
            }
            return $res_array;
        }
        
        // пишем функцию для меню
        function get_menu()
        {
            db_connect();  // подключяемся к БД
            // сохраняем результат запроса выборкb из базы в переменную $result
            $sql = "SELECT id,title,title_url,keywords,description,lang FROM pages";
            $result = mysql_query($sql);

            $result    = db_result_to_array($result);
            
            return $result;
        }
    у меня на экран выводится только последнее значение таблицы pages (Обратная связь — contacts)
    остальные значения (index,news, video, photo ) не выводятся
    код на site.php:
    <?php
                $menu = get_menu();
                foreach($menu as $item);
            ?>
                
                    <a href="index.php?view=<?=$item['title_url'];?>" ><?=$item['title'];?></a>
            <?
                endforeach;
            ?>
    Где, в чём ошибка? Спасибо

  • Дмитрий здравствуйте!
    Вы в цикле while перебираете массив mysql _fitch-array и создаете новый, который возвращает функция.  Вопрос:
    ПочемУ нельзя возвратить сам массив mysql_fetch_array)?
    Спасибо
    function select_data($table)

  • Дима здравствуйте. Спасибо за подсказку… все получилось.
    Подскажите пожалуйста еще один момент. Вот если в магазин добавить больше 8 товаров (8 у Вас в видеоуроке), то рвет страницу и раскидывет все картинки по сторонам. Как от этого избавиться? И еще, как растянуть текст описания товара? Спасибо. 

  • Дима здравствуйте. С предыдущей ошибкой по видео уроку "интерн. магазин" разобрался.Все работает. Теперь другая беда. При оформлении заказа в базе данных не отображаются имя, фамилия, адрес, почтовый индекс и е-mail. Все остальное видно. Подскажите пожалуйста какие могут быть варианты решения?
    Ниже блок из файла order.php. Может там что-то не то? Заранее спасибо. 
    <?
    }
    if($_SESSION['cart'] && !isset($_POST['order']))
    {
    foreach($_POST as $ArrKey => $ArrStr)
    {$ArrKey = $_POST[$ArrKey];}
    $date = date('Y-m-d');
    $time = time('H-m-s');
    foreach($_SESSION['cart'] as $id => $quantity):
    $product = get_product($id);
    $query = mysql_query("INSERT INTO orders(name,s_name,addres,telefon,email,date,time,product,prod_id,price,qty)VALUES ('$name','$s_name','$addres','$telefon','$email','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
    endforeach;}
    ?>

    • Дмитрий Валак: 25-10-2012 в 8:21

      Здравствуйте, вместо
      foreach ($_POST as $ArrKey => $ArrStr)
      {$ArrKey = $_POST[$ArrKey];}

      Примите данные из формы по простому.
      $name = $_POST[‘name’]; и т.д

    • если не заносятся в базу данные о пользователе, попробуйте в фале «order.php» в запросе ($query = mysql_query) изменить значение VALUES с ‘$name’ на ‘{$_POST[‘name’]}’, и тд.

      foreach($_SESSION[‘cart’] as $id => $quantity ):
      $product = get_product($id);
      $query = mysql_query(«INSERT INTO `orders` (`name`,`s_name`,`address`,`email`,`date`,`time`,`product`,`prod_id`,`price`,`qty`) VALUES (‘{$_POST[‘name’]}’,'{$_POST[‘s_name’]}’,'{$_POST[‘address’]}’,'{$_POST[’email’]}’,’$date’,’$time’,'{$product[‘title’]}’,'{$product[‘id’]}’,'{$product[‘price’]}’,’$quantity’) «);
      endforeach;

  • НО делал ведь все в точности с Вашим видеокурсом…. А как от этого избавиться? После этой ошибки дальше ведь ничего не идет??? Раз десять уже все пересматривал и 3 раза ничинал все с начала :-(

    • Дмитрий Валак: 22-10-2012 в 18:54

      Если бы делали, все как в курсе, ошибок бы не было.
      Перенаправление в кейсе add_to_cart стоит?

  • Дима здравствуйте! Используя Ваш видеокурс "Интернет магазин на PHP
    и MySQL" пробовал создать аналогичный магазин, но уже месяц не могу
    понять в чем дело…
    При добавлении тавара в корзину или при ее обновлении велезает
    такая ошибка. Что же не так??? Заранее спасибо. 
    Warning: include
    (R:/home/localhost/www/shop/views/pages/add_to_cart.php)
    [function.include]:
    failed to open stream: No such file or directory in
    R:\home\localhost\www\SHOP\views\layouts\shop.php on line 33

    Warning: include() [function.include]: Failed opening 'R:/home/localhost/www/shop/views/pages/add_to_cart.php' for inclusion (include_path='.;C:\php\pear') in
    R:\home\localhost\www\SHOP\views\layouts\shop.php on line 33
    ____________________________________________________________________
     32  <td id="main-block" valign="top">
     33  <?include($_SERVER['DOCUMENT_ROOT'].'/shop/views/pages/'.$view.'.php');?>   
     34   <div style="clear: both;"></div>

     
     

    • Дмитрий Валак: 22-10-2012 в 17:53

      Здравствуйте.
      Получается, что вы хотите подключить файл с названием add_to_cart.php, который, якобы есть в папке views/pages.
      Вот он и ругается, что такого файла там нет.

  • Дима, спасибо огромное! Функции стали ближе. У меня есть вопрос — отправил его по почте. Думаю он волнует многих, не только начинающих.

  • Помогите. В Вашем курсе "Эестримальное создание сайтов…" в системе комментирования проблема! У меня почему-то время отображается там 838:59:59 А не нормальное время, когда был написан комментарий! Также не работает редирект! Хотя вроде всё написано правильно! Ниже я привёл код
     header('Location: index.php?view='.$view['title'].'&t='.$title);

    • Дмитрий Валак: 27-08-2012 в 2:00

      Попробуйте так: header («Location: index.php?view=’.$view[‘title’].’&t=’.$title»);
      Т.е сначала и в конце двойные кавычки

  • Огромное спасибо за инфу. Автору респект и уважуха.

  • Зер гуд ставлю 5 балов.

  • Здравствуйте! Сделал интернет магазин по вашему уроку,очень понравилось,внес некоторые изменения получилось просто отлично :)
    Хотел спросить,как можно сделать сортировку товаров по цене? 

    • Дмитрий Валак: 10-06-2012 в 10:28

      Спасибо рад что курс вам понравился.
      Насчет сортировки, не задумывался над этим вопросом, но как вижу это я — у вас есть кнопка «Сортировать по цене», при нажатии на которую первый раз происходит сортировка по убыванию, нажимаешь еще раз — по нарастанию.
      В этом случае просто идет вызов разных запросов и показ в цикле товаров по этому запросу. Первый раз нажал вызвался запрос выборки товаров …order by price desc…, второй раз нажал вызвался запрос — …order by price asc.
      Ну как-то так я думаю :)

  • Здравствуйте! Создал по Вашему видео курсу "Интернет магазин на PHP и MySQL" и велезает такая ошибка
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\katalog\db_fns.php on line ап
    Ругается на функцию  
    function db_result_to_array($result)
        {
            $res_array = array();
            
            $count = 0;//
            
            while($row = mysql_fetch_array($result)) <——что здесь не так?
            {
                $res_array[$count] = $row;
                $count++;
            }
            return $res_array;
        }
     

    • Дмитрий Валак: 31-05-2012 в 19:01

      Здравствуйте.

      В этой функции, вроде как все нормально.

      Копать нужно в сторону функции в которой Вы выбираете данные. В курсе это функция find_products(). Видимо в ней что-то не так, так как передаваемый параметр в функцию db_result_to_array неверен.

  • Здравствуйте! Подскажите, пожалуйста, как мне можно прикрепить к сайту, созданному на движке вордпресс статичную страницу в формате shtml. Пробовала ее залить в корневой каталог — не получилось, выдает, что по данному адресу страница не найдена… Страницы html таким образом загружала без проблем.

  • Дмитрий было бы не плохо, если бы Вы сняли видео урок по работе с сессиями, тоже малость не понятно как с ними работать!

  • Спасибо за урок, думаю буду еще не один раз пересматривать его.

    • Дмитрий Валак: 18-05-2012 в 13:24

      Пожалуйста :)
      Надеюсь, как-то удалось помочь в вопросе с функциями.