Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Pomoc przy optymalizacji 1 kodu PHP
Forum PHP.pl > Forum > Przedszkole
poramancza
Witam serdecznie,

Na wstępie chciałbym prosić o wyrozumiałość oraz "nieszydzenie" z mojego kodu biggrin.gif jako, że jest to pierwszy kod który napisałem w PHP. Po kilku kursach video i przeczytanych poradnikach, postawiłem sobie za zadanie, stworzyć prosty formularz w który użytkownik wpisze dane przepisu kulinarnego a ten zapisze go w bazie danych. Dane mają być również sprawdzane (minimum 1 znak,A-Za-z0-9), jeżeli przejdą walidacje, system ma dodać je do bazy ale jeżeli któryś z nich się nie zgadza ma wyświetlić się odpowiednia wiadomość informująca użytkownika co wpisał źle.

Wszystko działa poprawnie ale mam wrażenie że można tu dużo zmienić, więc proszę doświadczonych programistów o jakieś wskazówki dla początkującego smile.gif. Nie proszę o gotowe rozwiązanie tylko o nakierowanie mnie na odpowiedni trop.

Dodam jeszcze że mój cel nie do końca został zrealizowany, ponieważ chciałem aby wiadomość wyświetlała się użytkownikowi np. 'Tytuł powinien zawierać minimum 1 znak będący...' ale nie kasowała wcześniej wpisanej zawartości w formularzu. Niestety moja nieudolna metoda wykonania tego kodu odświeża stronę po komunikacie i kasuje wszystko.

To mój plik klasa.php

  1. <?php
  2. class wpis {
  3.  
  4. var $connect;
  5.  
  6.  
  7. function __construct($dbuser,$dbpass,$dbhost,$dbname){
  8.  
  9. $this->connect = mysql_connect($dbhost,$dbuser,$dbpass) or die('Połączenie z MySQL nieudane!!!');
  10. mysql_select_db($dbname,$this->connect) or die('Wybrana baza danych nie istnieje!!!');
  11.  
  12. }
  13.  
  14. function dodaj($title,$kraj,$czas,$vege,$ingrid,$opis) {
  15.  
  16. //zmienna status okresla czy walidacja pola zakonczyla sie pozytywnie (1) czy bledna (0)
  17. $status_t = 0;
  18. $status_k = 0;
  19. $status_i = 0;
  20. $status_o = 0;
  21.  
  22.  
  23.  
  24. //Sprawdza wymagane wartości w polach tekstowych
  25.  
  26.  
  27. if(preg_match('/^[a-zA-Z0-9 ]{1,40}$/',$title)){
  28.  
  29. $status_t = 1;
  30.  
  31. }
  32. else{
  33.  
  34. echo('<script type="text/javascript">
  35. window.alert ("Tytuł powinien zawierać minimalnie jedną literę bądź cyfrę, bez znaków specjalnych");
  36. </script>');
  37. }
  38.  
  39.  
  40.  
  41. if(preg_match('/^[a-zA-Z0-9 ]{1,40}$/',$kraj)){
  42.  
  43. $status_k = 1;
  44.  
  45.  
  46. }
  47. else{
  48.  
  49. echo('<script type="text/javascript">
  50. window.alert ("Kraj powinien zawierać minimalnie jedną literę bądź cyfrę, bez znaków specjalnych");
  51. </script>');
  52. }
  53.  
  54.  
  55.  
  56.  
  57. if(preg_match('/^[a-zA-Z0-9 ]{1,200}$/',$ingrid)){
  58.  
  59. $status_i = 1;
  60.  
  61.  
  62. }
  63. else{
  64.  
  65. echo('<script type="text/javascript">
  66. window.alert ("Składniki powinny zawierać minimalnie jedną literę bądź cyfrę, bez znaków specjalnych");
  67. </script>');
  68. }
  69.  
  70.  
  71.  
  72. if(preg_match('/^[a-zA-Z0-9 ]{1,1000}$/',$opis)){
  73.  
  74. $status_o = 1;
  75.  
  76.  
  77. }
  78. else{
  79.  
  80. echo('<script type="text/javascript">
  81. window.alert ("Opis powinien zawierać minimalnie jedną literę bądź cyfrę, bez znaków specjalnych");
  82. </script>');
  83. }
  84.  
  85.  
  86.  
  87.  
  88.  
  89. //Sprawdza czy wszystkie warunki zostały spełnione ($status), jezeli tak realizuje dodawanie pliku do bazy.
  90.  
  91. if($status_t == 1 & $status_k == 1 & $status_i ==1 & $status_o == 1) {
  92.  
  93.  
  94.  
  95. mysql_query('insert into wpisy values(null,\''.mysql_real_escape_string($title,$this->connect).'\',
  96. \''.mysql_real_escape_string($kraj,$this->connect).'\',\''.mysql_real_escape_string($czas,$this->connect).'\'
  97. ,\''.mysql_real_escape_string($vege,$this->connect).'\',\''.mysql_real_escape_string($ingrid,$this->connect).'\'
  98. ,\''.mysql_real_escape_string($opis,$this->connect).'\');');
  99.  
  100.  
  101. //Wyświetla informacje o dodaniu wpisu
  102.  
  103. echo('<b>Wpis: '.'\''.$title.'\' '.'został dodany pomyślnie!!!<br /><br />');
  104.  
  105.  
  106. }
  107. }
  108. }
  109.  
  110.  
  111. ?>


To część kodu do mojego index.php:

  1. <?php
  2.  
  3.  
  4. require_once('./klasa.php');
  5.  
  6.  
  7. $wpis = new wpis('phpkurs','kursik','localhost','WPISY');
  8.  
  9.  
  10. if (isset($_POST['dodaj'])){
  11. $title = $_POST['title'];
  12. $kraj = $_POST['kraj'];
  13. $czas = $_POST['czas'];
  14. $ingrid = $_POST['ingrid'];
  15. $opis = $_POST['opis'];
  16. $vege = $_POST['vege'];
  17.  
  18. $wpis -> dodaj(''.$title.'',''.$kraj.'',''.$czas.'',''.$vege.'',''.$ingrid.'',''.$opis.'');
  19.  
  20. }
  21.  
  22.  
  23. ?>
com
No to tak bez przeładowywania zainteresuj się technologią AJAX wink.gif

Skoro dopiero się uczysz to od razu przerzuć się na mysqli albo PDO bo lada moment mysql_* zniknie z php raz na zawsze...

co do statusu to jak już tak bardzo chcesz to zrób sobie z tego jeden array :
  1. $status = array('t'=>0,'k'=>0,'i'=>0,'o'=>0);


zmiana statusu to np:
  1. $status['i'] = 1;

i wtedy zamiast:
  1. if($status_t == 1 & $status_k == 1 & $status_i ==1 & $status_o == 1) {
  2. #whatever
  3. }

mam po prostu:
  1. if (!in_array(0, $status, true)) {
  2. #whatever
  3. }


Ponadto napisałbym funkcje dla preg_match skoro tylko zmieniasz zakres znaków i content smile.gif

  1. $wpis -> dodaj(''.$title.'',''.$kraj.'',''.$czas.'',''.$vege.'',''.$ingrid.'',''.$opis.'');

why?
  1. $wpis -> dodaj($title,$kraj,$czas,$vege,$ingrid,$opis);

wink.gif
phpion
Cytat(poramancza @ 30.10.2013, 00:56:43 ) *
Wszystko działa poprawnie

Ten fragment wygląda podejrzanie:
  1. if($status_t == 1 & $status_k == 1 & $status_i ==1 & $status_o == 1) {

Nie powienieneś zastosować tutaj && zamiast &? Nawet jeśli w tym przypadku Ci to działa to (sądząc po komentarzu) raczej chodziło Ci o &&.
Turson
Obiektówki można dołączyć więcej. Jedna metoda walidacji z parametrami jaki wzór w preg_replace ma sprawdzić i zmienną do sprawdzenia. Potem tylko $wpis->walidacja($pattern,$zmienna). Zwracasz true, jeśli jest ok i działasz dalej smile.gif
poramancza
Dzięki wielkie za pomoc wink.gif wszystkie rady bardzo pomocne i napewno skorzystam.

A co do && to faktycznie pomyliłem się, ale jakimś cudem działa tak jak jest biggrin.gif

No i szczególnie dziękuje za podpowiedź z użyciem opcji array. Uporządkowało mi to sporą część kodu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.