Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]problem z księgą gości
maniek30dg
post 14.09.2013, 18:44:21
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 14.09.2013

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


Witam, mam pytanie jak zrobić żeby wpisy oddzielała pozioma kreska i pod imię była data wpisu z mniejszą czcionką? jeszcze jest jeden poważny problem, po wpisaniu dłuższego tekstu i wysłaniu go wychodzi on poza wymiary strony, proszę o pomoc.
kod:
  1. <form action="index.php" method="post">
  2. <input name="imie" type="text" value="imie">
  3. <br><input name="email" type="text" value="e-mail">
  4. <br><input name="www" type="text" value="http://">
  5. <br><textarea name="wpis" rows="3" cols="30">wpis</textarea>
  6. <br><input type=submit value=" dodaj! ">
  7. </form>
  8.  
  9. <?
  10. $ksiega = "ksiega.txt";
  11.  
  12. $imie=$_POST["imie"];
  13. $email=$_POST["email"];
  14. $www=$_POST["www"];
  15. $wpis=$_POST["wpis"];
  16.  
  17.  
  18. if (strlen($wpis)>5) {
  19. $f=fopen($ksiega,"a");
  20. $rekord="`$imie`$email`$www`$wpis`";
  21. $rekord=ereg_replace(10," ",$rekord);
  22. $rekord=ereg_replace(13," ",$rekord);
  23. fputs($f,"$rekord\n"); fclose($f);
  24. }
  25.  
  26. $wpisy=file($ksiega);
  27. $wpisy=array_reverse($wpisy);
  28. $ile=count($wpisy);
  29. for ($i=0;$i<$ile;$i++) {
  30. $wpis = explode("`",$wpisy[$i]);
  31. echo "<p>$wpis[1] - $wpis[2] - $wpis[3]<br>$wpis[4]<p>";
  32. }
  33. ?>
Go to the top of the page
+Quote Post
BigPig
post 14.09.2013, 19:08:14
Post #2





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 18.06.2013
Skąd: Białystok

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


1) Funkcja ereg_replace jest przestarzała co widać w manualu:
http://www.php.net/manual/en/function.ereg-replace.php

Jej działanie możesz zastąpić funkcją preg_replace albo str_replace.

2) Jeśli chodzi o kreskę to najbardziej prowizorycznie można tak to zrobić, że mając ten kod:
  1. $wpisy=file($ksiega);
  2. $wpisy=array_reverse($wpisy);
  3. $ile=count($wpisy);
  4. for ($i=0;$i<$ile;$i++) {
  5. $wpis = explode("`",$wpisy[$i]);
  6. echo "<p>$wpis[1] - $wpis[2] - $wpis[3]<br>$wpis[4]<p>";
  7. }
  8. ?>


Dodajemy np. zmienną $kreska = "_______________________"; i dodajesz ją np. tu:
  1. echo "<p>$wpis[1] - $wpis[2] - $wpis[3]<br>$wpis[4]<p> $kreska";


Z tego co pamiętam to <p> narzuca nową linię, więc powinno być ok. Jeśli ma to wyglądać o wiele lepiej, to trzeba już się pobawić stylami CSS.

3) Jeśli chodzi o date to na początku sprawdź funkcję "date" i zrób mniej więcej tak:
  1. $imie=$_POST["imie"];
  2. $email=$_POST["email"];
  3. $www=$_POST["www"];
  4. $wpis=$_POST["wpis"];
  5. $data = date()//w date uzupełniasz nawias tak jak chcesz(oczywiście zgodnie ze standardem, poczytaj więcej w manualu).
  6.  
  7. if (strlen($wpis)>5) {
  8. $f=fopen($ksiega,"a");
  9. $rekord="`$imie`$email`$www`$wpis`$data`";
  10. $rekord=ereg_replace(10," ",$rekord);
  11. $rekord=ereg_replace(13," ",$rekord);
  12. fputs($f,"$rekord\n"); fclose($f);
  13. }


Potem, gdy chcesz wyświetlić date to normalnie tu ją wypisujesz oznaczająć jako $wpis[5].(nie analizowałem dokładnie kodu, więc może być to inny element tablicy, ogólnie tak to ma być)

  1. echo "<p>$wpis[1] - $wpis[2] - $wpis[3]<br>$wpis[4]<p> $kreska";


4) Jeśli chodzi o ostatni problem, z długością tekstu. Tutaj też byś się musiał pobawić ze stylami CSS, żeby np. wpakować to co wyrzuca nam pętla for w trakcie odczytywania pliku w DIV'y, a potem poprzez CSS jakoś ładnie to ułożyć w całość.


Na koniec takie trzy rady.
a) Widzę, że raczej na pewno uczysz się PHP z jakiejś książki. To dobrze, ale pamiętaj o tym, że jak książka jest stara, to część przykładów też powinna być inaczej przedstawiona. Np. jak tu widać, autor użył funkcji ereg_replace, której już nie powinno się używać. Bądź wyczulony na takie rzeczy.
b )
  1. $imie=$_POST["imie"];
  2. $email=$_POST["email"];
  3. $www=$_POST["www"];
  4. $wpis=$_POST["wpis"];

Nie musisz tak koniecznie obsługiwać zmiennych formularza. Równie dobrze od razu możesz podawać dane poprzez POST bez wcześniejszego deklarowania zmiennych o tych samych nazwach. Kiedyś miałem podobny nawyk co Ty, było to spowodowane faktem, że autor pewnej książki, robił tak samo smile.gif Praktycznie to raczej nic nie dawało.
c)Kod jest o wiele bardziej czytelny, gdy zamiast układać klamry w ten sposób:
  1. if (strlen($wpis)>5) {
  2. $f=fopen($ksiega,"a");
  3. $rekord="`$imie`$email`$www`$wpis`";
  4. $rekord=ereg_replace(10," ",$rekord);
  5. $rekord=ereg_replace(13," ",$rekord);
  6. fputs($f,"$rekord\n"); fclose($f);
  7. }

Układamy tak:
  1. if (strlen($wpis)>5)
  2. {
  3. $f=fopen($ksiega,"a");
  4. $rekord="`$imie`$email`$www`$wpis`";
  5. $rekord=ereg_replace(10," ",$rekord);
  6. $rekord=ereg_replace(13," ",$rekord);
  7. fputs($f,"$rekord\n"); fclose($f);
  8. }


Jakie to ma znaczenie? Takie, gdy się przegląda kod, który jest bardziej skomplikowany to nie musimy zaznaczać klamer by zobaczyć, które ze sobą są połączone. Wszystko widać na pierwszy rzut oka. Zdecydowanie łatwiej jest się połapać w takim czymś:
  1. if (strlen($wpis)>5)
  2. {
  3. $f=fopen($ksiega,"a");
  4. $rekord="`$imie`$email`$www`$wpis`";
  5. $rekord=ereg_replace(10," ",$rekord);
  6. $rekord=ereg_replace(13," ",$rekord);
  7. fputs($f,"$rekord\n"); fclose($f);
  8. if()
  9. {
  10. switch()
  11. {
  12. }
  13. }
  14. }


Niż w tym:

  1. if (strlen($wpis)>5)
  2. {
  3. $f=fopen($ksiega,"a");
  4. $rekord="`$imie`$email`$www`$wpis`";
  5. $rekord=ereg_replace(10," ",$rekord);
  6. $rekord=ereg_replace(13," ",$rekord);
  7. fputs($f,"$rekord\n"); fclose($f);
  8. if(){
  9. switch(){
  10. }
  11. }
  12. }


Te ostatnie trzy punkty to takie moje drobne rady smile.gif

Ten post edytował BigPig 14.09.2013, 19:22:32
Go to the top of the page
+Quote Post
maniek30dg
post 14.09.2013, 20:00:26
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 14.09.2013

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


Super mi to wytłumaczyłeś, prawda jestem początkującym w php i bardzo mi zależy na takim prostym formularzu, chciałem Cię prosić o pomoc w poprawieniu i naprowadzeniu tego formularza na poprawną formę, a szczególnie na stylizacji w css, w html jest lepiej ale nie bardzo wiem jak ostylować wpis który pojawi się po wysłaniu go,
proszę o pomoc bardzo mi na tym zależy.
Kod poprawiłem ale i tak do końca nie wiem czy dobrze:

  1. <form action="index.php" method="post">
  2. <input name="imie" type="text" value="imie">
  3. <br><input name="email" type="text" value="e-mail">
  4. <br><input name="www" type="text" value="http://">
  5. <br><textarea name="wpis" rows="3" cols="30">wpis</textarea>
  6. <br><input type=submit value=" dodaj! ">
  7. </form>
  8.  
  9. <?
  10. $ksiega = "ksiega.txt";
  11.  
  12. $imie=$_POST["imie"];
  13. $email=$_POST["email"];
  14. $www=$_POST["www"];
  15. $wpis=$_POST["wpis"];
  16. $data = date("m.d.y")
  17.  
  18. if (strlen($wpis)>5)
  19. {
  20. $f=fopen($ksiega,"a");
  21. $rekord="`$imie`$email`$www`$wpis`";
  22. $rekord=preg_replace(10," ",$rekord);
  23. $rekord=preg_replace(13," ",$rekord);
  24. fputs($f,"$rekord\n"); fclose($f);
  25. if()
  26. {
  27. switch()
  28. {
  29. }
  30. }
  31. }
  32.  
  33. $wpisy=file($ksiega);
  34. $wpisy=array_reverse($wpisy);
  35. $ile=count($wpisy);
  36. for ($i=0;$i<$ile;$i++) {
  37. $wpis = explode("`",$wpisy[$i]);
  38. echo "<p>$wpis[1] - $wpis[2] - $wpis[3]<br>$wpis[4]<p> $data $kreska";
  39. }
  40. ?>
Go to the top of the page
+Quote Post
BigPig
post 14.09.2013, 21:49:48
Post #4





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 18.06.2013
Skąd: Białystok

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


Jednak ja głównie zajmuję się php, coś ogarniam w stylach, ale jednak nie mam teraz do tego głowy. Skupiłem się tylko na kodzie. Trochę było w nim bubli.

Po kolei:
  1. $ksiega = "ksiega.txt";
  2. $kreska = "__________________";
  3. $imie=$_POST["imie"];
  4. $email=$_POST["email"];
  5. $www=$_POST["www"];
  6. $wpis=$_POST["wpis"];
  7. $data = date("m.d.y");


Zapomniałeś zdefiniować zmiennej kreska, do której potem się odwołujesz.

  1. if (strlen($wpis)>5)
  2. {
  3. $f=fopen($ksiega,"a");
  4. $rekord="`$imie`$email`$www`$wpis`$data`";
  5. fputs($f,"$rekord\r\n"); fclose($f);
  6. }

1) Nie wiem po co korzystałeś z funkcji ereg_replace, pomijając fakt, że źle z niej korzystałeś.
Na stronie: http://www.php.net/manual/en/function.preg-replace.php
Jak zjedziesz w dół znajdziesz "Examples". Tam jest pokazane jak się powinno tej funkcji używać. Swoją drogą to w ogóle nie powinieneś jej używać smile.gif
2) Do zmiennej "rekord" powinieneś dodać zmienną "data". Chodzi o to, że funkcja 'date' generuje ówczesną datę(czas). Jeśli chcesz zapisać, kiedy ktoś dodał wpis, musisz do rekordu dodać czas(czyli naszą zmienną "data"), kiedy ten skrypt został wykonany. Jeśli zmienną "data" dasz na końcu kodu(tak jak zrobiłeś), to gdy odczytasz plik, pojawi się ówczesna data.
3) Nie muszę wspominać o tym, że jeden warunek strlen w if'ie to trochę mało. Możnaby sprawdzić pozostałe zmienne np. czy w ogóle istnieją, potem możemy sprawdzić czy użytkownik faktycznie wpisał to co chcieliśmy. Od pierwszego zagadnienia jest funkcja 'isset', a drugą sprawą zajmiesz się jak nabierzesz trochę wprawy.
4) Jak zauważyłeś w fputs'ie dodałem \r\n zamiast \n. W systemie windows by w pliku dać nową linię, musimy użyć \r\n. (domyslam się, że jedziesz na windowsie).
5) Jeśli chodzi o html to pamiętaj domykaniu np.
zamiast <p>teskt<p> powinno być <p>tekst</p>

Patrzyłem i wszystko tam mniej więcej działa. Ze stylami już nie pomogę.

Suma:

  1.  
  2. <form method="post">
  3. <input name="imie" type="text" value="imie"/>
  4. <br><input name="email" type="text" value="e-mail"/>
  5. <br><input name="www" type="text" value="http://"/>
  6. <br><textarea name="wpis" rows="3" cols="30">wpis</textarea>
  7. <br><input type="submit" value=" dodaj! " name="submit" id="submit"/>
  8. </form>
  9.  
  10. <?php
  11.  
  12.  
  13. $ksiega = "ksiega.txt";
  14. $kreska = "__________________";
  15. $imie=$_POST["imie"];
  16. $email=$_POST["email"];
  17. $www=$_POST["www"];
  18. $wpis=$_POST["wpis"];
  19. $data = date("m.d.y");
  20.  
  21.  
  22. if (strlen($wpis)>5)
  23. {
  24. $f=fopen($ksiega,"a");
  25. $rekord="`$imie`$email`$www`$wpis`$data`"; // wytlumacz czemu tu wpisujemy
  26. fputs($f,"$rekord\r\n"); fclose($f); // wspomnij o \r\n
  27. }
  28.  
  29.  
  30. $wpisy=file($ksiega);
  31. $wpisy=array_reverse($wpisy);;
  32.  
  33. $ile=count($wpisy);
  34.  
  35. for ($i=0;$i<$ile;$i++)
  36. {
  37. $wpis = explode("`",$wpisy[$i]);
  38. echo "<p>$wpis[1] - $wpis[5] - $wpis[2] - $wpis[3]<br>$wpis[4]</p> $kreska";
  39. }
  40.  
  41. ?>


Go to the top of the page
+Quote Post
maniek30dg
post 14.09.2013, 22:15:23
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 14.09.2013

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


dzięki wielkie, mogę prosić tylko jeszcze o pomoc w tym tekście żeby nie wychodził poza szerokość strony.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 09:40