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
MateuszS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Nie zagłębiając się w kod, pierwsze co mi się w oczy rzuciło to brak value w option, value czyli wartość jaką wyślesz POSTEM, jeżeli jej nie ma to lipa.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 14:54