Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Prywmitywny kod?
Forum PHP.pl > Forum > Przedszkole
MateuszS
Witam, mam takie teoretyczne pytanie. Otóż mam już w nawyku pisanie rzeczy, dajmy na to skryptu wysyłania wiad. pomiędzy graczami w jakiejś grze internetowej jedynie przy pomocy zapytań do bazy, funkcji isset, empty, $_GETów i $_POSTów przez co wg mnie kod wygląda nieco prymitywnie. Żeby nie być gołosłowny przytoczę kod.

  1. <?php
  2. $odbiorca = $_POST['odbiorca'];
  3. $tekst = $_POST['tresc'];
  4. $tresc = strip_tags($tekst);
  5. $temat = $_POST['temat'];
  6.  
  7. $zapytanie = mysql_query("SELECT * FROM `gracze`") or die(mysql_error());
  8. $wynik = mysql_fetch_assoc($zapytanie) or die(mysql_error());
  9.  
  10. $czred = '<br /><center><font color="red">';
  11. $czredoff = '</center></font>';
  12. $czgreen = '<br /><center><font color="green">';
  13. $czgreenoff = '</center></font>';
  14. $przeczytana = 0;
  15. $data = date("m.d.y, H:m");
  16.  
  17. $zapytanie_3 = mysql_query("SELECT `id` FROM `gracze` WHERE `nick`='".$gracz['nick']."'") or die(mysql_error());
  18. $wynik_3 = mysql_fetch_assoc($zapytanie_3); // wyciaganie id gracza po nicku
  19.  
  20. if($odbiorca == $wynik['nick'] or $odbiorca != $wynik['nick'])
  21. {
  22.    $odbiorca_1 = strtolower($odbiorca);
  23.    $odbiorca_2 = ucfirst($odbiorca_1);
  24. }    
  25.  
  26.                        
  27. $zapytanie_7 = mysql_query("UPDATE `poczta` SET `czytana`='1' WHERE `odbiorca`='".$wynik_3['id']."'") or die(mysql_error());
  28.    
  29. if($_GET['opcja'] == 'wysylanie')
  30. {
  31. if(isset($_POST['wiadomosc']))
  32. {
  33.    if(!empty($temat) and !empty($odbiorca) and !empty($tresc))
  34.    {
  35.        if(isset($odbiorca_2))
  36.        {
  37.            $querek = mysql_query("SELECT * FROM `gracze` WHERE `id`='".$wynik_3['id']."'") or die(mysql_error());
  38.            $wyniczek = mysql_fetch_assoc($querek);
  39.            if($wyniczek['ban_pisanie'] == 1)
  40.            {
  41.                echo $czred . '<meta http-equiv="REFRESH" content="3;URL=gra.php?id=11" />Nie możesz wysłać wiadomości (ban na pisanie).'.$czredoff;
  42.            
  43.            }
  44.            if($odbiorca_2 == $gracz['nick'])
  45.            {
  46.                echo $czred . '<meta http-equiv="REFRESH" content="3;URL=gra.php?id=11" />Nie możesz wysłać wiadomości do siebie samego'.$czredoff;
  47.            }
  48.            elseif($odbiorca_2 != $gracz['nick'] AND $wyniczek['ban_pisanie'] == 0)
  49.            {
  50.            $zapytanie_4 = mysql_query("SELECT `id` FROM `gracze` WHERE `nick`='".$odbiorca_2."'") or die(mysql_error());
  51.            $wynik_4 = mysql_fetch_assoc($zapytanie_4); // wyciaganie id odbiorcy po id
  52.            $zapytanie_2 = mysql_query("INSERT INTO `poczta` (nadawca,odbiorca,dataczas,temat,tekst,czytana)
  53.                                        VALUES ('".$wynik_3['id']."','".$wynik_4['id']."','".$data."','".$temat."','".$tresc."','".$przeczytana."')")
  54.                                        or die(mysql_error());
  55.            $_SESSION['odpisz_nick'] = ' ';                            
  56.            echo '<meta http-equiv="REFRESH" content="3;URL=gra.php?id=11" />
  57.                  '.$czgreen.'Wiadomość została wysłana'.$czgreenoff;                            
  58.            }    
  59.            elseif(!isset($wynik_4['id']))
  60.            {
  61.                echo $czred .'<meta http-equiv="REFRESH" content="3;URL=gra.php?id=11" />Nie ma takiego gracza.' .$czredoff;
  62.            }
  63.        }
  64.    }    
  65.    else
  66.    {
  67.        echo $czred . '<meta http-equiv="REFRESH" content="3;URL=gra.php?id=11" />Pozostawiłeœś puste pola.' . $czredoff;
  68.    }    
  69. }
  70. }
  71. ?>


Jest to kawałek wysyłania wiadomości, ot tak napisany przeze mnie. I tu moje pytanie. Czy dało by się ten kod jakoś przerobić aby robił to samo jednak był bezpieczniejszy, bardziej zaawansowany? Co o tym myślicie? Bo wg mnie opieranie wszystkiego o te kilka funkcji i 'echa' to zły pomysł.
Spawnm
zrób sobie jakieś szablony,
// echo $czred . '<meta http-equiv="REFRESH" content="3;URL=gra.php?id=11" />Pozostawiłeœś puste pola.' . $czredoff;
mete to dawaj w head a treść w body.
MateuszS
Ale ta meta przzekierowuje do adresu. Bedzie dzialac jak dam do heada? Bo ona wystepuje jak widac z konkretnym warunkiem.
Spawnm
prędzej w <head> niż w <body> ...
I jak pisałem jakiś szablon , aby te echa nie były porozwalane po całym pliku.
peter13135
no jak ci tak zalezy żeby było to pisane bardziej profesjonalnie, to może zainteresuj sie programowaniem obiektowym

i jak ktoś powiedział -> zrób to na jakimś systemie szablonów, nie wygląda to zbyt profesjonalnie gdy mieszasz php z html , oraz (tak mi sie przynajmniej wydaje) moim zdaniem najpierw powinno sie pobrać wszystko z bazy, następnie zrobić wszystkie obliczenia, przypisywanie do zmiennych czy co tam skrypt robi, i dopiero potem pokolei wyświetlać dane (przy okazji niema problemu z wysłanym nagłowkiem)
MateuszS
Teraz robie osobny plik na zapytania zeby mi sie tam nie mylily itd. Dzieki za opinie, czekam na kolejne sugestie
erix
A co do sprawdzania formularzy możesz zrobić przez np. wyjątki. Zaimplementowanie stosu błędów będzie nieco trudniejsze, ale podnosi czytelność. ;]

  1. <?php
  2. try{
  3.    
  4.    if(POLEPUSTE){
  5.        throw new Exception('pustepole1, popraw');
  6.    }
  7.    
  8.    if(POLEPUSTE){
  9.        throw new Exception('pustepole2, popraw');
  10.    }
  11.    
  12.    wyslij();
  13.    
  14. }catch(Exception $ex){
  15.    die($ex->getMessage());
  16. }
  17. ?>
MateuszS
Erix, dzieki ale to jeszcze nie moj poziom ^^ wszystko przede mną ;D
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.