Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Klucze obce, inserty
loogin
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.01.2010

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


Witam ponownie, mam kwestię, której nie ogarniam, dlatego proszę o pomoc.
Rzecz ma się tak:

Fragment formularza związany z nieszczęsnym kontrahentem. Manipulacje nazwami forumularza, a nawet tabelami nic nie dały.
  1. dostawca:<br>
  2. <select name="kontrahent" id="kontrahent">
  3. <?php
  4. $res = mysql_query ("SELECT nazwa FROM kontrahent ");
  5. while($row = mysql_fetch_array($res))
  6. {
  7. $kontrahent= $row["nazwa"];
  8. echo "<option>$kontrahent</option>";
  9. }
  10. echo "</select>";
  11. ?>

  1. $kontrahent2 = $_POST['kontrahent'];
  2.  
  3. $kontrahent_id = mysql_query ("SELECT idkontrahent FROM kontrahent WHERE nazwa='$kontrahent2'");
  4. echo mysql_result($kontrahent_id,0,0); //sprawdzam, czy pobiera dobre id, ale obawiam się, ze nie tak powinno to być, booo ;)
  5. //print_r($katid) // wywala błąd Resource id #7, z którym nie wiem co począć

i dalej coś, czego w ogóle nie mogę rozwiązać, a zapewnie łączy się z powyższym
  1. $kon_obcy= mysql_query("INSERT INTO produkt SET idkontrahent='$kontrahent_id'");

Błąd
Cannot add or update a child row: a foreign key constraint fails (`sklepik`.`produkt`, CONSTRAINT `kontrahent` FOREIGN KEY (`idkontrahent`) REFERENCES `kontrahent` (`idkontrahent`) ON DELETE CASCADE ON UPDATE CASCADE)

Tabela kontrahentów jest wypełniona, a taki sposób uzupełniania wykorzystuję w kilku miejscach – w jednych działa, w innych nie (zawsze ten sam rodzaj błędu) i nie wiem robię źle.

Następnie łączenie produktu z odpowiednią kategorią:
  1. $produkt = mysql_query("INSERT INTO produkt SET nazwa='$nazwa', ilosc='$ilosc', itd.'");
  2. $klucz_produkt=mysql_insert_id();
  3. $kat_pr = mysql_query("INSERT INTO produkt_has_kategoria SET produkt_idprodukt='$klucz_produkt'");
Sam produkt uzupełnia się prawidłowo, jednak tabela produkt_has_kategoria pozostaje pusta.

Podobne rozwiązanie w przypadku kontrahenta i adresu działa:
  1. $adres = mysql_query("INSERT INTO adres SET miejscowosc='$miejscowosc', kod_pocztowy='$kod_pocztowy' itd.");
  2. $klucz_adres=mysql_insert_id();
  3. $info = mysql_query("INSERT INTO kontrahent SET nazwa='$nazwa' itd.");
  4. $klucz_info=mysql_insert_id();
  5.  
  6. $konadres = mysql_query("INSERT INTO kontrahent_has_adres SET kontrahent_idkontrahent='$klucz_info', adres_idadres='$klucz_adres'");


Może trochę za dużo tych kodów, ale właśnie rzecz w tym, że tu działa, a tam nie. Jeśli można, proszę mi wskazać co doczytać, aby rozwiązać te problemy (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


To zapytanie działa prawidłowo i robi to co ma robić. Najlepiej pokaż cały kod, choć jeśli są to dwa osobne pliki, to może być problem. Jeżeli natomiast jest to jeden plik, to trzeba będzie zmienić kolejność wykonywania zapytań.

Jeżeli kod jest napisany w takiej kolejności, w jakiej go wyświetlałaś i wszystko znajduje się w jednym pliku, to możemy zamiast INSERT użyć UPDATE
  1. $kon_obcy= mysql_query("UPDATE produkt SET idkontrahent='" . $lal['idkontrahent'] . "' WHERE idprodukt=" . $klucz_produkt);
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 15.10.2025 - 10:04