Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Dodawanie do bazy MySql poprzez formularze...
Forum PHP.pl > Forum > Przedszkole
mysql_php
Mam do Was małą prośbę, napiszę to trochę łopatologicznie ale zalezy mi na precyzyjnej odpowiedzi Otóż,

Mam baze danych w mysql. Jedną z tabel jest tabela "wypożyczenia". (Moim celem jest zrobić interfejs w php) Tabela ta ma prócz klucza głównego "ID_wypozyczenia", dwa klucze obce które odwołują się do tabel: Filmy oraz Klienci.

Chciałbym aby z poziomu strony www napisanej w php i html było możliwe dodawanie rekordów (wiem, że robi się to poprzez formularz ale niestety nie wiem jak). Nie chodzi mi o gotowcu, chciałbym się nauczyć po prostu jak to robić. Proszę tylko o jakiś przykład bo szukałem w sieci tego konkretnego przypadku ale niestety nic nie znalazłem.

Z góry wielkie dzięki! Pozdrawiam
Athlan
Wprowadzanie do bazy to
  1. INSERT INTO ...

nawet dam Ci coś na tacy:
http://php.webhelp.pl/kursy/mysql/index.php?roz=php

w sam raz jak na początek

potem:
http://haxite.org/index.php3?site=artykul&...view&id=600
http://haxite.org/index.php3?site=artykul&...view&id=630

pozdrawiam smile.gif
mysql_php
ok, dzięki za wskazanie lektury! Jak tylko wrócę z pracy to zabieram się do czytania cool.gif
Ale mam taką małą prośbę, otóż :

jak zapisać warości po wyrażeniu "VALUES" tak, aby pobierał je z formularza? bo ogólną budowę instrukcji znam: INSERT INTO 'tabela' VALUES ('xxxx','xxx'.....) ale nie wiem jak w przypadku formularza to wygląda. Pomożecie mi w tej małej kwestji?

dzięki!
Ludvik
Dane z formularzy są dostępne w zmiennych superglobalnych $_POST i $_GET, zależnie od metody żądania. Przed wstawieniem ich do zapytania musisz upewnić się, czy nie zawierają one znaków typowych dla składni SQL. Do tego używasz funkcji typu mysql_real_escape_string" title="Zobacz w manualu php" target="_manual. Jeżeli nie zadbasz o to, umożliwisz atak SQL Injection na swój serwis. Na którymś forum jest przylepiony o tym...
mysql_php
a czy mógłbym prosić o przedstawienie mi w dwóch punktach:

1. Formularza do wypełniania bazy
2. instrukcji SELECT z wisanymi zmiennymi z tego formularza.

Chodzi mi o to, żebym mógł zobaczyć jak wygląda w praktyce taki kod przykładowego, gotowego formularza (chociaż z polem na jedną daną) i instrukcji SELECT.

Bardzo dziękuję i sorry za zawracanie gitary ale na akurat tą kwestję nie mogę nigdzie znależźć odpowiedzi.

pozdrawiam!
Athlan
chyba musisz zacząć naukę od porządnego kursu php, odnoszę:
Temat: Kursy dla poczatkujacych

przykładowy kod (jakiś stary wyciągnąłem z szafki) smile.gif:

http://phpfi.com/136467
nospor
ad1)
http://forum.php.pl/index.php?showtopic=22377
Gratisowo masz tam edycje i usuwanie smile.gif

ad2)
http://forum.php.pl/index.php?showtopic=43688&hl=

Na przyszlosc uzywamy wyszukiwarki

proszę poprawić tytuł o znacznik zgodnie z zasadami forum Przedszkole:
Temat: Tematyka i zasady panujace na forum Przedszkole


Prosze rowniez poprawic tytul na mowiacy cos o problemie a nie taki ogolnik
mysql_php
ok, po części znalazłem:

  1. <?php
  2. if ($co == 'Dodaj') {
  3. if ($imie && $nazwisko && $telefon){
  4. $query = "INSERT INTO ksiazkatelefoniczna (nr, imie, nazwisko, telefon) VALUES (' ', '$imie', '$nazwisko','$telefon')";
  5. $wynik = mysql_query ($query);
  6. }
  7. ?>


Tutaj jak dobrze rozumiem są zmienne $imie, $nazwisko, $telefon które podaje się w formularzu..
Czy moglibyscie mi tutaj zamieścić taki formularz?
nospor
Cytat
Czy moglibyscie mi tutaj zamieścić taki formularz?
przeczytaj jeszcze raz link z ktorego wytrzasnales ten kod. Przeciez tam jest ten formularz....

Prosze grzecznie poraz drugi o zastosowanie sie do zasad, ktore wymienilem w poprzednim poscie
mysql_php
przepraszam bardzo za kłopot ale tamten kod jest trochę nieczytelnie dla mnie napisany.
Mógłbyś mi wkleić tylko sam kod formularza? Wiem, że zawracam głowę ale najlepiej mi idzie nauka jak
analizuję sobie takie fragmęty kodu smile.gif

PS. Bardzo chętnie zmienię temat ale nie wiem jak sad.gif
nospor
No formularz zaczyna sie od <form ..... to i tego trzeba szukac.
  1. <?php
  2. echo'<FORM action="index.php" METHOD="POST">Nowy rekord:';
  3. echo'<INPUT TYPE="hidden" NAME="co" VALUE="Dodaj"><TABLE>';
  4. echo'<TR><TD>Imie:</TD><TD><INPUT TYPE="text" ';
  5. echo'NAME="imie"></TD></TR><TR><TD>Nazwisko</TD><TD><INPUT ';
  6. echo'TYPE="text" NAME="nazwisko"></TD></TR><TR><TD>Telefon</TD>';
  7. echo'<TD><INPUT TYPE="text"NAME="telefon"></TD></TR>';
  8. echo'</TABLE><INPUT TYPE="submit" VALUE="Dodaj"></FORM>';
  9. ?>

swoją drogą faktycznie jest to jeden z bardziej nieczytelnych kodow jakie widzialem smile.gif

co do zmiany tytulu, to musisz edytowac swoj pierwszy post, a przy okazji bedziesz mogl zmienic tytul
mysql_php
ok, dziękuję bardzo. Temat zmieniłem smile.gif

Teraz próbuję dojść do tego, które pola z formularza i z instrukcji INSERT są "wspólne" smile.gif
chodzi mi o to jak instrukcja INSERT "wie" skąd wziąć wartości podane w formularzu...

Czy w takim razie pola z instrukcji poniższej
  1. <?php
  2. ' ', '$imie', '$nazwisko','$telefon')"
  3. ?>


  1. <?php
  2. $query = "INSERT INTO ksiazkatelefoniczna (nr, imie, nazwisko, telefon) VALUES (' ', '$imie', '$nazwisko','$telefon')";
  3. ?>


znajdują się gdzieś w formularzu?

Mam nadzieję, że nie zagmatwałem zbytnio smile.gif
MagnuM
Po pierwsze musisz zacząć od zapoznania się z zasadą działania tego co próbujesz zrobić:

- formularz jest tutaj plikiem 'kontaktującym' się z użytkownikiem strony, to on odbiera od niego wszelkie informacje
- te informacje dalej przesyłane są zgodnie z artybutem action do pliku, który dane zebrane w formularzu odpowiednio wykorzysta

1. Najpierw tworzysz plik z formularzem, który to plik możesz nazwać formularz.html.
- w akcji formularza musisz podać plik, do którego zmienne z formularza zostaną przesłane; chodzi o atrybut action w znaczniku form.

formularz.html
  1. <form action="action.php" method="post">
  2. Nowy rekord: <input type="hidden" name="co" value="Dodaj">< /p>
  3. Imie: <input type="text" name="imie"><br />
  4. Nazwisko <input type="text" name="nazwisko"><br />
  5. Telefon <input type="text" name="telefon"><p />
  6. <input type="submit" name="action" value="Wyślij"></form>';


Powyższy formularz prześle metodą POST (atrybut method, znacznik form) następujące zmienne:

$_POST['co'] = 'Dodaj'; // poprzez atrybut type="hidden" (ukryty - nie widoczny dla użytkownika)
$_POST['imie'];
$_POST['nazwisko'];
$_POST['telefon'];
$_POST['action'] = 'Wyślij'; // atrybut type="submit" czyli 'przycisk' przekazujący zmienne do pliku z atrybutu action znaniczka form

Od tej pory zmienne przesłane są do pliku action.php, w kórym to pliku możesz ih użyć.

action.php
  1. <?php
  2.  
  3. $imie = $_POST['imie'];
  4. $nazwisko = $_POST['nazwisko'];
  5. $telefon = $_POST['telefon'];
  6.  
  7. // sprawdza czy dostęp nastąpił poprzez plik formularza
  8. if ( $_POST['action'] )
  9. {
  10. // sprawdza jaki typ akcji ma zostać wykonany (na wypadek kilku formularzy w pliku formularz.php)
  11. if ( $_POST['co'] == 'Dodaj' )
  12. {
  13. // sprawdza czy wszystkie pola formularza zostały wypełnione
  14. if ( $imie && $nazwisko && $telefon )
  15. {
  16. $sqlQuery = mysql_query("INSERT INTO ksiazkatelefoniczna (imie, nazwisko, telefon) VALUES ('$imie', '$nazwisko','$telefon')";
  17. }
  18. }
  19. }
  20.  
  21. ?>
mysql_php
dokładnie o taki opis mi chodziło! Wielkie dzięki!

zrobiłem tak jak mówiłeś ale zwraca mi błąd, nie bardzo wiem co robię źle... może mi pomożecie.

dokładniej, pisze że błąd jest w 14 linii

  1. <?php
  2.  
  3. $polacz = mysql_connect('localhost', 'root', 'XXXXXXX');
  4. $wybierz = mysql_select_db('wypozyczalnia');
  5.  
  6. $ID_filmu = $_POST['ID_filmu'];
  7. $ID_osoby = $_POST['ID_osoby'];
  8. $w_data_wyp = $_POST['w_data_wyp'];
  9. $w_data_plan = $_POST['w_data_plan'];
  10. $w_uwagi = $_POST['w_uwagi'];
  11. $w_status = $_POST['w_status']
  12.  
  13.  
  14. $zapytanie = "INSERT INTO wypozycz (ID_wypozyczenia, ID_filmu, ID_osoby, w_data_wyp, w_data_plan, w_uwagi, w_st
    atus)
  15. VALUES ('$ID_filmu','$ID_osoby','$w_data_wyp','$w_data_plan','$w_uwagi','$w_status')";
  16. $wynik=mysql_query($zapytanie);
  17. ?>
MagnuM
Najlepiej byłoby gdybyś podał treść błędu.
mysql_php
Przepraszam za zamieszanie. Zacząłem od nowa na innej tabeli. Ale problem wygląda tak samo.

Dziwne bo skrypt po uruchomieniu nie wyświetla żadnego błędu. Problem w tym, że nie dodaje nic do tabeli..
sad.gif

Umieszczam poniżej 2 pliki:

1. formularz
2. skrypt dodający do bazy (który właśnie nie działa:) )

FORMULARZ:

  1. <?php
  2. <table>
  3.  <form action="dodaj_gatunek.php" method="post">
  4.  
  5.  <tr><td>ID GATUNKU</td><td> <input type=text name="ID_gatunku"></td></tr>
  6.  <tr><td>NAZWA GATUNKU</td><td> <input type=text name="g_nazwa"></td></tr>
  7.  <tr><td>STATUS GATUNKU</td><td> <input type=text name="g_status"></td></tr>
  8.  <tr><td><input type="submit" value="Dodaj gatunek" name="dodaj"></td></tr>
  9.  
  10.  </form>
  11. </tr>
  12.  </table>
  13. ?>


oraz druwgi plik - SKRYPT DODAWANIA DO BAZY tego, co podane wcześniej w powyższym formularzu:

  1. <?php
  2. $polacz = mysql_connect('localhost', 'root', 'xxxxxxxxx');
  3. $wybierz = mysql_select_db('gatunek');
  4.  
  5. $ID_gatunku = $_POST['ID_gatunku'];
  6. $g_nazwa = $_POST['g_nazwa'];
  7. $g_status = $_POST['g_status'];
  8.  
  9. $zapytanie = "INSERT INTO gatunek (ID_gatunku, g_nazwa, g_status)
  10.  VALUES (NULL,'$g_nazwa', '$g_status')";
  11. $wynik=mysql_query($zapytanie);
  12. ?>
MagnuM
Rozumiem, że baza danych oraz tabela nazywają się tak samo, tzn. 'gatunek' ?

Dziwi mnie jedna rzecz. Podejżewam, że pole ID_gatunku w bazie danych ma parametr auto_increment. Pozatym i tak nie dodajesz go do rekordu. Jeżeli jest tak jak mówię, czyli ID_gatunku jest auto_increment, to nie dodaje się go jako NULL, poprostu omijasz to polew zapytaniu. To samo w formularzu, nie musisz pobierać tego parametru.

Pozatym nie widze tutaj nic takiego, więc zapytanie:

  1. <?php
  2. $zapytanie = "INSERT INTO gatunek (g_nazwa, g_status) VALUES ('$g_nazwa', '$g_status')";
  3. ?>


Powinno wykonać się prawidłowo, o ile stworzyłeś poprawnie tabelę.
mysql_php
wiem co jest nie tak, ale strasznie mnie to dziwi.

jeśli zamienię zmienną
  1. <?php
  2. '$g_nazwa'
  3. ?>
znajdującą się po VALUES -
- na postać:
  1. <?php
  2. '".$_POST['g_nazwa']."'
  3. ?>
to wszystko działa!'

Nie wiem dlaczego tak się dzieje, przecież wcześniej "nadaję" te zmienne:

  1. <?php
  2. $ID_gatunku = $_POST['ID_gatunku'];$g_nazwa = $_POST['g_nazwa'];$g_status = $_POST['g_status'];
  3. ?>


Wiecie dlaczego tak się dzieje questionmark.gif
MagnuM
Ja Ci powiem tak. Z doświadczenia wiem, że na tym poziomie który reprezentujemy oboje php w większości przypadków jest nieomylny i bardzo wiele razy zdarzyło mi się strasznie denerwować na coś co powinno działać, a nie działa. Sprawdź wszystko dokładnie, a na pewno postukasz się w głowe, że to taki banał...

Pozdrawiam.
mysql_php
...no i Stary masz rację! Już gra gitara guitar.gif

zamiast
  1. <?php
  2. $ID_gatunku = $_POST['ID_gatunku'];
  3. ?>


należało napisać odwrotnie:
  1. <?php
  2. $_POST['ID_gatunku'] = $ID_gatunku;
  3. ?>


powiem tak... warto czasem samemu nad czym pogłówkować, tylko na dobre to wyjdzie smile.gif
MagnuM
Widzę, że masz włączoną opcję register_globals. Proponowałbym ją wyłączyć.
Na przyszłość powiem Ci, że ta opcja rejestruje do zwykłych zmiennych te zmienne takie jak $_POST czy $_GET. Zapewne wyda Ci się to zaletą, ale musisz uwierzyć na słowo, że jest to wada. No a plus jest taki, że nie będziesz musiał ręcznie deklarować zmiennych typu $example = $_POST['example'], tylko odrazu skorzystasz w skrypcie z $_POST['example'].

Poszukaj parametru register_globals w pliku php.ini (.../Windows) i zmień na Off.

Pozdrawiam.
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.