Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Kilka pytań o prostą(?) baze danych
Forum PHP.pl > Forum > Przedszkole
broo
Witam

Jeżeli chodzi o php i mysql jestem zielony, to nie moja dziedzina, ale nie mam wyboru i muszę napisać bazę danych.

W bazie będą informacje o reklamacjach, które przychodzą do firmy, muszą się znaleźć takie dane jak:
- data przyjęcia zgłoszenia
- nazwa klienta
- model produktu
- opis usterki
- dane technika, który wykonał produkt
- materiał z którego produkt został wykonany
- decyzja - czy reklamacja została uwzględniona czy nie
- data wysyłki po rozpatrzeniu reklamacji
- liczba produktów wykonanych przez danego technika

Cała baza ma umożliwić ewidencjonowanie reklamacji na produkty firmy i wyszukiwanie rekordów spełniających określone kryteria, np:

wszystkie reklamacje zgłoszone w określonym miesiącu (lub w kilku miesiącach), dotyczące produktu o modelu XY123 z decyzją na Tak, wykonane przez okrślonego technika

Dodatkowo baza ma umożliwiać wyświetlenie informacji - ile dany technik wykonał w miesiącu produktów, oraz ile było reklamacji na te produkty.

Próbując stworzyć tą bazę przyjąłem takie założenie:
formularz do dodawania rekordów do bazy - formularz.php
strona do wyświetlania bazy - wyswietl.php
formularz który pozwala określić kryteria wyszukiwania - filtr.php

Dane dotyczące reklamacji trzymane są w tabeli reklamacje, natomiast dane dotyczące technika (imię, nazwisko, liczba wykonanych produktów) są w tabeli technicy.

Czy takie założenia są poprawne ?


mój plik wyswietl.php wygląda następująco:

  1. <?php
  2. $wh = array();
  3. if (!empty($_POST['poz']))
  4.    $wh[] = 'poziom = '.$_POST['poz'];
  5. if (!empty($_POST['mod']))
  6.    $wh[] = 'model = '.$_POST['mod'];
  7. if (!empty($wh))
  8.    $where = 'where '.implode(' and ', $wh);
  9.    else
  10.    $where = '';
  11.  
  12. require &#092;"./connect.php\";
  13.  
  14. $connection = @mysql_connect(&#092;"$host\", \"$username\", \"$password\")
  15. or die('Brak polaczenia z serwerem MySQL.
  16. Blad: '.mysql_error());
  17. echo &#092;"Polaczenie z serwerem nawiazane
  18. &#092;";
  19. $db = @mysql_select_db('broo', $connection)
  20. or die('Nie moge polaczyc sie z baza danych
  21. Blad: '.mysql_error());
  22. echo &#092;"Udalo sie polaczyc z baza danych\";
  23. echo $where;
  24.  
  25. $query = 'SELECT * FROM reklamacje '.$where;
  26.  
  27. echo $query;
  28. $result=mysql_query($query);
  29.  
  30. $num=mysql_numrows($result);
  31.  
  32.  
  33. echo &#092;"Struktura bazy danych
  34.  
  35. &#092;";
  36.  
  37. $i=0;
  38. while ($i < $num) {
  39.  
  40. $klient=mysql_result($result,$i,&#092;"nazwa_klienta\");
  41. $model=mysql_result($result,$i,&#092;"model\");
  42. $opis=mysql_result($result,$i,&#092;"opis\");
  43. $technik=mysql_result($result,$i,&#092;"technik\");
  44. $material=mysql_result($result,$i,&#092;"material\");
  45. $poziom=mysql_result($result,$i,&#092;"poziom\");
  46. $decyzja=mysql_result($result,$i,&#092;"decyzja\");
  47. $rozpatrujacy=mysql_result($result,$i,&#092;"rozpatrujacy\");
  48. $handlowiec=mysql_result($result,$i,&#092;"handlowiec\");
  49. $data_reklamacji=mysql_result($result,$i,&#092;"data_reklamacji\");
  50. $wysylka=mysql_result($result,$i,&#092;"wysylka\");
  51.  
  52. echo &#092;"Nazwa klienta: $klient
  53. Model wkładu: [b]$model[/b]
  54. Opis: [b]$opis[/b]
  55. Technik: [b]$technik[/b]
  56. Materi
  57. : [b]$material[/b]
  58. Poziom wkładu: [b]$poziom[/b]
  59. Decyzja: [b]$decyzja[/b]
  60. Rozpatrujący: [b]$rozpatrujacy[/b]
  61. Han
  62. dlowiec prowadzący: [b]$handlowiec[/b]
  63. Data reklamacji: [b]$data_reklamacji[/b]
  64. Data wysyłki: [b]$wysylka[/b]
  65.  
  66. &#092;";
  67.  
  68. $i++;
  69. }
  70.  
  71. echo &#092;"Wynik wyszukiwania zawiera $num rekordów\";
  72.  
  73. ?>


problem polega na tym że kiedy określę jakieś kryteria to nie wyświetlają się żadne rekordy, chociaż wpisy spełniające dane kryteria są w bazie


Z góry dziękuję za pomoc i wskazówki
Pozdrawiam
elmozaur
sprawdz czy $_POST['poz'] i $_POST['mod']; nie sa puste.
napisz co wyswietla echo $where;

jak to podasz to polecimy dalej bo gdzies chyba masz zly warunek albo pusta zmienna
broo
  1. <?php
  2. echo $_POST['poz'];
  3. ?>

wyświetla słowo pełny - czyli tak jak być powinno
  1. <?php
  2. echo $_POST['mod'];
  3. ?>

wyświetla słowo HP - czyli tak jak powinno

  1. <?php
  2. echo $where;
  3. ?>

wyświetla where poziom = pełny and model = hp

domyślam się że chodzi tu o to, że pełny i hp nie są w apostrofach
piotrooo89
Cytat(broo @ 26.02.2009, 12:13:04 ) *
domyślam się że chodzi tu o to, że pełny i hp nie są w apostrofach


a sprawdziłeś swoje przypuszczenia? bo chyba od tego powinieneś zacząć.
broo
jasne że sprawdziłem, nie mam tylko zielonego pojęcia jak zmodyfikować ten kod:
  1. <?php
  2. $wh = array();
  3. if (!empty($_POST['poz']))
  4.    $wh[] = 'poziom = '.$_POST['poz'];
  5. if (!empty($_POST['mod']))
  6.    $wh[] = 'model = '.$_POST['mod'];
  7. if (!empty($wh))
  8.    $where = 'where '.implode(' and ', $wh);
  9.    else
  10.    $where = '';
  11. ?>


aby dawał wynik w postaci: where poziom = 'pełny' and model = 'hp'
piotrooo89
  1. <?php
  2. if (!empty($_POST['poz']))
  3.   $wh[] = "poziom = '".$_POST['poz']."'";
  4. if (!empty($_POST['mod']))
  5.   $wh[] = "model = '".$_POST['mod']."'";
  6. ?>


spróbuj coś takiego.
broo
zadziałało, dzięki

czy mój tok rozumowania jest właściwy jeżeli chodzi o tą bazę ?
może ma ktoś jakieś wskazówki na co powinienem zwrócić uwagę lub jakie założenia przyjąć ?
piotrooo89
Cytat(broo @ 26.02.2009, 12:38:40 ) *
czy mój tok rozumowania jest właściwy jeżeli chodzi o tą bazę ?


okaże się w praniu, jak to będzie chodzić.

Cytat(broo @ 26.02.2009, 12:38:40 ) *
może ma ktoś jakieś wskazówki na co powinienem zwrócić uwagę lub jakie założenia przyjąć ?


poczytaj o filtracji danych i sql injection.

mysql_real_escape_string()
broo
żeby nie zakładać kolejnego wątku, kolejne pytanie (być może głupie), szukałem na google odpowiedzi ale nie znalazłem...

czy można dane z bazy wczytaćdo formularza ?

mam na myśli coś w tym stylu - zamiast za każdym razem kiedy chce dodać nowego technika wpisywać kod typu:

  1. Technik: <select name="technik"><option>technik 1</option><option>technik 2</option></select>


zrobić coś takiego:

  1. Technik: <select name="technik"><?php  ?></select>


gdzie w tagach <?php ?> umieszczam jakiś kod który wyciągnie mi dane techników z bazy ?
piotrooo89
Cytat(broo @ 26.02.2009, 13:45:21 ) *
czy można dane z bazy wczytaćdo formularza ?


da sie.

pseudo kod:

  1. <select>
  2. <?php
  3. $sql = SELECT * FROM tabele
  4.  
  5. while ($row)
  6. {
  7. echo <option value='$row'>$row</option
  8. }
  9. ?>
  10. </select>


to jest pseudo kod zakodujesz sobie poprawnie na podstawie tego.
broo
ok działa, dzięki

ale teraz mam kolejny problem

jeżeli dane pobierane do formularza do pola <select><option>... są dwu wyrazowe, to po przesłaniu ich dalej wysyłany jest tylko jeden wyraz
nie ma takiego problemu jeżeli dane w <select><option> sa wpisane ręcznie w kodzie formularza

jak zrobić aby skrypt przesyłał wszystkie wyrazy ?

dane do formularza pobieram w taki sposób:

  1. <select name="model1"><option></option><?php
  2. require "./connect.php";
  3. $connection = @mysql_connect("$host", "$username", "$password")
  4. or die('Brak polaczenia z serwerem MySQL.<br />Blad: '.mysql_error());
  5. echo "Polaczenie z serwerem nawiazane<br />";
  6. $db = @mysql_select_db('broo', $connection)
  7. or die('Nie moge polaczyc sie z baza danych<br />Blad: '.mysql_error());
  8. echo "Udalo sie polaczyc z baza danych";
  9.  
  10. $result = mysql_query('SELECT model FROM modele ORDER BY model');
  11.  
  12. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  13. echo '<option value='.$row['model'].'>'.$row['model'].'</option>'; }
  14.  
  15. ?>


już rozwiązałem problem, zamiast:

  1. <?php
  2. echo '<option value='.$row['model'].'>'.$row['model'].'</option>'; }
  3. ?>


powinno być:

  1. <?php
  2. echo '<option>'.$row['model'].'</option>'; }
  3. ?>
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.