<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Przyszły Programista - Technologie webowe</title>
<link>http://forum.przyszlyprogramista.pl/?qa=questions/technologie-webowe</link>
<description>Powered by Question2Answer</description>
<item>
<title>Nie mogę się zalogować do NGINX używając wartości domyślnych</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2100/nie-mog%C4%99-si%C4%99-zalogowa%C4%87-nginx-u%C5%BCywaj%C4%85c-warto%C5%9Bci-domy%C5%9Blnych</link>
<description>&lt;p&gt;Witam,&lt;br&gt;
&lt;br&gt;
Zrobiłem tak jak na kursie i nie mogę się zalogować do nginx proxy manager.&lt;br&gt;
&lt;br&gt;
Wpisuję localhost:8181 wyskakuje mi panel do logowania i jeśli wpiszę admin@example.com i changeme wyskakuje błąd &quot;Not Found&quot;. Jak można to naprawić&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&lt;br&gt;
&lt;br&gt;
plik yml:&lt;br&gt;
&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
services:
  app: 
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    network_mode: &quot;host&quot;
    volumes:
	- ./data:/data 
	- ./letsencrypt:/etc/letsencrypt&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2100/nie-mog%C4%99-si%C4%99-zalogowa%C4%87-nginx-u%C5%BCywaj%C4%85c-warto%C5%9Bci-domy%C5%9Blnych</guid>
<pubDate>Thu, 24 Apr 2025 09:31:27 +0000</pubDate>
</item>
<item>
<title>wyświetlanie opcji drop-down menu (mvc)</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2092/wy%C5%9Bwietlanie-opcji-drop-down-menu-mvc</link>
<description>&lt;p&gt;Hej,&lt;/p&gt;

&lt;p&gt;W aplikacji budżetowej jest kilka stron z formularzem, gdzie użytkownik może wybrać opcję&amp;nbsp;z rozwijanego menu. Autor kursu ustawia wszystkie te opcje ręcznie, a ja chcę je pobrać z bazy danych. Wzorując się na jego przykładowym zapisie takich opcji&amp;nbsp;z projektu i wyświetlania ewentualnego błędu:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;!-- Country --&amp;gt;
    &amp;lt;label class=&quot;block&quot;&amp;gt;
      &amp;lt;span class=&quot;text-gray-700&quot;&amp;gt;Country&amp;lt;/span&amp;gt;
      &amp;lt;select name=&quot;country&quot; class=&quot;block w-full mt-1 rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50&quot;&amp;gt;
        &amp;lt;option value=&quot;USA&quot;&amp;gt;USA&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;Canada&quot; &amp;lt;?php echo $oldFormData['country'] === 'Canada' ? 'selected' : ''; ?&amp;gt;&amp;gt;Canada&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;Mexico&quot; &amp;lt;?php echo $oldFormData['country'] === 'Mexico' ? 'selected' : ''; ?&amp;gt;&amp;gt;Mexico&amp;lt;/option&amp;gt;
        &amp;lt;option value=&quot;Invalid&quot;&amp;gt;Invalid Country&amp;lt;/option&amp;gt;
      &amp;lt;/select&amp;gt;
      &amp;lt;?php if (array_key_exists('country', $errors)) : ?&amp;gt;
        &amp;lt;div class=&quot;bg-gray-100 mt-2 p-2 text-red-500&quot;&amp;gt;
          &amp;lt;?php echo e($errors['country'][0]); ?&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;?php endif; ?&amp;gt;
    &amp;lt;/label&amp;gt;&lt;/pre&gt;

&lt;p&gt;próbuję ustawić kategorie wydatków. Tak to wygląda u mnie:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;div&amp;gt;
            &amp;lt;label for=&quot;category&quot;&amp;gt;
              &amp;lt;select class=&quot;category&quot; name=&quot;category&quot;&amp;gt;
                &amp;lt;option selected disabled&amp;gt;Wybierz kategorię przychodu&amp;lt;/option&amp;gt;
                &amp;lt;?php foreach ($categories as $category): ?&amp;gt;
                  &amp;lt;option value=&quot;&amp;lt;?php echo $oldFormData[$category] ? 'selected' : ''; ?&amp;gt;&quot;&amp;gt;
                  &amp;lt;/option&amp;gt;
                &amp;lt;?php endforeach; ?&amp;gt;
              &amp;lt;/select&amp;gt;
            &amp;lt;/label&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;?php if (array_key_exists('category', $errors)) : ?&amp;gt;
            &amp;lt;div class=&quot;error&quot;&amp;gt;
              &amp;lt;?php echo e($errors['category'][0]); ?&amp;gt;
            &amp;lt;/div&amp;gt;
          &amp;lt;?php endif; ?&amp;gt;&lt;/pre&gt;

&lt;p&gt;W pliku TransactionController.php są odpowiednie funkcje do wyświetlania i renderowania błędów dla strony z przychodami:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

declare(strict_types=1);

namespace App\Controllers;

use Framework\TemplateEngine;
use App\Services\{ValidatorService, TransactionsService};

class TransactionController
{
  public function __construct(
    private TemplateEngine $view,
    private ValidatorService $validatorService,
    private TransactionsService $transactionsService
  ) {}

  public function createViewAddIncome()
  {
    echo $this-&amp;gt;view-&amp;gt;render(&quot;transactions/add_income.php&quot;);
  }

  public function createAddIncome()
  {
    echo $this-&amp;gt;validatorService-&amp;gt;validateIncome($_POST);
  }&lt;/pre&gt;

&lt;p&gt;W pliku ValidatorService.php są ustawione odpowiednie reguły co do walidacji danych formularza:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

declare(strict_types=1);

namespace App\Services;

use Framework\Validator;
use Framework\Rules\{
  NameRule,
  RequiredRule,
  EmailRule,
  MatchRule,
  PriceRule,
  CategoryIncomeRule,
  CategoryExpenseRule
};

class ValidatorService
{
  private Validator $validator;

  public function __construct()
  {
    $this-&amp;gt;validator = new Validator();

    $this-&amp;gt;validator-&amp;gt;add('name', new NameRule());
    $this-&amp;gt;validator-&amp;gt;add('required', new RequiredRule());
    $this-&amp;gt;validator-&amp;gt;add('email', new EmailRule());
    $this-&amp;gt;validator-&amp;gt;add('match', new MatchRule());
    $this-&amp;gt;validator-&amp;gt;add('price', new PriceRule());
    $this-&amp;gt;validator-&amp;gt;add('categoryIncome', new CategoryIncomeRule());
  }

  public function validateRegister(array $formData)
  {
    $this-&amp;gt;validator-&amp;gt;validate($formData, [
      'name' =&amp;gt; ['required', 'name'],
      'email' =&amp;gt; ['required', 'email'],
      'password' =&amp;gt; ['required'],
      'confirmPassword' =&amp;gt; ['required', 'match:password'],
    ]);
  }

  public function validateLogin(array $formData)
  {
    $this-&amp;gt;validator-&amp;gt;validate($formData, [
      'email' =&amp;gt; ['required', 'email'],
      'password' =&amp;gt; ['required']
    ]);
  }

  public function validateIncome(array $formData)
  {
    $this-&amp;gt;validator-&amp;gt;validate($formData, [
      'price' =&amp;gt; ['required', 'price'],
      'categoryIncome' =&amp;gt; ['required', 'categoryIncome']
    ]);
  }

  public function validateExpense(array $formData)
  {
    $this-&amp;gt;validator-&amp;gt;validate($formData, [
      'price' =&amp;gt; ['required', 'price'],
      'paymentMethod' =&amp;gt; ['required', 'paymentMethod'],
      'categoryExpense' =&amp;gt; ['required', 'categoryExpense']
    ]);
  }

  public function validateBalance(array $formData)
  {
    $this-&amp;gt;validator-&amp;gt;validate($formData, [
      'time-slot' =&amp;gt; ['required', 'timeSlot'],
    ]);
  }
}
&lt;/pre&gt;

&lt;p&gt;Dla strony z przychodami jest to CategoryIncomeRule.php:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

declare(strict_types=1);

namespace Framework\Rules;

use Framework\Contracts\RuleInterface;

class CategoryIncomeRule implements RuleInterface
{
  public function validate(array $data, string $field, array $params): bool
  {
    return in_array($data[$field], $params);
  }

  public function getMessage(array $data, string $field, array $params): string
  {
    return &quot;Nieprawidłowy wybór.&quot;;
  }
}
&lt;/pre&gt;

&lt;p&gt;Do wykonywania zapytań związanych z transakcjami w folderze Services utworzyłam osobny plik TransactionsService.php. I tutaj pobieram nazwy kategorii przychodów z bazy danych.&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

declare(strict_types=1);

namespace App\Services;

use Framework\Database;

class TransactionsService
{
  public function __construct(private Database $db) {}

  public function selectCategoriesIncomes(): array
  {
    $categories = $this-&amp;gt;db-&amp;gt;query(
      &quot;SELECT name FROM incomes_category_default&quot;
    );
    return $categories-&amp;gt;fetchAllResults();
  }
}
&lt;/pre&gt;

&lt;p&gt;Próbowałam na różne sposoby przekazać te wartości z tablicy categories do pliku TransactionController.php, np. tak (co zdaje mi się najbardziej sensowne):&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

declare(strict_types=1);

namespace App\Controllers;

use Framework\TemplateEngine;
use App\Services\{ValidatorService, TransactionsService};

class TransactionController
{
  public function __construct(
    private TemplateEngine $view,
    private ValidatorService $validatorService,
    private TransactionsService $transactionsService
  ) {}

  public function createViewAddIncome()
  {
    echo $this-&amp;gt;view-&amp;gt;render(&quot;transactions/add_income.php&quot;, [
      'categories' =&amp;gt; $this-&amp;gt;transactionsService-&amp;gt;selectCategoriesIncomes()
    ]);
  }

  public function createAddIncome()
  {
    echo $this-&amp;gt;validatorService-&amp;gt;validateIncome($_POST);
  }
}&lt;/pre&gt;

&lt;p&gt;ale za każdym razem nie wyświetlają się żadne opcje po rozwinięciu menu, tylko ta domyślna &quot;Wybierz kategorię przychodu&quot;. Dodatkowo, nie wiem czemu, ale przekazanie kategorii do&amp;nbsp;createViewAddIncome(), tak jak ja to wyżej przedstawiłam, powoduje że z formularza znika pole z komentarzem i przyciski &quot;Dodaj&quot; i &quot;Anuluj&quot;, które są pod spodem. Może jednak robię to w niewłaściwy sposób i/lub w niewłaściwym miejscu? Proszę o wskazówkę.&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2092/wy%C5%9Bwietlanie-opcji-drop-down-menu-mvc</guid>
<pubDate>Sat, 08 Mar 2025 18:46:37 +0000</pubDate>
</item>
<item>
<title>dodawanie użytkownika do bazy (mvc)</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2089/dodawanie-u%C5%BCytkownika-do-bazy-mvc</link>
<description>&lt;p&gt;Hej,&lt;/p&gt;

&lt;p&gt;Podczas rejestracji użytkownika i dodawania go do bazy pojawia mi się taki błąd, jak tutaj:&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://ibb.co/HfXZS8K6&quot; rel=&quot;nofollow&quot;&gt;https://ibb.co/HfXZS8K6&lt;/a&gt;. Program nie rozpoznaje kolumny name, mimo że ona jest w tabeli users w bazie phpmyadmin (dla pewności sprawdzałam też jej istnienie poprzez zapytanie w sql). Dodałam sprawdzenie var_dump($formData) i var_dump($_POST) we wszystkich możliwych miejscach aplikacji oraz samego zapytania query, żeby sprawdzić, czy dane z formularza prawidłowo przesyłają&amp;nbsp;wartość name, którą wpisuje użytkownik i za każdym razem jest prawidłowo. Myślałam, że może MySQL traktuje name jako słowo kluczowe, ale po zmianie zapytania na:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
$query = &quot;INSERT INTO users (`name`, email, password) VALUES (:name, :email, :password)&quot;;
&lt;/pre&gt;

&lt;p&gt;nadal jest ten sam problem.&lt;/p&gt;

&lt;p&gt;Pobrałam część plików autora&amp;nbsp;tego kursu php i dodałam do swojego projektu, żeby mieć pewność, że nie ma gdzieś jakiegoś drobnego błędu, którego nie zauważyłam, ale nadal jest ten błąd.&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

declare(strict_types=1);

namespace App\Services;

use Framework\Database;
use Framework\Exceptions\ValidationException;

class UserService
{
  public function __construct(private Database $db) {}

  public function isEmailTaken(string $email)
  {
    $emailCount = $this-&amp;gt;db-&amp;gt;query(
      &quot;SELECT COUNT(*) FROM users WHERE email = :email&quot;,
      [
        'email' =&amp;gt; $email
      ]
    )-&amp;gt;count();

    if ($emailCount &amp;gt; 0) {
      throw new ValidationException(['email' =&amp;gt; ['Istnieje konto z podanym adresem email.']]);
    }
  }

  public function create(array $formData)
  {
    $this-&amp;gt;db-&amp;gt;query(
      &quot;INSERT INTO users(name, password, email) VALUES(:name, :password, :email)&quot;,
      [
        'name' =&amp;gt; $formData['name'],
        'email' =&amp;gt; $formData['email'],
        'password' =&amp;gt; $formData['password'],
      ]
    );
  }
}
&lt;/pre&gt;

&lt;p&gt;Nie mam już pomysłu co jest nie tak..&lt;br&gt;
&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2089/dodawanie-u%C5%BCytkownika-do-bazy-mvc</guid>
<pubDate>Sun, 02 Mar 2025 16:27:22 +0000</pubDate>
</item>
<item>
<title>Błąd: &quot;Cannot modify header information - headers already sent&quot; - Aplikacja budżetowa PHP</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2084/cannot-modify-information-headers-already-aplikacja-bud%C5%BCetowa</link>
<description>&lt;p&gt;Hej wszystkim!&lt;/p&gt;

&lt;p&gt;Mam pytanie dotyczące aplikacji budżetowej w wersji strukturalnej.&lt;/p&gt;

&lt;p&gt;Rozjechał mi się balans, ale reszta funkcjonalności działa jak należy.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Błąd jest prozaiczny:&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Warning: Cannot modify header information - headers already sent by (output started at /home/&lt;a rel=&quot;nofollow&quot; href=&quot;http://klient.dhosting.pl/ppp/budget.wiktor-gindorowicz.profesjonalny&quot; target=&quot;_blank&quot;&gt;klient.dhosting.pl/ppp/budget.wiktor-gindorowicz.profesjonalny&lt;/a&gt;&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;http://programista.pl/public_html/date_balance.php:61&quot; target=&quot;_blank&quot;&gt;programista.pl/public_html/date_balance.php:61&lt;/a&gt;) in&amp;nbsp;/home/&lt;a rel=&quot;nofollow&quot; href=&quot;http://klient.dhosting.pl/ppp/budget.wiktor-gindorowicz.profesjonalnyprogramista.pl/public_html/date_balance.php&quot; target=&quot;_blank&quot;&gt;klient.dhosting.pl/ppp/budget.wiktor-gindorowicz.profesjonalnyprogramista.pl/public_html/date_balance.php&lt;/a&gt;&amp;nbsp;on line&amp;nbsp;166&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Link do repozytorium: &lt;a href=&quot;https://github.com/mrcyclist777/Budget-App&quot; rel=&quot;nofollow&quot;&gt;https://github.com/mrcyclist777/Budget-App&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wiem co to oznacza, poczytałem o tym błędzie i jak temu zapobiec, ale nie mogę dojść do ładu.&lt;/p&gt;

&lt;p&gt;Teoretycznie powinno to działać, a nie działa:)&lt;/p&gt;

&lt;p&gt;Proszę Was o pomoc.&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2084/cannot-modify-information-headers-already-aplikacja-bud%C5%BCetowa</guid>
<pubDate>Tue, 04 Feb 2025 21:29:04 +0000</pubDate>
</item>
<item>
<title>Dane z funkcji asynchronicznej</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2082/dane-z-funkcji-asynchronicznej</link>
<description>&lt;p&gt;Witam,&lt;/p&gt;

&lt;p&gt;Mam następujący problem:&amp;nbsp; noteIdVar&amp;nbsp;jest undefined. czy jest możliwość pobrania aktualnej wartości noteIdVar&amp;nbsp;poza db.query?&lt;/p&gt;

&lt;p&gt;Przeczytałem, że jest to spowodowane tym, że db.query to funkcja/metoda asynchroniczna.&lt;/p&gt;

&lt;p&gt;Ale jest jakiś sposób na pobranie tej wartości?&lt;/p&gt;

&lt;pre class=&quot;brush:jscript;&quot;&gt;
app.post('/savetodatabase', (req, res) =&amp;gt; {

	let noteIdVar;

    const note_id2 = 'SELECT MAX(note_id) AS idNote FROM notes WHERE user_id = ?';
    db.query(note_id2, [user_id], (err, data) =&amp;gt; {
        if (err) return res.json({
            Massage: &quot;Server Side Error&quot;
        })
        else {
            noteIdVar = data[0].idNote;
            console.log(&quot;NOTE ID WYNOSI in: &quot;, data[0].idNote); //tutaj normalna wartość
        }
    })
    console.log(&quot;NOTE ID WYNOSI outside NOTEID: &quot;, noteIdVar); //undefined
})&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2082/dane-z-funkcji-asynchronicznej</guid>
<pubDate>Wed, 29 Jan 2025 11:35:07 +0000</pubDate>
</item>
<item>
<title>aplikacja budżetowa z MVC - wyświetlanie strony rejestracji</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2078/aplikacja-bud%C5%BCetowa-mvc-wy%C5%9Bwietlanie-strony-rejestracji</link>
<description>&lt;p&gt;Cześć,&lt;/p&gt;

&lt;p&gt;Przechodząc ze strony głównej do rejestracji, mam problem z jej wyświetleniem, po prostu całkowicie pusta strona, żadne błędy się też nie pojawiają.&amp;nbsp;Nie mogę namierzyć co jest nie tak.., wydaje mi się, że logika dodawania tej strony jest taka sama jak dla strony głównej, z którą nie było problemu. Plik (register.php)&amp;nbsp;znajduje się w folderze src/App/views.&amp;nbsp; Na razie dodałam do niego tylko krótki tekst jako test.&lt;/p&gt;

&lt;p&gt;Tak wygląda plik Routes.php:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

declare(strict_types=1);

namespace App\Config;

use Framework\App;
use App\Controllers\{HomeController, AuthController};

function registerRoutes(App $app)
{
  $app-&amp;gt;get('/', [HomeController::class, 'home']);
  $app-&amp;gt;get('/register', [AuthController::class, 'registerView']);
}
&lt;/pre&gt;

&lt;p&gt;Plik AuthController:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

declare(strict_types=1);

namespace App\Controllers;

use Framework\TemplateEngine;

class AuthController
{
  public function __construct(private TemplateEngine $view) {}

  public function registerView()
  {
    echo $this-&amp;gt;view-&amp;gt;render(&quot;register.php&quot;);
  }
}
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2078/aplikacja-bud%C5%BCetowa-mvc-wy%C5%9Bwietlanie-strony-rejestracji</guid>
<pubDate>Sun, 26 Jan 2025 20:12:06 +0000</pubDate>
</item>
<item>
<title>Current user id</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2073/current-user-id</link>
<description>Witam,&lt;br /&gt;
&lt;br /&gt;
chciałbym pobrać z bazy danych id aktualnie zalogowanego użytkownika z użyciem JavaScript.&lt;br /&gt;
&lt;br /&gt;
Jak to zrobić?</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2073/current-user-id</guid>
<pubDate>Wed, 22 Jan 2025 19:29:52 +0000</pubDate>
</item>
<item>
<title>datepicker JavaScript</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2033/datepicker-javascript</link>
<description>&lt;p&gt;Hej,&lt;/p&gt;

&lt;p&gt;Próbuję dodać do aplikacji budżetowej kalendarz, czyli chciałabym, żeby po kliknięciu na pasek wyboru daty, pojawiało się okno z kalendarzem. Próbowałam to zrobić tak jak jest wyjaśnione na tej stronie &lt;a href=&quot;https://jqueryui.com/datepicker/&quot; rel=&quot;nofollow&quot;&gt;https://jqueryui.com/datepicker/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Czyli:&lt;/p&gt;

&lt;pre class=&quot;brush:xml;&quot;&gt;
&amp;lt;div&amp;gt;&amp;lt;label for=&quot;datepicker&quot;&amp;gt;Wybierz datę:&amp;lt;/label&amp;gt;
                &amp;lt;input type=&quot;text&quot; id=&quot;datepicker&quot;&amp;gt;
 &amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;pre class=&quot;brush:jscript;&quot;&gt;
$(function () {
  $( function() {
    $( &quot;#datepicker&quot; ).datepicker();
});

$( &quot;#datepicker&quot; ).datepicker({
  dateFormat: &quot;yy-mm-dd&quot;
});

var dateFormat = $( &quot;.datepicker&quot; ).datepicker( &quot;option&quot;, &quot;dateFormat&quot; );
 
$( &quot;#datapicker&quot; ).datepicker( &quot;option&quot;, &quot;dateFormat&quot;, &quot;yy-mm-dd&quot; );&lt;/pre&gt;

&lt;p&gt;Niestety u mnie to nie działa, po kliknięciu w to pole mogę je wypełnić, ale nie pojawia się kalendarz. Z użyciem samego HTML i &amp;lt;input type=&quot;date&quot;&amp;gt; nie chcę tego robić, bo tam jest wstawiona domyślnie data jako mm/dd/yyyy, a ten format mi nie odpowiada i nie da się go zmienić. Oczywiście ścieżki do załadowania jQuery są poprawnie dodane do head w pliku html.. .&lt;/p&gt;

&lt;p&gt;Więc jak to inaczej zrobić?&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2033/datepicker-javascript</guid>
<pubDate>Thu, 12 Sep 2024 12:01:40 +0000</pubDate>
</item>
<item>
<title>Kurs PHP odc. 6: Wysyłanie maili z poziomu kodu. Funkcja mail, PHPMailer</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2015/kurs-php-wysy%C5%82anie-maili-poziomu-kodu-funkcja-mail-phpmailer</link>
<description>&lt;p&gt;Cześć Wszystkim,&lt;/p&gt;

&lt;p&gt;Mam problem z 6. odcinkiem od Mirosława Zelenta, a konretnie z wysyłaniem maila - skonfigurowałem plik php.ini oraz sendemail.ini w taki sposób, jak omówiony w linkach pof filmikiem - w dalszym ciągu natomiast maile się nie wysyłają z gmaila - poniżej podrzucam logi oraz pliki .ini - może komuś z Was przydarzył się podobny problem i doradzicie, co zrobić w tej kwestii?&lt;/p&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
24/08/05 11:40:10 ** --- MESSAGE BEGIN ---
24/08/05 11:40:10 ** To: marcin.sochacki.programista@gmail.com
24/08/05 11:40:10 ** Subject: Darmowy, świetny ebook - HTML na przykładach
24/08/05 11:40:10 ** From: Ebooki uczące sztuki &amp;lt;no-replay@domena.pl&amp;gt;
24/08/05 11:40:10 ** Reply-To: Biuro &amp;lt;biuro@domena.pl&amp;gt;
24/08/05 11:40:10 ** 
24/08/05 11:40:10 ** &amp;lt;p&amp;gt;Dzień Dobry! 
24/08/05 11:40:10 ** 
24/08/05 11:40:10 **  Oto link do naszego świetnego ebooka: &amp;lt;a href = &quot;https://domena.pl/ebook.pdf&quot;&amp;gt;POBIERZ EBOOKA&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
24/08/05 11:40:10 ** --- MESSAGE END ---
24/08/05 11:40:11 ** Connecting to smtp.gmail.com:587
24/08/05 11:40:22 ** Disconnected.
24/08/05 11:40:22 ** Disconnected.
24/08/05 11:40:22 ** Disconnected.
24/08/05 11:40:22 ** Disconnected.
24/08/05 11:40:22 ** Connect timed out.&lt;/pre&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
[sendmail]

smtp_server = smtp.gmail.com
smtp_port = 587
error_logfile = error.log
debug_logfile = debug.log
auth_username = marcin.sochacki.programista@gmail.com
auth_password = xxx
force_sender = 	marcin.sochacki.programista@gmail.com&lt;/pre&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
[mail function]
SMTP = smtp.gmail.com
smtp_port = 587
sendmail_from = marcin.sochacki.programista@gmail.com
sendmail_path = &quot;C:\Users\SochackiMa\xampp\sendmail\sendmail.exe&quot;

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail().
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header=Off

; Use mixed LF and CRLF line separators to keep compatibility with some
; RFC 2822 non conformant MTA.
mail.mixed_lf_and_crlf=Off

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =
; Log mail to syslog (Event Log on Windows).
;mail.log = syslog&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2015/kurs-php-wysy%C5%82anie-maili-poziomu-kodu-funkcja-mail-phpmailer</guid>
<pubDate>Mon, 05 Aug 2024 10:03:22 +0000</pubDate>
</item>
<item>
<title>div wewnątrz hiperłącza</title>
<link>http://forum.przyszlyprogramista.pl/?qa=2004/div-wewn%C4%85trz-hiper%C5%82%C4%85cza</link>
<description>&lt;p&gt;Cześć,&lt;/p&gt;

&lt;p&gt;Uczę się HTML i chcę umieścić div wewnątrz hiperłącza. Docelowo ma to wyglądać tak jak na załączonym obrazku, gdzie jest ten blok z pytaniem &quot;Co oferuję?&quot;:&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://i.postimg.cc/rsZgTfS9/oferta.jpg&quot;&gt;https://i.postimg.cc/rsZgTfS9/oferta.jpg&lt;/a&gt;&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;Mam prośbę, żeby ktoś mi wytłumaczył, dlaczego u mnie&amp;nbsp;jest tak, że jak umieszczę div wewnątrz hiperłącza, to on się zmniejsza w taki sposób:&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://i.postimg.cc/15LcKnM4/Zrzut-ekranu-2024-07-07-144759.png&quot;&gt;https://i.postimg.cc/15LcKnM4/Zrzut-ekranu-2024-07-07-144759.png&lt;/a&gt;&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;To jest fragment kodu HTML:&lt;/p&gt;

&lt;pre class=&quot;brush:xml;&quot;&gt;
&amp;lt;body&amp;gt;
  &amp;lt;div id=&quot;container&quot;&amp;gt;
    &amp;lt;div class=&quot;rectangle&quot;&amp;gt;
      &amp;lt;div id=&quot;logo&quot;&amp;gt;Jan Kowalski&amp;lt;/div&amp;gt;
      &amp;lt;div id=&quot;zegar&quot;&amp;gt;12:00:00&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;square&quot;&amp;gt;
      &amp;lt;div id=&quot;square1&quot;&amp;gt;
        &amp;lt;div class=&quot;tile1&quot;&amp;gt;
          &amp;lt;a href=&quot;kimjestem.html&quot; class=&quot;tilelink&quot;&amp;gt;&amp;lt;i class=&quot;icon-user&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;Kim jestem?&amp;lt;/a&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;a href=&quot;oferta.html&quot;&amp;gt;
          &amp;lt;div class=&quot;tile1&quot;&amp;gt;
            &amp;lt;i class=&quot;icon-laptop&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;Co oferuję?
          &amp;lt;/div&amp;gt;
        &amp;lt;/a&amp;gt;
        &amp;lt;div class=&quot;tile2&quot;&amp;gt;
          &amp;lt;i class=&quot;icon-graduation-cap&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;CV
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;tile3&quot;&amp;gt;
          &amp;lt;i class=&quot;icon-mail&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt;Kontakt ze mną
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;tile4&quot;&amp;gt;
          &amp;lt;i&amp;gt;Talk me cheap. Show me the code!&amp;lt;/i&amp;gt;&amp;lt;br /&amp;gt; - Linus Torvalds, twórca Linuxa
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;div id=&quot;square2&quot;&amp;gt;
        &amp;lt;div class=&quot;tile5&quot;&amp;gt;
          Tytuł podstrony&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc gravida dictum odio non interdum. Pellentesque
          volutpat ultrices porttitor. Donec hendrerit lectus interdum, tristique mi a, feugiat dui. Fusce leo mi,
          mattis ornare efficitur sit amet, dapibus et odio. Mauris id facilisis neque, ut accumsan libero. Donec sed
          nunc quam.
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;yt&quot;&amp;gt;
          &amp;lt;i class=&quot;icon-youtube&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;fb&quot;&amp;gt;
          &amp;lt;i class=&quot;icon-facebook&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;gplus&quot;&amp;gt;
          &amp;lt;i class=&quot;icon-gplus&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;tw&quot;&amp;gt;
          &amp;lt;i class=&quot;icon-twitter&quot;&amp;gt;&amp;lt;/i&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;rectangle&quot;&amp;gt; 2015 &amp;amp;copy; Jan Kowalski - portfolio. Programista webowy zaprasza do
      współpracy.&amp;lt;i class=&quot;icon-mail-alt&quot;&amp;gt;&amp;lt;/i&amp;gt;jan.kowalski@adres.com
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;To plik style.css:&lt;/p&gt;

&lt;pre class=&quot;brush:css;&quot;&gt;
body{
  background-color: #303030;
  color: #ffffff;
  font-family: &quot;Lato&quot;, sans-serif;
  font-size: 20px;
}
#container{
  width: 1000px;
  margin-left: auto;
	margin-right: auto;
  display: flex;
  flex-direction: column;
}
.rectangle{
  width: 960px;
  margin: 20px;
  display: flex;
  clear:both;
  text-align: center;
}
.square{
  display: flex;
  flex-direction: row;
  width: 50%;
  margin-bottom: 40px
}
#logo{
  font-family: &quot;Josefin Sans&quot;, sans-serif;
  font-size: 70px;
  width: 600px;
  text-align: left
}
#zegar{
  font-family: &quot;Josefin Sans&quot;, sans-serif;
  font-size: 70px;
  text-align: left
}
#square1{
  display: grid;
  grid-template-columns: 250px 250px;
  grid-template-rows: 162px 162px 172px;
}
.tile1{
  margin: 10px;
  background-color: #3095d3;
  text-align: center
}
.tile1:hover{
  background-color: #2084c2;
}
.tile2:hover{
  background-color: #555555;
}
.tile3:hover{
  background-color: #82b637;
}
.tile2{
  margin: 10px;
  background-color: #666666;
  text-align: center
}
.tile3{
  margin: 10px;
  background-color: #93c748;
  text-align: center
}
.tile4{
  margin: 10px;
  background-color: #ee5a32;
  grid-column: span 2;
  text-align: center;
  font-size: 26px;
  padding: 30px;
  line-height: 150%;
}
#square2{
  display: grid;
  grid-template: 324px 172px / repeat(4, 120px);
}
.tile5{
  margin: 10px;
  grid-column: span 4;
  background-color: #666666;
  text-align: center;
  text-align: justify;
  padding: 30px
}
.yt:hover{
  background-color: #c83237;
}
.fb:hover{
  background-color: #3557a2;
}
.gplus:hover{
  background-color: #c84222;
}
.tw:hover{
  background-color: #2084c2;
}
.yt{
  margin: 10px;
  background-color: #d94348;
}
.fb{
  margin: 10px;
  background-color: #4668b3;
}
.gplus{
  margin: 10px;
  background-color: #d95333;
}
.tw{
  margin: 10px;
  background-color: #3095d3;
}
a.tilelink{
  color: #ffffff;
  text-decoration: none;
  display: block;
  width: 100%;
  height: 100%;
}&lt;/pre&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=2004/div-wewn%C4%85trz-hiper%C5%82%C4%85cza</guid>
<pubDate>Sun, 07 Jul 2024 14:16:12 +0000</pubDate>
</item>
<item>
<title>Dynamiczna obsługa tras na frameworku Express.js</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1989/dynamiczna-obs%C5%82uga-tras-na-frameworku-express-js</link>
<description>&lt;p&gt;Cześć,&lt;/p&gt;

&lt;p&gt;Obecnie tworzę aplikację internetową opartą na frameworku Express.js, która pozwala użytkownikom tworzyć, edytować i usuwać posty na swoim blogu.&lt;/p&gt;

&lt;p&gt;Mam problem z dynamicznym routingiem nowo utworzonych postów. Chcę, aby użytkownik po poprawnym przesłaniu danych (tj. tytułu i treści posta) poprzez formularz metodą POST, przechodził następnie do podstrony, gdzie endpointem jest nazwa utworzonego artykułu, np. &lt;em&gt;http://localhost:3000/nazwaposta&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Obecnie aplikacja poprawnie tworzy nowy plik EJS w folderze &lt;em&gt;/views&lt;/em&gt;, gdzie przechowuję wszystkie pliki dla każdej trasy. Jednak po kliknięciu na link&amp;nbsp;wskazujący na tę konkretną trasę, strona nie ładuje się i otrzymuję komunikat informujący, że serwer nie może obsłużyć tej strony.&lt;/p&gt;

&lt;pre&gt;
Nie można uzyskać GET /post name&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;W pliku index.js próbowałem załadować nowo utworzone trasy za pomocą pętli, ale nie przeszło to testu. Serwer nie rozpoznaje tych tras. Kiedy na sztywno&amp;nbsp;wpisuję nazwę, strona ładuje się poprawnie (patrz: zakomentowany fragment kodu).&amp;nbsp; Nazwy ścieżek i endpointów są zapisywane w tablicach: &lt;em&gt;paths&lt;/em&gt; oraz &lt;em&gt;posts&lt;/em&gt;.&amp;nbsp;Chciałbym&amp;nbsp;obsługiwać&amp;nbsp;te trasy dynamicznie, tak aby na przykład za pomocą pętli załadować wszystkie utworzone trasy za pomocą metody app.get(), a nie jak do tej pory na sztywno je wpisywać.&amp;nbsp;Jak mogę to zrobić?&lt;/p&gt;

&lt;p&gt;Poniżej zamieściłem&amp;nbsp;kod pliku index.js:&lt;/p&gt;

&lt;pre class=&quot;brush:jscript;&quot;&gt;
import express from &quot;express&quot;;
import bodyParser from &quot;body-parser&quot;;
import fs from &quot;fs&quot;;

const app = express();
const port = 3000;

var posts = [];
var paths = [];

app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static(&quot;public&quot;));


app.get(&quot;/&quot;, (req, res) =&amp;gt; {
  res.render(&quot;index.ejs&quot;);
});

for (var i=0; i&amp;lt;posts.length; i++) {
  var path = paths[i];
  app.get(`/${path}`, (req, res) =&amp;gt; {
    res.render(`${path}.ejs`, { article: posts[i] });
  });
};

app.get(&quot;/posts&quot;, (req, res) =&amp;gt; {
  res.render(&quot;posts.ejs&quot;, { posts: posts });
});

app.post(&quot;/create-post&quot;, (req, res) =&amp;gt; {
  const article = {
    title: req.body[&quot;title&quot;],
    date: new Date().toLocaleDateString(&quot;en-US&quot;, {
      year: &quot;numeric&quot;,
      month: &quot;long&quot;,
      day: &quot;2-digit&quot;,
    }),
    htmlContent: req.body[&quot;content&quot;],
  };
  var path = article.title.replaceAll(&quot; &quot;, &quot;&quot;).toLowerCase();
  var data = `&amp;lt;%- include(&quot;partials/template.ejs&quot;) %&amp;gt;`;

  posts.push(article);
  paths.push(path);
  fs.writeFile(`./views/${path}.ejs`, data, (err) =&amp;gt; {
    if (err) throw err;
    console.log(&quot;The file has been saved!&quot;);
  });
  
  res.render(&quot;posts.ejs&quot;, { posts: posts });
});

app.get(&quot;/create-post&quot;, (req, res) =&amp;gt; {
  res.render(&quot;create-post.ejs&quot;);
});

// app.get(&quot;/nazwaposta&quot;),
//   (req, res) =&amp;gt; {
//     res.render(&quot;nazwaposta.ejs&quot;, {article: posts[0]});
//   };

app.listen(port, () =&amp;gt; {
  console.log(`Server running on port ${port}.`);
});&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Kod przykładowego pliku EJS utworzonego za pomocą formularza :&lt;/p&gt;

&lt;pre class=&quot;brush:jscript;&quot;&gt;
&amp;lt;%- include(&quot;header.ejs&quot;) %&amp;gt;

    &amp;lt;% if(article) { %&amp;gt;
        &amp;lt;h2&amp;gt;&amp;lt;%=article.title %&amp;gt;&amp;lt;/h2&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;%=article.htmlContent %&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;% } %&amp;gt;

&amp;lt;%- include(&quot;footer.ejs&quot;) %&amp;gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1989/dynamiczna-obs%C5%82uga-tras-na-frameworku-express-js</guid>
<pubDate>Mon, 03 Jun 2024 09:57:05 +0000</pubDate>
</item>
<item>
<title>Problem z zadaniem: json/javaScript/chartJS</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1924/problem-z-zadaniem-json-javascript-chartjs</link>
<description>&lt;p&gt;Cześć,&lt;/p&gt;

&lt;p&gt;proszę o wskazówkę jak ruszyć dalej,&lt;/p&gt;

&lt;p&gt;mam problem z zadaniem na linii json - java script:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.frontendmentor.io/challenges/expenses-chart-component-e7yJBUdjwt&quot; rel=&quot;noopener nofollow&quot; target=&quot;_blank&quot;&gt;https://www.frontendmentor.io/challenges/expenses-chart-component-e7yJBUdjwt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;pojawia się komunikat i po wielu próbach nie wiem jak sobie poradzić z tym:&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#ff0000&quot;&gt;index.html:1 Access to fetch at 'file:///E:/Web%20Development%20Projects/_28_wyzwania/02_expenses-chart-component-main/data.json' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome, https, chrome-untrusted.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Najprostszym rozwiązaniem było wykorzystanie &quot;live server&quot; w VS Code, ale nie wyświetla on poprawnej strony, a jedynie text zawierający &quot;lorem ipsum&quot;.&lt;/p&gt;

&lt;p&gt;Link do mojego dotychczasowego zadania:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/SylwiaNowak/Expenses-chart-component&quot; rel=&quot;nofollow&quot;&gt;https://github.com/SylwiaNowak/Expenses-chart-component&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Poniżej pliki:&lt;/p&gt;

&lt;p&gt;///////////////////////////////////////////////////////////////////////// index.js /////////////////////////////////////////////////////////////////////////////////////&lt;/p&gt;

&lt;p&gt;const ctx = document.getElementById('userChart');&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;fetch(&quot;data.json&quot;)&lt;/p&gt;

&lt;p&gt;.then(function(response){&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; if(response.ok==true) {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return response.json();&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;

&lt;p&gt;})&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;.then(function(data) {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; createChart(data, 'bar');&lt;/p&gt;

&lt;p&gt;})&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;function createChart(data, type) {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; new Chart(ctx, {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; type: type,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data: {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; labels: data.map(row =&amp;gt; row.day),&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; datasets: [{&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; label: 'Spending - Last 7 days',&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data: data.map(row =&amp;gt; row.amount),&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; backgroundColor: [&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#ec775f',&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#ec775f',&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#ec775f',&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#ec775f',&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#ec775f',&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#ec775f'&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ],&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; borderRadius: 5,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; borderWidth: 1&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }]&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; options: {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scales: {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y: {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; beginAtZero: true&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maintainAspectRatio: false&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/p&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;////////////////////////////////////////////////////// data.json ////////////////////////////////////////////////////////////////////////////////////////////////&lt;/p&gt;

&lt;p&gt;[&lt;/p&gt;

&lt;p&gt;&amp;nbsp; {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;day&quot;: &quot;mon&quot;,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;amount&quot;: 17.45&lt;/p&gt;

&lt;p&gt;&amp;nbsp; },&lt;/p&gt;

&lt;p&gt;&amp;nbsp; {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;day&quot;: &quot;tue&quot;,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;amount&quot;: 34.91&lt;/p&gt;

&lt;p&gt;&amp;nbsp; },&lt;/p&gt;

&lt;p&gt;&amp;nbsp; {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;day&quot;: &quot;wed&quot;,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;amount&quot;: 52.36&lt;/p&gt;

&lt;p&gt;&amp;nbsp; },&lt;/p&gt;

&lt;p&gt;&amp;nbsp; {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;day&quot;: &quot;thu&quot;,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;amount&quot;: 31.07&lt;/p&gt;

&lt;p&gt;&amp;nbsp; },&lt;/p&gt;

&lt;p&gt;&amp;nbsp; {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;day&quot;: &quot;fri&quot;,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;amount&quot;: 23.39&lt;/p&gt;

&lt;p&gt;&amp;nbsp; },&lt;/p&gt;

&lt;p&gt;&amp;nbsp; {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;day&quot;: &quot;sat&quot;,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;amount&quot;: 43.28&lt;/p&gt;

&lt;p&gt;&amp;nbsp; },&lt;/p&gt;

&lt;p&gt;&amp;nbsp; {&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;day&quot;: &quot;sun&quot;,&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &quot;amount&quot;: 25.48&lt;/p&gt;

&lt;p&gt;&amp;nbsp; }&lt;/p&gt;

&lt;p&gt;]&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1924/problem-z-zadaniem-json-javascript-chartjs</guid>
<pubDate>Mon, 25 Mar 2024 15:16:55 +0000</pubDate>
</item>
<item>
<title>JavaScript nie rozpoznaje składni Twig - wyświetlanie wykresu kołowego</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1884/javascript-rozpoznaje-sk%C5%82adni-wy%C5%9Bwietlanie-wykresu-ko%C5%82owego</link>
<description>&lt;p&gt;Cześć,&lt;/p&gt;

&lt;p&gt;W trakcie wyświetlania wykresu kołowego przy podsumowaniu bilansu korzystam z narzędzi Google do wizualizacji wykresów. Wymaga to dołączenia do sekcji HEAD skryptu języka Javy. Legendę wykresu wraz z danymi generuję za pomocą pętli wykorzystującej składnię silnika szablonów Twig. Wszystko działa mi bez zarzutu. Wykresy wyświetlają mi się poprawnie tzn. legenda i dane są wygenerowane właściwie.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Jedynie interpreter PHP podkreśla mi błędy tzn. nie rozpoznaje składni Twig w tym skrypcie co wygląda następująco:&lt;/p&gt;

&lt;pre class=&quot;brush:jscript;&quot;&gt;
  &amp;lt;!-- Google pie-chart --&amp;gt;
    &amp;lt;script type=&quot;text/javascript&quot; src=&quot;https://www.gstatic.com/charts/loader.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
        google.charts.load(&quot;current&quot;, { packages: [&quot;corechart&quot;] });
        google.charts.setOnLoadCallback(drawChart);
        function drawChart() {
        var income_data = google.visualization.arrayToDataTable([
            ['Income Category', 'Amount'],
              &lt;strong&gt;&lt;u&gt;{% for incomeItem in balance_load.income_data %}
                ['{{ incomeItem.category }}', {{ incomeItem.amount }}],
              {% endfor %}&lt;/u&gt;&lt;/strong&gt;
            ]);
        
        var expense_data = google.visualization.arrayToDataTable([
            ['Expense Category', 'Amount'],
            &lt;strong&gt;&lt;u&gt;{% for expenseItem in balance_load.expense_data %}
              ['{{ expenseItem.category }}', {{ expenseItem.amount }}],
            {% endfor %}&lt;/u&gt;&lt;/strong&gt;
            ]);
        
        var income_options = {
            backgroundColor: '#dff0d8',
            legend: { textStyle: { fontSize: '0.5rem', fontName: 'Montserrat' } },
            title: 'Your incomes over a selected period',
            titleTextStyle: {
              color: 'black',
              fontName: 'Montserrat',
              fontSize: '1rem',
              bold: true,
              italic: false
            },
            is3D: true,
          };
        &lt;em&gt;// Pozostały kod&lt;/em&gt;
    &amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;p&gt;Czy można sobie z tym jakoś poradzić, obejść to, aby uniknąć pojawienia się&amp;nbsp;tego typu błędów w moim przypadku? Nie rzutuje to na funkcjonowanie samej aplikacji. Testowałem to, jednak nie jest dobrze, że interpreter podkreśla mi te miejsca w kodzie nie rozpoznając tej składni, akceptując&amp;nbsp;jedynie składnię JavaScriptu.&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1884/javascript-rozpoznaje-sk%C5%82adni-wy%C5%9Bwietlanie-wykresu-ko%C5%82owego</guid>
<pubDate>Wed, 06 Mar 2024 19:20:19 +0000</pubDate>
</item>
<item>
<title>Aplikacja budżetowa w PHP/HTML. Refaktoryzacja kodu - zapytania SQL do bazy danych</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1883/aplikacja-bud%C5%BCetowa-html-refaktoryzacja-zapytania-danych</link>
<description>&lt;p&gt;Cześć,&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Jestem na etapie ukończenia mojej aplikacji budżetowej w PHP. Chciałbym stworzyć ogólną metodę, która po usunięciu jakiejść pozycji/rekordu z danej tabeli bazy danych numeruje pozycje ponownie od 1 w kolejności rosnącej tak, aby nie było wolnego numeru w tabeli. Dla przykładu jeśli usuwam pozycje 5-tą z tabeli zawierającej 10 rekordów to pozycja 6 wskakuje na piątą, 7 na szóstą i tak analogicznie do ostatniego rekordu.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Stworzyłem dla każdej z modyfikowanych tabel bazy danych odrębną metodę, która działa mi poprawnie.&lt;/p&gt;

&lt;p&gt;Poniżej przykładowa działająca metodę klasy DataSetup:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
public static function orderIncomeTableItems()
     {
         $sql = 'SELECT * FROM incomes ORDER BY id;
         SET @count = 0;
         UPDATE incomes SET id = @count:= @count + 1;
         ALTER TABLE incomes AUTO_INCREMENT = 1';
 
         $db = static::getDB();
         $stmt = $db-&amp;gt;prepare($sql);
 
         $stmt-&amp;gt;execute();
     }&lt;/pre&gt;

&lt;p&gt;W metodzie tej na sztywno podaję w zapytaniu SQL nazwę tabeli, którą zamierzam zmodyfikować przy zachowaniu spójności z pozostałymi tabelami pozostającymi w relacji. Nie mam tutaj żadnych błędów składni.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Z uwagi, że modyfikuję kilka tabel utworzyłem kilka metod dla każdej z tabel osobno. Generuje to niepotrzebne linijki kodu. Chciałem ujednolicić te metody do jednej ogólnej, w której jako argument przekazywałbym zmienną typu string z nazwą tabeli.&lt;/p&gt;

&lt;p&gt;Stworzyłem dwa warianty dla tej ogólnej metody, które moim zdaniem powinny być poprawne jednak obie nie działają, tzn. interpreter PHP wyrzuca błąd składni SQL.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Poniżej przedstawiam kod dla obu rozwiązań:&lt;/p&gt;

&lt;p&gt;1) wykorzystanie łączenia łańcuchów przez symbol kropki (konkatenacja)&lt;/p&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
public static function orderTableItems($tableName) {
        $sql = &quot;SELECT * FROM '&quot; . $tableName . &quot;' SET @count = 0;
        UPDATE '&quot; . $tableName . &quot;' SET id = @count:= @count + 1;
        ALTER TABLE '&quot; . $tableName . &quot;' AUTO_INCREMENT = 1&quot;;

    $db = static::getDB();
    $stmt = $db-&amp;gt;prepare($sql);
    $stmt-&amp;gt;execute();
    }&lt;/pre&gt;

&lt;p&gt;2) bindowanie zmiennej do placeholdera&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
public static function orderTableItems($tableName) {
        $sql = 'SELECT * FROM :tableName ORDER BY id;
        SET @count = 0;
        UPDATE :tableName  SET id = @count:= @count + 1;
        ALTER TABLE :tableName AUTO_INCREMENT = 1';

    $db = static::getDB();
    $stmt = $db-&amp;gt;prepare($sql);    
    $stmt-&amp;gt;bindValue(':tableName', $tableName, PDO::PARAM_STR);
    $stmt = $db-&amp;gt;prepare($sql);

    $stmt-&amp;gt;execute();
    }&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;W obu przypadkach otrzymuję błąd składni SQL tego typu:&lt;/p&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
Fatal error
Uncaught exception: 'PDOException'

Message: 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''incomes' SET @count = 0; UPDATE 'incomes' SET id = @count:= @count ...' at line 1'

Stack trace:

#0 D:\_PROJECTS\WebDevelopment\Projects\MyBudgetSite\DebugVersion\App\DataSetup.php(40): PDOStatement-&amp;gt;execute()
#1 D:\_PROJECTS\WebDevelopment\Projects\MyBudgetSite\DebugVersion\App\Models\Income.php(198): App\DataSetup::orderTableItems('incomes')
#2 D:\_PROJECTS\WebDevelopment\Projects\MyBudgetSite\DebugVersion\App\Controllers\Profit.php(171): App\Models\Income::removeUserIncomeSavedInDatabase('3')
#3 [internal function]: App\Controllers\Profit-&amp;gt;removeIncomeAction()
#4 D:\_PROJECTS\WebDevelopment\Projects\MyBudgetSite\DebugVersion\Core\Controller.php(47): call_user_func_array(Array, Array)
#5 D:\_PROJECTS\WebDevelopment\Projects\MyBudgetSite\DebugVersion\Core\Router.php(121): Core\Controller-&amp;gt;__call('removeIncome', Array)
#6 D:\_PROJECTS\WebDevelopment\Projects\MyBudgetSite\DebugVersion\public\index.php(53): Core\Router-&amp;gt;dispatch('profit/remove-i...')
#7 {main}
Thrown in 'D:\_PROJECTS\WebDevelopment\Projects\MyBudgetSite\DebugVersion\App\DataSetup.php' on line 40&lt;/pre&gt;

&lt;p&gt;Na czym polega mój błąd składni SQL i jak mogę go naprawić?&lt;/p&gt;

&lt;p&gt;Poniżej dołączam fragment kodu wywołania metody ogólnej.&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
$tableName = 'incomes';
DataSetup::orderTableItems($tableName);&lt;/pre&gt;

&lt;p&gt;Z góry dziękuję za wszelką pomoc i wskazówki&lt;/p&gt;

&lt;p&gt;Pozdrawiam&lt;/p&gt;

&lt;p&gt;Paweł&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1883/aplikacja-bud%C5%BCetowa-html-refaktoryzacja-zapytania-danych</guid>
<pubDate>Wed, 06 Mar 2024 18:41:20 +0000</pubDate>
</item>
<item>
<title>PHP/HTML -  logowanie, przechodzenie po stronach</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1879/php-html-logowanie-przechodzenie-po-stronach</link>
<description>Cześć, &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
potrzebuję pomocy/pomysłu na rowiazanie problemu związanego z aplikacją budżetową. Po zalogowaniu pobieram id użytkownika z DB, i tutaj pojawia się problem z wywoływaniem stron. Przed zalogowaniem poruszam się po 3 stronach: &lt;br /&gt;
&lt;br /&gt;
-&amp;gt; logowania, &lt;br /&gt;
&lt;br /&gt;
-&amp;gt; rejestracji, &lt;br /&gt;
&lt;br /&gt;
-&amp;gt; reset hasła.&lt;br /&gt;
&lt;br /&gt;
Wykorzystuje w tym celu 'action'. Problem pojawia się po zalogowaniu, ponieważ nie mam pomysłu czy wykorzystywać nadal parametr action, czy ugryźć to w inny sposób, wykorzystując do tego ID usera pobranego z DB. Może ktoś miał podobny problem, będę wdzięczny za każdą podpowiedź.</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1879/php-html-logowanie-przechodzenie-po-stronach</guid>
<pubDate>Tue, 05 Mar 2024 18:37:13 +0000</pubDate>
</item>
<item>
<title>Automatyczne wylogowywanie ze strony</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1822/automatyczne-wylogowywanie-ze-strony</link>
<description>Witam,&lt;br /&gt;
&lt;br /&gt;
moja strona automatycznie wylogowuje się po jakimś czasie. Chciałbym spytać jak to zmienić żeby session cookie lifetime był ważny przez np. tydzień czasu i czy jest możliwość zrobić to bez modyfikacji pliku php.ini ?</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1822/automatyczne-wylogowywanie-ze-strony</guid>
<pubDate>Sat, 10 Feb 2024 10:44:10 +0000</pubDate>
</item>
<item>
<title>@new mysqli - nie działa wyciszenie</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1800/%40new-mysqli-nie-dzia%C5%82a-wyciszenie</link>
<description>Witam&lt;br /&gt;
&lt;br /&gt;
Problem dotyczy wyciszenia @ pokazanego na kursie Mirosława Zelenta, nie działa mi kod tak jak na tutorialu... a dokładnie po poniższym zapisie - po dodaniu hasła, zmiany localhosta przegladarka wyświetla tylko Error- z numerem kodu...&lt;br /&gt;
&lt;br /&gt;
$connect = @new mysqli($host, $db_user, $db_password, $db_name);&lt;br /&gt;
&lt;br /&gt;
if ($connect-&amp;gt;connect_errno!=0) {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo &amp;quot;Error: &amp;quot;.$connect-&amp;gt;connect_errno;&lt;br /&gt;
&lt;br /&gt;
u mnie natomiast wyświetla Fatal Error z danymi które miały być wyciszone... dlaczego?&lt;br /&gt;
&lt;br /&gt;
Porównywałem kod z plikiem z kursu i wydaje mi się, że jest taki sam.</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1800/%40new-mysqli-nie-dzia%C5%82a-wyciszenie</guid>
<pubDate>Wed, 03 Jan 2024 12:24:22 +0000</pubDate>
</item>
<item>
<title>Testowanie aplikacji webowej z localhosta na telefonie</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1762/testowanie-aplikacji-webowej-z-localhosta-na-telefonie</link>
<description>&lt;p&gt;Cześć!&lt;/p&gt;

&lt;p&gt;Chciałem się podzielić z wami&amp;nbsp; pewnym lifehackiem, na który dziś wpadłem.&lt;/p&gt;

&lt;p&gt;Mam&amp;nbsp; nadzieję, że nie odkryłem jakiejś oczywistości i przynajmniej niektórym z was przyda się to tak jak mnie. &lt;img alt=&quot;smiley&quot; src=&quot;https://forum.przyszlyprogramista.pl/qa-plugin/ckeditor4/plugins/smiley/images/regular_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;smiley&quot;&gt;&lt;/p&gt;

&lt;p&gt;Jeśli&amp;nbsp; ktoś chciałby testować swoją aplikację webową postawioną na&amp;nbsp; localhoście&amp;nbsp; na urządzeniu mobilnym, to&amp;nbsp; wystarczy:&lt;/p&gt;

&lt;p&gt;1.&amp;nbsp; Połączyć się na urządzeniu mobilnym z tą samą siecią, do której&amp;nbsp; macie podłączony komputer.&lt;/p&gt;

&lt;p&gt;2.&amp;nbsp; Sprawdzić we właściwościach swojego&amp;nbsp; połączenia na komputerze jego adres ip.&lt;/p&gt;

&lt;p&gt;Na Win 10:&amp;nbsp; Ustawienia sieci Wi-Fi -&amp;gt; Właściwości sprzętu -&amp;gt; Adres IPv4&lt;/p&gt;

&lt;p&gt;3. Wpisać w przeglądarce telefonu w polu adresu: http:// i dalej adres ip z poprzedniego&amp;nbsp; kroku.&lt;/p&gt;

&lt;p&gt;Ja o tym wcześniej&amp;nbsp; nie wiedziałem,&amp;nbsp; a jest to świetna sprawa.&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1762/testowanie-aplikacji-webowej-z-localhosta-na-telefonie</guid>
<pubDate>Wed, 06 Sep 2023 20:14:01 +0000</pubDate>
</item>
<item>
<title>Wartość email</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1684/warto%C5%9B%C4%87-email</link>
<description>&lt;p&gt;Witam,&lt;/p&gt;

&lt;p&gt;Stworzyłem nową klasę. Chciałbym dostać się do wartości e-mail, aktualnie zalogowanego użytkownika. Kiedy używam $this-&amp;gt;email lub $email nie działa, wyświetlana jest pusta wartość.&lt;/p&gt;

&lt;p&gt;Autorowi tego kursu:&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.udemy.com/course/php-mvc-login/&quot;&gt;http://www.udemy.com/course/php-mvc-login/&lt;/a&gt;&amp;nbsp;działa i używa&amp;nbsp;$this-&amp;gt;email lub $email.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Jak mogę uzyskać dostęp do wartości e-mail, aby użyć jej w php.&lt;/p&gt;

&lt;p&gt;Np w pliku html aby poprzez twig uzyskać wartość emaila wpisuję&amp;nbsp;{{ user.email }} natomiast jak to zrobić w php, jak pobrać wartość emaila aktualnie zalogowanego użytkownika.&lt;/p&gt;

&lt;p&gt;Poniżej również udostępniam kod, w którym autor używa&amp;nbsp;$this-&amp;gt;email (w metodzie save()) lub $email aby użyć email, jak ja mogę zrobić to w swoim kodzie?&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

namespace App\Models;

use PDO;
use \App\Token;
use \App\Mail;
use \Core\View;

/**
 * User model
 *
 * PHP version 7.0
 */
class User extends \Core\Model
{

    /**
     * Error messages
     *
     * @var array
     */
    public $errors = [];

    /**
     * Class constructor
     *
     * @param array $data  Initial property values (optional)
     *
     * @return void
     */
    public function __construct($data = [])
    {
        foreach ($data as $key =&amp;gt; $value) {
            $this-&amp;gt;$key = $value;
        };
    }

    /**
     * Save the user model with the current property values
     *
     * @return boolean  True if the user was saved, false otherwise
     */
    public function save()
    {
        $this-&amp;gt;validate();

        if (empty($this-&amp;gt;errors)) {

            $password_hash = password_hash($this-&amp;gt;password, PASSWORD_DEFAULT);

            $token = new Token();
            $hashed_token = $token-&amp;gt;getHash();
            $this-&amp;gt;activation_token = $token-&amp;gt;getValue();

            $sql = 'INSERT INTO users (name, email, password_hash, activation_hash)
                    VALUES (:name, :email, :password_hash, :activation_hash)';

            $db = static::getDB();
            $stmt = $db-&amp;gt;prepare($sql);

            $stmt-&amp;gt;bindValue(':name', $this-&amp;gt;name, PDO::PARAM_STR);
            $stmt-&amp;gt;bindValue(':email', $this-&amp;gt;email, PDO::PARAM_STR);
            $stmt-&amp;gt;bindValue(':password_hash', $password_hash, PDO::PARAM_STR);
            $stmt-&amp;gt;bindValue(':activation_hash', $hashed_token, PDO::PARAM_STR);

            return $stmt-&amp;gt;execute();
        }

        return false;
    }

    /**
     * Validate current property values, adding valiation error messages to the errors array property
     *
     * @return void
     */
    public function validate()
    {
        // Name
        if ($this-&amp;gt;name == '') {
            $this-&amp;gt;errors[] = 'Name is required';
        }

        // email address
        if (filter_var($this-&amp;gt;email, FILTER_VALIDATE_EMAIL) === false) {
            $this-&amp;gt;errors[] = 'Invalid email';
        }
        if (static::emailExists($this-&amp;gt;email, $this-&amp;gt;id ?? null)) {
            $this-&amp;gt;errors[] = 'email already taken';
        }

        // Password
        if (isset($this-&amp;gt;password)) {

            if (strlen($this-&amp;gt;password) &amp;lt; 6) {
                $this-&amp;gt;errors[] = 'Please enter at least 6 characters for the password';
            }

            if (preg_match('/.*[a-z]+.*/i', $this-&amp;gt;password) == 0) {
                $this-&amp;gt;errors[] = 'Password needs at least one letter';
            }

            if (preg_match('/.*\d+.*/i', $this-&amp;gt;password) == 0) {
                $this-&amp;gt;errors[] = 'Password needs at least one number';
            }

        }
    }

    /**
     * See if a user record already exists with the specified email
     *
     * @param string $email email address to search for
     * @param string $ignore_id Return false anyway if the record found has this ID
     *
     * @return boolean  True if a record already exists with the specified email, false otherwise
     */
    public static function emailExists($email, $ignore_id = null)
    {
        $user = static::findByEmail($email);

        if ($user) {
            if ($user-&amp;gt;id != $ignore_id) {
                return true;
            }
        }

        return false;
    }

    /**
     * Find a user model by email address
     *
     * @param string $email email address to search for
     *
     * @return mixed User object if found, false otherwise
     */
    public static function findByEmail($email)
    {
        $sql = 'SELECT * FROM users WHERE email = :email';

        $db = static::getDB();
        $stmt = $db-&amp;gt;prepare($sql);
        $stmt-&amp;gt;bindValue(':email', $email, PDO::PARAM_STR);

        $stmt-&amp;gt;setFetchMode(PDO::FETCH_CLASS, get_called_class());

        $stmt-&amp;gt;execute();

        return $stmt-&amp;gt;fetch();
    }

    /**
     //* Authenticate a user by email and password.
     * Authenticate a user by email and password. User account has to be active.
     *
     * @param string $email email address
     * @param string $password password
     *
     * @return mixed  The user object or false if authentication fails
     */
    public static function authenticate($email, $password)
    {
        $user = static::findByEmail($email);

        //if ($user) {
        if ($user &amp;amp;&amp;amp; $user-&amp;gt;is_active) {
            if (password_verify($password, $user-&amp;gt;password_hash)) {
                return $user;
            }
        }

        return false;
    }

    /**
     * Find a user model by ID
     *
     * @param string $id The user ID
     *
     * @return mixed User object if found, false otherwise
     */
    public static function findByID($id)
    {
        $sql = 'SELECT * FROM users WHERE id = :id';

        $db = static::getDB();
        $stmt = $db-&amp;gt;prepare($sql);
        $stmt-&amp;gt;bindValue(':id', $id, PDO::PARAM_INT);

        $stmt-&amp;gt;setFetchMode(PDO::FETCH_CLASS, get_called_class());

        $stmt-&amp;gt;execute();

        return $stmt-&amp;gt;fetch();
    }

    /**
     * Remember the login by inserting a new unique token into the remembered_logins table
     * for this user record
     *
     * @return boolean  True if the login was remembered successfully, false otherwise
     */
    public function rememberLogin()
    {
        $token = new Token();
        $hashed_token = $token-&amp;gt;getHash();
        $this-&amp;gt;remember_token = $token-&amp;gt;getValue();

        $this-&amp;gt;expiry_timestamp = time() + 60 * 60 * 24 * 30;  // 30 days from now

        $sql = 'INSERT INTO remembered_logins (token_hash, user_id, expires_at)
                VALUES (:token_hash, :user_id, :expires_at)';

        $db = static::getDB();
        $stmt = $db-&amp;gt;prepare($sql);

        $stmt-&amp;gt;bindValue(':token_hash', $hashed_token, PDO::PARAM_STR);
        $stmt-&amp;gt;bindValue(':user_id', $this-&amp;gt;id, PDO::PARAM_INT);
        $stmt-&amp;gt;bindValue(':expires_at', date('Y-m-d H:i:s', $this-&amp;gt;expiry_timestamp), PDO::PARAM_STR);

        return $stmt-&amp;gt;execute();
    }

    /**
     * Send password reset instructions to the user specified
     *
     * @param string $email The email address
     *
     * @return void
     */
    public static function sendPasswordReset($email)
    {
        $user = static::findByEmail($email);

        if ($user) {

            if ($user-&amp;gt;startPasswordReset()) {

                $user-&amp;gt;sendPasswordResetEmail();

            }
        }
    }

    /**
     * Start the password reset process by generating a new token and expiry
     *
     * @return void
     */
    protected function startPasswordReset()
    {
        $token = new Token();
        $hashed_token = $token-&amp;gt;getHash();
        $this-&amp;gt;password_reset_token = $token-&amp;gt;getValue();

        $expiry_timestamp = time() + 60 * 60 * 2;  // 2 hours from now

        $sql = 'UPDATE users
                SET password_reset_hash = :token_hash,
                    password_reset_expires_at = :expires_at
                WHERE id = :id';

        $db = static::getDB();
        $stmt = $db-&amp;gt;prepare($sql);

        $stmt-&amp;gt;bindValue(':token_hash', $hashed_token, PDO::PARAM_STR);
        $stmt-&amp;gt;bindValue(':expires_at', date('Y-m-d H:i:s', $expiry_timestamp), PDO::PARAM_STR);
        $stmt-&amp;gt;bindValue(':id', $this-&amp;gt;id, PDO::PARAM_INT);

        return $stmt-&amp;gt;execute();
    }

    /**
     * Send password reset instructions in an email to the user
     *
     * @return void
     */
    protected function sendPasswordResetEmail()
    {
        $url = 'http://' . $_SERVER['HTTP_HOST'] . '/password/reset/' . $this-&amp;gt;password_reset_token;

        $text = View::getTemplate('Password/reset_email.txt', ['url' =&amp;gt; $url]);
        $html = View::getTemplate('Password/reset_email.html', ['url' =&amp;gt; $url]);

        Mail::send($this-&amp;gt;email, 'Password reset', $text, $html);
    }

    /**
     * Find a user model by password reset token and expiry
     *
     * @param string $token Password reset token sent to user
     *
     * @return mixed User object if found and the token hasn't expired, null otherwise
     */
    public static function findByPasswordReset($token)
    {
        $token = new Token($token);
        $hashed_token = $token-&amp;gt;getHash();

        $sql = 'SELECT * FROM users
                WHERE password_reset_hash = :token_hash';

        $db = static::getDB();
        $stmt = $db-&amp;gt;prepare($sql);

        $stmt-&amp;gt;bindValue(':token_hash', $hashed_token, PDO::PARAM_STR);

        $stmt-&amp;gt;setFetchMode(PDO::FETCH_CLASS, get_called_class());

        $stmt-&amp;gt;execute();

        $user = $stmt-&amp;gt;fetch();

        if ($user) {
            
            // Check password reset token hasn't expired
            if (strtotime($user-&amp;gt;password_reset_expires_at) &amp;gt; time()) {

                return $user;
            }
        }
    }

    /**
     * Reset the password
     *
     * @param string $password The new password
     *
     * @return boolean  True if the password was updated successfully, false otherwise
     */
    public function resetPassword($password)
    {
        $this-&amp;gt;password = $password;

        $this-&amp;gt;validate();

        //return empty($this-&amp;gt;errors);
        if (empty($this-&amp;gt;errors)) {

            $password_hash = password_hash($this-&amp;gt;password, PASSWORD_DEFAULT);

            $sql = 'UPDATE users
                    SET password_hash = :password_hash,
                        password_reset_hash = NULL,
                        password_reset_expires_at = NULL
                    WHERE id = :id';

            $db = static::getDB();
            $stmt = $db-&amp;gt;prepare($sql);
                                                  
            $stmt-&amp;gt;bindValue(':id', $this-&amp;gt;id, PDO::PARAM_INT);
            $stmt-&amp;gt;bindValue(':password_hash', $password_hash, PDO::PARAM_STR);
                                          
            return $stmt-&amp;gt;execute();
        }

        return false;
    }

    /**
     * Send an email to the user containing the activation link
     *
     * @return void
     */
    public function sendActivationEmail()
    {
        $url = 'http://' . $_SERVER['HTTP_HOST'] . '/signup/activate/' . $this-&amp;gt;activation_token;

        $text = View::getTemplate('Signup/activation_email.txt', ['url' =&amp;gt; $url]);
        $html = View::getTemplate('Signup/activation_email.html', ['url' =&amp;gt; $url]);

        Mail::send($this-&amp;gt;email, 'Account activation', $text, $html);
    }

    /**
     * Activate the user account with the specified activation token
     *
     * @param string $value Activation token from the URL
     *
     * @return void
     */
    public static function activate($value)
    {
        $token = new Token($value);
        $hashed_token = $token-&amp;gt;getHash();

        $sql = 'UPDATE users
                SET is_active = 1,
                    activation_hash = null
                WHERE activation_hash = :hashed_token';

        $db = static::getDB();
        $stmt = $db-&amp;gt;prepare($sql);

        $stmt-&amp;gt;bindValue(':hashed_token', $hashed_token, PDO::PARAM_STR);

        $stmt-&amp;gt;execute();
    }
    
    /**
     * Update the user's profile
     *
     * @param array $data Data from the edit profile form
     *
     * @return boolean  True if the data was updated, false otherwise
     */
    public function updateProfile($data)
    {
        $this-&amp;gt;name = $data['name'];
        $this-&amp;gt;email = $data['email'];

        // Only validate and update the password if a value provided
        if ($data['password'] != '') {
            $this-&amp;gt;password = $data['password'];
        }

        $this-&amp;gt;validate();

        if (empty($this-&amp;gt;errors)) {

            $sql = 'UPDATE users
                    SET name = :name,
                        email = :email';

            // Add password if it's set
            if (isset($this-&amp;gt;password)) {
                $sql .= ', password_hash = :password_hash';
            }

            $sql .= &quot;\nWHERE id = :id&quot;;


            $db = static::getDB();
            $stmt = $db-&amp;gt;prepare($sql);

            $stmt-&amp;gt;bindValue(':name', $this-&amp;gt;name, PDO::PARAM_STR);
            $stmt-&amp;gt;bindValue(':email', $this-&amp;gt;email, PDO::PARAM_STR);
            $stmt-&amp;gt;bindValue(':id', $this-&amp;gt;id, PDO::PARAM_INT);

            // Add password if it's set
            if (isset($this-&amp;gt;password)) {

                $password_hash = password_hash($this-&amp;gt;password, PASSWORD_DEFAULT);
                $stmt-&amp;gt;bindValue(':password_hash', $password_hash, PDO::PARAM_STR);

            }

            return $stmt-&amp;gt;execute();
        }

        return false;
    }
}
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1684/warto%C5%9B%C4%87-email</guid>
<pubDate>Fri, 16 Jun 2023 14:51:35 +0000</pubDate>
</item>
<item>
<title>Nie mogę wysłać wiadomości przez PHPmailer</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1604/nie-mog%C4%99-wys%C5%82a%C4%87-wiadomo%C5%9Bci-przez-phpmailer</link>
<description>&lt;p&gt;Próbuję wysłać emaila (taki sam przypadek jak na lekcji 193&amp;nbsp;&lt;a rel=&quot;nofollow&quot; href=&quot;https://www.udemy.com/course/php-for-beginners-/learn/lecture/9610492&quot; target=&quot;_blank&quot;&gt;https://www.udemy.com/course/php-for-beginners-/learn/lecture/9610492&lt;/a&gt;&amp;nbsp;)&lt;/p&gt;

&lt;p&gt;Jednak przy próbie wysłania nie pojawia się ani żaden błąd ani że wiadomość została wysłana tylko kręci się kółko.&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/PHPMailer/src/Exception.php';
require 'vendor/PHPMailer/src/PHPMailer.php';
require 'vendor/PHPMailer/src/SMTP.php';

$mail = new PHPMailer(true);

try {

    $mail-&amp;gt;isSMTP();
    $mail-&amp;gt;Host = 'smtp.wp.pl';
    $mail-&amp;gt;SMTPAuth = true;
    $mail-&amp;gt;Username = 'mojekonto@wp.pl';
    $mail-&amp;gt;Password = 'haslo';
    $mail-&amp;gt;SMTPSecure = 'SSL';
    $mail-&amp;gt;Port = 465;

    $mail-&amp;gt;setFrom('mojekonto@wp.pl');
    $mail-&amp;gt;addAddress('odbiorca@znak.pl');
    $mail-&amp;gt;Subject = 'A mail sent from PHP';
    $mail-&amp;gt;Body = 'Hello from PHP!';

    $mail-&amp;gt;send();

    echo 'Message sent';

} catch (Exception $e) {

    echo 'Message not sent: ', $mail-&amp;gt;ErrorInfo;

}&lt;/pre&gt;

&lt;p&gt;W katalogu vendor mam ściągnięty z githuba PHPMailer.&lt;/p&gt;

&lt;p&gt;W założonej na wp skrzynce korzystam z następujących ustawień:&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Serwer poczty wychodzącej -&amp;nbsp;&lt;strong&gt;smtp.wp.pl&lt;/strong&gt;&lt;br&gt;
Port serwera poczty wychodzącej -&amp;nbsp;&lt;strong&gt;465&lt;/strong&gt;&lt;br&gt;
Tryb zabezpieczenia -&amp;nbsp;&lt;strong&gt;SSL&lt;/strong&gt;&lt;br&gt;
Serwer wymaga uwierzytelnienia / włączonej autoryzacji SMTP.&lt;/p&gt;

&lt;p&gt;W opcjach konta mam włączoną opcję: Dostęp przez IMAP , IMAP włączony&lt;/p&gt;

&lt;p&gt;Proszę o pomoc&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1604/nie-mog%C4%99-wys%C5%82a%C4%87-wiadomo%C5%9Bci-przez-phpmailer</guid>
<pubDate>Wed, 03 May 2023 11:38:35 +0000</pubDate>
</item>
<item>
<title>Pobieranie wartości id z fetch - aplikacja budżetowa</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1474/pobieranie-warto%C5%9Bci-id-z-fetch-aplikacja-bud%C5%BCetowa</link>
<description>&lt;p&gt;Mam problem z pobieraniem wartości id z fetch w javascripcie.&lt;/p&gt;

&lt;p&gt;kod javascript:&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#569cd6&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;getLimitCategory&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; = (&lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#569cd6&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; {&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;);&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color:#c586c0&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;`/api/expenses/&lt;/span&gt;&lt;span style=&quot;color:#569cd6&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#569cd6&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;)&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; .&lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#569cd6&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;response&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;())&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; .&lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;then&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;limit&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;))&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; .&lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#569cd6&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; {&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;'Error:'&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;);&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;};&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;w index.php mam ścieżkę:&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;$router&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;'api/expenses/{id:\d+}'&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;'controller'&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;'Expense'&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;'action'&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;'getLimit'&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;]);&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;po stronie php:&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#569cd6&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#569cd6&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;getLimitAction&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;()&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;$id&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;$_GET&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;'id'&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;];&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;$limit&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color:#4ec9b0&quot;&gt;UserExpenses&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;getCatLimit&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;$id&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;);&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;'Content-Type: application/json'&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;);&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color:#dcdcaa&quot;&gt;json_encode&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;([&lt;/span&gt;&lt;span style=&quot;color:#ce9178&quot;&gt;'category_limit'&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color:#9cdcfe&quot;&gt;$limit&lt;/span&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;]);&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#d4d4d4&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;ale w consoli pojawia się błąd 500.&lt;/p&gt;

&lt;p&gt;Pobieranie danych po stronie bazy danych jest okej, jak wstawiam ręcznie id dane są prawidłowo pobierane.&lt;/p&gt;

&lt;p&gt;Pomocy co jest nie tak?&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1474/pobieranie-warto%C5%9Bci-id-z-fetch-aplikacja-bud%C5%BCetowa</guid>
<pubDate>Sat, 18 Feb 2023 20:36:12 +0000</pubDate>
</item>
<item>
<title>Tłumaczenie słów z bazy na polski</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1453/t%C5%82umaczenie-s%C5%82%C3%B3w-z-bazy-na-polski</link>
<description>&lt;p&gt;Mógłbym prosić&amp;nbsp;o jakąś podpowiedź jeśli mam:&lt;/p&gt;

&lt;pre class=&quot;brush:xml;&quot;&gt;
&amp;lt;option value=&quot;Salary&quot;&amp;gt;Wynagrodzenie&amp;lt;/option&amp;gt;
&amp;lt;option value=&quot;Interest&quot;&amp;gt;Odsetki&amp;lt;/option&amp;gt;
&amp;lt;option value=&quot;Allegro&quot;&amp;gt;Allegro&amp;lt;/option&amp;gt;
&amp;lt;option value=&quot;Another&quot;&amp;gt;Inne&amp;lt;/option&amp;gt;&lt;/pre&gt;

&lt;p&gt;To w bazie mam angielskie nazwy,&lt;br&gt;
natomiast przy wyświetlaniu w przeglądzie bilansu trzeba z nich zrobić polskie nazwy. Jak tego dokonać najbardziej optymalnie?&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1453/t%C5%82umaczenie-s%C5%82%C3%B3w-z-bazy-na-polski</guid>
<pubDate>Thu, 16 Feb 2023 14:01:53 +0000</pubDate>
</item>
<item>
<title>Wstawienie odpowiedniej wartości</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1436/wstawienie-odpowiedniej-warto%C5%9Bci</link>
<description>&lt;p&gt;Witam,&lt;/p&gt;

&lt;p&gt;potrzebuję pomocy. Problem polega na tym, że zamiast pisać&amp;nbsp;income_category_assigned_to_user_id jako numer (int) potrzebuję to napisać jako text, który jest w innej tabeli połączony tym numerem relacją. Jak to zrobić?&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
foreach ($incomesOfLoggedUser as $incomesUser) {
echo &quot;&amp;lt;tr&amp;gt;
      	     &amp;lt;td&amp;gt;{$incomesUser['amount']}&amp;lt;/td&amp;gt;
      	     &amp;lt;td&amp;gt;{$incomesUser['date_of_income']}&amp;lt;/td&amp;gt;
      	     &amp;lt;td&amp;gt;{$incomesUser['income_category_assigned_to_user_id']}&amp;lt;/td&amp;gt;
      	     &amp;lt;td&amp;gt;{$incomesUser['income_comment']}&amp;lt;/td&amp;gt;
         &amp;lt;/tr&amp;gt;&quot;;
}&lt;/pre&gt;

&lt;p&gt;Mam następujące zapytanie:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
$incomesCurrentMonth = $db-&amp;gt;prepare('SELECT * FROM incomes WHERE user_id = :user_id AND date_of_income LIKE :dataHelpCurrentMonth ORDER BY date_of_income ASC');	
$incomesCurrentMonth-&amp;gt;bindValue(':user_id', $_SESSION['userId'], PDO::PARAM_INT);
$incomesCurrentMonth-&amp;gt;bindValue(':dataHelpCurrentMonth', $dataHelpCurrentMonth, PDO::PARAM_STR);
$incomesCurrentMonth-&amp;gt;execute();
$incomesOfLoggedUser = $incomesCurrentMonth-&amp;gt;fetchAll();&lt;/pre&gt;

&lt;p&gt;I teraz potrzebowałbym utworzyć nowe zapytanie SELECT, które wyjmie nazwę i użyje id, które siedzi w {$incomesOfLoggedUser[income_category_assigned_to_user_id]} i pytanie jak to zapisać teraz ponieważ to jest tablica, co wpisać w &quot;co tutaj wpisać&quot; ?&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
$queryNameIncome = $db-&amp;gt;prepare('SELECT name FROM incomes_category_assigned_to_users WHERE id = :incomesOfLoggedUser AND user_id = :userIdSession');	
$queryNameIncome-&amp;gt;bindValue(':incomesOfLoggedUser', &quot;co tutaj wpisać&quot;, PDO::PARAM_INT);
$queryNameIncome-&amp;gt;bindValue(':userIdSession', $_SESSION['userId'], PDO::PARAM_INT);
$queryNameIncome-&amp;gt;execute();&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1436/wstawienie-odpowiedniej-warto%C5%9Bci</guid>
<pubDate>Mon, 13 Feb 2023 14:43:11 +0000</pubDate>
</item>
<item>
<title>[PHP] Kopiowanie kategorii przychodów, wydatków z defaultowych tabel</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1275/kopiowanie-kategorii-przychod%C3%B3w-wydatk%C3%B3w-defaultowych-tabel</link>
<description>&lt;p&gt;Cześć,&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Aplikacja webowa w PHP - podczas rejestracji nowego usera, należy skopiować z tabel oznaczonych _default kategorie przychodów, wydatków, metody płatności... i tutaj pojawia się mój problem.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Gdy kopiuję do tabeli&amp;nbsp;&lt;strong&gt;expenses_category_assigned_to_users&lt;/strong&gt; kategorie z tabeli&amp;nbsp;&lt;strong&gt;expenses_category_default&amp;nbsp;&lt;/strong&gt;dodane są&amp;nbsp;16 wierszy i ostatni wiersz ma id=16. Gdy zarejestruje się kolejny user, i operacja kopiowania znowu się wykonuje, pierwszy wpis dla nowego usera w tej tabeli nie wynosi id=17 tylko id=32.&amp;nbsp; Podobnie w tabeli&amp;nbsp;&lt;strong&gt;incomes_category_assigned_to_users&lt;/strong&gt;, pierwszy user dostaje 4 podstawowe kategorie i kolejny zarejestrowany powinien liczyć od id=5, natomiast liczy się od id=8.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Czy ktoś miał podobny problem?&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Zapytania SQL na 100% napisane mam dobrze, tak samo jak testowałem to na różnych plikach z bazami (np. od innych studentów) i problem występuje tylko u mnie.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Będę wdzięczny za wszystkie wskazówki&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://zapodaj.net/images/0614db2cdfbfc.jpg&quot; style=&quot;height:811px; width:269px&quot;&gt;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1275/kopiowanie-kategorii-przychod%C3%B3w-wydatk%C3%B3w-defaultowych-tabel</guid>
<pubDate>Sat, 17 Dec 2022 18:16:09 +0000</pubDate>
</item>
<item>
<title>Pie Chart - aplikacja finansowa</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1123/pie-chart-aplikacja-finansowa</link>
<description>Jestem na etapie tworzenia pie chart w JS.&lt;br /&gt;
&lt;br /&gt;
Mam problem z &amp;quot;włożeniem&amp;quot; danych z tablicy asocjacyjnej php z danymi o przychodach do pie chart.&lt;br /&gt;
&lt;br /&gt;
Ktoś może też miał taki problem i wie jak go rozwiązać?</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1123/pie-chart-aplikacja-finansowa</guid>
<pubDate>Tue, 15 Nov 2022 06:24:02 +0000</pubDate>
</item>
<item>
<title>Twig - pętla for loop - wypisywanie kategorii</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1050/twig-p%C4%99tla-for-loop-wypisywanie-kategorii</link>
<description>&lt;p&gt;Witajcie, jestem na etapie przenoszenia strony z Budżetem Osobistym na &quot;własny&quot; frameword&amp;nbsp; PHP MVC.&lt;br&gt;
Mam problem z stworzeniem pętli for w Twigu.&lt;br&gt;
Nie wiem jak napisać kod aby w pętli wypisywały się wszystkie kategorie z przychodów/wydatkwów.&lt;/p&gt;

&lt;p&gt;Od początku... na pierwotnej stronie internetowej kategorie wypisywały się przez kod:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
require_once 'database.php';
                            
$userId = $_SESSION['logged_id'];

 $stmt = $db-&amp;gt;query(&quot;SELECT name, id FROM incomes_category_assigned_to_users WHERE user_id = '$userId'&quot;);

 while ($row = $stmt-&amp;gt;fetch()) {
echo $row['name'].&quot;&amp;lt;br /&amp;gt;\n&quot;;
echo '&amp;lt;option value='.$row['id'].'&amp;gt;'.$row['name'].'&amp;lt;/option&amp;gt;';
}&lt;/pre&gt;

&lt;p&gt;W nowej wersji strony&amp;nbsp;pobieram informację o kategoriach przez funkcje:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
public static function findByIDIncomes($user_id)
    {
        $sql = 'SELECT * FROM incomes_category_assigned_to_users WHERE user_id = :user_id';

        $db = static::getDB();
        $stmt = $db-&amp;gt;prepare($sql);
        $stmt-&amp;gt;bindValue(':user_id', $user_id, PDO::PARAM_INT);

        $stmt-&amp;gt;setFetchMode(PDO::FETCH_CLASS, get_called_class());

        $stmt-&amp;gt;execute();

        return $stmt-&amp;gt;fetch();
    }&lt;/pre&gt;

&lt;p&gt;Następnie tworzę zmienną w funkcji before()&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
protected function before()
    {
        parent::before();

        $this-&amp;gt;user = Auth::getUser();
        $this-&amp;gt;incomes = Auth::getUserIncomes();

    }&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;I ostatecznie tworze szablon przez funkcję newAction()&lt;/p&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
public function newAction() {
         
        View::renderTemplate('Income/new.html', [
            'user' =&amp;gt; $this-&amp;gt;user,
            'incomes' =&amp;gt; $this-&amp;gt;incomes
        ]);

        $userID = $_SESSION['user_id'];

        $db = null;

        if ($db === null) {
            $dsn = 'mysql:host=' . Config::DB_HOST . ';dbname=' . Config::DB_NAME . ';charset=utf8';
            $db = new PDO($dsn, Config::DB_USER, Config::DB_PASSWORD);
 
        }

        $stmt = $db-&amp;gt;query(&quot;SELECT name, id FROM incomes_category_assigned_to_users WHERE user_id = '$userID'&quot;);
        $stmt-&amp;gt;fetch();

    }
&lt;/pre&gt;

&lt;p&gt;Problem jest taki, iż otrzymuje id, nazwę pierwszej kategorii przez kod:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;dd&amp;gt;{{ incomes.id }}&amp;lt;/dd&amp;gt;

&amp;lt;dd&amp;gt;{{ incomes.name }}&amp;lt;/dd&amp;gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Zaś pętla nie działa:&lt;/p&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
&amp;lt;ul&amp;gt;
 {% for category in incomes %}
 &amp;lt;li&amp;gt;{{ category.name }}&amp;lt;/li&amp;gt;
{% endfor %}
&amp;lt;/ul&amp;gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
Wydaje mi się, iż źle przygotowuję dane, ale nie mogę dojść do tego co robię nie tak.&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1050/twig-p%C4%99tla-for-loop-wypisywanie-kategorii</guid>
<pubDate>Mon, 08 Aug 2022 18:37:48 +0000</pubDate>
</item>
<item>
<title>Ładowanie plików na serwerze produkcyjnym (mvc)</title>
<link>http://forum.przyszlyprogramista.pl/?qa=1005/%C5%82adowanie-plik%C3%B3w-na-serwerze-produkcyjnym-mvc</link>
<description>&lt;p&gt;Cześć!&lt;/p&gt;

&lt;p&gt;Wrzuciłam właśnie swój kod uporządkowany według wzorca mvc na serwer. Plik index.php znajduje się w folderze public, w związku z tym dodałam do folderu public plik .htaccess w którym zawarłam&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^/app/controller) /$1 [L]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]&lt;/pre&gt;

&lt;p&gt;Strona główna się&amp;nbsp;wczytuje, css i bootstrap też, ale nie mogę przejść do zarejestruj się lub zaloguj się, ponieważ w adresie wyskakuje mi, np. public/signup/new. Kontroler signup znajduje się w innym folderze (app/controllers). Może ktoś wie co mam zmienić&amp;nbsp;w .htaccess żeby wszystko śmigało?&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=1005/%C5%82adowanie-plik%C3%B3w-na-serwerze-produkcyjnym-mvc</guid>
<pubDate>Wed, 06 Jul 2022 14:33:22 +0000</pubDate>
</item>
<item>
<title>PHPmailer wysyłanie maila aktywacyjnego</title>
<link>http://forum.przyszlyprogramista.pl/?qa=867/phpmailer-wysy%C5%82anie-maila-aktywacyjnego</link>
<description>&lt;p&gt;Czołem!&lt;br&gt;
Jestem na etapie wprowadzania wzorca MVC.&lt;br&gt;
Mam od paru dni taki przypadek. Przeszedłem z MailGuna na PHPmailer:&lt;br&gt;
Skrypt wykonuje wysłanie maili, zawiadamia o wysłaniu - aplikacja zapisuje nowego użytkownika&amp;nbsp;do bazy danych -&amp;nbsp;ale mail aktywacyjny nie dochodzi do adresata. Nie mam żadnych komunikatów o błędzie.&lt;br&gt;
Dzieje się tak zarówno gdy używam serwera SMTP Gmaila, jak również&amp;nbsp;serwera SMTP pocztowego cPanel (który chcę docelowo używać). Zarówno dla kont rejestrowanych na Gmailu, jak i np o2.&lt;br&gt;
&lt;br&gt;
Tak wygląda mail - kontroler:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

namespace App;

use App\Config;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

//KONTROLER WYSYŁANIA E-MAIL

class Mail
{
    //Wyślij wiadomość:
    public static function send($to, $subject, $text, $html)
    {
		require 'D:/Programy/Ampps/www/vendor/PHPMailer-master/src/Exception.php';
		require 'D:/Programy/Ampps/www/vendor/PHPMailer-master/src/PHPMailer.php';
		require 'D:/Programy/Ampps/www/vendor/PHPMailer-master/src/SMTP.php';

		require_once('D:/Programy/Ampps/www/vendor/PHPMailer-master/class.smtp.php');
		require 'D:/Programy/Ampps/www/vendor/autoload.php';
		$mail = new PHPMailer(true);

		try{
			//Ustawienia serwera:
			$mail-&amp;gt;SMTPDebug=SMTP::DEBUG_SERVER;
			//$mail-&amp;gt;SMTPDebug=2;
			$mail-&amp;gt;isSMTP();
			//$mail-&amp;gt;Mailer=&quot;smtp&quot;;
		
			$mail-&amp;gt;Host = Config::CP_HOSTNAME;
			$mail-&amp;gt;SMTPAuth = true;
			$mail-&amp;gt;Username = Config::CP_USERNAME;
			$mail-&amp;gt;Password = Config::CP_PASSWORD;
			//$mail-&amp;gt;SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
			$mail-&amp;gt;SMTPSecure=&quot;ssl&quot;;
			$mail-&amp;gt;Port = Config::CP_PORT;
			
		          //Odbiorcy:
			   $mail-&amp;gt;setFrom(Config::EMAIL_FROM, Config::EMAIL_FROM_NAME);
			   $mail-&amp;gt;AddAddress($to);
	 
			   //Content:
			   $mail-&amp;gt;isHTML(true);
			   $mail-&amp;gt;Subject = $subject;
			   $mail-&amp;gt;Body    = $html;
			   $mail-&amp;gt;AltBody = $text;
	 
			   $mail-&amp;gt;send();
			   echo 'Wiadomość została pomyślnie wysłana!';
			} 
	   catch (Exception $e) {
           echo &quot;Nie udało się wysłać wiadomości. Błąd poczty: {$mail-&amp;gt;ErrorInfo}&quot;;
       }
    }
}&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
zaś tak plik konfiguracji, skąd zaciągane są ustawienia serwera:&lt;br&gt;
&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

namespace App;

class Config
{

    const DB_HOST = 'localhost';

    const DB_NAME = 'mf';

    const DB_USER = 'root';

    const DB_PASSWORD = '***************';
	
	//Pokaż lub ukryj wiadomości o błędach:
        const SHOW_ERRORS = true;
	const SECRET_KEY='********************************************';
	
	//Dane logowania CPanel:
	const CP_HOSTNAME = 'mail.k*********ski.pl';                 //nazwa serwera komunikacji
	const CP_USERNAME = 'obsluga@k*********ski.pl';         //adres e-mail skrzynki cPanel
	const CP_PASSWORD = '***********';                                //hasło konta pocztowego cPanel
	const CP_PORT = 465;
	
	const EMAIL_FROM = 'obsluga@k*********ski.pl';             //jw nazwa użytkownika
	const EMAIL_FROM_NAME ='autoreply';                          //wpisałem testowo cokolwiek&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
&lt;br&gt;
Jeśli miał ktoś podobny problem, lub ma go nadal - będę wdzięczny za odpowiedź :)&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=867/phpmailer-wysy%C5%82anie-maila-aktywacyjnego</guid>
<pubDate>Wed, 23 Mar 2022 18:27:06 +0000</pubDate>
</item>
<item>
<title>Problem z połączeniem SMTP za pomocą phpMailer</title>
<link>http://forum.przyszlyprogramista.pl/?qa=865/problem-z-po%C5%82%C4%85czeniem-smtp-za-pomoc%C4%85-phpmailer</link>
<description>&lt;p&gt;Witajcie!&lt;/p&gt;

&lt;p&gt;Jestem w trakcie części 4 tworzenia aplikacji webowych. Próbuję wysłać maila za pomocą phpMailer. Niestety pokazuje mi się taki komunikat:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;SMTP connect() failed. &lt;a href=&quot;https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting&quot; rel=&quot;nofollow&quot;&gt;https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pracuję obenie na localhoście, używam poczty gmail. Próbowałam wpisywać różne wartości w&amp;nbsp;$mail-&amp;gt;Port, tj.&amp;nbsp;587, 465, 25, ale nadal jest problem z połaczeniem do SMTP. Być może ktoś z Was miał podobny problem i go rozwiązał.&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=865/problem-z-po%C5%82%C4%85czeniem-smtp-za-pomoc%C4%85-phpmailer</guid>
<pubDate>Wed, 23 Mar 2022 13:49:19 +0000</pubDate>
</item>
<item>
<title>WordPress - ustanowienie pliku konfiguracyjnego, instalacja</title>
<link>http://forum.przyszlyprogramista.pl/?qa=807/wordpress-ustanowienie-pliku-konfiguracyjnego-instalacja</link>
<description>Cześć !&lt;br /&gt;
&lt;br /&gt;
Jestem na etapie strony internetowej z WordPress.&lt;br /&gt;
Wgrałem pobrane zasoby WordPressa na serwer zewnętrzny do katalogu public_html, a teraz próbuję zdalnie ustanowić plik konfiguracyjny WordPressa.&lt;br /&gt;
Oczywiście dla nowych zasobów i nowej bazy danych utworzyłem nową bazę danych, nowego użytkownika przypisanego do zarządzania tylko tą utworzoną bazą danych &lt;br /&gt;
Wpisuję w wymagane pola nastęujace wartości (to są tylko przykładowe - nie odzwierciedlają rzeczywistych):&lt;br /&gt;
&lt;br /&gt;
Nazwę bazy danych: wwojtas_mojaBaza&lt;br /&gt;
Nazwę użytkownika: wwojtas_mojaBazaUzytkownik&lt;br /&gt;
Hasło: haSloDoBazy&lt;br /&gt;
Adresu serwera bazy danych: cl11.netmark.pl&lt;br /&gt;
Prefiksu tabeli: wp_&lt;br /&gt;
&lt;br /&gt;
Po emailu do usługodawcy otrzymałem informację, że &amp;quot;Adresem hosta MySQL (baz danych) jest: localhost&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
I mimo wszystko, mimo wielokrotnych prób i podejść, zmian (, że może robię coś nie tak ) dostaję komunikat:&lt;br /&gt;
&amp;nbsp;&amp;quot;W witrynie wystąpił błąd krytyczny. Dowiedz się więcej o rozwiązywaniu problemów z WordPressem.&amp;quot;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;Jeśli Ktoś spotkał się z problemem to proszę o pomoc.</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=807/wordpress-ustanowienie-pliku-konfiguracyjnego-instalacja</guid>
<pubDate>Thu, 30 Dec 2021 10:01:50 +0000</pubDate>
</item>
<item>
<title>Różne działania aplikacji po stronie domeny i localhostu</title>
<link>http://forum.przyszlyprogramista.pl/?qa=799/r%C3%B3%C5%BCne-dzia%C5%82ania-aplikacji-po-stronie-domeny-i-localhostu</link>
<description>&lt;p&gt;Witam wszystkich !&lt;/p&gt;

&lt;p&gt;Mam takie problem: praktycznie ukończyłem aplikację do zarządzania budżetem, przetestowałem możliwości aplikacji, dodawania przychodu i wydatku, edycji wpisów. Oczywiście&amp;nbsp;na localhoscie - wszystko działa !!&lt;/p&gt;

&lt;p&gt;Po wrzuceniu na wykupioną domenę - wszystko działa OK, tylko&amp;nbsp;funkcjonalność edycji wydatku nie działa prawidłowo (tylko ta funkcjonalność, która&amp;nbsp;prawidłowo działała na localhoscie&amp;nbsp;)&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Przyznam szczerze, że zacząłem się po głowie drapać&amp;nbsp;&lt;img alt=&quot;frown&quot; src=&quot;https://forum.przyszlyprogramista.pl/qa-plugin/ckeditor4/plugins/smiley/images/confused_smile.png&quot; style=&quot;height:23px; width:23px&quot; title=&quot;frown&quot;&gt;&lt;/p&gt;

&lt;p&gt;Może spotkał się Ktoś z problemem? Czy może problem leży po stronie domeny? A może silnik Twig ?&lt;/p&gt;

&lt;p&gt;Pozdrawiam&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=799/r%C3%B3%C5%BCne-dzia%C5%82ania-aplikacji-po-stronie-domeny-i-localhostu</guid>
<pubDate>Tue, 21 Dec 2021 21:20:09 +0000</pubDate>
</item>
<item>
<title>Tech. Web. 3 - kategorie z polskim znakiem nie zapisują się do bazy danych</title>
<link>http://forum.przyszlyprogramista.pl/?qa=778/tech-web-kategorie-polskim-znakiem-nie-zapisuj%C4%85-bazy-danych</link>
<description>&lt;p&gt;Cześć!&lt;/p&gt;

&lt;p&gt;Testuję sobie teraz moją aplikację na localhost i póki co zauważyłam, że jeżeli nazwa kategorii ma polski znak (np. gotówka, książki) to pojawia się problem. Podczas rejestracji nazwy wszystkich kategorii są dodawane do bazy z polskimi znakami, dopiero kiedy chcę dodać przychód lub wydatek i wybieram kategorię z polskim znakiem pojawia się problem, Sprawdziałam we wszystkich dokumentach, że kodowanie ustawione jest na UTF-8.&lt;/p&gt;

&lt;p&gt;Tutaj podam przykład. Chcę dodać wydatek, więc z tabeli&amp;nbsp;&lt;em&gt;expenses_category_assigned_to_users&amp;nbsp;&lt;/em&gt;chcę &quot;wyciągnąć id tej kategorii:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
$result1 = $connection-&amp;gt;query(&quot;SELECT * FROM expenses_category_assigned_to_users WHERE expenses_category_assigned_to_users.user_id = '$userid' AND expenses_category_assigned_to_users.name = '$expensecategory'&quot;);
		$row1 =$result1-&amp;gt;fetch_assoc();
		$expensecategorycategoryid = $row1['id'];&lt;/pre&gt;

&lt;p&gt;Później podobnie z metodą płatności:&lt;/p&gt;

&lt;pre class=&quot;brush:plain;&quot;&gt;
$result2 = $connection-&amp;gt;query(&quot;SELECT * FROM payment_methods_assigned_to_users WHERE payment_methods_assigned_to_users.user_id = '$userid' AND payment_methods_assigned_to_users.name = '$paymentmethod'&quot;);
		$row2 =$result2-&amp;gt;fetch_assoc();
		$paymentmethodid = $row2['id'];&lt;/pre&gt;

&lt;p&gt;Następnie chcę dodać wydatek do tabeli &lt;em&gt;expenses&amp;nbsp;&lt;/em&gt;więc mam taki warunek:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
if($result1-&amp;gt;num_rows&amp;gt;0)	
		{
			if($connection-&amp;gt;query(&quot;INSERT INTO expenses VALUES (NULL, '$userid', '$expensecategorycategoryid', '$paymentmethodid', '$amount', '$date', '$comment')&quot;))
			{
				header('Location:mainmenu.php');
			}
			else{
				throw new Exception($connection-&amp;gt;error);
			}
		}&lt;/pre&gt;

&lt;p&gt;Jeżeli kategoria wydatku miała polski znak, to ten wydatek nie będzie w ogóle dodany do bazy danych, natomiast jeżeli kategoria wydatku nie miała polskiego znaku, ale miała go kategoria płatnosci (np. gotówka), to ten wydatek zostaje dodany do bazy danych, lecz tabeli&amp;nbsp;&lt;em&gt;expenses&amp;nbsp;&lt;/em&gt;payment_methods_assigned_to_user_id pojawia się 0, zamiast id tej kategorii.&lt;/p&gt;

&lt;p&gt;Kodowanie jest wszędzie ustawione na UTF-8.&lt;/p&gt;

&lt;p&gt;Czy macie pomysł skąd ten problem?&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=778/tech-web-kategorie-polskim-znakiem-nie-zapisuj%C4%85-bazy-danych</guid>
<pubDate>Tue, 14 Dec 2021 12:49:08 +0000</pubDate>
</item>
<item>
<title>Aplikacja Budżetowa/stosowanie bloku try-catch</title>
<link>http://forum.przyszlyprogramista.pl/?qa=727/aplikacja-bud%C5%BCetowa-stosowanie-bloku-try-catch</link>
<description>&lt;p&gt;Cześć,&lt;/p&gt;

&lt;p&gt;Chciałem zapytać, jak postrzegacie dodawanie bloku try...catch przy okazji zapytań SQL z wykorzystaniem PHP i PDO. Może posłużę się przykładem :&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
try{
            $sql_insert_income = &quot;INSERT INTO incomes VALUES(NULL, :id_user, :income_category, :income_amount, :income_date, :income_comment)&quot;; 
            $query_income = $db-&amp;gt;prepare($sql_insert_income);
            $query_income-&amp;gt;bindValue(':id_user', $user_id, PDO::PARAM_INT);
            $query_income-&amp;gt;bindValue(':income_category', $incomeCategory, PDO::PARAM_INT);
            $query_income-&amp;gt;bindValue(':income_amount', $incomeAmount, PDO::PARAM_STR);
            $query_income-&amp;gt;bindValue(':income_date', $incomeDate, PDO::PARAM_STR);
            $query_income-&amp;gt;bindValue(':income_comment', $incomeComment, PDO::PARAM_STR);
            $query_income-&amp;gt;execute();
        }
 catch (PDOException $e) {
                echo &quot;DataBase Error: Request failed.&amp;lt;br&amp;gt;&quot;.$e-&amp;gt;getMessage();
              }
catch(Exception $e){
                echo &quot;Application Error: Request failed.&amp;lt;br&amp;gt;&quot;.$error-&amp;gt;getMessage();
            }&lt;/pre&gt;

&lt;p&gt;Czy stosowanie tu bloku try-catch ma sens ?&lt;/p&gt;

&lt;p&gt;W wypadku podania błędnych danych w formularzu mam validację po stronie JS oraz PHP więc teoretycznie zapytanie działa zero-jedynkowo =&amp;gt; albo wykona się całe poprawnie albo w ogóle. Czy niepotrzebnie przekombinowuję ?&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=727/aplikacja-bud%C5%BCetowa-stosowanie-bloku-try-catch</guid>
<pubDate>Thu, 18 Nov 2021 21:14:38 +0000</pubDate>
</item>
<item>
<title>Aplikaja budżetowa - złapanie zakresu dat bilansu w php</title>
<link>http://forum.przyszlyprogramista.pl/?qa=704/aplikaja-bud%C5%BCetowa-z%C5%82apanie-zakresu-dat-bilansu-w-php</link>
<description>&lt;p&gt;Jestem na etapie dodawania php do aplikacji budżetowej, a konkretniej w momencie tworzenia bilansu.&lt;/p&gt;

&lt;p&gt;Chciałabym odebrać informację o wybranym zakresie generowania bilansu i ewentualnych datach niestandardowych, ale bez używania formularza. Wydawało mi się że to nie będzie trudne, bo przecież mam w JS fragment, który rozpoznaje jaka opcja została wybrana:&lt;/p&gt;

&lt;pre class=&quot;brush:jscript;&quot;&gt;
var RangeOption = document.getElementById(&quot;BParameters&quot;);

RangeOption.addEventListener(&quot;click&quot;, function() {MakeDateRangeVisible()} );  

function MakeDateRangeVisible(){
	var DateRangeOption =document.getElementById(&quot;BParameters&quot;).value;
	
	if (DateRangeOption == 41) $('.dates').css('display', 'block');
	else  $('.dates').css('display', 'none');
}
&lt;/pre&gt;

&lt;p&gt;Chciałam zmusić php do odebrania wartości zmiennej DateRangeOption. Internet podpowiada AJAX+post, czyli teoretycznie jeśli po zdeklarowaniu zmiennej dodam:&lt;/p&gt;

&lt;pre class=&quot;brush:jscript;&quot;&gt;
$.post('balance.php',{parameters: DateRangeOption});&lt;/pre&gt;

&lt;p&gt;to powinnam móc w pliku php złapać normalnie wartość parameters jakby przyszła z formularza:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
$BalanceType = $_POST['parameters'];&lt;/pre&gt;

&lt;p&gt;Tylko, że to wyrzuca mi błąd: Undefined array key &quot;parameters&quot;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Co robię źle, lub ewentualnie jakie inne podejście zastosować, poza zamknięciem bilansu w formularzu?&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=704/aplikaja-bud%C5%BCetowa-z%C5%82apanie-zakresu-dat-bilansu-w-php</guid>
<pubDate>Sun, 14 Nov 2021 14:43:33 +0000</pubDate>
</item>
<item>
<title>PHP / PDO - wczytywanie innego pola z rekordu do zmiennej</title>
<link>http://forum.przyszlyprogramista.pl/?qa=698/php-pdo-wczytywanie-innego-pola-z-rekordu-do-zmiennej</link>
<description>&lt;p&gt;Cześć !&lt;br&gt;
jestem na etapie wykonywania aplikacji webowej. Dokładniej wczytywania danych z bazy danych sql. Zatrzymałem się chwilowo na jednym etapie.&lt;br&gt;
&lt;br&gt;
Aplikacja zapisuje już do bazy wprowadzone dane. Mam tylko pytanie:&lt;br&gt;
- zapisuję dane do tabeli &quot;incomes&quot;.&lt;br&gt;
- w jednym z rekordów tabeli &quot;incomes&quot; chcę przepisać nr ID kategorii przychodu z tabeli &quot;income_category&quot;.&lt;br&gt;
- w aplikacji wyświetlam jedynie kolumnę z nazwami kategorii (z tabeli &quot;income_category&quot;) w postaci listy rozwijalnej.&lt;br&gt;
&lt;br&gt;
i pytanie:&lt;br&gt;
Czy jest sprytny sposób, aby wyświetlać pole: &quot;nazwa kategorii&quot; &amp;nbsp;a po wybraniu kategorii, zapisywać do tabeli jedynie jej &quot;ID&quot; ?&lt;br&gt;
Nie mogę znaleźć podobnych analogii.&lt;br&gt;
&lt;br&gt;
Drobny wycinek z kodu:&lt;/p&gt;

&lt;pre class=&quot;brush:jscript;&quot;&gt;
&amp;lt;select class=&quot;expCategory&quot; id=&quot;incCat1&quot; &amp;nbsp;name=&quot;incomeCat&quot; &amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;?php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach($incomesCat as $incomeCat) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo &quot;&amp;lt;option&amp;gt;{$incomeCat['name']}&amp;lt;/option&amp;gt;&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?&amp;gt;
&amp;lt;/select&amp;gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=698/php-pdo-wczytywanie-innego-pola-z-rekordu-do-zmiennej</guid>
<pubDate>Fri, 12 Nov 2021 16:41:10 +0000</pubDate>
</item>
<item>
<title>PHPMailer - nie wysyła emaila aktywującego z serwera zewnętrznego</title>
<link>http://forum.przyszlyprogramista.pl/?qa=671/phpmailer-wysy%C5%82a-emaila-aktywuj%C4%85cego-serwera-zewn%C4%99trznego</link>
<description>&lt;p&gt;Witam serdecznie wszystkich !&lt;/p&gt;

&lt;p&gt;Aktualnie pracuję nad aplikacją budżetu osobistego zgodnie z wzorcem projektowym MVC. Na localhoście wysyłka maili aktywujących konto przebiegała bez problemu. Po przeniesieniu aplikacji na serwer zewnętrzny pojawił się problem, otóż: następuje rejestracja użytkownika, ale nie jest wysyłany email aktywujący konto. Baza danych jest skonfigurowana właściwie - dane zapisują się do bazy. Może Ktoś coś doradzi ??&lt;/p&gt;

&lt;p&gt;Używam PHPMailer. Poniżej funkcja send() z klasy Mail z pliku Mail.php:&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
 public static function send($to, $subject, $text, $html)
    {
      
        $mail = new PHPMailer(true);
        try {
            //Server settings
            $mail-&amp;gt;isSMTP(true);                     //Send using SMTP
            $mail-&amp;gt;Host       = &quot;poczta.o2.pl&quot;;      //Set the SMTP server to send through
            $mail-&amp;gt;SMTPAuth   = true;                //Enable SMTP authentication
            $mail-&amp;gt;Username   = 'username';          //SMTP username
            $mail-&amp;gt;Password   = 'password';          //SMTP password
            $mail-&amp;gt;SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;    //Enable implicit TLS encryption
            $mail-&amp;gt;Port       = 465;                
          //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`

            //Recipients
            $mail-&amp;gt;setFrom(Config::EMAIL_FROM, Config::EMAIL_FROM_NAME);
            $mail-&amp;gt;AddAddress($to);

            //Content
            $mail-&amp;gt;isHTML(true);              //Set email format to HTML
            $mail-&amp;gt;Subject = $subject;
            $mail-&amp;gt;Body    = $html;
            $mail-&amp;gt;AltBody = $text;

            $mail-&amp;gt;send();
            echo 'Wiadomość została wysłana';
        } catch (Exception $e) {
            echo &quot;Nie udało się wysłać wiadomości. Błąd poczty: {$mail-&amp;gt;ErrorInfo}&quot;;
        }
    }&lt;/pre&gt;

&lt;p&gt;Będę wdzięczny za pomoc :)&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=671/phpmailer-wysy%C5%82a-emaila-aktywuj%C4%85cego-serwera-zewn%C4%99trznego</guid>
<pubDate>Fri, 05 Nov 2021 17:12:58 +0000</pubDate>
</item>
<item>
<title>Aplikacja webowa part3. - error i brak dodania rekordu z danymi usera do bazy</title>
<link>http://forum.przyszlyprogramista.pl/?qa=646/aplikacja-webowa-part3-error-dodania-rekordu-danymi-usera</link>
<description>&lt;p&gt;Helloł wszystkim :)&lt;/p&gt;

&lt;p&gt;Tym razem to ja znajdę się po stronie zadającej pytanie. Koduję obecnie dodawanie rekordu z danymi usera do bazy danych. Po wypełnieniu formularza na stronie rejestracji i kliknięciu przycisku (Sign Up), rekord nie zostaje dodany do bazy danych, nie wyświetla się również żaden error np brak połączenia z bazą danych, niepoprawna validacja loginu i hasła itd. W oknie przeglądarki wyświetla się natomiast (z nieznanego mi powodu) plik signup.php, który to sprawdza validację i powinien dodać rekord do bazy danych. Żeby było zabawniej wyświetla się od linijki nr 37.&lt;/p&gt;

&lt;p&gt;Czy ktoś z Was, może zerknąć na mój kod świeżym okiem i wskazać w nim błąd, którego moje nie dostrzega ?&lt;/p&gt;

&lt;p&gt;Formularz rejestracji (sam panel) wygląda następująco :&lt;/p&gt;

&lt;pre class=&quot;brush:xml;&quot;&gt;
&amp;lt;div class=&quot;wrapper col-6 mx-auto mt-5&quot;&amp;gt;
                &amp;lt;form method=&quot;POST&quot; action=&quot;signup.php&quot; id=&quot;SignUpForm&quot; name=&quot;registerForm&quot; onsubmit=&quot;return validation()&quot;&amp;gt;
                    &amp;lt;div class=&quot;register-box&quot;&amp;gt;
                        &amp;lt;div class=&quot;row&quot;&amp;gt;
                            &amp;lt;div class=&quot;register-title mx-auto mb-2 px-2&quot;&amp;gt;Sign up&amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;
                        &amp;lt;div class=&quot;row&quot;&amp;gt;
                            &amp;lt;div class=&quot;register-input col-sm-12 mx-auto mt-4 mb-3&quot;&amp;gt;
                                &amp;lt;div class=&quot;register-icon mx-auto&quot;&amp;gt;
                                    &amp;lt;span class=&quot;material-icons px-2 py-1&quot;&amp;gt;
                                        person
                                    &amp;lt;/span&amp;gt;
                                &amp;lt;/div&amp;gt;
                                &amp;lt;input type=&quot;text&quot; class=&quot;form-control mx-auto my-auto px-2 py-2&quot; placeholder=&quot;login&quot; aria-label=&quot;login&quot; name=&quot;login&quot; autofocus required&amp;gt;
                                &amp;lt;span&amp;gt;&amp;lt;?php echo ((isset($_SESSION['username_err']) &amp;amp;&amp;amp; $_SESSION['username_err'] != '') ? $_SESSION['username_err'] : ''); unset($_SESSION['username_err']); ?&amp;gt; &amp;lt;/span&amp;gt;
                            &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;

                        &amp;lt;div class=&quot;row&quot;&amp;gt;
                            &amp;lt;div class=&quot;register-input col-sm-12 mx-auto mb-2&quot;&amp;gt;
                                &amp;lt;div class=&quot;register-icon mx-auto&quot;&amp;gt;
                                    &amp;lt;span class=&quot;material-icons px-2 py-1&quot;&amp;gt;
                                        vpn_key
                                    &amp;lt;/span&amp;gt;
                                &amp;lt;/div&amp;gt;
                                &amp;lt;input type=&quot;password&quot; class=&quot;form-control mx-auto my-auto px-2 py-2&quot; placeholder=&quot;password&quot; aria-label=&quot;password&quot; name=&quot;password&quot; required&amp;gt;
                                &amp;lt;span&amp;gt;&amp;lt;?php echo ((isset($_SESSION['password_err']) &amp;amp;&amp;amp; $_SESSION['password_err'] != '') ? $_SESSION['password_err'] : ''); unset($_SESSION['password_err']); ?&amp;gt; &amp;lt;/span&amp;gt;
                            &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;

                        &amp;lt;div class=&quot;row&quot;&amp;gt;
                            &amp;lt;div class=&quot;register-input col-sm-12 mx-auto mb-3&quot;&amp;gt;
                                &amp;lt;div class=&quot;register-icon mx-auto&quot;&amp;gt;
                                    &amp;lt;span class=&quot;material-icons px-2 py-1&quot;&amp;gt;
                                        vpn_key
                                    &amp;lt;/span&amp;gt;
                                &amp;lt;/div&amp;gt;
                                &amp;lt;input type=&quot;password&quot; class=&quot;form-control mx-auto my-auto px-2 py-2&quot; placeholder=&quot;confirm password&quot; aria-label=&quot;password&quot; name=&quot;confpassword&quot; required&amp;gt;
                                &amp;lt;span&amp;gt;&amp;lt;?php echo ((isset($_SESSION['confirm_password_err']) &amp;amp;&amp;amp; $_SESSION['confirm_password_err'] != '') ? $_SESSION['confirm_password_err'] : ''); unset($_SESSION['confirm_password_err']); ?&amp;gt; &amp;lt;/span&amp;gt;
                            &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;


                        &amp;lt;div class=&quot;row&quot;&amp;gt;
                            &amp;lt;div class=&quot;register-button ml-2 mb-4 px-1 py-1&quot;&amp;gt;
                                &amp;lt;button&amp;gt;&amp;lt;input type=&quot;submit&quot; value=&quot;Sign up&quot; name=&quot;reg_user&quot; class=&quot;mx-auto my-auto px-1 py-1&quot;&amp;gt;&amp;lt;/button&amp;gt;
                            &amp;lt;/div&amp;gt;
                            &amp;lt;span&amp;gt;&amp;lt;?php echo ((isset($_SESSION['success']) &amp;amp;&amp;amp; $_SESSION['success'] != '') ? $_SESSION['success'] : ''); unset($_SESSION['success']); ?&amp;gt; &amp;lt;/span&amp;gt;
                            &amp;lt;span&amp;gt;&amp;lt;?php echo ((isset($_SESSION['wrong_validation']) &amp;amp;&amp;amp; $_SESSION['wrong_validation'] != '') ? $_SESSION['wrong_validation'] : ''); unset($_SESSION['wrong_validation']); ?&amp;gt; &amp;lt;/span&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/form&amp;gt;
                        &amp;lt;div class=&quot;row&quot;&amp;gt;
                            &amp;lt;div class=&quot;change_link position-absolute mt-2 px-auto py-auto&quot;&amp;gt;
                                &amp;lt;div class=&quot;info position-relative d:inline-flex&quot;&amp;gt;
                                    &amp;lt;p class=&quot;text-left &quot;&amp;gt;Already have an account ?&amp;lt;/p&amp;gt;
                                    &amp;lt;a href=&quot;index.php&quot; class=&quot;p-1&quot; style=&quot;margin-bottom: 1px;&quot;&amp;gt;Sign in&amp;lt;/a&amp;gt;
                                &amp;lt;/div&amp;gt;
                            &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;Natomiast plik signup.php do validacji wygląda tak :&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php
session_start();

// initializing variables
$login = &quot;&quot;;
$password = $confpassword = &quot;&quot;;
$username_err = $password_err = $confirm_password_err = $wrong_validation =  &quot;&quot;;
$success = &quot;&quot;;

//mysqli_report(MYSQLI_REPORT_STRICT);
if (($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;) &amp;amp;&amp;amp; (isset($_POST['reg_user']))) {

    // REGISTER USER
    //receive all input values from the form
    $login = strip_tags(trim($_POST['login']));
    $password = strip_tags(trim($_POST['password']));
    $confpassword = strip_tags(trim($_POST['confpassword']));

    // form validation: ensure that the form is correctly filled 

    if (empty($login)) {
      $_SESSION['username_err'] = &quot;Username is required !&quot;;
      header('Location: register.php'); 
    }
    if ((strlen($login) &amp;lt; 3)) {
      $_SESSION['username_err'] = &quot;Login must contain minimum 3 characters!&quot;;
      header('Location: register.php');
    }
    if (preg_match('/^[a-zA-Z0-9_]+$/', $login) == false) {
      $_SESSION['username_err'] = &quot;Login can only contain letters, numbers, and underscores.&quot;;
      header('Location: register.php');
    }
    if (empty($password)) {
      $_SESSION['password_err'] = &quot;Password is required !&quot;;
      header('Location: register.php');
    }
    if ((strlen($password) &amp;lt; 8) || (strlen($password) &amp;gt; 20)) {
      $_SESSION['password_err'] = &quot;Password must contain beetween 8 and 20 characters!&quot;;
      header('Location: register.php');
    }
    if ($password != $confpassword) {
      $_SESSION['confirm_password_err'] = &quot;The passwords do not match&quot;;
      header('Location: register.php');
    }

    // connect to the database
    require_once &quot;database.php&quot;;

    // first check the database to make sure 
    // a user with the same login do not exist
    $user_check_query = &quot;SELECT * FROM users WHERE login ='$login' LIMIT 1&quot;;
    $query = $db-&amp;gt;prepare($user_check_query);
    $query-&amp;gt;bindValue(':login', $login, PDO::PARAM_STR);
    $query-&amp;gt;execute();
    $user = $query-&amp;gt;fetch();

    if ($user) { // if user exists in db
      if ($user['login'] === $login) {
        $_SESSION['username_err'] = &quot;login already exists !&quot;;
        header('Location: register.php');
      }
    }

    // register user if there are no errors in the form
    if (empty($username_err) &amp;amp;&amp;amp; empty($password_err) &amp;amp;&amp;amp; empty($confirm_password_err)) {
      $encryptedPassword = password_hash($password, PASSWORD_DEFAULT); //hash the password before saving in the database

      $sql_insert_login = &quot;INSERT INTO users 
      VALUES(NULL, ':login', ':encryptedPassword')&quot;;
      $query_login = $db-&amp;gt;prepare($sql_insert_login);
      $query_login-&amp;gt;bindValue(':login', $login, PDO::PARAM_STR);
      $query_login-&amp;gt;bindValue(':encryptedPassword', $encryptedPassword, PDO::PARAM_STR);
      $query_login-&amp;gt;execute();

      if ($db-&amp;gt;query($query_user) === TRUE) {
        $_SESSION['success']  = &quot;New user added successfully&quot;;
      } else {
        $_SESSION['wrong_validation'] = &quot;Failed to add new user. Please try again later.&quot;;
        header('Location: register.php');
        
      }

      //assign to user incomes,expenses,payment default template of db
        $sql_insert_incomes_template_default = &quot;INSERT INTO incomes_category_assigned_to_users (user_id, name) 
        SELECT users.id, incomes_category_default.name 
        FROM users, incomes_category_default
        WHERE users.login= :login&quot;;
        $query_incomes = $db-&amp;gt;prepare($sql_insert_incomes_template_default);
        $query_incomes-&amp;gt;bindValue(':login', $login, PDO::PARAM_STR);
        $query_incomes-&amp;gt;execute();

        $sql_insert_expenses_template_default =&quot;INSERT INTO expenses_category_assigned_to_users (user_id, name) 
        SELECT users.id, expenses_category_default.name 
        FROM users, expenses_category_default 
        WHERE users.login= :login&quot;;
        $query_expenses = $db-&amp;gt;prepare($sql_insert_expenses_template_default);
        $query_expenses-&amp;gt;bindValue(':login', $login, PDO::PARAM_STR);
        $query_expenses-&amp;gt;execute();

        $sql_insert_payment_template_default =&quot;INSERT INTO payment_methods_assigned_to_users (user_id, name) 
        SELECT users.id, payment_methods_default.name 
        FROM users, payment_methods_default 
        WHERE users.login= :login&quot;;
        $query_payment = $db-&amp;gt;prepare($sql_insert_payment_template_default);
        $query_payment-&amp;gt;bindValue(':login', $login, PDO::PARAM_STR);
        $query_payment-&amp;gt;execute();

      $_SESSION['login'] = $login;
      $_SESSION['success'] = &quot;You are now logged in&quot;;
      header('location: menu.php');
      exit();
    }
} 
else {
  echo &quot;Oops! Something went wrong. Please try again later.&quot;;
  exit();
}
&lt;/pre&gt;

&lt;p&gt;Do połączenia z bazą danych wykorzystuję dwa pliki :&lt;/p&gt;

&lt;p&gt;config.php&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

return [
    'host' =&amp;gt; 'localhost',
    'user' =&amp;gt; 'root',
    'password' =&amp;gt; '',
    'database' =&amp;gt; 'walletfy'
    ];&lt;/pre&gt;

&lt;p&gt;oraz database.php :&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

$config = require_once 'config.php';

try {
	
	$db = new PDO(&quot;mysql:host={$config['host']};dbname={$config['database']};charset=utf8&quot;, $config['user'], $config['password']);
	$db-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch (PDOException $error) {
	
	echo $error-&amp;gt;getMessage();
	exit('Internal server error ! Please try again later.');
	
}

&lt;/pre&gt;

&lt;p&gt;Anybody ? Any hints ?&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=646/aplikacja-webowa-part3-error-dodania-rekordu-danymi-usera</guid>
<pubDate>Tue, 26 Oct 2021 20:36:59 +0000</pubDate>
</item>
<item>
<title>404 error - aplikacja budżetowa MVC</title>
<link>http://forum.przyszlyprogramista.pl/?qa=490/404-error-aplikacja-bud%C5%BCetowa-mvc</link>
<description>Witam&lt;br /&gt;
&lt;br /&gt;
Jestem na końcu procesu tworzenia aplikacji budżetowej przy użyciu frameworku MVC. &lt;br /&gt;
&lt;br /&gt;
Po przesłaniu 5 folderów ( App, Core, logs, public, vendor) na serwer i po wejściu w adres do aplikacji następuje niezrozumiałe dla mnie zjawisko. Pierwsza strona ( /Home/index.html ) się wyświetla, ale wygląda jakby nie wczytał się plik style.css - jest to czysty html bez jakiegokolwiek stylizowania. Po kliknięciu na przycisk rejestracji lub zalogowania się wyskakuje błąd 404 z komentarzem: &amp;quot;The resource requested could not be found on this server!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pierwsza myśl, oczywiście że czegoś brakuje ale skopiowałem wszystko to, czego używałem przy łączeniu przez localhost ( wspomniane 5 folderów ), zatem wszystko powinno być. Na innych forach przeczytałem również, że problem może leżeć w braku plików .htaccess, ale i one są (usuwałem je, zmieniałem nazwy ale bez skutku). &lt;br /&gt;
&lt;br /&gt;
Jeśli miał ktoś podobny problem lub wie gdzie mogę doszukiwać się błędu to proszę o pomoc.</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=490/404-error-aplikacja-bud%C5%BCetowa-mvc</guid>
<pubDate>Wed, 28 Jul 2021 16:44:57 +0000</pubDate>
</item>
<item>
<title>Dostęp do atrybutów modelu z poziomu JS. MVC</title>
<link>http://forum.przyszlyprogramista.pl/?qa=459/dost%C4%99p-do-atrybut%C3%B3w-modelu-z-poziomu-js-mvc</link>
<description>&lt;p&gt;Witam&lt;/p&gt;

&lt;p&gt;Jestem na etapie tworzenia aplikacji budżetowej w oparciu o framework MVC,&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Przyszła kolej na dodanie wykresu kołowego. Jest on w całości zrealizowany w JS ale do jego poprawnego działania&amp;nbsp;potrzebuję móc odczytać kilka tablic, które znajdują się w obiekcie typu model.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Obiekt ten wysyłam poprzez kontroler do widoku w taki sposób:&lt;/p&gt;

&lt;p&gt;View::renderTemplate('Balancing/show.html', [ 'selector' =&amp;gt; $selector, 'downBorder' =&amp;gt; $downBorder, 'topBorder' =&amp;gt; &amp;nbsp;$topBorder, 'balance' =&amp;gt; $balance]);&lt;/p&gt;

&lt;p&gt;Model&amp;nbsp; &lt;strong&gt;&lt;em&gt;balance&amp;nbsp;&amp;nbsp;&lt;/em&gt;&lt;/strong&gt;zawiera jak wspomniałem kilka tablic z nazwami kategorii wydatków i sumarycznymi wartościami tych wydatków.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;lt;?php&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; namespace App\Models;&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; use PDO;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; use \Core\View;&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; class Balance extends \Core\Model&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;protected $userId, $downTimeBorder, $topTimeBorder;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public $incomesSummaryAmount, $incomeCategoryNames;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public $expensesSummaryAmount, $expenseCategoryNames;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;...&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Chciałbym teraz w obiekcie typu View w skrypcie do tworzenia wykresu odczytać tablicę np&amp;nbsp; $incomeCategoryNames. W jaki sposób mogę to zrobić ? Na forach znalazłem coś jedynie typu:&lt;/p&gt;

&lt;pre&gt;
var data = @Html.Raw(JsonConvert.SerializeObject(this.Model));&lt;/pre&gt;

&lt;p&gt;Ale wydaje się dość skomplikowane jak na polecenie, które ma jedynie odczytać dane.&lt;br&gt;
Jeśli macie jakieś prostsze sposoby to proszę o wskazówki.&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=459/dost%C4%99p-do-atrybut%C3%B3w-modelu-z-poziomu-js-mvc</guid>
<pubDate>Tue, 20 Jul 2021 19:31:33 +0000</pubDate>
</item>
<item>
<title>Wspólne programowanie - aplikacja webowa Budżet Osobisty</title>
<link>http://forum.przyszlyprogramista.pl/?qa=451/wsp%C3%B3lne-programowanie-aplikacja-webowa-bud%C5%BCet-osobisty</link>
<description>Cześć!&lt;br /&gt;
&lt;br /&gt;
Jestem na etapie tworzenia weryfikacji przesyłanego formularza danych wydatku/przychodu. Z tego co się dowiedziałem od chłopaków z kursu, że powinny być 2 takie weryfikacje: jedna pisana w JS &amp;nbsp;a druga po stronie backendu, czyli w PHP. Czy jest ktoś na podobnym etapie i chciał by podzielić się spostrzeżeniami i pokodować wspólnie? Jeśli chodzi o czas i porę to dostosuję się do kogoś&lt;br /&gt;
&lt;br /&gt;
Zapraszam do kontaktu :)&lt;br /&gt;
&lt;br /&gt;
Pozdrawiam,&lt;br /&gt;
Tomek</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=451/wsp%C3%B3lne-programowanie-aplikacja-webowa-bud%C5%BCet-osobisty</guid>
<pubDate>Sun, 18 Jul 2021 19:36:08 +0000</pubDate>
</item>
<item>
<title>Składnia zapytania plik PHP</title>
<link>http://forum.przyszlyprogramista.pl/?qa=450/sk%C5%82adnia-zapytania-plik-php</link>
<description>&lt;p&gt;Witam wszystkich !&lt;/p&gt;

&lt;p&gt;Jestem już na etapie technologii webowych.&lt;/p&gt;

&lt;p&gt;Plik z serwera wyrzuca mi błąd w składni, którą już tyle razy przeglądałem, że mieni mi się w oczach.&lt;/p&gt;

&lt;p&gt;Proszę o uwagi - nie potrafię się dopatrzeć błędu.&lt;/p&gt;

&lt;p&gt;Z&amp;nbsp; góry dziękuję !&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
while ($tableRow = $effect -&amp;gt; fetch_assoc()) {
 echo '&amp;lt;div class=&quot;row row-cols-1 row-cols-md-2 m-auto&quot;&amp;gt;';
 echo '&amp;lt;div class=&quot;col&quot;&amp;gt;';
echo '&amp;lt;div class=&quot;form-check&quot;&amp;gt;';
echo '&amp;lt;input class=&quot;form-check-input&quot; type=&quot;checkbox&quot; name=&quot;category&quot; id=&quot;'$tableRow['name']'&quot; value=&quot;'.$tableRow['name'];
                                                   if(isset($_SESSION['f_expense_category_assigned_to_user_id'])) {
if($tableRow['name'] == $_SESSION['f_expense_category_assigned_to_user_id']) 
{
echo '&quot;checked =&quot;checked&quot;';
}
echo '&quot;&amp;gt;';
echo'&amp;lt;label class=&quot;form-check-label&quot; for=&quot;'$tableRow['name']'&quot;&amp;gt;'.$tableRow['name'].'&amp;lt;/label&amp;gt;';
echo '&amp;lt;/div&amp;gt;';
echo '&amp;lt;/div&amp;gt;';
echo '&amp;lt;/div&amp;gt;';                                                                                             }&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=450/sk%C5%82adnia-zapytania-plik-php</guid>
<pubDate>Sat, 17 Jul 2021 20:42:06 +0000</pubDate>
</item>
<item>
<title>Kurs PHP - pusta strona logowania</title>
<link>http://forum.przyszlyprogramista.pl/?qa=386/kurs-php-pusta-strona-logowania</link>
<description>&lt;p&gt;Witajcie,&amp;nbsp;&lt;br&gt;
po krótkiej przerwie wróciłem do nauki kodowania - jestem w trakcie kursu Pana Zelenta (PHP/ odc. 2) - Mam taki drobny kłopot z odczytem bazy danych przez php.&amp;nbsp;&lt;br&gt;
Po wprowadzeniu danych logowania (login i hasło) skrypt przenosi&amp;nbsp;użytkownika do pliku zaloguj.php ale nic nie wyświetla - pusta strona (żadnego komunikatu o błędzie).&lt;br&gt;
Sprawdzałem składnie kodu kilkanaście razy ale jest poprawnie - a nie chciałbym takiej rzeczy zaniedbać na starcie.&lt;br&gt;
&lt;br&gt;
Będę wdzięczny za uwagę :)&lt;br&gt;
&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php

	require_once &quot;connect.php&quot;;
	
	$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
	
	if($polaczenie-&amp;gt;connect_errno!=0)
	{
		echo&quot;Error:&quot;.$polaczenie-&amp;gt;connect_errno;
	}
	else
	{
		$login=$_POST['login'] ;
		$haslo=$_POST['haslo'] ;
		//echo $login;
		
		$sql = &quot; SELECT * FROM uzytkownicy WHERE user='$login' AND pass='$haslo' &quot;;
		
		if($rezultat = @$polaczenie-&amp;gt;query($sql))
		{
			$ilu_userow= $rezultat-&amp;gt;num_rows;
			if($ilu_userow&amp;gt;0)
			{
				$wiersz = $rezultat-&amp;gt;fetch_assoc();
				$user=$wiersz['user'];
				
				
				$rezultat-&amp;gt;free_result();
				echo $user;
				
			}
			else
			{
				
			}
		}
		
		$polaczenie-&amp;gt;close();
	}

?&amp;gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=386/kurs-php-pusta-strona-logowania</guid>
<pubDate>Sun, 20 Jun 2021 10:08:34 +0000</pubDate>
</item>
<item>
<title>Zapytanie SQL przy rejestracji użytkownika</title>
<link>http://forum.przyszlyprogramista.pl/?qa=289/zapytanie-sql-przy-rejestracji-u%C5%BCytkownika</link>
<description>&lt;p&gt;Podczas kodowania rejestracji napisałąm takie zapytanie, aby skopiować tablicę&amp;nbsp;&lt;em&gt;payment_methods_default&lt;/em&gt; do&amp;nbsp;&lt;em&gt;payment_methods_assigned_to_users:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;INSERT INTO payment_methods_assigned_to_users(id, name, user_id) SELECT NULL, payment_methods_default.name, users.id FROM users, payment_methods_default WHERE users.email = '$email'&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;zadziałało to tak, że kolejne wiersze wpisywane&amp;nbsp;do tablicy&amp;nbsp;&lt;em&gt;payment_methods_assigned_to_users&amp;nbsp;&lt;/em&gt;&amp;nbsp;mają id od 1 do 4 (są to kategorie jednego użytkownika), a przy rejestracji kolejnego użytkownika id jego kategorii&amp;nbsp;zaczyna się od 7 czyli id przeskakuje o 3 i jest 7,8,9,10. Przy kolejnym uzytkowniku 13,14,15,16. Jak myślicie, co jest nie tak z moim zapytaniem?&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=289/zapytanie-sql-przy-rejestracji-u%C5%BCytkownika</guid>
<pubDate>Fri, 21 May 2021 16:18:48 +0000</pubDate>
</item>
<item>
<title>Wyświetlanie polskich znaków - personal budget</title>
<link>http://forum.przyszlyprogramista.pl/?qa=231/wy%C5%9Bwietlanie-polskich-znak%C3%B3w-personal-budget</link>
<description>&lt;p&gt;Cześć!&lt;/p&gt;

&lt;p&gt;Mam problem z wyświetlaniem polskich znaków w programie do prowadzenia budżetu osobistego. Postawiłem już stronę we&amp;nbsp;własnej domenie i wszędzie polskie znaki wyświetlają się poprawnie &lt;span style=&quot;text-decoration: underline;&quot;&gt;z wyjątkiem pobranych z bazy danych do bilansu kategorii wydatków i przychodów&lt;/span&gt;. Może wymienię:&lt;/p&gt;

&lt;p&gt;- na&lt;span style=&quot;text-decoration: underline;&quot;&gt; localhoście&lt;/span&gt; zarówno w phpMyadmin jak i na moim komputerze wszystko działa poprawnie.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;- strona ma w sekcji meta&amp;nbsp;kodowanie utf-8:&amp;nbsp;&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;- wszystkie pola tekstowe w bazie mysql w sekcji &quot;Metoda porównywania napisów: utf8_polish_ci.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;- kodowanie całej bazy:&amp;nbsp;utf8_polish_ci.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;- w kodzie zaraz po deklaracji połączenia: mysqli_set_charset($polaczenie, &quot;utf-8&quot;):&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;mysqli_set_charset($polaczenie, &quot;utf-8&quot;);&lt;/p&gt;

&lt;p&gt;- do rejestrowania przychodów i wydatków kategorie pobierane są poprawnie&lt;/p&gt;

&lt;p&gt;tylko do bilansu: &quot;Wy?ywienie&quot; zamiast &quot;Wyżywienie&quot;, &quot;Pozosta?e&quot; zamiast &quot;Pozostałe&quot; itd.&lt;/p&gt;

&lt;p&gt;Niestety rozwiązania proponowane w internecie nie działają. Może ktoś miał podobny problem.....&lt;/p&gt;

&lt;p&gt;Mariusz&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=231/wy%C5%9Bwietlanie-polskich-znak%C3%B3w-personal-budget</guid>
<pubDate>Sun, 16 May 2021 11:13:16 +0000</pubDate>
</item>
<item>
<title>Front-end - przydatny link</title>
<link>http://forum.przyszlyprogramista.pl/?qa=227/front-end-przydatny-link</link>
<description>Jestem na etapie: Tworzymy profesjonalną aplikację internetową cz.2&lt;br /&gt;
&lt;br /&gt;
Poniżej podaję świetny link do strony, z którą można &amp;quot;pysznie&amp;quot; sprawdzić wielkość czcionek, które wybraliśmy do pracy.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://www.gridlover.net/try&quot; rel=&quot;nofollow&quot;&gt;https://www.gridlover.net/try&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Pozdrawiam</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=227/front-end-przydatny-link</guid>
<pubDate>Sat, 15 May 2021 14:35:59 +0000</pubDate>
</item>
<item>
<title>Problem z funkcją password_verify()</title>
<link>http://forum.przyszlyprogramista.pl/?qa=198/problem-z-funkcj%C4%85-password_verify</link>
<description>&lt;p&gt;Cześć!&lt;br&gt;
&lt;br&gt;
Słuchajcie, mam problem z funkcją password_verify($password, $row['password']) w PHP podczas logowania do aplikacji interentowej.&lt;br&gt;
&lt;br&gt;
zmienna $password to hasło od użytkownika&lt;br&gt;
&lt;br&gt;
$row['password'] jest to zahaszowane hasło pobrane z bazy&lt;br&gt;
&lt;br&gt;
Upewniłam się, że hasło wpisuję dobrze oraz zahashowane hasło również jest prawidłowo pobrane z bazy, ponieważ obie te zmienne wyświetliłam i się zgadza, a jednak if nie puszcza mojego hasła i nie mogę się zalogować. Ktoś z Was ma pomysł o co chodzi?&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
$row =$result-&amp;gt;fetch_assoc();
                
if (password_verify($password, $row['password']))
{
    $_SESSION['signed_in'] = true;
    $_SESSION['id']=$row['id'];
    $_SESSION['username'] =$row['username'];
    
    unset($_SESSION['fail']);
    $result-&amp;gt;free_result();
    header('Location:mainmenu.php');
}
else
{
    $_SESSION['fail'] = '&amp;lt;span style =&quot;color:red&quot;&amp;gt;Nieprawidłowe hasło!&amp;lt;/span&amp;gt;';
    header('Location:loginsite.php');
}&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=198/problem-z-funkcj%C4%85-password_verify</guid>
<pubDate>Mon, 10 May 2021 13:37:58 +0000</pubDate>
</item>
<item>
<title>Problem z połączeniem z bazą danych. Error 1049</title>
<link>http://forum.przyszlyprogramista.pl/?qa=50/problem-z-po%C5%82%C4%85czeniem-z-baz%C4%85-danych-error-1049</link>
<description>&lt;p&gt;Witam,&lt;br&gt;
&lt;br&gt;
Korzystając z faktu zaistnienia tego forum, chciałbym spróbować rozwiązać swój problem właśnie za jego pomocą.&lt;br&gt;
&lt;br&gt;
Otóż, jak w temacie, mam problem z połączeniem się z bazą danych (jestem na etapie tworzenia aplikacji budżetowej od strony backendu).&lt;br&gt;
&lt;br&gt;
&amp;nbsp;Oto mój fragment kodu, który ma za zadanie połączyć się z bazą danych:&lt;br&gt;
&amp;nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:php;&quot;&gt;
&amp;lt;?php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;session_start();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;require_once &quot;connect.php&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$dataBaseConnect = new mysqli($host,$db_user,$db_password,$db_name);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($dataBaseConnect-&amp;gt;connect_errno!=0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$_SESSION['dbError']=$dataBaseConnect-&amp;gt;connect_errno;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$dataBaseConnect-&amp;gt;close();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
?&amp;gt;

&amp;lt;html lang=&quot;pl&quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta charset=&quot;utf-8&quot; /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, shrink-to-fit=no&quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;Cash Assistant&amp;lt;/title&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta name=&quot;description&quot; content=&quot;Zapanuj nad finansami&quot; /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta name=&quot;keywords&quot; content=&quot;finanse, pieniądze, budżet&quot; /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta http-equiv=&quot;X-Ua-Compatible&quot; content=&quot;IE=edge&quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot;&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;css/bootstrap.min.css&quot; /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;link href=&quot;https://fonts.googleapis.com/css2?family=Roboto+Slab&amp;amp;display=swap&quot; rel=&quot;stylesheet&quot;&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;

....

&amp;lt;?php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(isset($_SESSION['dbError']))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo &quot;Registration failed...! &amp;lt;/br&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Error code: &quot;.$_SESSION['dbError'];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo &quot;Registration succesfull !&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;?&amp;gt;

...

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;

&lt;p&gt;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Powyższy kod realizuje się w momencie kliknięcia &quot;Submit&quot; w formularzu rejestracji.&lt;br&gt;
&lt;br&gt;
Jednak za każdym razem wyrzuca błąd o numerze 1049 (tylko ten błąd, nic więcej).&lt;br&gt;
&lt;br&gt;
Poniżej zamieszczam również kod z pliku connect.php:&lt;br&gt;
&lt;br&gt;
&amp;lt;?php&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$host = 'localhost';&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$db_user = 'root';&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$db_password = '';&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$db_name = 'cashdatabase';&lt;br&gt;
?&amp;gt;&lt;br&gt;
&lt;br&gt;
Jest to zatem najprostsza wersja kodu który ma za zadanie jedynie połączyć się z bazą.&lt;br&gt;
&lt;br&gt;
Dodam również, że oczywiście taka baza istnieje i jest widoczna w localhost/phpmyadmin&lt;br&gt;
&lt;br&gt;
Za każdą sugestię co do możliwego błędu z góry dziękuję&lt;/p&gt;</description>
<category>Technologie webowe</category>
<guid isPermaLink="true">http://forum.przyszlyprogramista.pl/?qa=50/problem-z-po%C5%82%C4%85czeniem-z-baz%C4%85-danych-error-1049</guid>
<pubDate>Thu, 29 Apr 2021 16:36:40 +0000</pubDate>
</item>
</channel>
</rss>