BG Development


  Reply to this topicStart new topicStart Poll

> Проблем с PHP проект, не се зарежда докрай!, Проектът е за примерен онлайн магазин
Бай Аз
Публикувано на: 26-01-2024, 00:24
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 269
Регистриран на: 04.02.21



Здравейте!

Вчера гледах тема в един форум, и там авторът беше дал един примерен проект за онлайн магазин, който се мъчи да подкара и не може.

Имаше връзка към проекта в github: https://github.com/munaimpro/OnlineStoreBD/tree/main

На мен ми стана интересно и си поиграх, за да видя дали ще мога аз да го подкарам(в Open Server Panel).

Ето първо как изглежда сайта като се отвори файлът index.html от кореновата директория в браузъра в три снимки: горна, средна и долна част:

user posted image

user posted image

user posted image

Ето стъпките, които направих и докъде достигнах:

1. Копирам папката 2-Dynamic-Site в папката domains на Open Server Panel
2. Преименувам я на dynamic-site.com
3. Пускам OpenServer-а
4. Копирам името на папката dynamic-site.com в адресната лента на браузъра
5. Във файла config/config.php написвам моята парола, потребителят ми е същия - root
6. Отварям PHP MyAdmin от OpenServer и създавам базата от данни db_shopproject1
7. Импортирам базата данни от файла db_shopproject1, намиращ се в папката 1-Database

При импортирането на базата данни, обаче, ми даде грешка:

#1067 - Invalid default value for 'date'

Значи грешката е в следния ред на SQL заявката:

`date` varchar(255) NOT NULL DEFAULT current_timestamp(),

Накрая не трябва да има скоби: ()
Освен това принципно(както вече обясни trawn) не е коректно да се използва varchar за дати, а плюс стойност DEFAULT current_timestamp - дава грешка!

Този ред, за да проработи, трябва да бъде примерно следния:

`date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,

А ето и цялата тази част с неизпълнената SQL заявка, която трябва да се пусне отново, за да се изпълни:

CODE
CREATE TABLE `tbl_order` (
 `id` int(11) NOT NULL,
 `cmrId` varchar(255) NOT NULL,
 `productId` varchar(255) NOT NULL,
 `productName` varchar(255) NOT NULL,
 `quantity` varchar(255) NOT NULL,
 `price` varchar(255) NOT NULL,
 `image` varchar(255) NOT NULL,
 `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `status` int(11) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `tbl_order` (`id`, `cmrId`, `productId`, `productName`, `quantity`, `price`, `image`, `date`, `status`) VALUES
(1, '1', '4', 'Lorem Ipsum is simply', '2', '1310.44', 'upload/03e2ff0cb7.jpg', '2023-01-12 14:26:00', 1),
(2, '1', '9', 'Lorem Ipsum is simply', '1', '505.22', 'upload/03a2f8d3b8.jpg', '2023-01-12 14:26:00', 0);

Изпълняваме тази заявка в базата данни в PHP MyAdmin и виждаме, че сега вече всичко е наред, създадена е и последната таблица.

Обновявам страницата на сайта в браузъра и виждам следното - фото 4

user posted image

Нещо не е наред, защото се зарежда само хедърът(горната част).

--------------------------

И тук блокирах. Разглеждах кода кое след кое се извиква, защото доста файлове са навързани, но нищо не направих, защото стана късно.
Днес имах друга работа и ми остана време само, колкото да пусна темата.

Ще помоля тези, които разбират от тези неща(и специално и trawn), да кажат какво трябва да се направи, за да се зареди сайта изцяло?


--------------

П.с. Ще кача тук кода на папката 2-Dynamic-Site, която която според Read me файла - трябва да се качи в кореновата директория на сървъра.

Или, всъщност ще направя друго:

Ще кача по-добре кода на моята папка с проекта, където съм отстранил грешката в базата данни, без паролата на акаунта ми на сървъра, и без файловете от папка админ с изображения и JS, и ще изтрия и някои от изображенията, за да събера архива в 1mb.

А който иска да си изтегли целия код от github.

Това мнение е било редактирано от Бай Аз на 26-01-2024, 00:31

Прикачен файл ( Брой сваляния: 3 )
Прикачен файл  dynamic_site.com.zip
PMEmail Poster
Top
thrawn
Публикувано на: 26-01-2024, 06:32
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3615
Регистриран на: 17.01.17



На машината на която работиш (разработваш) е хубаво да активираш показването на всички грешки и предупреждения. Също така е повече от желателно да използваш ide с възможност за дебъг (и съответно си конфигърирай сървърът да работи в дебъг режим).
Така ще имаш условията за да решаваш такива проблеми без нуждата да хвърляш боб.
PMEmail Poster
Top
Бай Аз
Публикувано на: 26-01-2024, 08:58
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 269
Регистриран на: 04.02.21



Аз мисля, че това съм го активирал, защото друг път ми показва грешките, а и тук докато не бях създал базата данни ми показваше грешки. Но за всеки случай - кажи как става тази настройка, за да проверя довечера дали при мен е активна.

За IDE - то по принцип си прав, но сега PHP не ми е на дневен ред - това беше извънредно, защото просто ми стана интересно дали ще успея да подкарам този проект.

А и като инсталирам такова IDE - трябва да отделя и време, за да се науча да работя с него. Но все пак кажи ти кое препоръчваш за PHP?

Аз по принцип си работя от дълги години с Notepad ++, имам инсталирано и Visual Studio Code, понякога го ползвам, но по принцип то не ме "кефи", въпреки че има много функции.

IDE специално за PHP не съм инсталирал скоро. Като бях студент - бях пробвал нещо, но дори не се сещам какво беше.

--------------------------------

Сега по проекта:

Копирам тук кода от стартовия файл index.php

CODE
<?php include'inc/header.php';?>
<?php include'inc/slider.php';?>      

<div class="main">
   <div class="content">
         <div class="content_top">
               <div class="heading">
               <h3>Feature Products</h3>
               </div>
               <div class="clear"></div>
         </div>
            <div class="section group">
                  <?php
                        $getFpd = $pd->getFeaturedProduct();
                        if($getFpd){
                              while($result = $getFpd->fetch_assoc()){ ?>      
                        <div class="grid_1_of_4 images_1_of_4">
                               <a href="details.php?proid=<?php echo $result['productId'];?>"><img src="admin/<?php echo $result['image']; ?>" alt="" /></a>
                               <h2><?php echo $result['productName']; ?></h2>
                               <p><?php echo $fm->textShorten($result['body'], 60); ?></p>
                               <p><span class="price">$<?php echo $result['price']; ?></span></p>
                             <div class="button"><span><a href="details.php?proid=<?php echo $result['productId']; ?>" class="details">Details</a></span></div>
                        </div>
                  <?php } } ?>      
                  </div>
                  <div class="content_bottom">
               <div class="heading">
               <h3>New Products</h3>
               </div>
               <div class="clear"></div>
         </div>
                  <div class="section group">
                  <?php
                        $getNpd = $pd->getNewProduct();
                        if($getNpd){
                              while($result = $getNpd->fetch_assoc()){ ?>
                        <div class="grid_1_of_4 images_1_of_4">
                               <a href="details.php?proid=<?php echo $result['productId'];?>"><img src="admin/<?php echo $result['image'];?>" alt="" /></a>
                               <h2><?php echo $result['productName']; ?></h2>
                               <p><span class="price">$<?php echo $result['price'];?></span></p>
                             <div class="button"><span><a href="details.php?proid=<?php echo $result['productId']; ?>" class="details">Details</a></span></div>
                        </div>
                  <?php } } ?>
                  </div>
   </div>
</div>
<?php include'inc/footer.php';?>


В началото му се вижда, че първо се зареждат два файла:
- header.php
- slider.php

Но при мен се зарежда само първия файл, а втория не, и не продължава нататък.

Ето и началото на кода във файла header.php:
CODE
<?php
      include'lib/Session.php';
      Session::init();
      include'lib/Database.php';
      include'helpers/Format.php';

      spl_autoload_register(function($class){
            include_once'classes/'.$class.'.php';
      });

      $db  = new Database();
      $fm  = new Format();
      $ct  = new Cart();
      $cat = new Category();
      $pd  = new Product();
      $cmr = new Customer();
?>

<?php
 header("Cache-Control: no-cache, must-revalidate");
 header("Pragma: no-cache");
 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
 header("Cache-Control: max-age=2592000");
?>
<!DOCTYPE HTML>
<head>
<title>Store Website</title>
...
...
...

Тук също се вижда, че зарежда други файлове в началото и вече ми става мъгла...

Ако някой има идея как да продължа - нека се включи!

Това мнение е било редактирано от Бай Аз на 26-01-2024, 08:59
PMEmail Poster
Top
thrawn
Публикувано на: 26-01-2024, 10:00
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3615
Регистриран на: 17.01.17



това ти е конфигурацията https://www.php.net/manual/en/errorfunc.configuration.php
error_reporting го задаваш на E_ALL, display_errors и display_startup_errors на 1

това ти е дебъгерът https://xdebug.org/ и си избираш IDE което го поддържа - https://www.jetbrains.com/phpstorm/ (много добро, но платено) или https://netbeans.apache.org/

---едит---
в тоя хедър файл имаш деклариран ауто лоадер който зарежда класове при поискване, така че, там се зареждат много неща. Какво не е на ред е почти невъзможно да се каже така. Трябва да включиш показването на грешките или да ровиш по логовете за да видиш дали получаваш грешка. Ако не се вижда нищо такова, вече си трябва дебъгер за да проследиш какво става реално (друг вариант е да ползват трасиращи съобщения, но като цяло те не са инструмент за дебъгване)

Това мнение е било редактирано от thrawn на 26-01-2024, 10:05
PMEmail Poster
Top
Бай Аз
Публикувано на: 26-01-2024, 12:45
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 269
Регистриран на: 04.02.21




thrawn, благодаря много! Бъди жив и здрав!

Ще действам според твоите указания през почивните дни и ще пиша в понеделник, какво е станало!
PMEmail Poster
Top
relax4o
Публикувано на: 26-01-2024, 18:35
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2797
Регистриран на: 04.04.07



Малко странно, че в header.php се зареждат файлове, които са извън inc/ папката. Предвид, че се ползва include, то само ще върне WARNING вместо ERROR.

Тука може да играе роля как е настроен include_path. Включване на грешките най-вероятно ще ти каже къде е проблема.

Аз лично предпочитам да използвам require/require_once, за да ми изтрещи грешка вместо тихичко да ме предупреди, че файла ми липсва или не може да се достъпи.

Другото е, че предпочитам също да ползвам релативни пътища, но такива подходи в PHP не ползвам от години.

Другото, което може да е също е output_buffering да е изключено глобално и понеже никъде не се използва ob_start() всичките хедъри, които са сетнати ще ти изгърмят най-вероятно.

Това мнение е било редактирано от relax4o на 26-01-2024, 18:38


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
Бай Аз
Публикувано на: 29-01-2024, 08:53
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 269
Регистриран на: 04.02.21




Здравейте!

Успях да разреша проблема - слава Богу!

И то сравнително бързо и лесно: преди да започна да копая надълбоко с дебъгер и прочее, реших да огледам внимателно базата данни и видях, че нямам данни в таблиците.
Тогава изтрих всички таблици в нея, коригирах грешния ред в неговия файл със самата първоначална голяма SQL заявка и отново импортирах базата данни.

И вече се създадоха всички таблици с данни, и всичко тръгна! icon_lol.gif icon_lol.gif icon_lol.gif

(Просто аз се бях заблудил, че тази грешка в SQL заявката е повлияла само на съответната таблица, а се оказа, че не е така.)

Между другото, за да довършим изцяло темата,
thrawn, според теб, как е работила при автора на проекта заявката с този грешен ред?
QUOTE
`date` varchar(255) NOT NULL DEFAULT current_timestamp(),

(защото не ми се вярва, че той е качил неработещ проект?! А при мен ми даде грешка - която описах в първия си пост по темата.)

Сега, имам още един въпрос по системата ми за коментари, но ще вдигна след малко темата и ще го задам в нея, ето връзка към нея - темата за системата ми с коментари: система за коментари

Това мнение е било редактирано от Бай Аз на 29-01-2024, 09:04
PMEmail Poster
Top
thrawn
Публикувано на: 29-01-2024, 11:21
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3615
Регистриран на: 17.01.17



Старите версии на mysql го позволяват това.
PMEmail Poster
Top
Бай Аз
Публикувано на: 29-01-2024, 11:37
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 269
Регистриран на: 04.02.21



Да и аз предполагах нещо подобно.

Зададох въпрос в темата ми за системата за коментари,
който иска може да я отвори за по-бързо от тук-->система за коментари

Това мнение е било редактирано от Бай Аз на 29-01-2024, 11:39
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0