auto_increment id

Pozdrav,

delam aplikacijo, ki skupaj vsebuje 50 inputov. Podatke ki jih user vpisuje, sem razdelil na 5 strani, tako da je bolj pregledno.
Se pravi na začetku imam stran osnovni_podatki.php in ko user vpiše vse podatke, klikne naprej se odpre druga stran z novimi inputi, vpisani podatki pa se shranijo v tabelo v bazi.
Tako imam 5 tabel, za vsako stran podatkov.

Sedaj pa nevem kako bi vnosom priredil isti ID, da bi nakoncu lahko izpisal vse podatke iz vseh 5 strani in da so podatki pravilno razporejeni.

Vsaki tabeli sem dodal tudi polja "user_id" in "id".

Da povzamem, v prvem koraku ko uporabnik vnese podatke, se vnosu dodeli nek id (z uporabo auto_increment), kako sedaj ta id prenesti, da ko uporabnik pride na drugo stran kjer vpiše podatke, se v tabelo zapiše isti id kot je v prvem koraku..

Upam da nisem preveč zakompliciral.

5 odgovorov

Mogoče bi bilo dobro, da bi tukaj opisal strukturo tvoje baze / E-R diagram, ker ob tem kaj sem prebral sem dobil občutek, da imaš "nepravilno" strukturo baze (zadeva ni pravilno normalizirana).

Seveda se da tudi "direktno" rešiti tvoj konkreten problem ampak se mi zdi brez veze reševati zadeve na višjem nekem višjem nivoju, če je dejanska "napaka" že nekje nižje.

Imam eno bazo in 5 tabel, se pravi ko uporabnik vnese vse podatke v prvem koraku in klikne naprej, se ti podatki shranijo v prvo tabelo, potem v drugo etc.

Problem je pa ta, da ko gre uporabnik čez vseh 5 korakov, je v vsaki tabelo drugačen id, jaz pa bi rad za en vnos (mišljeno, ko gre uporabik čez vse korake) imel samo en id, ker samo tako lahko potem nakoncu ko bom izpisal podatke, lahko izpisal podatke iz vseh 5 tabel po istem id-ju.

Se slika kako imam zgrajeno tabelo, če kaj pomaga.

Razumem tvoj problem ampak kot sem napisal že zgoraj sem dobil občutek (seveda je možno, da se motim ampak brez, da pokažeš strukturo teh tabel lahko samo ugibam), da iščeš rešitev na napačnem koncu, ker je najverjetneje problem že nekje spodaj - pri sami strukturi baze oziroma normalizaciji.

Pa tudi napisal sem že v prejšnjem sporočilu, da se da problem tudi rešiti v takšni obliki preprosto rešiti na več načinov (npr. ena izmed hitrih in naivnih rešitev je, da ima samo prva tabela polje ID auto_increment, v druge pa vstaviš ID sam) ampak se mi zdi nesmiselno in slabo "krpati zadevo" na pol nekje zgoraj, če je pa zelo verjetno, da imaš problem (ki ti bo lahko povzročal težave še kje drugje, če ne boš odkril pravega vzroka in le tega rešil) že pri sami strukturi baze.

Ko podatke prvič vstaviš v podatkovno bazo, lahko vnešen id dobiš s funkijo mysqlinsertedid(). Le-tega pa si nato shraniš v session spremenljivko.

mysql_query("INSERT INTO tabela1 (atr1, atr2, atr3) VALUES ($atr1, $atr2, $atr3)");
$_SESSION['id'] = mysql_inserted_id();

Vsi preostali vnosi pa so napisani v tem stilu:

mysql_query("INSERT INTO tabela2 (id, atr4, atr5) VALUES ($_SESSION['id'], $atr4, $atr5)");

Seveda poskrbi še za varnost, validacijo podatkov, validacijo $_SESSION['id'] spremenljivke.

Dovolj razumljivo?

2

Hvala, sem uredil kot si napisal in deluje.