Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]wprowadzanie rekordów problemik
Forum PHP.pl > Forum > Przedszkole
pablo_83
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. ?>
PanGuzol
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
pablo_83
  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
PanGuzol
A jakich wartości się spodziewasz, ze mogą wystąpić pod zmiennymi $zapytanie3 i $zapytanie4 ?
pablo_83
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
Andaramuxo
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';
                   }
?>
pablo_83
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
VegA
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. ?>
pablo_83
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
Andaramuxo
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.
pablo_83
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
Andaramuxo
A zamiast
Kod
if (!(zapytanie3 && zapytanie4))

Kod
if (!('$id' && '$id_kl'))
pablo_83
no zajebiście biggrin.gif:D poszło biggrin.gif wielkie dzięki
PanGuzol
Widzę, że nikt poza mną już nie zauważył, iż w zmiennych $zapytanie3 i $zapytanie4 było zapytanie a nie jego wynik.
pablo_83
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
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.