[php mysql] Problem z dodaniem rekordu do bazy


(Benokogel) #1

Witam wszystkich.

Robię na własne potrzeby niewielką bazę, w sumie to na razie tylko szkielet jednej tabeli, ale do rzeczy:

wyświetlanie zawartości tabeli działa bez problemów, jednak jeśli chcę za pomocą formularza dodać nowy rekord do bazy wyrzuca mi błąd (widoczne rekordy zostały dodane ręcznie do tabeli za pomocą phpmyadmin)

problembaza.jpg

poniżej kody

plik pojazdy.php http://wklejto.pl/115428

oraz formularz form_trucks.php http://wklejto.pl/115427

czy mógłby ktoś powiedzieć co źle zrobiłem ?

będe bardzo wdzięczny


(MietekN) #2

Zamień w forum_trucks.php (linia nr 3):

if ($_POST['wprowadz']) {

na

if (isset($_POST['wprowadz'])) {

(Benokogel) #3

dzięki za pomoc :slight_smile:

poprawiłem i kod wygląda teraz tak: http://www.wklejto.pl/115443

niestety dodawanie nadal nie działa, kończy skrypt na : echo "

Błednie podane dane";

jakieś pomysły co jeszcze jest źle napisane ?


(Drobok) #4

Brakuje ci klamry przed else z tego co widzę. PS jak sprawdzisz sam przycisk to będzie wyświetlać ci złe dane przy odpaleniu skryptu.


(MietekN) #5

Ten komunikat wyświetlany jest na podstawie

if (empty($nr_rej_wpr) && empty($marka_wpr) && is_numeric($data_prod_wpr) && $nr_nadw_wpr > 0){

Jeśli któryś z tych warunków nie jest prawdą wyświetli się komunikat o błędnych danych. Pozostaje tobie dojść który np eliminując tymczasowo kolejne z warunku aż będzie ok lub wyświetlając je poprawiając np linie z błędem na:

echo "
 Błednie podane dane {$nr_rej_wpr} {$marka_wpr} {$data_prod_wpr} {$nr_nadw_wpr}";

Odnośnie:

Z klamrami wygląda wszystko ok. Kolega drobok mógł źle spojrzeć ponieważ else w linii 19 nie dotyczy if'a z 1 linii tylko z 10. Brak tabulacji na początku mogło złudzić. Proponuje dorobić tej w linii i w kolejnej tabulacje by było to dobrze widoczne.


(Benokogel) #6

po dodaniu

echo "
 Błednie podane dane {$nr_rej_wpr} {$marka_wpr} {$data_prod_wpr} {$nr_nadw_wpr}";

wypisuje wszystkie dane chcę przesłać do bazy, niezależnie czy warunki podane są wszystkie czy np. tylko jeden :frowning:

już sam nie wiem co spaprałem


(przemol96) #7

Spróbuj użyć tego kodu:

<?php


if (isset($_POST['wprowadz'])) { 


  $nr_rej_wpr = $_POST['nr_rej'];

  $marka_wpr = $_POST['marka'];

  $data_prod_wpr = $_POST['data_prod'];

  $nr_nadw_wpr = $_POST['nr_nadw'];

  //sprawdzenie poprawności wpisanych danych

  if (!empty($nr_rej_wpr) && !empty($marka_wpr) && is_numeric($data_prod_wpr) && !empty($nr_nadw_wpr)){


  $zapytanie = "INSERT INTO trucks SET nr_rej='$nr_rej_wpr', marka='$marka_wpr', data_prod='$data_prod_wpr', nr_nadw='$nr_nadw_wpr'";

  $wynik = mysql_query($zapytanie) or die ('Nie dodano rekordu, błąd :'. mysql_error());

  echo "
 Ilość dodanych rekordów do bazy :". mysql_affected_rows($polaczenie);


        } else {

  echo "
 Błednie podane dane";

	}

}


?>

(Benokogel) #8

dziękuję wszystkim za pomoc

sposób kolegi przemol96 działa w 100% :slight_smile:

ps. tematu proszę jeszcze nie zamykać, być może pojawią się kolejne pytania z mojej strony

-- Dodane 31.01.2012 (Wt) 17:21 --

Panowie i panie, mam następne pytanie i mały problem, chcę aby mozna było usuwać i edytować wpisy w bazie, dopisałem kod ale działa tylko usuwanie i to nie do końca jak chciałem, gdyż nie odświeża automatycznie strony, edycja nie działa w ogóle, próba edycji usuwa wpisy

mógłby ktoś sprawdzić kod ?? będę wdzięczny

<?php

	include ('naglowek.php');

	include ('form_trucks.php');


	echo '';


	$zapytanie = 'SELECT id, nr_rej, marka, data_prod, nr_nadw FROM trucks';


	$wynik = mysql_query($zapytanie, $polaczenie) or die(mysql_error());

?>

?php // usuwanie pojedyńczego pojazdu z tabeli // pamięć o zabezpieczeniu $_id_do_usuniecia !!
Pojazdy aktualnie znajdujące się w bazie:
Numer rejestracyjny Marka Data produkcji Numer nadwozia
" . $rekord['nr_rej'] . " " . $rekord['marka'] . " " . $rekord['data_prod'] . " " . $rekord['nr_nadw'] . " drop.png edit.png


(Grzelix) #9
  1. odnośnie delete i braku odświeżania - zamień kolejność jeśli do usunięcia to usuń a potem zrób selecta na pozostałych rekordach.

  2. odnośnie edit - to gdzie ty masz zapytanie dla edycji? na razie masz zapytanie które uzupełnia formularz, natomiast akcja formularza nie jest obsługiwana ( przynajmniej ja nie znalazłem w tym kawałku kodu)


(Benokogel) #10

dzięki za info, z pierwszym problemem sobie poradziłem, dzięki za naprowadzenie, nadal walcze z drugim, ehh jeszcze dużo nauki przedemną

-- Dodane 31.01.2012 (Wt) 23:05 --

jednak będę potrzebował Waszej pomocy, jeśli kliknę edycje rekordu to kasuje w/w rekord i wyświetla błąd

Notice: Undefined variable: nr_rej in C:\xampp\htdocs\mps\pojazdy.php on line 82

Notice: Undefined variable: marka in C:\xampp\htdocs\mps\pojazdy.php on line 82

Notice: Undefined variable: data_prod in C:\xampp\htdocs\mps\pojazdy.php on line 82

Notice: Undefined variable: nr_nadw in C:\xampp\htdocs\mps\pojazdy.php on line 82

Aktualizacja powiodła się

kod: http://wklejto.pl/116031 tak będzie lepiej widoczny


(Drobok) #11

Masz pobrać wszystkie dane a nie tylko id (bo przecież chcesz je wpisać)

Nie przypisujesz input do zmiennych to potem masz, że niezidentyfikowana zmienna :slight_smile:


(Grzelix) #12

zastanawiało mnie czemu piszesz że przy akcji edit usuwa ci rekord i zauważyłem tą konstrukcje:

if(isset($_GET['akcja'])=='delete')

?? funckja isset zwraca wartość boolowską, więc porównywanie tego to jakiegoś stringa jest co najmniej dziwne. to powinno wyglądać raczej tak:

if(isset($_GET['akcja']) ){

  if ($_GET['akcja']=='delete'){

  ....

  }

  if ($_GET['akcja']=='edit''){

  ....

  }

ewentualnie z wykorzystaniem konsturkcji switch przy większej liczbie akcji.

i tu pewnie leży odpowiedź na twój ostatni post. Kasujesz dane przy akcji edit i potem nie ma ich już w bazie więc system nie może ich pobrać.


(Benokogel) #13

poprawiłem kod jak umiałem http://wklejto.pl/116065 , zniknął błąd kasowania zamiast edycji (uczę się z kursu, gdzie było tak to zrobione i tam działało)

teraz po kliknięciu edytuj formularz dostaje dane, tylko nie można ich zapisać i pojawia się komunikat

Notice: Undefined index: id in C:\xampp\htdocs\mps\pojazdy.php on line 22

Notice: Undefined index: nr_rej in C:\xampp\htdocs\mps\pojazdy.php on line 23

Notice: Undefined index: marka in C:\xampp\htdocs\mps\pojazdy.php on line 24

Notice: Undefined index: data_prod in C:\xampp\htdocs\mps\pojazdy.php on line 25

Notice: Undefined index: nr_nadw in C:\xampp\htdocs\mps\pojazdy.php on line 26

Notice: Use of undefined constant wynik5 - assumed 'wynik5' in C:\xampp\htdocs\mps\pojazdy.php on line 32

Aktualizacja powiodła się

i znowu jestem w czarnej d....


(Grzelix) #14
if ($_GET['akcja']=='edit') {


        $id_ed = $_POST['id'];

Sprawdzasz GET pobierasz z POST w linii 32 masz

wynik5

a powinno być

$wynik5

(czytacz) #15

linijka 98, formularz wywołuje stronę ale bez akcji. Musisz wpisać coś w stylu "serwer?akcja=edit" w akcji formularza.

@grzelix

Możesz wysłać dane z formularza metodą POST wołając o stronę GETem


(Benokogel) #16

dzięki za wszystkie informacje, działa, choć jeszcze nie do końca tak jak chciałem, ale będę dalej próbował to ogarnąć :slight_smile: