Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przetwarzanie danych z formularza
Forum PHP.pl > Forum > Przedszkole
Gumiak
Mam do przetworzenia, celem wrzucenia do bazy danych statystyki z meczów koszykówki.

Wrzucać je będę formularzem. Dane będą miały następujący wygląd:

4 Tomasz Wilczewski 00:00 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0
5 Rafał Partyka 32:02 1/3 33% 4/8 50% 2/5 40% 0 1 1 1 3 2 2 0 16
6 Stanisław Prus 33:23 9/12 75% 0/1 0% 3/3 100% 1 3 4 5 2 2 1 1 21
8 Dariusz Puncewicz 19:43 2/8 25% 2/4 50% 2/4 50% 1 1 2 2 2 4 2 0 12
9 Paweł Mazurek 00:00 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0
10 Robert Klocek 00:00 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0
11 Piotr Dąbrowski 00:44 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0
12 Adam Lisewski 30:49 1/3 33% 0/0 - 3/4 75% 1 3 4 2 5 3 0 2 5
13 Tomasz Wojdyła 22:31 3/9 33% 0/1 0% 0/0 - 2 4 6 1 3 0 1 0 6
14 Marcin Malczyk 35:22 1/3 33% 1/3 33% 1/2 50% 4 2 6 2 5 0 2 0 6
15 Tomasz Andrzejewski 25:23 2/7 28% 0/1 0% 2/2 100% 1 2 3 1 2 1 0 0 6
20 Marcin Kowalewski 00:00 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0

i teraz problem, że nie wiem jak to porozdzielać, to po pierwsze, a po drugie są jeszcze różne warunki, że np. jeśli zawodnik nie wykonał rzutu to zamiast 0% jest -.

Jak to porozdzielać prawidłowo, żeby później można bez problemu dodać do bazy danych?
php programmer
można to wrzucić do pliku,
a potem ten plik otworzyć jako csv rodzielany spacjami

[MANUAL]
http://pl2.php.net/manual/pl/function.fgetcsv.php
Gumiak
tak tylko, że tych statystyk do wklejenia będzie dużo więcej, więc najlepsze, żeby php to sam rozdzialał i wstawiał później do bazy, w przeciwnym wypadku będzie babranie się z plikami jeszcze.
nospor
Dobrze by by było gdybys poszczególne elementy oddzielał np. średnikiem ;
Spacje masz np. w nazwiskach, ale w sumie i to nie problem jesli zawsze będzie nazwisko i imie.

1)wczytaj plik funkcją file(). Zwróci ci ona tablicę, której elementy to kolejne linijki z piku
2)Mając już tabele na każdeym jej elemencie (wierszu) użyj explode(';', $tabela[$i]), gdzie $i t kolejne indexy tabeli
3) w wyniku każdego explode otrzymasz tablicę której kazdy element to kolejne Twoje wartości
4) przetwarza se te wartosci z uwzglednieniem swoich warunków 0% = -
5) mając te dane budujesz i wykonujesz inserta do mysql

To taki pseudo kod. Na forum bylo wiele juz takich przykladów. MOżesz poszukać jesli to ci nie wystarcza
Gumiak
oodzielanie średnikiem nie jest za bardzo możliwe, bo chodzi, żeby danych nie trzeba było modyfikować, bo jesli będzie do wklejenia np. 15 meczów na raz czyli 30 druzyn, to będzie to zbyt czasochłonne.

Na razie mam coś takiego, ale nie za bardzo to mi działa. Z formularza wysyła wszystko ale $zawodnik drukuje, a nie rozdziela prawidłowo na poszczególne elementy.

  1. <?php
  2. $linia = explode("n", $_POST['dane']);
  3.  
  4. $ile=count($linia);
  5. $linia[$ile-1].='n';
  6. $i=0;
  7.  
  8.  
  9. foreach ($linia as $zawodnik) {
  10. echo "$zawodnik<br>";
  11. if (preg_match ("/(d).-.(.+) (.+) (.+):(.+) (d+)/(d+) (.+) (d+)/(d+) (.+) (d+)/(d+) (.+) (d+) (d+) (d+) (d+) (d+) (d+) (d+) (d+) (.+).+/i", $zawodnik, $out)) {
  12.     //print_r($out);
  13.     echo "Imie:".$out[2]."<br>";
  14.     echo "Nazwisko:".$out[3]."<br>";
  15.     echo "imie:".$out[2]."<br>";
  16.     if ( $out[5]!="00" && $out[4]=="00")
  17.         $out[4]="01";
  18.     echo "czas:".$out[4]."<br>";
  19.  
  20.     echo "c1:".$out[6]."<br>";
  21.         echo "o2:".$out[7]."<br>";
  22.         echo "c2:".$out[9]."<br>";
  23.         echo "o2:".$out[10]."<br>";
  24.         echo "c3:".$out[12]."<br>";
  25.         echo "o3:".$out[13]."<br>";
  26.         echo "za:".$out[15]."<br>";
  27.         echo "zo:".$out[16]."<br>";
  28.         echo "zs:".$out[17]."<br>";
  29.         echo "as:".$out[18]."<br>";
  30.         echo "f:".$out[19]."<br>";
  31.         echo "st:".$out[20]."<br>";
  32.         echo "pr:".$out[21]."<br>";
  33.         echo "bl".$out[22]."<br>";
  34.         echo "punkty:".$out[23]."<br>";
  35.  
  36.  }
  37. echo "<hr>";
  38. }
  39. ?>
dr_bonzo
A te statystyki nie moga byc w inny sposob przytgotowywane do wklejenia?
Skad je pobierasz? Arkusz kalkulacyjny? PLik textowy?
Gumiak
nie bardzo bo jest ich dużo i to byłoby najwygodniejsze rozwiązanie. wiem, ze niektore portale działają w ten sposob.

a są pobierane wprost ze strony www.
Pigula
a ja mam takie pytanie te wyniki sa jakos wysylane ze strony do ciebie czy masz je odczytac z kodu zrodlowego. jezeli to drugie wyjscuie to musisz poprosty wyrazeniami regularnymi powycinac w kodzie co cie interesuje troche bedziesz miec przy tym zabawy winksmiley.jpg kiedys byla o tym dyskujsa (a raczej podobny problem byl ale wtedy chodzilo tylko o jedna dana)
dr_bonzo
Te dane sa ze strony www?
A sa chociaz jakos strukturalnie poukladane tak zeby mozna ten fragment htmla potraktowac parserem XMLa i wyciagnac potrzebne dane?
krz2006
A ja mysle ze najlatwiej bedzie to zrobic przez uzycie funkcji explode.
Np cos takiego:
  1. <?php
  2.  
  3. $a = explode("n", $dane_do_podzialu);
  4. for($x=0;$x<count($a);$x++)
  5. {
  6. //Tu bedzie nastepny explode i reszta funkcji ktore tu chcesz miec
  7. $b = explode(" ", $a[$x]);
  8. $numer_zawodnika = $b[0];
  9. $imie_zawodnika = $b[1];
  10. //itd... pozniej to sobie albo wrzucasz do bazy danych.. albo gdzie chcesz..
  11. }
  12.  
  13. /* Pokazuje dane, zebys latwiej mogl zobaczyc o co mi chodzi tongue.gif 
  14. 4 Tomasz Wilczewski 00:00 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0 
  15. 5 Rafał Partyka 32:02 1/3 33% 4/8 50% 2/5 40% 0 1 1 1 3 2 2 0 16 
  16. 6 Stanisław Prus 33:23 9/12 75% 0/1 0% 3/3 100% 1 3 4 5 2 2 1 1 21 
  17. 8 Dariusz Puncewicz 19:43 2/8 25% 2/4 50% 2/4 50% 1 1 2 2 2 4 2 0 12 
  18. 9 Paweł Mazurek 00:00 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0 
  19. 10 Robert Klocek 00:00 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0 
  20. 11 Piotr Dąbrowski 00:44 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0 
  21. 12 Adam Lisewski 30:49 1/3 33% 0/0 - 3/4 75% 1 3 4 2 5 3 0 2 5 
  22. 13 Tomasz Wojdyła 22:31 3/9 33% 0/1 0% 0/0 - 2 4 6 1 3 0 1 0 6 
  23. 14 Marcin Malczyk 35:22 1/3 33% 1/3 33% 1/2 50% 4 2 6 2 5 0 2 0 6 
  24. 15 Tomasz Andrzejewski 25:23 2/7 28% 0/1 0% 2/2 100% 1 2 3 1 2 1 0 0 6
  25. 20 Marcin Kowalewski 00:00 0/0 - 0/0 - 0/0 - 0 0 0 0 0 0 0 0 0
  26. */
  27.  
  28. ?>


poprawiam
---
nospor


Powiedz dokladnie(ze szczegolami) jak to ma dzialac... co i skad ma pobierac.. to moze napisze ten skrypt dla Ciebie...

Pozdrawiam
Gumiak
Więc tak. Widziałem na jednym portalu, że robią to tak:


wchodzą na strone:
np. http://www.spojnia.com/spojnia_basket.htm

kopiują jedną drużynę (bez miesania w plikach smile.gif) wklejają to w pole formularza i php im wszystko robi i dzieli i dodaje do bazy danych.


Więc to po prostu dane będą z roznych stron kopiowane i wklejane do formularza.
krz2006
Dobra... Dalej nie napisales szczegolow.... wiec napisalem Ci prosty skrypcik jako przyklad jak to mozna zastosowac...

Jak skrypt sie komus nie podoba to niech nie patrzy... doslownie 3 min go pisalem... Jest bardzo prosty.. latwo w nim wprowadzac zmiany...

Prawdopodobnie chcesz te dane wrzucic do bazy... albo do jakiegos pliku(np: tabela12.htm) to poprostu dopiszesz sobie kawalek kodu, ktory to robi. Ja Ci tylko pokazalem przyklad jak to mozna zrobic. Wstawilem razem z HTMLem zebys mogl latwo podmienic go swoim... Skopiuj najzwyczajniej caly ponizszy fragment kodu do jakiegos pliczku *.php i bedzie dzialac.

  1. <?
  2.  
  3. if(IsSet($tekst)) start2($tekst);
  4. start();
  5.  
  6.  
  7. function start()
  8. {
  9.     global $PHP_SELF;
  10. ?>
  11. <body text="#FFFFFF" bgcolor="#000000">
  12.  
  13. <p align="center">&nbsp;</p>
  14. <p align="center">&nbsp;</p>
  15. <p align="center">Wpisz tabele:</p>
  16. <form method="POST" action="<? print($PHP_SELF); ?>">
  17.   <p align="center">
  18.   <textarea rows="14" name="tekst" cols="65" style="color: #FF8000; background-color: #000000"></textarea></p>
  19.   <p align="center"><input type="submit" value="Prześlij" name="B1"></p>
  20. </form>
  21. <p align="center">&nbsp;</p>
  22.  
  23. </body>
  24.  
  25. <?
  26. }
  27.  
  28.  
  29. function start2($dane_do_podzialu)
  30. {
  31. ?>
  32. <html>
  33. <head>
  34. <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
  35. <meta name="ProgId" content="FrontPage.Editor.Document">
  36. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  37. <title>Stworzone przez Piotra Krzyżanowskiego e-mail: moderator@interia.pl</title>
  38. <style>
  39. <!--
  40. .tableborder { background-color: #fff; border: 1px solid #595959 }
  41. td { font-family: Verdana, Tahoma, Arial, sans-serif; font-size: 11px; color: #3F3F3F }
  42. .row1 { color: #3F3F3F; background-color: #f3f2f0 }
  43. .postcolor { font-size: 12px; line-height: 160% }
  44. .programlisting { overflow: auto; overflow-y: hidden }
  45.  
  46. -->
  47. </style>
  48. </head>
  49.  
  50. <body text="#FFFFFF" bgcolor="#000000">
  51.  
  52. <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
  53. <tr>
  54. <?
  55. $a = explode("n", $dane_do_podzialu);
  56.     for($x=0;$x<count($a);$x++)
  57.     {
  58.         $b = explode(" ", $a[$x]);
  59.         for($z=0;$z<19;$z++)
  60.         {
  61.         echo '<td width="5%" align="center"><span class="postcolor"><font color="#ff8000">'.$b[$z].'</font></span></td>';
  62.         }
  63.     echo "</tr>";
  64.     }  
  65. echo "</table>";
  66. echo "</body>";
  67. echo "</html>";
  68.  
  69. }
  70.  
  71. ?>


Pozdrawiam
Gumiak
o.k. działa, tyle, że ja potrzebowałbym troszkę innego rozwiązania.

tutaj rozdziela tylko na podstawie spacji drukuje jak jest, a ja potrzebowałbym rozdzielić wszystko na poszczególne elementy np.: 1/3 zeby było 1 3

powiedzmy ze po przetworzeniu tym formularzem otrzymuje wartości

4 - Piotr Nizioł 30:53 1/3 33% 1/2 50% 4/4 100% 0 1 1 5 3 3 1 0

i teraz jak odwołać się do poszczególnej wartości (np. procentu rzutów wolnych czyli tutaj 100%)



P.s. przepraszam za bełkot, ale ciężko mi to wytłumaczyć smile.gif Jakby coś jestem na gg smile.gif -> 1142714
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.