Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]wprowadzanie danych inserty
Forum PHP.pl > Forum > Przedszkole
pikasso
hej otóż mam taki problemik mam już zrobioną bazę danych wszystkie wartości są ładnie wyświetlane z kilku tabel no ale teraz chciałbym również móc dodać dane poprzez jeden formularz do kilku tabel. Jak to można zrobic. Wczesniej z funkcją join sie nie bawiłem wiec proszę o wyrozumiałość jestem poczatkujący smile.gif
nowotny
Robisz osobne zapytania do każdej z tabel i tyle... JOIN nie ma tu nic do rzeczy...
kavka
join i jego "odmiany" (natural join, left outer join, itd.) służą do łączenia tabel w celu wyciągnięcia z nich potrzebnych danych lub odpowiedniego wyselekcjonowania. Przy wpisywaniu danych do tabel lub ich uaktualnianiu tworzy się oddzielne zapytania dla każdej tabeli. Join może się tu przydać w przypadku uaktualniania danych ale tylko w podzapytaniu służącym do wyselekcjonowania odpowiedniego wiersza/wierszy. Nie wkłada się danych do kilku tabel na raz.
pikasso
Ok zrobiłem najpierw insert do jednej tabeli ale nic mi nie dodaje po prostu wyskakuje cały czas że nie zostały wypelnione wszystkie pola nie wiem o co chodzi...

  1. <form action="nowyklient.php" method="post">
  2. <table width="373" border="0">
  3. <tr>
  4. <td width="164" bgcolor="#9EB4FC">Imie</td>
  5. <td width="199" bgcolor="#FFFFFF"><span class="style5 style1">
  6. <input name="Imie" type="text" size="27" />
  7. </label>
  8. </span></td>
  9. </tr>
  10. <tr>
  11. <td bgcolor="#9EB4FC">Nazwisko</td>
  12. <td bgcolor="#FFFFFF"><span class="style5 style1">
  13. <input name="Nazwisko" type="text" id="Nazwisko" size="27" />
  14. </label>
  15. </span></td>
  16. </tr>
  17. <tr>
  18. <td bgcolor="#9EB4FC">Firma / Osoba Prywatna</td>
  19. <td bgcolor="#FFFFFF"><span class="style5 style1">
  20. <select name="Firma" id="Firma">
  21. <option>Tak</option>
  22. <option>Nie</option>
  23. </select>
  24. </label>
  25. </span></td>
  26. </tr>
  27. <tr>
  28. <tr>
  29. <td bgcolor="#9EB4FC">Ulica</td>
  30. <td bgcolor="#FFFFFF"><span class="style5 style1">
  31. <input name="Ulica" type="text" id="Ulica" size="27" />
  32. </label>
  33. </span></td>
  34. </tr>
  35. <tr>
  36. <tr>
  37. <td bgcolor="#9EB4FC">Kod pocztowy</td>
  38. <td bgcolor="#FFFFFF"><span class="style5 style1">
  39. <input name="Kod_poczt" type="text" id="Kod_poczt" size="27" />
  40. </label>
  41. </span></td>
  42. </tr>
  43. <td colspan="2"><span class="style5"></span><span class="style5">
  44. </span><span class="style5"><label> <br />
  45. <input name="Submit" type="submit" class="style2" value="Dodaj kontakt do do bazy danych książki" />
  46. </center>
  47. </label><span class="style5"></span><span class="style5">
  48. </span></td>
  49. </tr>
  50. <p></p>
  51. </form>


  1. <?
  2. if (!$Imie || !$Nazwisko || !$Firma ||!$Ulica || $Kod_poczt)
  3.  
  4.  {  
  5.  
  6. print '<p align="center" style="font-size:12px">Nie zostaly wypelnione wszystkie pola!</p>';
  7.  
  8. print '<p align="center" style="font-size:10px","bottom:">Copyright C by Rafal Krasniej 2008</p>';
  9.  }
  10.  
  11. $Imie = addslashes($Imie);
  12. $Nazwisko = addslashes($Nazwisko);
  13. $Firma = addslashes($Firma);
  14. $Ulica = addslashes($Ulica);
  15. $Kod_poczt = addslashes($Kod_poczt);
  16.  
  17. @$db = mysql_pconnect("localhost", "root", "123456z", "ksiazka");
  18. if (!$db)
  19. {
  20.  
  21. print '<p align="center" style="font-size:12px">Nie mozna nawiazac polaczenia z Baza danych!</p>';
  22. print '<p align="center" style="font-size:10px","bottom:">Copyright C by Rafal Krasniej 2008</p>';
  23. exit;
  24. }
  25.  
  26.  
  27. $query = "insert into klient values ('".idKlient."', '".Telefon_idTelefon."', '".Miasto_idMiasto."', '".$Imie."', '".$Nazwisko."', '".Ulica."', '".Kod_poczt."', '".$Firma."')";
  28. $result = mysql_query($query);
  29.  
  30.  
  31. ?>
chemik1982
  1. <?php
  2. if (isset($_POST['Imie'])){
  3.  
  4. }
  5. ?>


Reszta do sprawdzenia w analogiczny sposob, chyba ze wlaczysz sobie na serwerze opcje register_globals (NIE ZALECANE, NIE STOSOWAC exclamation.gif!), to bedziesz mogl korzystac ze swojego kodu.
pikasso
ok troszkę zmieniłem i pomogło smile.gif
ale teraz kolejne pytanie
  1. <?php
  2. $sql="INSERT INTO klient (idKlient, Telefon_idTelefon, Miasto_idMiasto, Imie, Nazwisko, Ulica, Firma,
     Kod_poczt)
  3. VALUES
  4. (NULL , 'Telefon_idTelefon=idKlient', '3','$_POST[Imie]','$_POST[Nazwisko]','$_POST[Ulica]','$_POST[Firma]','$_POST[Kod_poczt]')";
  5. ?>

jak zrpbić aby Telefon_idTelefon=idKlient bo w tym wypadku idklient jest poprawne ale zeby Telefon_idTelefon było równe tamtej wartości smile.gif jak sie uporam z tym to przejde do kolejnej zagadki której też nie potrafie rozwikłać
nowotny
A jakim celu chcesz mieć 2 pola o takiej samej zawartości...?
pikasso
już odpowiadam smile.gif bo gdy wyświetlam klienta to jego id jest zawsze takie same jak id telefonu no może źle robię no ale nie wiem jak inaczej smile.gif

przykladowo w mysql mam takie inserty
  1. INSERT INTO `ksiazka`.`telefon` (`idTelefon` ,`Nr_tel` ,`Widocznosc`) VALUES (NULL , '5345675', 'Tak');
  2. INSERT INTO `ksiazka`.`klient` (`idKlient` ,`Telefon_idTelefon` ,`Miasto_idMiasto` ,`Imie` ,`Nazwisko` ,`Ulica` ,
  3. `Kod_poczt` ,`Firma`) VALUES (NULL , '31', '4', 'Aneta', 'Łastówka', 'Piłsudskiego 12 ', '50-050', 'Nie');
  4. INSERT INTO `ksiazka`.`telefon` (`idTelefon` ,`Nr_tel` ,`Widocznosc`) VALUES (NULL , '5347765', 'Tak');
  5. INSERT INTO `ksiazka`.`klient` (`idKlient` ,`Telefon_idTelefon` ,`Miasto_idMiasto` ,`Imie` ,`Nazwisko` ,`Ulica` ,
  6. `Kod_poczt` ,`Firma`) VALUES (NULL , '32', '4', 'Monika', 'Komar', 'Rynek 28', '50-065', 'Nie');

i teraz mam taki problem bo w bazie mam już jakieś tam miejscowości i są im przypisane jakieś id i teraz nie wiem co zrobić żeby po wpisaniu dla klienta np Warszawa nie powtarzało się to w miejscowościach i będe mial dwie warszawy o rożnych ID tylko przypisało jej poprzednie Id no chyba że źle rozumuje smile.gif
webasek
Z tego co widzę to trochę bazę danych zawaliłeś. Przecież może być kilka telefonów do jednego klienta? Więc na Twoim miejscu zmienił bym tabelę telefony bo pewnie taką masz skoro korzystasz z id_telefon? I poczytał trochę o postaciach normalnych bazy danych. To pierwsza uwaga. Druga jest taka: najpierw wrzucił bym do tabeli pustego klienta lub tez wpisał wszystkie dane bez wrzucania id telefonu. Potem zrobił bym update do tabeli klienta gdzie id klienta jest to id ostatnio dodanego klienta. Trzecia uwaga jeśli kli_ID jest autoincrement to nie dawaj mu nulla po prostu pomiń pole. Co do normalizacji bazy danych możesz poczytać tu: http://pl.wikipedia.org/wiki/Normalizacja_bazy_danych
nowotny
Dalej nie rozumiem no ale dobra...

no to nie możesz przy wyświetlaniu użyć jednej zmiennej dwa razy...? to co ty chcesz zrobić jest wbrew normalizacji...
pikasso
Nie wiem czy moja baza aż tak źle wygląda oto kod
  1. CREATE DATABASE `Ksiazka` ;
  2. USE ksiazka;
  3. CREATE TABLE Telefon (
  4. idTelefon INT UNSIGNED NOT NULL AUTO_INCREMENT,
  5. Nr_tel VARCHAR(7) NOT NULL,
  6. Widocznosc ENUM('Tak', 'Nie') NOT NULL DEFAULT 'Tak',
  7. PRIMARY KEY(idTelefon)
  8. );
  9.  
  10. CREATE TABLE TelAlarmowe (
  11. idTelAlarmowe INT NOT NULL AUTO_INCREMENT,
  12. NumerTel VARCHAR(3) NOT NULL,
  13. Nazwa VARCHAR(80) NULL,
  14. PRIMARY KEY(idTelAlarmowe)
  15. );
  16.  
  17. CREATE TABLE Wojewodztwo (
  18. idWojewodztwo INT UNSIGNED NOT NULL AUTO_INCREMENT,
  19. Nazwa VARCHAR(20) NOT NULL,
  20. PRIMARY KEY(idWojewodztwo)
  21. )
  22. MAX_ROWS = 16;
  23.  
  24. CREATE TABLE Miasto (
  25. idMiasto INT UNSIGNED NOT NULL AUTO_INCREMENT,
  26. Wojewodztwo_idWojewodztwo INT UNSIGNED NOT NULL,
  27. Nazwa VARCHAR(20) NOT NULL,
  28. Kierunkowy VARCHAR(2) NOT NULL,
  29. PRIMARY KEY(idMiasto),
  30. INDEX Miasto_FK(Wojewodztwo_idWojewodztwo),
  31. FOREIGN KEY(Wojewodztwo_idWojewodztwo)
  32. REFERENCES Wojewodztwo(idWojewodztwo) ON DELETE CASCADE ON UPDATE RESTRICT
  33. );
  34.  
  35. CREATE TABLE Firma (
  36. idFirma INT UNSIGNED NOT NULL AUTO_INCREMENT,
  37. F_idMiasto INT UNSIGNED NOT NULL,
  38. F_idTelefon INT UNSIGNED NOT NULL,
  39. Nazwa VARCHAR(100) NULL,
  40. Logo VARCHAR(100) NULL,
  41. Kod_poczt_firm VARCHAR(6) NULL,
  42. Ulica_firm VARCHAR(30) NULL,
  43. Branza VARCHAR(40) NULL,
  44. PRIMARY KEY(idFirma),
  45. INDEX TelFirma_FK(F_idTelefon),
  46. INDEX MiastoFirma_FK(F_idMiasto),
  47. FOREIGN KEY(F_idTelefon)
  48. REFERENCES Telefon(idTelefon) ON DELETE RESTRICT ON UPDATE CASCADE,
  49. FOREIGN KEY(F_idMiasto)
  50. REFERENCES Miasto(idMiasto) ON DELETE CASCADE ON UPDATE RESTRICT
  51. );
  52.  
  53. CREATE TABLE Klient (
  54. idKlient INT UNSIGNED NOT NULL AUTO_INCREMENT,
  55. Telefon_idTelefon INT UNSIGNED NOT NULL,
  56. Miasto_idMiasto INT UNSIGNED NOT NULL,
  57. Imie VARCHAR(20) NOT NULL,
  58. Nazwisko VARCHAR(25) NOT NULL,
  59. Ulica VARCHAR(30) NOT NULL,
  60. Kod_poczt VARCHAR(6) NOT NULL,
  61. Firma ENUM('Tak', 'Nie') NOT NULL DEFAULT 'TAK',
  62. PRIMARY KEY(idKlient),
  63. INDEX MIAS_FK(Miasto_idMiasto),
  64. INDEX TEL_FK(Telefon_idTelefon),
  65. FOREIGN KEY(Miasto_idMiasto)
  66. REFERENCES Miasto(idMiasto) ON DELETE CASCADE ON UPDATE RESTRICT,
  67. FOREIGN KEY(Telefon_idTelefon)
  68. REFERENCES Telefon(idTelefon) ON DELETE CASCADE ON UPDATE RESTRICT
  69. );
webasek
To pole z tabeli klient wywal:

Telefon_idTelefon INT UNSIGNED NOT NULL,

stwórz nową tabele nie wiem np TelefonyPrzypisane gdzie będzie

TP_IDTelefon oraz TP_IDKlientFirma

kluczem głównym będą oba te pola. I wtedy będzie łatwiej z telefonami. I jak dodajesz klienta to do tabeli klient i potem uzupełniasz telefony a przy wyświetlaniu już tylko left join o gotowe
pikasso
A mógłbyś mi to rozpisać dokładniej bo nie wiem czy usuwać tez z tej tabeli
  1. INDEX TEL_FK(Telefon_idTelefon),
  2. FOREIGN KEY(Telefon_idTelefon)
  3. REFERENCES Telefon(idTelefon) ON DELETE CASCADE ON UPDATE RESTRICT


no i czy tabelę firma zmodyfikować tak samo i dodać do tej nowo utworzonej tabeli questionmark.gif
webasek
Tak usuwać indeksy i referencje (niepotrzebne są). Tabela firma tak samo modyfikowana czyli też usuwanie wszystkiego co się tyczy id_telefon.
pikasso
czy z tabeli miasto też mam usunąć numer kierunkowy questionmark.gif
f1xer
W tabeli telefon dałbym idKlienta wtedy jeden klient może zapisać kilka numerów telefonu, w tabeli miasto dałbym KodPocztowy co do kierunkowego to bym usunął i dał możliwość klientowi dodania tego podczas wpisywania numeru i tak każdy jak wpisuje numer to podaje kierunkowy (moim zdaniem) i jeżeli chodzi o tabele firmy to dodałbym tabele branże wtedy i w tabeli firmy zamiast branża dał id_branzy ( z tabeli branze) generalnie jeżeli to ma być jakiś poważny projekt to cała baza jest do zmiany przy okazji warto zapoznać się z kilkoma aspektami budowy baz danych (atomowość danych itp.) odsyłam do google, jeżeli chcesz robić coś amatorsko to od biedy może być ale możesz nauczyć się złych nawyków
pikasso
czy poważny projekt hmmm to jest do pracy inżynierskiej a ja z tym nie miałem styczności bo siedzę w grafice 3d. a temat pracy to porównanie php i mysql z asp .net i mssql server na podstawie książki telefonicznej. Więc dopiero zaczynam się tym bawić no ale jakby jakaś dobra dusza pomogła mi w poprawieniu tej bazy to byłbym bardzo wdzięczny smile.gif
f1xer
A jakie są założenia tego projektu? jeden klient - jeden numer?
ogólnie jak sobie widzisz że to działa? masz jakiś projekt ? może będę mógł pomóc w miarę moich skromnych możliwości
pikasso
założenia są takie ze jeden klient jeden numer / jedno miasto ma kilka kodów pocztowych dlatego kod poczt przypisany do klienta / w bazie mam do wyboru klienta indywidualnego oraz firmę no i podział firmy na branże / numery alarmowe
no i to chyba tyle tego będzie
Tutaj zamieszczam cały projekt co do tej pory zrobiłem smile.gif
http://rapidshare.com/files/133284444/TSTEL.rar.html

a tutaj są inserty w notatniku

http://rapidshare.com/files/133287817/BAZA..._FIRMA.txt.html

generalnie chciałby aby to tak wyglądało no i tu już jest wszystko zawarte tylko troche nie dziala tak jak powinno no ale zawsze coś jak na początkującego webmastera smile.gif
hasło do panelu administratora to root i login taki sam.

tam gdzie jest zakładka cała książka chciałbym aby nie było scrolla ale żeby było stronicowanie np co 10 wyników albo żeby pokazywało alfabetycznie po literkach tak jak mam to w firmach
webasek
Właśnie napisz jakie dane maja być przechowywane ale w punktach jak ta baza ma wyglądać nie na tabelach a w punktach. To coś się wymyśli.

Opis powyżej bardzo skromny trochę go rozszerz.
pikasso
klient posiada:
- imię
- nazwisko
- miasto
- ulica (chyba bedzie pełen adres)
- kod pocztowy ( nie wiem czy się tak da ale najlepiej jak by się wstawiało 2 liczby potem był "-" generowany i 3 liczby)
- czy osoba o takim numerze ma być widoczna publicznie czy tylko dla administratora
- czy posiada firmę czy nie ( tylko dla administratora)
- telefon (tak jak mówicie że będzie pelen z kierunkowym)
- wojewodztwo

Firma
- logo (tu bedzie obrazek)
- nazwa
- branża
- miasto
- ulica (tak samo jak w przypadku klienta pelen adres)
- kod pocztowy ( nie wiem czy się tak da ale najlepiej jak by się wstawiało 2 liczby potem był "-" generowany i 3 liczby)
- telefon (tak jak mówicie że będzie pelen z kierunkowym)
- wojewodztwo

telefony alarmowe
- nazwa
- numer

żeby przy wyświetlaniu wszystkiego było stronicowanie np 10 wyników i następna stronka (coś Ala wyniki w google) i sortowane
żeby było można wybrać czy alfabetycznie czy po województwach
webasek
Tabele wygląd:

Tabela Województwo :
- WOJ_ID int not null
- WOJ_Nazwa
jako PRIMERY KEY WOJ_ID

Tabela telefony alarmowe zostaje taka jak jest

Jeśli zakładamy, że jeden klient jeden numer to tabela klienci może wyglądać tak:
- id int not null auto_increment
- imię
- nazwisko
- id_miasto
- ulica (chyba bedzie pełen adres)
- Id_KodPocztowy
- czy osoba o takim numerze ma być widoczna publicznie czy tylko dla administratora
- telefon (tak jak mówicie że będzie pelen z kierunkowym)
- Id_wojewodztwo

Tabela firma
- id int not null auto_increment
- logo (tu bedzie obrazek)
- nazwa
- branża
- id_miasto
- ulica (tak samo jak w przypadku klienta pelen adres)
- Id_KodPocztowy
- telefon (tak jak mówicie że będzie pelen z kierunkowym)
- Id_wojewodztwo

Tabela Kod Pocztowy
- Kod int
- Kod Wyswietl varchar(6)


Tabela KlientFirma
-id_klienta
- id_firmy

Tabela KlientKodPocztowy
- Id_KodPocztowy
- ID_idKlientaFirmy
- KlientFirma int(1) // pole odpowiada za to czy to firma czy klient zwykly

Tabela Miasto
-id
-Miasto nazwa



czy posiada firmę czy nie ( tylko dla administratora) sprawdzamy w tabeli KlientFirma i sprawdzamy czy coś tam jest dla tego klienta

Tak mniej więcej może wyglądać baza danych
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.