Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Dane nie są dodawanee do bazy
kecajs
post 1.08.2015, 18:26:07
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


Witam,
walczę z takim przypadkiem, że nie mogę dodać danych do bazy.

Oto kod formularza:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>
  2. <head>
  3. <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  4.  
  5. <link rel="stylesheet" href="style.css" type="text/css">
  6. </head>
  7.  
  8. <body>
  9. <?php include_once ("db_con.php");
  10. $connection = dbconn::instance(); ?>
  11.  
  12. <h1><center>Zlecenie wydania towaru z magazynu łączników</center></h1><br>
  13.  
  14. <form action="zam_wyk_lacz.php" method="post">
  15. <table width="800" height= "250" border="0" align="center">
  16. <tr height="50"><td class="table_mid_1">Rodzaj łączników</td><td width="500" class="table_mid_1">
  17.  
  18. <?php
  19. // tutaj wywolanie zapytania do bazy
  20. $zapytanie = mysql_query ("SELECT LacznikID, Nazwa, Material, Norma FROM tb_laczniki_main ORDER BY LacznikID ASC");
  21.  
  22. echo '<select name="dane">';
  23.  
  24. echo '<option value="">Wybierz rodzaj łącznika</option>';
  25.  
  26. while($option = mysql_fetch_assoc($zapytanie)) {
  27.  
  28. //echo '<option value="'.$option['Nazwa'].'">'.$option['Nazwa'].' </option>';
  29. echo '<option value="'.$option['LacznikID'].'">'.$option['LacznikID'].' '.$option['Nazwa'].' '.$option['Material'].' '.$option['Norma'].' </option>';
  30. }
  31.  
  32. echo '</select>';
  33.  
  34. ?>
  35. <br></td></tr>
  36. <tr><td width="200"class="table">Ilość (szt.)</td><td width="500"> <input type="text" style="height: 40px; font-size: 16px;" name="IloscZam" maxlength="20"><br></td></tr>
  37. <tr><td width="200" class="table">Data zamówienia</td><td width="500"> <input type="text" style="height: 40px; font-size: 16px;" name="DataZam" value="<?= date('d-m-Y') ?>" readonly="readonly" maxlength="20"><br></td></tr>
  38. <tr><td width="200" class="table">Zamówienie PILNE!</td><td width="500"> <input type="checkbox" style="height: 40px; font-size: 16px;" name="cito" value="tak"><br></td></tr>
  39. <tr><td width="200" class="table"><input type="reset" value="Wykasuj"></td>
  40. <td class="table"><input type="submit" value="Zapisz"></tr>
  41. </table>
  42. </form>
  43.  
  44. </body>
  45. </html>
  46.  


a to jest kod dodający do bazy:
  1. <p><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>
  2. <head>
  3. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  4. <link rel="stylesheet" href="style.css" type="text/css">
  5. </head>
  6.  
  7. <body>
  8.  
  9. <h1><center> Rezultat dodania łączników do zamówienia </h1>
  10.  
  11. <?php
  12. include_once ('db_con.php');
  13. $connection = dbconn::instance();
  14. $zapytanie = "INSERT INTO tb_laczniki_wyjscie (LacznikID, DataZam, IloscZam, Cito) VALUES ('".$LacznikID."', '".$DataZam."', '".$IloscZam."', '".$Cito."')";
  15. $wynik = mysql_query($zapytanie);
  16. if ($wynik)
  17. {
  18. echo '<center>';
  19. echo mysql_affected_rows(). '&nbsp Łączniki dodane do bazy.';
  20.  
  21. echo '<br /><br />';
  22. echo '<a href="/MZ - magazyn/index.php?sr=form_zam_lacz">Dodaj następne łączniki</a> &nbsp&nbsp <a href="/MZ - magazyn/index.php">Zakończ wprowadzanie<a></center>';
  23.  
  24.  
  25. }
  26.  
  27.  
  28. ?>
  29. </body>
  30. </html>
  31. </p>


Struktura bazy jest następująca:
tabela tb_laczniki_main: Lacznik ID (podstawowy, a.i.), Nazwa, Material, Norma i inne
tabela th_laczniki_wyjscie: LaczWydID (podstawowy, a.i.), LacznikID (indeks do tb_laczniki_main LacznikID), DataZam, NrZam, IloscZam, Cito i inne.
Będę wdzięczny za sugestie, co poknociłem. A przy okazji, jak mogę zrobić auto inkrementację kolumny NrZam?
szakal
Go to the top of the page
+Quote Post
goartur
post 1.08.2015, 18:38:04
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

Ostrzeżenie: (0%)
-----


zrob : echo "INSERT INTO tb_laczniki_wyjscie (LacznikID, DataZam, IloscZam, Cito) VALUES ('".$LacznikID."', '".$DataZam."', '".$IloscZam."', '".$Cito."')" a nastepnie wklej zapytanie do bazy danych i zobacz jak blad wyskoczy.
Go to the top of the page
+Quote Post
kecajs
post 1.08.2015, 18:52:13
Post #3





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


a gdzie mam to echo użyć? W pliku z formularzem, czy tym przekazującym dane do bazy? Czy też bezpośrednio w phpmyadminie w zakładce SQL?
Go to the top of the page
+Quote Post
jakub.drag
post 1.08.2015, 18:58:47
Post #4





Grupa: Zarejestrowani
Postów: 94
Pomógł: 9
Dołączył: 11.10.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


W pliku, by zobaczyć jak podstawiane są wartości do zapytania, a następnie wygenerowane zapytanie do PMA by zobaczyć co zwraca smile.gif


--------------------
Podchodź pozytywnie do swojego kodu :)
Go to the top of the page
+Quote Post
kecajs
post 1.08.2015, 19:38:19
Post #5





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


A możesz mi tak łopatologicznie powiedzieć, co i jak?
W pliku mam wpisać tylko coś takiego?
  1. <html><head></head>
  2. <body>
  3. <body>
  4. <?php include_once ("db_con.php");
  5. $connection = dbconn::instance();
  6.  
  7. echo "INSERT INTO tb_laczniki_wyjscie (LacznikID, DataZam, IloscZam, Cito) VALUES ('".$LacznikID."', '".$DataZam."', '".$IloscZam."', '".$Cito."')"
  8.  
  9. ?>
  10. </body></html>

i wywołać ten plik?
Go to the top of the page
+Quote Post
Fred1485
post 1.08.2015, 19:45:54
Post #6





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


to co zwróci echo wklep jako zapytanie do bazy np w phpmyadmin

Ten post edytował Fred1485 1.08.2015, 19:46:30


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
kecajs
post 1.08.2015, 20:17:26
Post #7





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


W oknie przeglądarki pojawiło mi się to: INSERT INTO tb_laczniki_wyjscie (LacznikID, DataZam, IloscZam, Cito) VALUES ('', '', '', '')
Wrzuciłem to do PMA i mam to:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`mz_warehouse`.`tb_laczniki_wyjscie`, CONSTRAINT `tb_laczniki_wyjscie_ibfk_1` FOREIGN KEY (`LacznikID`) REFERENCES `tb_laczniki_main` (`LacznikID`) ON DELETE CASCADE ON UPDATE CASCADE)
#1452 - Cannot add or update a child row: a foreign key constraint fails (`mz_warehouse`.`tb_laczniki_wyjscie`, CONSTRAINT `tb_laczniki_wyjscie_ibfk_1` FOREIGN KEY (`LacznikID`) REFERENCES `tb_laczniki_main` (`LacznikID`) ON DELETE CASCADE ON UPDATE CASCADE)
Go to the top of the page
+Quote Post
kapslokk
post 1.08.2015, 20:21:11
Post #8





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dodajesz do bazy puste wartosci i dodatkowo masz poustawiane klucze obce, które nie potrafią znaleźć relacji dla pustej wartości.
Sprawdź dlaczego zmienne które wstawiasz do zapytania są puste.
Go to the top of the page
+Quote Post
kecajs
post 1.08.2015, 20:34:22
Post #9





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


No i tu mam zgryz, bo nie mam pojęcia, czy to co podałem na początku jest dobre. Zwłaszcza mam na myśli listę rozwijaną.
Dokładnie chodzi o tę linię:
  1. echo '<option value="'.$option['LacznikID'].'">'.$option['LacznikID'].' '.$option['Nazwa'].' '.$option['Material'].' '.$option['Norma'].' </option>';

Wstawiłem ją po to, aby wyświetlały się te dane z bazy i żeby można było wybrać w ten sposób łączniki.
Możesz to ocenić?
Szczegółowe wyjaśnienia są tu: http://forum.php.pl/index.php?showtopic=24...p;#entry1166791
Go to the top of the page
+Quote Post
kapslokk
post 1.08.2015, 20:57:17
Post #10





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Przesyłasz dane POSTem, czy po przesłaniu przepisujesz je do zmiennych
$LacznikID, $DataZam, $IloscZam, $Cito?
Skoro nie działa to pewnie nie.

Wydaje mi się, że wystarczy wstawić:

  1. $LacznikID = intval($_POST['dane']);
  2. $DataZam = $_POST['DataZam'];
  3. $Cito = $_POST['cito'];
  4. $IloscZam = intval($_POST['IloscZam']);
  5.  


przed
  1. $zapytanie = "INSERT INTO tb_laczniki_wyjscie (LacznikID, DataZam, IloscZam, Cito) VALUES ('".$LacznikID."', '".$DataZam."', '".$IloscZam."', '".$Cito."')";


Ale tak czy inaczej warto pomyśleć o sprawdzaniu czy w ogóle jakieś dane zostały przesłane do skryptu i czy mamy co zapisywać.

Ten post edytował kapslokk 1.08.2015, 20:59:49
Go to the top of the page
+Quote Post
kecajs
post 4.08.2015, 06:55:24
Post #11





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

Ostrzeżenie: (0%)
-----


OO, super! Zadziałało smile.gif
Jednakże przy opcji 'Cito" (zamówienie pilne) bez względu na to, czy zaznaczę kwadrat, czy nie, to nic się nie dzieje - w bazie mam 0. I tak samo jest z datą. Data w formularzu wstawiona jest przez opcję
  1. value="<?= date('d-m-Y') ?>"

Znalazłem takie rozwiązanie:
  1. INSERT INTO DATA (data_time) VALUES(NOW())
, ale nie za bardzo wiem, jak to połączyć z resztą
Zaś "Cito" to checkbox z wartością value="tak".

A jest możliwość dodawania większej ilości danych za jednym razem? Myślę tu o jakimś rozwiązaniu, że pobierane są - w formie tabeli - wszystkie łączniki z tabeli tb_laczniki_main z dodatkowym polem IloscZam, które się wypełnia i całość później pcha do bazy. Tak, żeby nie trzeba było dodawać łączników pojedynczo, tylko wszystkie na raz.


Odpowiem sam sobie smile.gif
Kwestia dodawania daty do bzy, to wpisałem w wartościach VALUE po prostu NOW() i jest ok.
  1. $zapytanie = "INSERT INTO tb_laczniki_wyjscie (LacznikID, DataZam, IloscZam, Cito) VALUES ('".$LacznikID."', NOW(), '".$IloscZam."', '".$Cito."')";


Z kolei kwestia chceckbox'a - zamiast "tak" powinno być 1, bo w bazie zdefiniowałem parametry tego pola jako INT (1).
  1. <tr><td width="200" class="table">Zamówienie PILNE!</td><td width="500"> <input type="checkbox" style="height: 40px; font-size: 16px;" name="cito" value="1"><br></td></tr>


Czyli temat mogę zamknąć.
Dzięki za pomoc :)
Go to the top of the page
+Quote Post
bobek358
post 4.08.2015, 07:06:06
Post #12





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

Ostrzeżenie: (0%)
-----


Jeśli chodzi o datę to zły format ustawiłeś. Standardowo w bazie jest format YYYY-MM-DD
czyli musisz użyć:
  1. value="<?= date('Y-m-d') ?>"
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 19:07