Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[PHP][MySQL] Pobranie identyfikatora z bazy.

zbychoxD 10 Sty 2013 21:00 2205 9
  • #1 10 Sty 2013 21:00
    zbychoxD
    Poziom 11  

    Witam , mam pytanie, czy jest możliwość wypisania w formularzu id jakie będzie posiadł nowo dodany rekord. Załóżmy że mam w bazie
    id, nazwa
    1,cos
    2,cos2
    3,cos3

    Teraz wchodzę w panel admina chce dodać nowy rekord i w nagłówku mi pisze że będzie dodawany rekord który otrzyma id = 4. Ale co się stanie jeśli usune rekord 3
    w bazie bedą dwa pierwsze wtedy nastepny nie otrzyma id o nr 3 tylko 4, i np jak ja myślałem żeby wypisać max id to wtedy nie zda egzaminu.

    Teraz mi coś wpadło do głowy, żeby utworzyć dodatkową tabelę która będzie zapisywała id które są tworzone, a mimo usunięcia one zostaną. i wtedy będe pobierał max(pole) przy tworzeniu nowego rekordu z tej tabeli + 1 (++)

    0 9
  • #2 10 Sty 2013 22:08
    marcinj12
    Poziom 40  

    Do tego celu używa się pola autoinkremantującego, w MySqlu jest to AUTO_INCREMENT, zobacz np. tuaj.
    Nawet jeżeli usuwasz rekord o id = 3, to kolejny ma mieć id = 4 i tak ma być.

    0
  • #3 10 Sty 2013 22:10
    zbychoxD
    Poziom 11  

    to wiem, ale chcąc dowiedzieć się jakie id otrzyma dodany rekord przed dodaniem go nie otrzymam prawdziwej informacji pobierając max(id)+1.

    0
  • Pomocny post
    #4 11 Sty 2013 00:49
    marcinj12
    Poziom 40  

    Przed dodaniem??? Dziwne, szczerze mówiąc nie wiem do czego coś takiego może się przydać, ale...
    Zwykle wystarczy pobranie ostatniego ID po wstawieniu np. wykorzystać w PHPie: mysql_insert_id() albo SELECT LAST_INSERT_ID(); w MySql.
    Skoro jednak potrzebujesz przed, to spróbuj:

    Kod: sql
    Zaloguj się, aby zobaczyć kod

    oczywiście ze swoimi nazwami bazy i tabeli. Nie testowałem, ale na necie tak piszą, więc...

    0
  • #5 11 Sty 2013 14:05
    zbychoxD
    Poziom 11  

    Super, działa, potrzebne mi jest to, bo mam formularz, dwie tabele w jednym dodaje klienta i za jednym razem chce wysłać numer id tworzonego klienta do tabeli ktora trzyma adres obrazka wysłanego razem z formularzem.

    0
  • Pomocny post
    #6 11 Sty 2013 14:27
    marcinj12
    Poziom 40  

    zbychoxD napisał:
    Super, działa, potrzebne mi jest to, bo mam formularz, dwie tabele w jednym dodaje klienta i za jednym razem chce wysłać numer id tworzonego klienta do tabeli ktora trzyma adres obrazka wysłanego razem z formularzem.
    Tak też przypuszczałem... Ja na Twoim miejscu bym jednak podszedł do tego inaczej:
    krok 1. rozpoczął transakcję,
    krok2. dodał klienta do tabeli,
    krok 3. jeżeli sukces, to za pomocą last_insert_id() albo podobnego mechanizmu odzyskał do zmiennej w phpie ostatnie wstawione ID
    krok 4. wstawił dane do drugiej tabli (z adresem obrazka), podając uzyskane wcześniej ID klienta ze zmiennej
    krok 5. zatwierdził transakcję
    W przypadku jakiegokolwiek błędu (powyższe kroki w bloku try ... catch...): wycofał transakcję.

    Różnica jest taka, że w "moim" rozwiązaniu masz pewność, że klient został wstawiony i z tą pewnością wysyłasz kolejne dane, natomiast w "Twoim" rozwiązaniu możesz jedynie liczyć na to, że operacja wstawienia klienta się powiedzie (pobierasz ID przed jakąkolwiek próbą wstawienia rekordu do bazy) - jeżeli nie, zostajesz ze wstawionym rekordem obrazka, który odnosi się do nieistniejącego ID klienta...

    0
  • Pomocny post
    #8 11 Sty 2013 16:10
    marcinj12
    Poziom 40  

    zbychoxD napisał:
    takie coś jak tutaj: http://guzik.net.pl/blog/2012/05/php-i-transakcje-w-mysql/ . i taki kod dać w srodku isset'a przycisku.
    Dokładnie. Z tą różnicą, że między pierwszym (wstawienie klienta) a trzecim (wstawienie adresu) zapytaniem wstawiasz kod do uzyskania numeru ostatniego ID (możesz za pomocą funkcji PHP, możesz też zapytaniem SQL o LAST_INSERT_ID).

    0
  • #9 12 Sty 2013 13:30
    zbychoxD
    Poziom 11  

    zrobiłem to beż transakcji. Jest możliwość sprawdzenia czy input typu radio jest checked?
    albo w javiescript zrobić takie coś że jak klikne na dane przycisk to przyjmuje wartość 1 a reszta 0.

    0
  • #10 12 Sty 2013 16:52
    marcinj12
    Poziom 40  

    Twój wybór...
    Dużo przykładów zaznaczania radio buttona w Javascripcie znajdziesz na google, np. tutaj albo tutaj.
    Na odznaczenie wszystkich - np. tutaj
    W PHPie, jeżeli radio button ma nazwę, przechodzi do tablicy $_POST - przykład.

    0