Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL][AJAX][MySQL] przesylanie wartości z checkboxow
Forum PHP.pl > Forum > Przedszkole
gagatek
mam taki problem i nie mogę dojść do tego co jest nie tak.
mam funkcję która pobiera z bazy id i nazwy gatunków filmów i wyświetla je w formie checkboxow.
  1. function pobierzG(){
  2. $gatunek=mysql_query("SELECT * FROM gatunek") or die (mysql_error());
  3. while($wiersz= mysql_fetch_assoc($gatunek)){
  4.  
  5.  
  6. echo ' <input type="checkbox" name="gatunek[]" value="'.$wiersz['ID'].'"; ">'.$wiersz['GATUNEK'].'';
  7.  

nastepnie mam formularz dodawania filmów do bazy oraz skrypt. index.php
  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3. $("form#submit").submit(function() {
  4. // Przechwytujemy wartości z formularza i przesyłamy je do pliku insert.php
  5. var tytul_oryginalny = $('input[name=tytul_oryginalny]');
  6. var tytul_polski = $('input[name=tytul_polski]');
  7. var rezyser = $('input[name=rezyser]');
  8. var scenariusz = $('input[name=scenariusz]');
  9. var rok_produkcji = $('input[name=rok_produkcji]');
  10. var czas_trwania = $('input[name=czas_trwania]');
  11. var cena = $('input[name=cena]');
  12. var gatunek = $('input[name=gatunek]');<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
  13. var opis = $('textarea[name=opis]');
  14. // Jeżeli pole jest puste wyświetlamy błąd i nie dodajemy rekordu
  15.  
  16.  
  17. var data = '&tytul_oryginalny=' + tytul_oryginalny.val() + '&tytul_polski=' + tytul_polski.val() +
  18. '&rezyser=' + rezyser.val() + '&scenariusz =' + scenariusz .val() +
  19. '&rok_produkcji=' + rok_produkcji.val() + '&czas_trwania=' + czas_trwania.val() +
  20. '&cena=' + cena.val() + '&gatunek=' + gatunek.val()<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + '&opis=' + opis.val();
  21. $.ajax({
  22. type: "POST",
  23. url: "insert.php",
  24. data: data,
  25. success: function(){
  26.  
  27. }
  28.  
  29. });
  30. return false;
  31. });
  32. });
  33. </script>
  34. </head>
  35. <body>
  36.  
  37.  
  38. <div id="formularz">
  39. <form id="submit" method="post" name="submit" action="">
  40. <table>
  41. <tr class="tlo-b"><td>Tytul oryginalny:</td>
  42. <td><input type="text" name="tytul_oryginalny" id="tytul_oryginalny" /></td></tr>
  43. <tr class="tlek"><td>Tytul polski:</td>
  44. <td><input type="text" name="tytul_polski" id="tytul_polski" /></td></tr>
  45. <tr class="tlo-b"><td>Reżyser:</td>
  46. <td><input type="text" name="rezyser" id="rezyser" /></td></tr>
  47. <tr class="tlo-b"><td>Scenariusz:</td>
  48. <td><input type="text" name="scenariusz" id="scenariusz" /></td></tr>
  49. <tr class="tlek"><td>Rok produkcji:</td>
  50. <td><input type="text" name="rok_produkcji" id="rok_produkcji" /></span></td></tr>
  51. <tr class="tlo-b"><td>Czas trwania:</td>
  52. <td><input type="text" name="czas_trwania" id="czas_trwania" /></td></tr>
  53. <tr class="tlo-b"><td>Cena:</td>
  54. <td><input type="text" name="cena" id="cena" /></td></tr>
  55. <tr class="tlo-b"><td>Gatunek:</td>
  56. <td><form name="gatunek" id="gatunek"> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
  57. <? pobierzG(); ?>
  58. </form>
  59. </td></tr>
  60. <tr class="tlo-b"><td>Język:</td>
  61. <td><form name="jezyk">
  62. <? pobierzJ(); ?>
  63. </form>
  64. </td></tr>
  65. <tr class="tlo-b"><td>Opis:</td>
  66. <td><textarea cols="35" rows="10" name="opis" id="opis"></textarea> </td></tr>
  67. <button type="submit" id="submit"> Dodaj użytkownika </button>
  68. <tr><td colspan="2" align="center"><input type="submit" value="Dodaj" /></td></tr>
  69. </table></form>
  70. </div>


oraz plik insert.php

  1. <?php
  2. include('config.php;);
  3. //Odbieranie danych metodą post
  4. $tytul = $_POST['tytul_oryginalny'];
  5. $tytul_pl = $_POST['tytul_polski'];
  6.  
  7. $rezyser = $_POST['rezyser'];
  8. $scen = $_POST['rezyser'];
  9.  
  10. $rok = $_POST['rok_produkcji'];
  11. $czas = $_POST['czas_trwania'];
  12. $opis = $_POST['opis'];
  13. $cena = $_POST['cena'];
  14. $gatunek = $_POST['gatunek'];<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  15.  
  16. //Dodawanie rekordów do bazy mysql
  17. //mysql_query($dodaj) or die(mysql_error());
  18. $zapytanie_id=mysql_query("SELECT MAX(ID) from filmy");
  19. $id_filmu = mysql_fetch_array($zapytanie_id);
  20.  
  21. >>>>>>>> foreach($gatunek AS $g) mysql_query("INSERT INTO `film_gatunek` (ID_FILM, ID_GATUNEK) VALUES ('$id_filmu[0]', '$gatunek')") or die("Błądlklklklkl");<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,,
  22.  
  23. mysql_query("INSERT INTO `filmy` (TYTUL_ORYGINALNY, TYTUL_POLSKI, REZYSER, SCENARIUSZ, ROK_PRODUKCJI, CZAS_TRWANIA, CENA, OPIS) VALUES('$tytul','$tytul_pl','$rezyser','$scenariusz', '$rok', '$czas', '$cena','$opis')") or die("Błąd!");
  24.  
  25.  
  26. ?>

co do gatunków to jest to zrobione tak żeby można było przypisać jednemu filmowi kilka gatunków
ogólnie wszystko się zapisuje do bazy oprócz właśnie tych gatunków. Wydaje mi sie że w sły sposób przesyłam z index.php do insert.php gatunki. Ale nie mam pojęcia co źle robię... tymi znaczkami "<<<<<<" zaznaczyłem miejsca w którym może być bład, bardzo bym prosił o pomoc
ciekawskiii
pola checkbox nie maja wartosci value tylko albo sa zaznaczone albo nie. Wywal value a $wiersz['id'] daj w pole name, kazde name bedzie jak value i sprawdzaj czy zaznaczone isset lub nie zaznaczone !isset
gagatek
Cytat(ciekawskiii @ 24.12.2011, 19:28:57 ) *
pola checkbox nie maja wartosci value tylko albo sa zaznaczone albo nie. Wywal value a $wiersz['id'] daj w pole name, kazde name bedzie jak value i sprawdzaj czy zaznaczone isset lub nie zaznaczone !isset

ale to jest ogolnie dobrze, bo ten cały kod w php mi to chodzi bardzo dobrze, ale chciałem sobie ten formularz przerobić żeby był ajax i jquery i tylko mam problem jak z tego index.php przesłać to do insert...
mortus
Nazwa (name) Twoich checkbox-ów to gatunek[], a ty przy pomocy jQuery próbujesz pobrać wartość z pola o nazwie gatunek. Widzisz różnicę? Poza tym trzeba oczywiście pobrać wartość zaznaczonego checkbox-a, zatem:
[JAVASCRIPT] pobierz, plaintext
  1. var gatunek = $('input[name="gatunek[]"]:checked').val();
[JAVASCRIPT] pobierz, plaintext

Oczywiście użycie checkbox-ów nie jest najlepszym wyjściem dla tego typu rozwiązań. Jeśli bowiem zaznaczysz dwa checkbox-y to powyższy kod pobierze wartość pierwszego ze wszystkich zaznaczonych. Można ewentualnie oprogramować je w taki sposób, aby zaznaczenie któregoś powodowało odznaczenie innych zaznaczonych:
[JAVASCRIPT] pobierz, plaintext
  1. $('input[name="gatunek[]"]').click(function() {
  2. if ($(this).attr('checked') == 'checked') {
  3. $('input[name="gatunek[]"]').attr('checked', false);
  4. }
  5. $(this).attr('checked', true);
  6. });
[JAVASCRIPT] pobierz, plaintext
smiesznylolek
przepraszam że tak męczę ale troche się pogubiłem
  1. var gatunek = $('input[name=gatunek]');

zamieniłem tak jak pisałeś na
  1. var gatunek = $('input[name="gatunek[]"]:checked').val();

i po tym w firebugu pokazuje mi się błąd:
  1. gatunek.val is not a function
  2. [Wstrzymuj na tym błędzie] '&cena=' + cena.val() + '&gatunek=' + gatunek.val() + '&opis=' + opis.val();


natomiast nie wiem dokładnie gdzie mam wstawić to:

  1. $('input[name="gatunek[]"]').click(function() {
  2. if ($(this).attr('checked') == 'checked') {
  3. $('input[name="gatunek[]"]').attr('checked', false);
  4. }
  5. $(this).attr('checked', true);
  6. });


jest mi to niezbędne i bardzo proszę o pomoc...
mortus
Pod zmienną js o nazwie gatunek kryję się już właściwa wartość, a nie obiekt checkbox. Zatem:
[JAVASCRIPT] pobierz, plaintext
  1. // albo masz tak:
  2. var gatunek = $('input[name="gatunek[]"]:checked').val();
  3. var url += '?cena=' + cena.val() + '&gatunek=' + gatunek + '&opis=' + opis.val();
  4. // albo masz tak:
  5. var gatunek = $('input[name="gatunek[]"]:checked');
  6. var url += '?cena=' + cena.val() + '&gatunek=' + gatunek.val() + '&opis=' + opis.val();
[JAVASCRIPT] pobierz, plaintext

Mam nadzieję, że widać różnicę.

Jeśli chodzi o ten drugi kod, to umieść go gdziekolwiek bezpośrednio w bloku anonimowej funkcji zdarzenia ready:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2. $('input[name="gatunek[]"]').click(function() {
  3. if ($(this).attr('checked') == 'checked') {
  4. $('input[name="gatunek[]"]').attr('checked', false);
  5. }
  6. $(this).attr('checked', true);
  7. });
  8. // pozostały kod jQuery
  9. });
[JAVASCRIPT] pobierz, plaintext
smiesznylolek
Już się zapisuje do bazy, tylko jest taki problem że zapisuje się tylko jeden gatunek. W firebugu w zakładce post przy gatunku jest napisane jedno ID i jest to pierwsze ID a nie ostatnie, czyli tak jakby nie przelatywało przez całość tylko brało pierwsze z brzegu. Dodatkowo przy pierwszym zapisie, mogę wygrać kilka checkboxow z gatunkami, natomiast, jak chcę dodać kolejny to zaznaczone są poprzednie i mogę już tylko wybrać jeden checkbox.
Nie za bardzo wiem o co chodzi


ps.
Nie wiem czy to a coś do rzeczy ale jak dałem
  1. $('input[name="gatunek[]"]').click(function() {
  2. if ($(this).attr('checked') == 'checked') {
  3. $('input[name="gatunek[]"]').attr('checked', false);
  4. }
  5. $(this).attr('checked', true);
  6. });


pod
  1. <script type="text/javascript">
  2. $(document).ready(function(){

to mogłem tylko zaznaczyć tylko jednego checkboxa
natomiast jak dałem tamto pod:
  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3. $("form#submit").submit(function() {

to w tedy mogłem zanzaczyć kilka, ale tylko za pierwszym razem, tak jak opisałem na początku
mortus
Nie doczytałem o tym, że jeden film może mieć kilka gatunków, a to zmienia postać rzeczy. Kod odpowiedzialny za możliwość zaznaczania tylko jednego checkbox-a jest w tym wypadku zbędny, czyli to:
[JAVASCRIPT] pobierz, plaintext
  1. $('input[name="gatunek[]"]').click(function() {
  2. if ($(this).attr('checked') == 'checked') {
  3. $('input[name="gatunek[]"]').attr('checked', false);
  4. }
  5. $(this).attr('checked', true);
  6. });
[JAVASCRIPT] pobierz, plaintext

możesz wyrzucić.
Pozostaje kwestia wygenerowania odpowiedniej zmiennej data:
[JAVASCRIPT] pobierz, plaintext
  1. var gatunki = $('input[name="gatunek[]"]:checked');
  2. var gatunki_data_string = '';
  3. gatunki.each(function() {
  4. gatunki_data_string += '&gatunek[]=' + $(this).val();
  5. });
  6. // i później
  7. var data = '&tytul_oryginalny=' + tytul_oryginalny.val() + '&tytul_polski=' + tytul_polski.val() +
  8. '&rezyser=' + rezyser.val() + '&scenariusz =' + scenariusz .val() +
  9. '&rok_produkcji=' + rok_produkcji.val() + '&czas_trwania=' + czas_trwania.val() +
  10. '&cena=' + cena.val() + gatunek_data_string + '&opis=' + opis.val();
[JAVASCRIPT] pobierz, plaintext

Teraz powinno działać jak należy.
smiesznylolek
Stary Wielkie Dieki!!! wszystko hula!!:) tylko musiałem "gatunki" zamienić na "gatunek", bo się coś pluło.smile.gif dzięki jeszcze raz!!:)

jeszcze mam taki maly problem, chciałem zrobić taka walidacje do tego że jak nie zostanie wypełnione jakieś pole to zwróci błąd i nie zostanie te dane wszystkie nie zostaną wysłane do bazy.
zrobiłem coś takiego i pojawia się alert jeśli któreś pole jest puste, ale i tak zapisuje się to do bazy z tym pustym polem...
a zrobiłem tak dla każdego inputa, bo nie do końca wiedziałem jak zrobić do całego formularza, zeby poprostu wypisało alert "nie wypełniłeś wszystkich pól", niezależnie które pole nie zostało wypisane
  1. $.ajax({
  2. type: "POST",
  3. url: "insert.php",
  4. data: data,
  5. success: function(){
  6. if($('#tytul_polski').val()==''){
  7. alert('Podaj polski tytul');
  8. return false;
  9. }
  10. $('#tytul_polski').val('');
  11.  
  12. if($('#tytul_oryginalny').val()==''){
  13. alert('Podaj oryginalny tytuł');
  14. return false;
  15. }
  16. $('#tytul_oryginalny').val('');
  17.  
  18. if($('#rezyser').val()==''){
  19. alert('Podaj reżysera');
  20. return false;
  21. }
  22. $('#rezyser').val('');
  23.  
  24. if($('#scenariusz').val()==''){
  25. alert('Podaj scenarzyste');
  26. return false;
  27. }
  28. $('#scenariusz').val('');
  29.  
  30. if($('#rok_produkcji').val()==''){
  31. alert('Podaj rok produkcji');
  32. return false;
  33. }
  34. $('#rok_produkcji').val('');
  35.  
  36. if($('#czas_trwania').val()==''){
  37. alert('Podaj czas trwania');
  38. return false;
  39. }
  40. $('#czas_trwania').val('');
  41.  
  42. if($('#cena').val()==''){
  43. alert('Podaj cenę');
  44. return false;
  45. }
  46. $('#cena').val('');
  47.  
  48. $('form input[type=checkbox]').attr('checked', false);
  49. $('#opis').val('');
  50. }
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. });
  59. return false;
mortus
Kolego. Sprawdzenie, czy pola zostały wypełnione powinieneś podpiąć raczej pod zdarzenie submit formularza:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $('form').submit(function(){
  3. // tutaj sprawdzamy, czy wszystkie pola zostały wypełnione i sypiemy komunikatami o błędach
  4. // a tutaj wysyłamy żądanie metodą $.ajax
  5. });
  6. });
[JAVASCRIPT] pobierz, plaintext

Tymczasem u Ciebie sprawdzenie, czy pola zostały wypełnione wykonuje się po prawidłowym przesłaniu żądania i zwróceniu odpowiedzi - w ciele funkcji succes, pełniącej tutaj rolę callback-a.
Oczywiście selektor formularza możesz dostosować do własnych potrzeb.
smiesznylolek
aa faktycznie, tez mi to nie pasowalo, żeby było w success ale kolega mi powiedział że tak powinno być:/ przekleiłem sobie to do tego submit i teraz działa:) jeszcze raz dzieki!:)
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.