Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] INSERT INTO nie działa
Forum PHP.pl > Forum > Przedszkole
pjanek
Witam,
Tak wiem, że nie w ten sposób powinienem się łączyć z bazą ale póki co to muszę to zrobić za pomoc przestarzałej technologi mysql_connect.
Problem polega na tym, że z poniższego kodu działa edycja i usuwanie wierszy z bazy, ale nie działa dodawanie INSERT INTO.
Nie rozumiem dlaczego ponieważ jak wspomniałem dwie poniższe instrukcje łączą się z bazą, mogę edytować i usuwać. Tracę cierpliwość więc proszę Was o pomoc, spójrzcie świeżym okiem i dajcie znać co może być nie tak.

  1. $baza=mysql_connect("$nhost", "$nuser", "$nhaslo") or die ("Błąd: nie można połączyć się z mysqle-em");
  2. $odpbaza=mysql_select_db($nbaza, $baza) or die ("Błąd: nie można wybrać bazy danych $nazwadb");
  3.  
  4. if(isset($_POST['dodaj'])){
  5. $ins2 = @mysql_query("INSERT INTO faktury SET data_wprowadzenia='$data_wprowadzenia ', data_faktury='$data_faktury', nr_faktury='$nr_faktury', kwota_brutto='$kwota_brutto', kooperant='$kooperant', rodzaj_wydatku_id='$wydatki', wydatek_sprzedaz_id='$typ', uwagi='$uwagi'");
  6. }
  7.  
  8. if(isset($_POST['edit'])){
  9. $ins = @mysql_query("UPDATE faktury SET data_wprowadzenia='$data_wprowadzenia ', data_faktury='$data_faktury', nr_faktury='$nr_faktury', kwota_brutto='$kwota_brutto', kooperant='$kooperant', rodzaj_wydatku_id='$wydatki', wydatek_sprzedaz_id='$typ', uwagi='$uwagi' WHERE id=$lp");
  10. }
  11.  
  12. if($_GET['del']){
  13. $id_usun=$_GET['del'];
  14. $result_del=mysql_query("DELETE FROM faktury WHERE id=$id_usun");
  15. $odpsql=mysql_query($result_del);
  16. }

I poniższa instrukcja wywala błąd tylko przy dodawaniu, że "Nie udało się dodać!"

  1. if(isset($_POST['dodaj'])){
  2. if($ins2) echo "<b class=\"ok\">Dodano fakturę</b>";
  3. else echo "<b class=\"blad\">Nie udało się dodać!</b>";
  4. }
  5.  
  6. if(isset($_POST['edit'])){
  7. if($ins) echo "<b class=\"ok\">Poprawiono fakturę</b>";
  8. else echo "<b class=\"blad\">Nie udało się poprawić!</b>";
  9. }
  10.  
  11. if(isset($_GET['del'])){
  12. if($result_del) echo "<b class=\"ok\">Faktura została usunięta</b>";
  13. else echo "<b class=\"blad\">Nie udało się usunąć<br /> </b>";
  14. }

Dodam tylko, ze całość działa na serwerze plików Synology w wewnętrznej sieci.
viking
Włącz raportowanie błędów, usuń @.
Rysh
Przypięty wątek od 10 LAT!!!!!!!!
Temat: Jak poprawnie zadac pytanie oraz przygotowac srodowisko pracy

Cytat
Usuń również wszystkie małpy (@) z kodu. Powodują one wyciszenie błędów i ich po prostu nie widać - a ty jako początkujący masz widzieć wszystkie błędy.
Jeśli po zobaczeniu błędów, nadal nie wiesz o co chodzi, wklej nam dokładnie te błędy, z zaznaczeniem lini w kodzie, której to błąd dotyczy.
pjanek
Dziękuje Panowie za zainteresowanie. Otóż po usunięciu @ nie wyświetla żadnych błędów oprócz tego Nie udało się dodać!.
Włączyłem jeszcze:
  1. ini_set('display_errors', 1);

Ale tu pokazuje błędy typu Notice: Undefined index: del in /volume1/web/www/rzis.php on line 209 a w lini 209 mam
  1. if($_GET['del']){

I w zasadzie wszędzie gdzie mam zmienną $_GET pokazuje powyższy błąd.
Ale moim skromnym zdaniem to nie błędy typu Notice są przeszkodą tylko...., no właśnie nie wiem co.
Ale dziwi mnie fakt, że UPDATE i DELETE w tym samym kodzie, na tym samym połączeniu działają a INSERT nie!
nospor
Odeslano cie do przypietego tematu. Tam masz napisane wiecej co masz zrobic, np. jak wyswietlic potencjalny blad z bazy danych, czego aktualnie nie robisz. Zrob wiec to.
pjanek
Dziękuję za sugestie odnośnie zgłębienia mojej wiedzy, chętnie z tego skorzystałem. A więc sprawa przedstawia się następująco:
1. Środowisko pracy - to serwer plików synology, Apache Server 2.2, mysql to MariaDB i wersja php 5.6
2. Po włączeniu wyświetlania błędów
  1. ini_set('display_errors','1');

Pokazują się błędy ale jak wspominałem wcześniej typu Notice - do usunięcia ale w późniejszym terminie.
usunąłem również znak @ przed mysql_query, ale to nie wiele dało.
3. Włącvzyłem również
  1. mysql_query($ins) or die('BŁĄD:'.mysql_error());
i sprawdzanie wartości zmiennych
i tu już mam informacje o błędach, tylko nie wiem jak je wyeliminować. W skrócie to mam tak
  1. if(isset($_POST['dodaj'])){
  2. var_dump($lp);
  3. var_dump($data_wprowadzenia);
  4. var_dump($data_faktury);
  5. var_dump($nr_faktury);
  6. var_dump($kwota_brutto);
  7. var_dump($kooperant);
  8. var_dump($wydatki);
  9. var_dump($typ);
  10. var_dump($uwagi);
  11.  
  12.  
  13. $baza=mysql_connect("$nhost", "$nuser", "$nhaslo") or die ("Błąd: nie można połączyć się z mysqle-em");
  14. $odpbaza=mysql_select_db($nbaza, $baza) or die ("Błąd: nie można wybrać bazy danych $nbaza");
  15. $ins = mysql_query("INSERT INTO faktury SET data_wprowadzenia='$data_wprowadzenia ', data_faktury='$data_faktury', nr_faktury='$nr_faktury', kwota_brutto='$kwota_brutto', kooperant='$kooperant', rodzaj_wydatku_id='$wydatki', wydatek_sprzedaz_id='$typ', uwagi='$uwagi'");
  16.  
  17. mysql_query($ins) or die('BŁĄD:'.mysql_error());
  18. }

i po wysłaniu danych z formularza (name="dodaj") pojawiają się informacje o zmiennych i błąd:
  1. string(2) "51"
  2. string(10) "2020-04-09"
  3. string(10) "2020-04-09"
  4. string(6) "125/25"
  5. string(4) "1111"
  6. string(1) "7"
  7. string(1) "7"
  8. string(1) "1"
  9. string(4) "test" BŁĄD:Query was empty

i oczywiście dane nie zostały zapisane.

Zrobiłem ten sam test na edycji danych, która działa i również mam informacje o zmiennych i błąd
  1. string(2) "50"
  2. string(10) "2019-06-25"
  3. string(10) "2019-06-25"
  4. string(9) "2019/0111"
  5. string(9) "125600.00"
  6. string(1) "3"
  7. string(1) "1"
  8. string(1) "1"
  9. string(5) "coś6" BŁĄD:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1' at line 1

tyle, że z tą różnica, że mimo błędu dane zostały zaktualizowane.
Szczerze mówiąc te błędy nic mi nie mówią, oprócz tego, że zapytanie jest puste. Więc proszę o Waszą interpretacje tych błędów.
viking
Tu akurat dublujesz dwa razy mysql_query:
mysql_query($ins) or die('BŁĄD:'.mysql_error()); //$ins to już mysql_query
pjanek
Ok!, ale pomijając fakt że zdublowałem mysql query to dzięki temu że użyłem mysql_error() dowiedziałem się że mam błąd, który uniemożliwia mi wstawienie rekordu do bazy. I może na tym skupmy uwagę.
viking
Nic się nie dowiedziałeś bo źle napisałeś kod.
pjanek
poprawiłem kod
  1. $ins = mysql_query("INSERT INTO faktury SET data_wprowadzenia='$data_wprowadzenia ', data_faktury='$data_faktury', nr_faktury='$nr_faktury', kwota_brutto='$kwota_brutto', kooperant='$kooperant', rodzaj_wydatku_id='$wydatki', wydatek_sprzedaz_id='$typ', uwagi='$uwagi'");

I mysql_error() wyrzucił błąd, doesn't have a default value. Zmieniłem to ustawienie w sql-u na NULL i zadziałało.
Nie bardzo wiem co mu to przeszkadzało, skore inne kolumny mają ustawienie Brak, ale najważniejsze, że zadziałało i posunąłem się do przodu.
Dziękuję za naprowadzenie.
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-2024 Invision Power Services, Inc.