Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wstawianie danych do dwoch tabel jednoczesnie
Forum PHP.pl > Forum > Przedszkole
mattii
przez formularz chciałbym oddawac sobie dane do bazy

oto kod ktory je ma dodawac:

  1.  
  2. <?php
  3.  
  4.  
  5.  
  6. $login=$_POST['login'];
  7. $haslo=$_POST['haslo'];
  8. $imie=$_POST['imie'];
  9. $nazwisko=$_POST['nazwisko'];
  10. // reszta danych
  11.  
  12.  
  13. require "db_connect.php";
  14. // wywoluje funkcje db_connect()
  15. db_connect();
  16.  
  17. $zapytanie1="insert into osoba (id_osoby,imie, nazwisko) VALUES (NULL,'".$imie."','".$nazwisko."' )";
  18.  
  19. $id_osoby= mysqli_insert_id($bd_lacz);
  20.  
  21. $wynik1 = $bd_lacz->query($zapytanie1);
  22.  
  23. $zapytanie2="insert into uzytkownicy(id_usera,id_osoby, login, haslo) Values (NULL,'".$id_osoby."','".$login."','".$haslo."', )";
  24. $wynik2 = $bd_lacz->query($zapytanie2);
  25.  
  26. if($wynik1) {
  27. echo "Osoba dodana do bazy.";
  28. }
  29.  
  30. if (!$wynik1) {
  31. echo "Osoba nie została dodana do bazy. ";
  32. }
  33.  
  34. if($wynik2) {
  35. echo "Użytkownik dodany do bazy.";
  36. }
  37.  
  38. if (!$wynik2) {
  39. echo "Użytkownik nie został dodany do bazy. ";
  40. }
  41.  
  42.  
  43. ?>
  44.  
  45.  
  46.  



no i jeszcze funkcja laczenia z baza:

  1.  
  2. <?php
  3. /******************************************************
  4. * db_connect.php
  5. * konfiguracja połączenia z bazą danych
  6. ******************************************************/
  7.  
  8. function db_connect() {
  9.  
  10. global $bd_lacz;
  11.  
  12. @ $bd_lacz = new mysqli('localhost', 'root', '', 'baza');
  13.  
  14. if (mysqli_connect_errno()) {
  15. echo 'Połaczenie z baza danych nie powiodło się: '.mysqli_connect_error();
  16. exit();
  17. }
  18.  
  19. }
  20.  
  21. ?>



efekt jest taki ze osobę faktycznie dodaje, ale użytkownika już nie - wydaje mi sie, ze problem jest z przekazaniem od osoby do tabeli użytkowników?? Jak to ma wyglądać poprawnie questionmark.gif
DiH
  1. $zapytanie2="insert into uzytkownicy(id_usera,id_osoby, login, haslo) Values (NULL,'".$id_osoby."','".$login."','".$haslo."', )";


A czy przypadkiem ten przecinek nie jest tu niepotrzebny? Do uzytkownicy wrzucasz id_usera, id_osoby, login, haslo, czyli 4 argumenty. Natomiast w VALUES (nie zaszkodzi napisać z caps-em, choćby dla czytelności) jest: NULL,id_osoby,login,haslo, czyli także cztery argumenty. A mimo to po $haslo jest przecinek, tak jakby miał tam być piąty argument.

Pozdrawiam
mattii
Niestety usunięcie przecinka nic nie dało :/
emtiej
  1. #
  2. #
  3. <?php
  4. #
  5. /******************************************************
  6. #
  7. * db_connect.php
  8. #
  9. * konfiguracja połączenia z bazą danych
  10. #
  11. ******************************************************/
  12. function db_connect() {
  13. global $bd_lacz;
  14. @ $bd_lacz = new mysqli('localhost', 'root', '', 'baza');
  15. if (mysqli_connect_errno()) {
  16. echo 'Połaczenie z baza danych nie powiodło się: '.mysqli_connect_error();
  17. exit();
  18. }
  19.  
  20. return $db_lacz;
  21.  
  22.  
  23. }
  24.  
  25. ?>


Nie powinno być tak?
Wtedy
  1. $lacz = db_connect();
  2. $wynik = $lacz->query($zapytanie);


Co do zapytań to nie wiem jaki jest typ pola user_id, jeżeli ma auto_increment no to nie podajesz NULL a ''(dwa apostrofy), czyli:
  1. $zapytanie1="insert INTO `osoba` (id_osoby,imie, nazwisko) VALUES ('','$imie','$nazwisko')"; // dla ułatwienia i przejrzystości zamiast cudzysłowów dawaj apostrofy, a jeżeli już dajesz cudzysłowy to poprzedzaj je backslashem \


jeżeli masz auto_increment w polu id_osoby i id_user czy jak tam to nazwałeś to podajesz pustą wartość, a wartość sama się doda
wizard144
Cytat
Co do zapytań to nie wiem jaki jest typ pola user_id, jeżeli ma auto_increment no to nie podajesz NULL a ''(dwa apostrofy), czyli:


Czy poda ' ' czy NULL efekt będzie taki sam...
mattii
Cytat(emtiej @ 31.01.2010, 15:46:46 ) *
  1. #
  2. #
  3. <?php
  4. #
  5. /******************************************************
  6. #
  7. * db_connect.php
  8. #
  9. * konfiguracja połączenia z bazą danych
  10. #
  11. ******************************************************/
  12. function db_connect() {
  13. global $bd_lacz;
  14. @ $bd_lacz = new mysqli('localhost', 'root', '', 'baza');
  15. if (mysqli_connect_errno()) {
  16. echo 'Połaczenie z baza danych nie powiodło się: '.mysqli_connect_error();
  17. exit();
  18. }
  19.  
  20. return $db_lacz;
  21.  
  22.  
  23. }
  24.  
  25. ?>


Nie powinno być tak?
Wtedy
  1. $lacz = db_connect();
  2. $wynik = $lacz->query($zapytanie);


Co do zapytań to nie wiem jaki jest typ pola user_id, jeżeli ma auto_increment no to nie podajesz NULL a ''(dwa apostrofy), czyli:
  1. $zapytanie1="insert INTO `osoba` (id_osoby,imie, nazwisko) VALUES ('','$imie','$nazwisko')"; // dla ułatwienia i przejrzystości zamiast cudzysłowów dawaj apostrofy, a jeżeli już dajesz cudzysłowy to poprzedzaj je backslashem \


jeżeli masz auto_increment w polu id_osoby i id_user czy jak tam to nazwałeś to podajesz pustą wartość, a wartość sama się doda


bez tego returna tez mi z baza łączy na innych plikach..

wracajac do glownego tematu blad juz sie nie pokazuje poprawilem
  1. #
  2. $zapytanie2="insert into uzytkownicy(id_usera,id_osoby, login, haslo) Values (NULL,'".$id_osoby."','".$login."','".$haslo."', )";


na

  1. #
  2. $zapytanie2="insert into uzytkownicy(id_usera,osoba_id_osoby, login, haslo) Values (NULL,'".$id_osoby."','".$login."','".$haslo."', )";


tylko problem jest taki ze przypisuje to usera id_osoby wartosc 0, a nie ta jaka faktycznie id_osoby ma w tabeli osoba...
w czym rzecz questionmark.gif

dodałem:
  1. mysqli_query($bd_lacz, $zapytanie1);



i wszystko działa winksmiley.jpg

tu znalazłem odpowiedź:

http://pl.php.net/manual/pl/mysqli.insert-id.php

dzieki winksmiley.jpg
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.