Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] [HTML] Jak masowo stworzyć kilkaset podstron z różnymi nazwami i formularz kontaktowy
batmat1903
post 28.02.2024, 08:38:06
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.02.2024

Ostrzeżenie: (0%)
-----


Witam

Szukałem w Google rozwiązania po polsku oraz angielsku. Zapewne rozwiązanie mojego problemu jest, ale nie potrafię go znaleźć. Zaznaczę jeszcze, że w PHP jestem bardzo początkujący i dopiero się uczę.

1. Sytuacja wygląda tak:
Chciałbym utworzyć około 900 plików *.php o konkretnych nazwach z podstawioną zmienną z listy (listę mogę mieć w dowolnym formacie - to nie problem).
Nazwa pliku będzie wyglądała tak: (to oczywiście przykład) szkola-warszawa.php ; szkola-wroclaw.php ; szkola-stalowa-wola.php ; czyli wzór wygląda tak: szkola-$zmienna.php
Natomiast zawartość na każdej stronie będzie taka sama, czyli HTML z odpowiednimi zmiennymi w PHP. Te zmienne będą generowane z innego pliku i tutaj nie mam większych problemów, tak samo potrafię wyciągnąć wyciągnąć nazwę miejscowości z już utworzonego pliku, tak aby odpowiednio na każdej stronie zachodziły zmiany. Nie mam zielonego pojęcia jak ugryźć ten temat.

2. Drugim moim problemem, jest to, że chciałbym utworzyć formularz kontaktowy z możliwością wysyłania załączników (6szt). Nie do końca rozumiem PHPMailer, tak więc próbowałem stworzyć prosty formularz korzystając z metody POST i wiadomości dochodzą bez problemu na moją skrzynkę jednak nie dochodzą załączniki. Czy jest jakaś możliwość, aby nie korzystając z PHPMailer stworzyć taki formularz? Ew. czy jest ktoś w prosty sposób nakierować mnie jak to zrobić w PHPMailer, ponieważ na ten moment nie mogę zrozumieć działania PHPMailer - a też nie chcę bezwiednie kopiować rozwiązań z internetu. Formularz po wysłaniu przez użytkownika powinien przesłać na moją pocztę wiadomość z załącznikami oraz wcześniej przygotowana odpowiedź do nadawcy z podziękowaniem.

Bardzo prosiłbym o pomoc w tych kwestiach, ponieważ w tym temacie ciężko mi cokolwiek znaleźć (zapewne dlatego, że źle szukam). Siedzę nad tym już kilka dni i wszystko co napiszę ląduje w koszu.
Go to the top of the page
+Quote Post
trueblue
post 28.02.2024, 08:51:30
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


ad.1 Źle do tego podchodzisz. Powinieneś mieć utworzoną regułę w .htaccess, która kieruje wszystkie żądania szkola-xxxx.php na jeden plik (na plik php). Tam sprawdzasz z jaką miejscowością masz do czynienia i na podstawie tej wartości generujesz zmieniony wynik w HTML. W przypadku kiedy ktoś wpisał adres z niechcianą nazwą miejscowości, to generujesz ogólny HTML lub przekierowujesz użytkownika gdzie indziej. Warto by było przetrzymywać gdzieś (tablica w php lub w bazie danych) listę obsługiwanych miejscowości.


--------------------
Go to the top of the page
+Quote Post
Salvation
post 28.02.2024, 08:52:54
Post #3





Grupa: Zarejestrowani
Postów: 344
Pomógł: 70
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


Problem #1.
Pytanie ode mnie. Na pewno potrzebujesz mieć fizycznie utworzone 900 (prawie) identycznych plików? Problem można rozwiązać prostym routingiem i plików będzie znacznie mniej.

Problem #2.
Możesz skorzystać z "gotowca". Nie musisz w pełni implementować formularza po swojej stronie. Możesz skorzystać z: https://formspree.io/. A tutaj info jak wdrożyć załączniki: https://help.formspree.io/hc/en-us/articles...88-File-uploads
Pozostanie jedynie ogranie "wiadomości-podziękowania".

PS. Czego nie rozumiesz z dokumentacji PHPMailera?

Ten post edytował Salvation 28.02.2024, 09:00:53
Go to the top of the page
+Quote Post
batmat1903
post 28.02.2024, 09:04:13
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.02.2024

Ostrzeżenie: (0%)
-----


Dziękuję Wam za odpowiedzi!

Do trueblue:
Rzeczywiście, jest do dużo prostsze rozwiązanie niż tworzenie tylu plików, tylko pytanie jak na to zareaguje Google z indeksowaniem, podejrzewam, że nie zaliczy tych stron, a tutaj chodzi o pozycjonowanie na daną miejscowość. Z drugiej jednak strony czy nie będzie to duplikat wtedy... Treści będą zmienne, ale przy tak ogromnej liczbie i tak się sporo powtórzy. Muszę jedynie odnaleźć informacje jak to wpłynie na indeksowanie, bo jeżeli okaże się to ok, to z przyjemnością wykorzystam.

Do Salvation:
Jak powyżej, chodzi mi o pozycjonowanie strony pod konkretne miejscowości, więc nie do końca wiem czy potrzebuję. Na logikę wydaje mi się, że tak - spróbuję doedukować się na szybko w tym temacie.

Co do PHPMailer, to chciałbym wysyłać wiadomości bez wpisywanie ustawień SMTP. Próbowałem na różne sposoby to omijać i niestety nic nie działało. Gdzieś w internecie znalazłem informację, że aby wysłać dodatkową wiadomość podziękowania należy utworzyć nową instancję, tą także wcześniej tworzyłem, ale skoro i tak wiadomości nie dochodzą, no to nie mam jak sprawdzić. Chyba, że nie ma możliwości pominięcia serwera SMTP.

Jeżeli piszę niejasno, to przepraszam, jednak w tym temacie na chwilę obecną jestem jak dziecko we mgle - cały czas staram się uczyć(głównie z dokumentacji) i powoli prę do przodu, jednak niestety powoli.
Go to the top of the page
+Quote Post
nospor
post 28.02.2024, 09:32:14
Post #5





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




ad1 tak sie wlasnie robi jak koledzy ci powiedzieli. Zamast robic milion plikow szkola-warszawa.php, szkola-wroclaw.php itd to robisz dynamiczny rotuing, ala
/szkola-warszawa, /szkola-wroclaw itd
i taki routing jest przekierowywany do jednego pliku szkola.php

Google nadal widzie twoje warszawa, wroclaw itd i wszystko sie indeksuje jak ma sie indeksowac

ad2
Co to znaczy bez SMTP? Czy to znaczy ze masz serwer pocztowy skonfigurowany na serwerze i nie potrzebujesz SMTP? Jesli tak to prosze, tu masz przyklad gdzie PHPMailer korzysta z konfigurowanego mail()
https://github.com/PHPMailer/PHPMailer/blob...mples/mail.phps


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
batmat1903
post 28.02.2024, 10:20:01
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.02.2024

Ostrzeżenie: (0%)
-----


Do nospor:
Ad.1
Wspaniale!! To rozwiązanie jest po prostu idealne dla mnie, tak więc dzięki za potwierdzenie o indeksowaniu.

Ad.2
Czyli prościej mówiąc, muszę stworzyć maila na swoim hostingu (np. kontakt@domena.pl), pobrać dane smtp do tego konta i po prostu je wrzucić w konfigurację PHPMailer. Teraz to tak rozumiem.
Jeżeli tak jest to dalej nasuwają się pytania.
Czy na tego maila mogę także odbierać wiadomości oraz normalnie posługiwać się nim jako głównej skrzynki?
Poniżej podam przykład, czy o takie coś chodzi:

  1. <?php
  2. //Import PHPMailer classes into the global namespace
  3. //These must be at the top of your script, not inside a function
  4. use PHPMailer\PHPMailer\PHPMailer;
  5. use PHPMailer\PHPMailer\SMTP;
  6. use PHPMailer\PHPMailer\Exception;
  7.  
  8. //Create an instance; passing `true` enables exceptions
  9. $mail = new PHPMailer(true);
  10.  
  11. try { <---- tutaj ustawienia SMTP utworzonego maila?
  12. //Server settings
  13. $mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
  14. $mail->isSMTP(); //Send using SMTP
  15. $mail->Host = 'smtp.example.com'; //Set the SMTP server to send through
  16. $mail->SMTPAuth = true; //Enable SMTP authentication
  17. $mail->Username = 'user@example.com'; //SMTP username
  18. $mail->Password = 'secret'; //SMTP password
  19. $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption
  20. $mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
  21. <----------- koniec ustawień
  22.  
  23. <----------- Czy w sekcji poniżej mogę normalnie wpisać wartości z formularza z "name"? jeżeli input name="name" np. $mail->from($name);
  24. //Recipients
  25. $mail->setFrom('from@example.com', 'Mailer');
  26. $mail->addAddress('joe@example.net', 'Joe User'); //Add a recipient
  27. $mail->addAddress('ellen@example.com'); //Name is optional
  28. $mail->addReplyTo('info@example.com', 'Information');
  29. $mail->addCC('cc@example.com');
  30. $mail->addBCC('bcc@example.com');
  31.  
  32. <------------ Czy w sekcji poniżej mogę normalnie wpisać wartości z formularza z "name"? jeżeli input name="file1" (będę miał 6 pól) np. $mail->attachment1($file1);
  33.  
  34. //Attachments
  35. $mail->addAttachment('/var/tmp/file.tar.gz'); //Add attachments
  36. $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Optional name
  37.  
  38.  
  39. <------------ Tutaj rozumiem jak działa ta sekcja
  40.  
  41. //Content
  42. $mail->isHTML(true); //Set email format to HTML
  43. $mail->Subject = 'Here is the subject';
  44. $mail->Body = 'This is the HTML message body <b>in bold!</b>';
  45. $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
  46.  
  47. <------------ Czy zaraz po $mail->send(); zamiast echo... mogę zastosować takie coś:
  48. <------------ $messageStatus = "Wiadomość została wysłana";
  49. <------------ tak aby została nadana ta wartość, a jeżeli mogę użyć Fetch w JS to po prostu po otrzymaniu poprawnej odpowiedzi wyskoczy komunikat z wiadomością $messageStatus
  50.  
  51. $mail->send();
  52. echo 'Message has been sent';
  53.  
  54.  
  55. <------------ a czy w tej sekcji zamiast echo mogę zastosować ponownie $messageStatus = "Upsss... coś poszło nie tak"
  56.  
  57. } catch (Exception $e) {
  58. echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
  59. }
  60.  
  61.  
  62.  
  63. <------------ Co to odpowiedzi, czy to powinno wyglądać tak?;
  64. <------------ Poniżej już tylko moje wypociny
  65.  
  66. $response = new PHPMailer(true);
  67.  
  68.  
  69. <------------ Tutaj dane nadawcy
  70. $response->name('$name");
  71. itd.....
  72.  
  73. i na końcu:
  74. $response->Send();
  75. tu bez komunikatów, ponieważ będą zbędne, jedynie
  76.  
  77. catch (Exception $e) {
  78. echo "Nie działa";
  79. }
  80.  



Mam nadzieję, że w jakimkolwiek stopniu będzie to zrozumiałem, ponieważ jeżeli to ma być tak skonstruowane, no to w sumie problem rozwiązany.
Go to the top of the page
+Quote Post
nospor
post 28.02.2024, 10:30:48
Post #7





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




ad2) No tak, wszystkie komenty z kody sa ok. Nadawca/name moze pochodzic skad chcesz. Czy to form, czy to dostawca z pizzy. To nie ma znaczenia. Co podasz to pojdzie
Tak, zalczniki tak samo i cala reszta. Ale zalaczik musisz wpiero uploadowac na serwer, ale to zakladam wiesz jak zrobic?
to samo echo mozesz zastopic wpisanie do zmiennej i tp. No to sa podstawy php wink.gif


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 28.02.2024, 10:40:15
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Podstrony będą się indeksować, ale ze względu na małą różnorodność treści możesz być wyrzucony z indeksu Google za Duplicate Content. Nie ma to znaczenia czy miałbyś 900 odrębnych plików czy jeden generujący różną zawartość.


--------------------
Go to the top of the page
+Quote Post
batmat1903
post 28.02.2024, 10:41:47
Post #9





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.02.2024

Ostrzeżenie: (0%)
-----


Wiem, że to są podstawy PHP, ale się dopiero uczę tego języka. Więc moja wiedza jest na ten moment mocno ograniczona i sprowadza się do podmiany zmiennych na stronach... Tak więc jeszcze dużo przede mną.
Co do wrzucenia plików na serwer to nie mam pojęcia jak to zrobić. Znalazłem w dokumentacji:
https://github.com/PHPMailer/PHPMailer/blob...ile_upload.phps
Jednak próbuję rozgryźć gdzie w tym kodzie jest funkcja odpowiedzialna za wrzucenie plików. Zdaję sobie sprawę, że muszę utworzyć osobny katalog do trzymania tych plików, jednak nie mam pojęcia jak stworzyć funkcję, która będzie najpierw pobierała te pliki, zapisywała na serwerze a następnie wysyłała na wskazany email.
Go to the top of the page
+Quote Post
nospor
post 28.02.2024, 10:44:56
Post #10





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




T a funkcja
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)
kopiuje plik z formularza do twojego katalogu do ktorego wrzucasz pliki uzytkownikow.

To jest naprawde proste. Wiec moze zamiast od razu brac sie nie wiadomo za co, to poprostu przeledz wpierw przez tydzien/dwa podstawy php. Bo troche mija sie z celem tlumaczenie kazdej linijki kodu w paro linijkowym przykladzie. Mowie to bez zlosliwosci


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
batmat1903
post 7.03.2024, 09:28:28
Post #11





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.02.2024

Ostrzeżenie: (0%)
-----


Wiem, o tym. Cały czas się szkolę i ćwiczę w tym języku. Pewnie jeszcze trochę czasu minie zanim wszystko w pełni zrozumiem...

Jednak bardzo dziękuję wszystkim za pomoc, pomysły i nakierowanie!!

Jestem niesamowicie wdzięczny i już wiem na czym stoję i co mogę dalej robić. Co do PHPMail to z pewnością przerobię wszystkie przykłady, tak aby go w pełni zrozumieć.

Dzięki wszystkim raz jeszcze!

Hej,

Jeszcze raz dziękuję za poprzednią pomoc. Nadrobiłem nieco zaległości i już formularz bez problemu działa. I nawet rozumiem już co się tam dzieje.
Jednak utknąłem na dalszym etapie. Na pliku .htaccess

Mam w głównym katalogu plik post.php, w którym napiszę reguły dotyczące wczytywanych treści. Chcę go oprzeć na zasadzie odczytania adresu URL (dla przykładu https://mojadomena.pl/blog/szkola-warszawa) i dla "szkola-warszawa" wyświetli się odpowiedni tekst poprzez zastosowanie warunków - to bez problemu zrobię. Jednak mam problem z napisanie reguły w .htaccess, szukam wszędzie (i znając życie odpowiedź już widziałem - jednak nie potrafię jej dostrzec)

Chciałbym aby po wejściu na stronę https://mojadomena.pl/blog/szkola-warszawa została wczytana strona https://mojadomena.pl/post.php?szkola-warszawa tak aby nazwa w pasku adresu się nie zmieniła.

  1. RewriteEngine on
  2. RewriteBase /
  3.  
  4. RewriteRule ^blog/([0-9a-zA-z]+)/?$ post.php?id=$1[L]

Napisałem coś takiego, ale jak łatwo można się domyślić to nie działa wcale.

Czy mógłby mnie ktoś chociaż nakierować albo pomóc rozwiązać ten problem?
Go to the top of the page
+Quote Post
trueblue
post 7.03.2024, 09:50:49
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Kod
RewriteEngine On

RewriteCond %{REQUEST_URI} /blog/([a-z0-9\-]+)$ [QSA,NC]
RewriteRule ^(.*)$ post.php?id=%1


--------------------
Go to the top of the page
+Quote Post
batmat1903
post 7.03.2024, 09:58:52
Post #13





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.02.2024

Ostrzeżenie: (0%)
-----


Jak zastosowałem Twoje rozwiązanie to cała strona padła (błąd 500) poza tymi regułami w pliku .htaccess nie mam nic
Go to the top of the page
+Quote Post
trueblue
post 7.03.2024, 10:13:45
Post #14





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A co jest w pliku post.php?


--------------------
Go to the top of the page
+Quote Post
nospor
post 7.03.2024, 10:16:57
Post #15





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




dawno w htaccess nie siedzialem ale masz kilka bledow logicznych. niby chcesz przekierowywac szkola-warszawa, ale w warunku nie uwzglednils myslnika.
niby chcesz to przekierowac na post.php?szkola-warszawa ale w warunku przekierowujesz na post.php?id=szkola-warszawa itd itd

Generalnie powinienies to przekierowywac na post.php?id=warszawa. po grzyba dodawac stala koncowke szkola do przekierowania?
czyli cos takiego:

RewriteRule ^blog/szkola-([0-9a-zA-z]+)/?$ post.php?id=$1[L]

a potem w post.php pod $_GET['id'] powinna byc warszawa


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
batmat1903
post 7.03.2024, 10:28:12
Post #16





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.02.2024

Ostrzeżenie: (0%)
-----


Na ten moment tylko struktura HTML i dorzucony Header i Footer (poprzez include).
Z tym, że cała strona przestała funkcjonować.

nospor - to przekierowanie działa dokładnie tak jak chciałem

Dzięki wielkie za kolejną pomoc!

Mam jeszcze tylko pytanie

Czy pod takie przekierowanie mogę na przykład dodać listę?

np.

warszawa
poznan
wroclaw itp

tak, żeby cała reszta miast wywalała 404?
Go to the top of the page
+Quote Post
trueblue
post 7.03.2024, 10:35:46
Post #17





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Powinno być raczej:
Kod
RewriteRule ^blog/szkola-([0-9a-zA-Z]+)/?$ post.php?id=$1[L]

lub
Kod
RewriteRule ^blog/szkola-([0-9a-z]+)/?$ post.php?id=$1[L,NC]


Jeśli chodzi o listę niechcianych miejscowości, wspomniałem Ci o tym w poście nr #2.



--------------------
Go to the top of the page
+Quote Post
batmat1903
post 7.03.2024, 11:01:45
Post #18





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.02.2024

Ostrzeżenie: (0%)
-----


Faktycznie, masz absolutną rację. Podałeś już wcześniej mi tą informację. Już wiem co mam robić.

Bardzo Wam dziękuję za pomoc i poświęcony czas.

Pozdrawiam serdecznie

A jest możliwość aby nie było ograniczeń następnych myslników?
bo na ten moment szkola-warszawa działa, a szkola-zielona-gora już nie, czy jest możliwość aby działało to z jakąkolwiek frazą po szkola- ? niezależnie od liczby myślników

Już rozwiązane.
Dodałem "." przed plusem smile.gif

Ten post edytował batmat1903 7.03.2024, 11:09:27
Go to the top of the page
+Quote Post
trueblue
post 7.03.2024, 12:48:20
Post #19





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Kropka oznacza dowolny znak, co równie dobrze można sprowadzić do: (.+)

A tak z myślnikiem: ([0-9a-zA-Z\-]+)



--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 00:40