Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]wprowadzanie rekordów problemik
pablo_83
post 22.06.2009, 15:30:25
Post #1





Grupa: Zarejestrowani
Postów: 200
Pomógł: 16
Dołączył: 11.01.2009
Skąd: wrocław

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


witam ponownie mam jeszcze jeden problemik. wprowadzam z formularza dane do 3 tabel (klient, samochod, auto_rodzaj).
Klient może mieć parę samochodów i kilka samochodów może być tego samego rodzaju. Poniższy kod działa mi poprawnie w przypadku jeśli Klient i auto_rodzaj istnieją w bazie (do nich jest dodawany nowy samochód). Problem pojawia się jeśli dodaję nowego klienta, auto_rodzaj i samochód. Do żadnej tabeli nie jest nic wstawiane. Wydaje mi się że polecenie insert do tabeli samochód nie pobiera wartości idKlienta i idAuto które powinny być pobrane przez zapytanie select (oczywiście pewien tego nie jestem). Proszę o pomoc jak to rozwiązać bo sam nie daje rady.

  1. <?php
  2. if  (!$con)
  3.        {
  4.                echo ("Nie mogę nawiązać połączenia");
  5.        }
  6.           else
  7.        {
  8.                      
  9.              mysql_query("SET NAMES 'utf8'");
  10.              mysql_query("SET collation_connection = utf8_polish_ci");
  11.            
  12.             //-----------------------------------------------------porównanie
  13.            $zapytanie4 = "SELECT IdKlienta, Email FROM Klient WHERE Email = '$email'";
  14.            $wynik4 = mysql_query($zapytanie4);
  15.            $row1 = mysql_fetch_array($wynik4);
  16.                $id_kl = $row1['IdKlienta'];
  17.                
  18.            $zapytanie3 = "SELECT Marka, Model, Rocznik, Pojemnosc, IdAuta FROM Auto_rodzaj WHERE Marka = '$marka' && Rocznik = '$rocznik' && Model = '$model' && Pojemnosc = '$pojemnosc' ";
  19.            $wynik3 = mysql_query($zapytanie3);
  20.            $row = mysql_fetch_array($wynik3);
  21.                $id = $row['IdAuta'];
  22.            //--------------------------------------------------------------
  23.            
  24.               if (!(zapytanie3 && zapytanie4))
  25.            {
  26.            
  27.            $wynik = mysql_query("INSERT INTO Klient (Imie, Nazwisko, Ulica, Miasto, Email, Telefon,Dom)
  28.            VALUES ('$imie', '$nazwisko', '$ulica', '$miasto', '$email', '$telefon','$dom')")
  29.            or die(mysql_error());
  30.  
  31.            $wynik1 = mysql_query ("INSERT INTO Auto_rodzaj (Marka, Model, Pojemnosc, Rocznik)
  32.            VALUES ('$marka', '$model', '$pojemnosc','$rocznik')") or die(mysql_error());    
  33.            
  34.                      
  35.            $wynik2 = mysql_query ("INSERT INTO Samochod (IdKlienta, IdAuta, Rejestracja, Data)
  36.            VALUES ('$id_kl','$id','$rejestracja', '$data')") or die(mysql_error());
  37.            mysql_close() or die(mysql_error());
  38.            }
  39.            
  40.            else{
  41.            $id_kl = $row1['IdKlienta'];
  42.            $id = $row['IdAuta'];
  43.  
  44.            $wynik2 = mysql_query ("INSERT INTO Samochod (IdKlienta, IdAuta, Rejestracja, Data)
  45.            VALUES ('$id_kl','$id','$rejestracja', '$data')") or die(mysql_error());
  46.            mysql_close() or die(mysql_error());
  47.            }
  48.        
  49.                  
  50.            if ($wynik2 )
  51.            {
  52.            echo 'Klient został dodany prawidłowo';
  53.            }
  54.            else {
  55.            echo 'Wystąpił błąd przy dodawaniu klienta';
  56.                    }
  57.            
  58.            }
  59. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
PanGuzol
post 22.06.2009, 16:16:19
Post #2





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


W warunku dodajesz rekordy jeśli wwcześniejsze zapytania zwrócą błędy, a chyba chcesz jeśli zwrócą 0 rekordów.
Nowe id możesz pobrać funkcją mysql_insert_id" title="Zobacz w manualu PHP" target="_manual


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
pablo_83
post 22.06.2009, 17:06:22
Post #3





Grupa: Zarejestrowani
Postów: 200
Pomógł: 16
Dołączył: 11.01.2009
Skąd: wrocław

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


  1. <?php
  2. if  (!$con)
  3.        {
  4.                echo ("Nie mogę nawiązać połączenia");
  5.        }
  6.          
  7.        else
  8.        {
  9.            
  10.            
  11.              mysql_query("SET NAMES 'utf8'");
  12.              mysql_query("SET collation_connection = utf8_polish_ci");
  13.            
  14.            
  15.            
  16.            //-----------------------------------------------------porównanie
  17.            $zapytanie4 = "SELECT IdKlienta, Email FROM Klient WHERE Email = '$email'";
  18.            $wynik4 = mysql_query($zapytanie4);
  19.            $row1 = mysql_fetch_array($wynik4);
  20.                $id_kl = $row1['IdKlienta'];
  21.                
  22.            $zapytanie3 = "SELECT Marka, Model, Rocznik, Pojemnosc, IdAuta FROM Auto_rodzaj WHERE Marka = '$marka' && Rocznik = '$rocznik' && Model = '$model' && Pojemnosc = '$pojemnosc' ";
  23.            $wynik3 = mysql_query($zapytanie3);
  24.            $row = mysql_fetch_array($wynik3);
  25.                $id = $row['IdAuta'];
  26.            
  27.            //---------------------------------------------------------
  28.          
  29.            if ((zapytanie3 && zapytanie4) ==0 )
  30.            {
  31.            
  32.            $wynik = mysql_query("INSERT INTO Klient (Imie, Nazwisko, Ulica, Miasto, Email, Telefon,Dom)
  33.            VALUES ('$imie', '$nazwisko', '$ulica', '$miasto', '$email', '$telefon','$dom')")
  34.            or die(mysql_error());
  35.            $IdKlienta = mysql_insert_id();
  36.            
  37.            
  38.            $wynik1 = mysql_query ("INSERT INTO Auto_rodzaj (Marka, Model, Pojemnosc, Rocznik)
  39.            VALUES ('$marka', '$model', '$pojemnosc','$rocznik')") or die(mysql_error());    
  40.            $IdAuta = mysql_insert_id();
  41.            
  42.            
  43.           // echo $IdKlienta.'<br> - zmienna klienta';
  44.           // echo $IdAuta.' - zmiennna idauto';
  45.            
  46.                    
  47.            $wynik2 = mysql_query ("INSERT INTO Samochod (IdKlienta, IdAuta, Rejestracja, Data)
  48.            VALUES ('$IdKlienta','$IdAuta','$rejestracja', '$data')") or die(mysql_error());
  49.            mysql_close() or die(mysql_error());
  50.            }
  51.            
  52.            else{
  53.            $id_kl = $row1['IdKlienta'];
  54.            $id = $row['IdAuta'];
  55.            $wynik2 = mysql_query ("INSERT INTO Samochod (IdKlienta, IdAuta, Rejestracja, Data)
  56.            VALUES ('$id_kl','$id','$rejestracja', '$data')") or die(mysql_error());
  57.            mysql_close() or die(mysql_error());
  58.            }
  59.        
  60.                      
  61.            if ($wynik2 )
  62.            {
  63.            echo 'Klient został dodany prawidłowo';
  64.            }
  65.            else {
  66.            echo 'Wystąpił błąd przy dodawaniu klienta';
  67.                    }
  68.            
  69.            }
  70. ?>


dodałem mysql_insert_id jak powyżej lecz nadal wyskakuje mi błąd:
Cannot add or update a child row: a foreign key constraint fails (`db772113/Samochod`, CONSTRAINT `Samochod_ibfk_28` FOREIGN KEY (`IdAuta`) REFERENCES `Auto_rodzaj` (`IdAuta`))

co może być jego przyczynąquestionmark.gif (oczywiście wpisy nie są dodawane) help
Go to the top of the page
+Quote Post
PanGuzol
post 22.06.2009, 21:40:37
Post #4





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


A jakich wartości się spodziewasz, ze mogą wystąpić pod zmiennymi $zapytanie3 i $zapytanie4 ?


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
pablo_83
post 22.06.2009, 22:35:50
Post #5





Grupa: Zarejestrowani
Postów: 200
Pomógł: 16
Dołączył: 11.01.2009
Skąd: wrocław

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


nie zabardzo rozumiem, mam źle tą instrukcje if($zapytnie3 && $zapytanie4)questionmark.gif

one mają przedstawiać rekord z bazy jeżeli nie istnieje to wykonujemy to co jest w środku instrukcji...

mam okrutne wrażenie że namotałem w tej instrukcji, proszę o pomoc i wyjaśnienie co jest źle
Go to the top of the page
+Quote Post
Andaramuxo
post 22.06.2009, 22:42:56
Post #6





Grupa: Zarejestrowani
Postów: 150
Pomógł: 15
Dołączył: 18.03.2009

Ostrzeżenie: (10%)
X----


A spróbuj z !isset.
A to Ci dobrze działa?:
Kod
<?php
if ($wynik2 )
           {
           echo 'Klient został dodany prawidłowo';
           }
           else {
           echo 'Wystąpił błąd przy dodawaniu klienta';
                   }
?>


--------------------
Go to the top of the page
+Quote Post
pablo_83
post 22.06.2009, 22:49:17
Post #7





Grupa: Zarejestrowani
Postów: 200
Pomógł: 16
Dołączył: 11.01.2009
Skąd: wrocław

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


z !isset efekt jest taki sam.
instukcja if (wynik2) odkąd jest ten błąd wogóle nie działa, w kodzie mam wykomentowane echo 'mysql_insert_id' jeśli je chce wywołać też nic się nie dzieje wogóle nie reaguje.

Połączenie miedzy tabelami jest restrict - restrict przy resrict -cascade jest to samo (ogólnie połączenia są w porządku ponieważ jeśli klient i auto_rodzaj istnieje to bez problemu dodawany jest nowy samochód z poprawnymi kluczami obcymi ).

ja nie mam pojęcia już gdzie co jest źle.

HELP
Go to the top of the page
+Quote Post
VegA
post 22.06.2009, 22:50:21
Post #8





Grupa: Zarejestrowani
Postów: 70
Pomógł: 3
Dołączył: 1.04.2007
Skąd: Gdańsk / Bydgoszcz

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


A spróbuj tak

  1. <?php
  2. if (!empty($wynik2))
  3.           {
  4.           echo 'Klient został dodany prawidłowo';
  5.           }
  6.           else {
  7.           echo 'Wystąpił błąd przy dodawaniu klienta';
  8.           }
  9. ?>
Go to the top of the page
+Quote Post
pablo_83
post 22.06.2009, 22:54:33
Post #9





Grupa: Zarejestrowani
Postów: 200
Pomógł: 16
Dołączył: 11.01.2009
Skąd: wrocław

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


błąd musi być gdzieś indziej bo on wogóle nie wykonuje instrukcji if (wynik2)
nie wywołuje echo 'IdKlienta' <- (mysql_insert_id)

tak jakby mu coś wcześniej nie pasowało
Go to the top of the page
+Quote Post
Andaramuxo
post 22.06.2009, 23:00:09
Post #10





Grupa: Zarejestrowani
Postów: 150
Pomógł: 15
Dołączył: 18.03.2009

Ostrzeżenie: (10%)
X----


Jeżeli masz
Kod
$zapytanie4 = "SELECT IdKlienta, Email FROM Klient WHERE Email = '$email'";
           $wynik4 = mysql_query($zapytanie4);
           $row1 = mysql_fetch_array($wynik4);
               $id_kl = $row1['IdKlienta'];

to pod tym daj
Kod
echo $id_kl;

i powiedz, czy się wyświetli id klienta.


--------------------
Go to the top of the page
+Quote Post
pablo_83
post 22.06.2009, 23:05:32
Post #11





Grupa: Zarejestrowani
Postów: 200
Pomógł: 16
Dołączył: 11.01.2009
Skąd: wrocław

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


nie wyświetla, no ale to raczej dobrze bo ja dodaje nowego klienta który jest dodawany w instrukcji if poniżej zapytania sprawdzają czy dany klient już istnieje jeśli tak do dodają tylko samochód (else) i przypisują do niego klucze obce z klienta i auto_rodzaj.
wtedy tez instrukcja if (wynik2) działa poprawnie. wszystko się sypie jak dodaje nowego klienta, auto_rodzaj i samoch
Go to the top of the page
+Quote Post
Andaramuxo
post 22.06.2009, 23:15:00
Post #12





Grupa: Zarejestrowani
Postów: 150
Pomógł: 15
Dołączył: 18.03.2009

Ostrzeżenie: (10%)
X----


A zamiast
Kod
if (!(zapytanie3 && zapytanie4))

Kod
if (!('$id' && '$id_kl'))


--------------------
Go to the top of the page
+Quote Post
pablo_83
post 22.06.2009, 23:22:30
Post #13





Grupa: Zarejestrowani
Postów: 200
Pomógł: 16
Dołączył: 11.01.2009
Skąd: wrocław

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


no zajebiście biggrin.gif:D poszło biggrin.gif wielkie dzięki
Go to the top of the page
+Quote Post
PanGuzol
post 23.06.2009, 09:18:20
Post #14





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Widzę, że nikt poza mną już nie zauważył, iż w zmiennych $zapytanie3 i $zapytanie4 było zapytanie a nie jego wynik.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
pablo_83
post 23.06.2009, 12:24:35
Post #15





Grupa: Zarejestrowani
Postów: 200
Pomógł: 16
Dołączył: 11.01.2009
Skąd: wrocław

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


PanGuzol zczaiłem że było zapytanie a nie wynik. Tylko tak to już jest jak się za długo siedzi przy własnym kodzie i się mota z wieloma pomysłami na sekunde. biggrin.gif

najważniejsze że rozwiązanie udało się znaleźć i że wiem skąd i dlaczego. Dzięki wielkie jeszcze raz
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: 14.08.2025 - 07:41