auto nummering

Status
Niet open voor verdere reacties.

Triksken59

Gebruiker
Lid geworden
6 dec 2008
Berichten
33
Ik heb een database naam: soft
Ik heb verschillende tabellen: categ - typ - item - cpt - tpi
cpt staat voor category per type en tpi staat voor type per item.
Ik kan een category toe te voegen in de tabel categ door de naam van de category en een volgnummer in te typen.
In de tabel cpt kan ik een type toevoegen door in een afrolmenu een category te kiezen en hieraan een nieuw type toe te voegen.

Dit wordt dan verzonden naar de tabel cpt:
PHP:
$res = mysql_query("SELECT * FROM (cpt,categ,type) WHERE cpt.cat_id=categ.cat_id AND cpt.typ_id=type.typ_id ORDER BY cat_cat,cat_num,typ_type,typ_num");

ik echo hier
PHP:
echo "<td align='right' width='100'>&nbsp;" . $row['cat_num'] . "-". $row['typ_num'] . "</td>";
en
PHP:
echo "<td>&nbsp;" . $row['cat_cat'] . "</td>";
echo "<td>&nbsp;" . $row['typ_type'] . "</td>";

Door mijn cat_num en mijn typ_num zo te echoën, bekom ik zogezegd een nieuw nummer
001-001-001 het eerste nummer van de category, het tweede nummer van het type het derde nummer zou van het item moeten komen.
Wanneer ik een nieuwe category insert, moet ik enkel de naam van de nieuwe category ingeven en dus het nummer bestaande uit de 3 cijfers.

VRAAG: kan ik deze nummering automatisch laten verlopen en hoe krijg ik dat in mijn script.
Ik stuur hierbij mijn script van invoegen in de tabel categ
PHP:
<html>
<head>
<title>invoeren</title>
</head>
<body>
<?php
include ("../header/header.php");
include("../include/db_soft.php");
?>


<?php
if(isset($_POST['invoeren'])) {
	$Category=$_POST['cat_cat'];
	$Category_number=$_POST['cat_num'];
	$sql="INSERT into categ (cat_cat,cat_num) VALUES ('$Category','$Category_number')";
	$res=mysql_db_query("$db","$sql");
	$fout=mysql_errno($con);
		if ($fout != 0) {
		$fout=mysql_error($con);
		echo '<font color="#FF2306">' . $fout . '</font>';
		mysql_close($con);
		echo '</body></html>';
		exit;
		}
		else {
			echo '<div align="center"><h3>Data is inserted into database</h3></div>';
		}
}
else {
?>

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<table width="50%">
<tr><td>Category :</td><td><input type="text" size="100" name="cat_cat"></td></tr>
<tr><td>Category number :</td><td><input type="text" size="100" name="cat_num"></td></tr>
<tr></tr>
<tr><td>&nbsp;</td><td><input type="submit" name="invoeren" value="Insert data"></td></tr>
</table>
</form>
<?php
}
?>

<form method="post" action="<?php echo $PHP_SELF ?>">
<select name="cat_id">
<?php
$sql ="SELECT * FROM categ";
$res = mysql_query($sql); //voer sql code uit

while ($rij = mysql_fetch_array($res)) {
	echo "<option value=\"";
	echo $rij["cat_id"]."\">";
	echo  $rij["cat_num"]." &nbsp;&nbsp;&nbsp;&nbsp;".$rij["cat_cat"].	"</option>\n";

}
mysql_close($con);
?>
</select></form>

</body>
</html>
 
De meeste databases laten toe om een numeriek veld op 'auto_increment' te zetten, waardoor wanneer men een nieuwe insert maakt er automatisch het eerstvolgende (max+1) nummer wordt aan toegekend. Je hoeft dat veld dat niet mee op te nemen in je insert-query.
 
Juist, stom van mij om hier niet aan te denken.
maar ik zit nog met een ander probleem.
ik open hiervoor een nieuwe topic.

Hartelijk dank.
 
Ik dacht dat dit de oplossing zou geweest zijn door met auto increment te werken op het id, maar dit werkt niet, of ik doe het verkeerd.
De nummering zou mij moeten in staat stellen een tabel te verkrijgen met cd nummers.
Deze kunnen op categorie, type en item gerangschikt worden in een tabel cpt = cat per type en item
vb: tabel cpt
cpt_id bigint ai prem key
cat_id bigint ai for key
typ_id bigint ai for key
it_id bigint ai for key

tabel categorie
cat_id bigint ai prem key - cat_naam - cat_nr
cat nr bestaat uit 3 cijfers, 001 als eerste nummer

tabel type
typ_id bigint ai prem key - typ_naam - typ_nr
typ nr bestaat uit 3 cijfers, 001 als eerste nummer

tabel item
it_id bigint ai prem key - it_naam - it_nr
it nr bestaat uit 3 cijfers, 001 als eerste nummer

Dit alles zou dan volgend nummer geven in de uiteindelijk tabel naargelang er meerdere types zijn voor 1 categorie en bijvoorbeeld meerdere items voor 1 type
Of: 1 category kan meerdere types bevatten 1 type kan meerdere items bevatten
1 type kan niet tot meerdere categories behoren 1 item kan niet tot meerdere types behoren
simpel voorbeeld
cpt_id - cat_num - typ_num - it_num
1 001 office 001 Word 001 versie 2003
2 001 office 001 Word 002 versie 2007
3 001 office 003 Excel 001 versie 2003

per tabel zou ik een afrolmenu gebruiken waar ik of de category kies en het type kies om het item toe te voegen.

Deze manier gaat niet met het id op auto incriment te plaatsen. Misschien is er wel een andere mogelijkheid.
 
foreign keys zijn verwijzingen naar andere waardes, die kunnen zelf dus NOOIT auto_increment zijn..

Ik zou voor volgend databasemodel gaan:
categorie
cat_id int(3) ai pk
cat_naam varchar(255)

type
type_id int(6) ai pk
type_naam varchar(255)
cat_id int(3) fk(categorie.cat_id)

item
item_id int(9) ai pk
item_naam varchar(255)
type_id int(6) fk(type.type_id)​

Aangezien je een afdalende 1-op-veel relatie hebt, is je item uniek, en kan je aan de hand van een item steeds zijn type bepalen, aan de hand van dat type kan je dan ook de categorie opvragen. Elk item heeft een uniek nummer, alsook elk type en elke categorie.
Wegens de 1-op-veel-relatie (1 type, veel items) hoef je echter geen koppeltabel aan te leggen, maar een extra veld met foreign key in de veel-tabel(items) te zetten, die verwijst naar een id uit de 1-tabel(type).

Wanneer je dus een item insert, hoef je enkel een naam op te geven voor dat item, en het id van het type waartoe het behoort. De categorie ligt dan al vast dmv het type.

Als je dan bvb alle items wil selecteren die tot categorie 4 behoren, kan je volgende query gebruiken:
Code:
SELECT
        i.item_id,
        i.item_naam
FROM
        item i
WHERE
        i.type_id
IN (
        SELECT
                t.type_id
        FROM
                type t
        WHERE
                t.cat_id='4'
);

Al je een uniek nummer voor weergave wil, gebruik je dus gewoon het item_id, eventueel met nullen aan de linkerzijde toegevoegd voor de layout (ik dacht dat LPAD de sql-functie daarvoor is, maar dat weet ik niet zeker)
 
Laatst bewerkt:
Ok, ik zal dit volgende week uitproberen, ik moet nu eerst een andere dringende job afwerken.
Alvast bedankt, tot volgende week.
 
autonummering

Sorry, ik ben nog maar pas bezig met php, en kan niet zo goed volgen.
Ik heb mijn db aangepast zoals je zei:

Als ik het goed heb moet ik voor de foreign key aan mijn tabel type het record cat_id int (3) toevoegen. En bedoel je met (categorie.cat_id) dat dit id afkomstig is van de tabel categorie.
Hetzelfde met de tabel Item en de foreign key type_id.

De tabel ziet er zo uit
categorie
cat_id int(3) ai pk
cat_naam varchar(255)

type
type_id int(6) ai pk
type_naam varchar(255)
cat_id int(3)

item
item_id int(9) ai pk
item_naam varchar(255)
type_id int(6)

Bij de select zeg je:
PHP:
SELECT i.item_id,i.item_naam FROM item i WHERE i.type_id IN (SELECT t.type_id FROM type t Where t.cat_id='4');

Dit begrijp ik ook niet goed. De i in i.item wat betekend dit en bij FROM item i ...
hier kan ik niet goed volgen.

Ik plaats hieronder mijn select code waarvoor ik volgende error krijg:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\softw\item\opvragen.php on line 9


PHP:
<?php
include ("../header/header.php");
include("../include/db_soft.php");

$res = mysql_query("SELECT (i.it_id,i.it_naam) FROM item i WHERE i.typ_id IN (SELECT t.typ_id FROM typ t WHERE t.cat_id='1')");

echo "<table border='1' width='50%' cellpadding='5'> <tr> <th>Item_id</th> <th>Name</th>  <th>typ_id</th> <th>Archive</th></tr>";

while($row = mysql_fetch_array($res))
 {
echo "<tr>";
echo "<td align=\"right\">&nbsp;" . $row['it_id'] . "</td>";
echo "<td>&nbsp;" . $row['it_name'] . "</td>";
echo "<td>&nbsp;" . $row['typ_id'] . "</td>";
echo "<td>&nbsp;" . $row['it_archive'] . "</td>";

echo "</tr>";
 }
echo "</table>";
 mysql_close($con);
?>
 
De i in i.item wat betekend dit en bij FROM item i ...
hier kan ik niet goed volgen.
Wanneer je een sql-query schrijft, kan het voorkomen dat je gegevens uit twee tabellen wil combineren, maar dat er in die tabellen een veld staat met dezelfde naam. Zo bestaat het veld typ_id bij jou zowel in de tabel item als in de tabel type.
Wanneer we in onze query dus typ_id schrijven, weet MySQL niet welk van de 2 we bedoelen. De oplossing bestaat erin om voor typ_id de tabelnaam te schrijven, gevolgd door een punt. Zo weet MySQL dat item.typ_id de kolom typ_id uit item is, en type.typ_id die uit de tabel type.
Maar omdat tabelnamen soms nogal lang kunnen worden (en omdat programmeurs lui zijn :p ), bestaat er de mogelijkheid om binnen je query een alias (=een andere naam) te gebruiken. Zo wordt vaak enkel de eerste letter van een tabel als alias gebruikt. Een alias mag je zelf kiezen, en natuurlijk weet MySQL niet welke alias bij welke tabel hoort, tenzij we dat zeggen.
En dat is wat er bij FROM gebeurd. In plaats van gewoon te schrijven FROM tabelnaam, mag je ook schrijven FROM tabelnaam alias. Dus na de tabelnaam een spatie zetten, en dan de naam die je zou willen gebruiken.
In ons geval werd dat FROM item i
Vanaf nu kunnen we overal in de query de alias gebruiken in plaats van de echte tabelnaam, dus in plaats van item.typ_id kunnen we nu ook i.typ_id schrijven, om aan te geven dat we de kolom typ_id uit de tabel item willen gebruiken.


Om die error te kunnen verduidelijken, kan je van regel 5 eens het volgende maken?
PHP:
$res = mysql_query("SELECT i.it_id,i.it_naam FROM item i WHERE i.typ_id IN (SELECT t.typ_id FROM typ t WHERE t.cat_id='1')") or die(mysql_error());
Als de query mislukt krijgen we nu de foutmelding van MySQL te zien, deze zal meer duidelijkheid kunnen verschaffen. Ook denk ik dat het eerste paar haakjes (rond i.it_id,i.it_naam) niet nodig waren.
Ik zeg er ook meteen bij dat het gebruik van or die() NOOIT in een definitieve versie zou mogen voorkomen, maar dat je de error proper dient af te vangen. Dit is omwille van veiligheidsmaatregel, aangezien de info die vrijkomt bij or die() vaak uitermate handig is voor hackers.

[EDIT]Hehe, dat is een lange uitleg geworden, maar ik vind hem alvast geslaagd, hopelijk jij ook :D[/EDIT]
 
Laatst bewerkt:
Dank u voor deze uitleg, maar:
of ik begrijp het niet goed, wat heel goed mogelijk is of er is een ander probleem.

Ik heb dus in mijn drie tabellen volgende gegevens:

tbl category:
cat_id int (3) pk
cat_naam varchar (255)

tbl type
typ_id int (6) pk
typ_naam varchar (255)
cat_id int (3)

tbl item
it_id int (9) pk
it_naam varchar (255)
typ_id int (6)

De databank heet softw

Ik zet hieronder een voorbeeld tabel :
category Type Item

Office Word 2003
Word 2007
Excel 2003
Excel 2007
Access 2003

Windows NT home edition
2000 home edition
XP home edition
XP proffesional

Als ik dit invoer volgens het krijg ik steeds duplicate key.
Omdat er meerdere versies zijn van word in item, dien ik ook meerdere malen word in te geven.
Item 2003 en 2007 krijgen it_id 1 en 2 maar bij typ_id telkens 1
typ_naam word krijgt bij cat_id telkens 1.

Misschien zie ik het gans verkeerd.
 
Ik ben wel al wat verder geraakt, maar zit nu met een volgend probleem.

Ik krijg mijn auto nummering, maar kan niet de namen afbeelden in mijn tabel.

Ik krijg de volgende foutcode:

Notice: Undefined index: cat_naam in C:\wamp\www\db_soft\item\invoeren.php on line 9

Notice: Undefined index: cat_naam in C:\wamp\www\db_soft\item\invoeren.php on line 10


Hieronder de code:
PHP:
<?php
include ("../header/header.php");
include("../include/db_soft.php");

if(isset($_POST['invoeren'])){
		$it_naam=$_POST['it_naam'];
		$typ_id=$_POST['typ_id'];
		$cat_id=$_POST['cat_id'];
		$cat_naam=$_POST['cat_naam'];
		$typ_naam=$_POST['cat_naam'];
	$sql="INSERT INTO item (it_naam,typ_id,cat_id,cat_naam,typ_naam) VALUES ('$it_naam','$typ_id','$cat_id','$cat_naam','$typ_naam')";
		$res=mysql_db_query("$db","$sql");
		$fout=mysql_errno($con);
		if ($fout != 0) {
		$fout=mysql_error($con);
		echo '<font color="#FF2306">' . $fout . '</font>';
		mysql_close($con);
		echo '</body></html>';
		exit;
		}
		else {
			echo '<div align="center"><h3>Data is inserted in database</h3></div>';
		}
} else{

?>
	<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>"> Selecteer een Category: <select name="cat_id"><br>

	<?php
		$sql = "SELECT * FROM category";
	$res=mysql_db_query("$db","$sql");
	while ($rij = mysql_fetch_array($res)) {
		echo "<option value=\"";
	echo $rij["cat_id"]."\">";
	echo  $rij["cat_id"]." &nbsp;&nbsp;&nbsp;&nbsp;".$rij["cat_naam"].	"</option>\n";
	}
	?>
	</select><br><br><br><br>

	<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>"> Selecteer een Type: <select name="typ_id"><br>

	<?php
		$sql = "SELECT * FROM typ";
	$res=mysql_db_query("$db","$sql");
	while ($rij = mysql_fetch_array($res)) {
		echo "<option value=\"";
	echo $rij["typ_id"]."\">";
	echo  $rij["typ_id"]." &nbsp;&nbsp;&nbsp;&nbsp;".$rij["typ_naam"].	"</option>\n";
	}
	?>

	</select><br><br><br><br>
	<table>
	<tr>
	<td width="140">Item:</td><td><input type="text" name="it_naam"></td></tr>
	<tr>
	<td>&nbsp;</td><td><input type="submit" name="invoeren" value="Toevoegen"></td></tr>
	</table>
	</form>
	<?php
}
	?>


	</body>
	</html>
	<?php
	mysql_close($con);
?>

Ik haal de category op uit de tabel category door middel van een dropmenu, hetzelfde doe ik ook bij type, zodat ik enkel het item moet toevoeging in een textbox.
Ik krijg dan een mooie tabel met in de eerste kolom mijn auto nummering, ik laat ook nog even de id's van cat_id, typ_id, en it_id afbeelden, maar ik krijg er de namen niet bij.

Hieronder mijn code opvragen:
PHP:
<?php
include ("../header/header.php");
include("../include/db_soft.php");

$res = mysql_query("SELECT * FROM item") ; 
echo "<table border='1' width='50%' cellpadding='5'> <tr> <th>CD Nummer</th><th>cat_id</th><th>typ_id</th><th>it_id</th><th>cat_naam</th><th>typ_naam</th><th>it_naam</th> </tr>";

while($row = mysql_fetch_array($res))
 {
echo "<tr>";
echo "<td align=\"right\">&nbsp;" . $row['cat_id'] . "" . $row['typ_id'] . "" . $row['it_id'] . "</td>";
echo "<td>&nbsp;" . $row['cat_id'] . "</td>";
echo "<td>&nbsp;" . $row['typ_id'] . "</td>";
echo "<td>&nbsp;" . $row['it_id'] . "</td>";
echo "<td>&nbsp;" . $row['cat_naam'] . "</td>";
echo "<td>&nbsp;" . $row['typ_naam'] . "</td>";
echo "<td>&nbsp;" . $row['it_naam'] . "</td>";

echo "</tr>";
 }
echo "</table>";
 mysql_close($con);
?>
 
$_POST['cat_naam'] bestaat niet. Kijk maar naar je formulier (regel 27-38). Dat komt er uit te zien als
HTML:
<form method="post" action="painga.php">
Selecteer een Category: <select name="cat_id"><br>
<option value="x">a</option>
<option value="y">b</option>
<option value="z">c</option>
</select>

Alleen $_POST['cat_id'] bestaat. Met als waarde de cat_id van "<option value="..."> (x, y of z in het voorbeeld hierboven).
Nergens in het formulier staat een invoermogelijkheid met als name "cat_naam".

Overigens neem ik aan dat regel 10 een foutje is en dat
PHP:
$typ_naam=$_POST['cat_naam'];
moet zijn
PHP:
$typ_naam=$_POST['typ_naam'];
Al is dat hetzelfde verhaal.

Ook viel het me op dat je volgens mij het eerste formulier niet afsluit met "</form>". Dat heeft niks met dit probleem te maken, maar het voorkomt wel andere problemen.
 
Dank voor uw reactie,
PHP:
 $typ_naam=$_POST['cat_naam'];
PHP:
 $typ_naam=$_POST['typ_naam'];
Was inderdaad een typfout, door te werken met copy paste, vergeten aan te passen.

Ik versta niet goed dat wel het cat_id verstuurd wordt maar niet de cat_naam.
het dropdownmenu wordt gevuld vanuit de tabel category.
Zo ook voor typ_id. deze wordt gevuld vanuit de tabel typ.

In mijn dropdown menu krijg ik het id en de naam.
Toch wordt enkel het id gepost.

Ben nog nieuw in php.

In bijlage een print screen van de tabel item.
In het formulier heb ik 2 dropdownmenu's category en item en via textbox voeg ik het item toe.
 

Bijlagen

  • vb database.jpg
    vb database.jpg
    20,7 KB · Weergaven: 42
In mijn dropdown menu krijg ik het id en de naam.
Toch wordt enkel het id gepost.

Dat klopt. Alleen de value (zie "<option value="iets">") wordt verstuurd. Dit wordt in de $_POST array gezet met als index de name van dat veld (zie "<select name="cat_id">"). Als je wilt dat er ook een cat_naam in de $_POST array staat moet je een invoerveld/radiobutton/checkbox/select lijst/... hebben met als name "cat_naam".

Maar is het sowieso niet beter om met de cat_id de cat_naam uit de database te halen? Al was het maar om te voorkomen dat een grapjas een bepaalde cat_id en een cat_naam die daar niet bij hoort verstuurt.
 
Dank u voor de reactie.
Het is de bedoeling dat ik via een select dropdown menu de gegevens ophaal uit mijn db.
Ik dacht dat dit zou werken zoals ik in mijn code hierboven had gezet, maar dit is niet zo.
Ik zie echt niet hou ik mijn select moet aanpassen om zowel het cat_id als de cat_naam op te halen uit de tabel category.
kunt u me daarbij helpen.
 
Om welke query gaat het (ik zie er meerdere)? De cat_id en cat_naam opvragen uit een database als je de cat_id weet kan via
"SELECT cat_id, cat_naam FROM category WHERE cat_id = " . $_POST['cat_id']
 
Ik heb 4 pintscreens bijgevoegd, misschien maakt dit iets meer duidelijk.
db_soft
tbl: category
cat_id int (3) pk ai
cat_naam varchar (255)

tbl: typ
typ_id int (3) pk ai
typ_naam varchar (255)
cat_id int (3)
cat_naam varchar (255)

tbl: item
it_id int (3) pk ai
it_naam varchar (255)
typ_id int (3)
typ_naam varchar (255)
cat_id int (3)
cat_naam varchar (255)

Zoals je ziet in de printscreens, krijg ik wel degelijk in mijn dropdown menu bij invoeren typ de data van de tabel category (Office, Printers, Adobe)
Ik wil nu een selectie maken in deze dropdown menu, vb ik office en ik voeg een nieuw typ toe vb excel.
Office heeft in tbl category cat_id 1 Excel krijgt Typ_id 2.

Hetzelfde doe ik bij invoeren Item.
Hier werk ik met 2 dropdown menu's, ik kies bv category 1 Office en kies typ 2 Excel, hier voeg ik item 2003 toe, dit krijgt it_id 3.

Dit geeft mijn autonummering zie printscreen item opvragen CD nummer

Je ziet ook dat hier de naam van de category en van het typ niet zijn ingevuld. Dit is nu mijn probleem.

Ik stuur hierbij de code van item invoeren en item opvragen
PHP:
<?php
include ("../header/header.php");
include("../include/db_soft.php");

if(isset($_POST['invoeren'])){
		$it_naam=$_POST['it_naam'];
		$typ_id=$_POST['typ_id'];
		$cat_id=$_POST['cat_id'];
		//$cat_naam=$_POST['cat_naam'];
		//$typ_naam=$_POST['typ_naam'];
	$sql="INSERT INTO item (it_naam,typ_id,cat_id) VALUES ('$it_naam','$typ_id','$cat_id')";
		$res=mysql_db_query("$db","$sql");
		$fout=mysql_errno($con);
		if ($fout != 0) {
		$fout=mysql_error($con);
		echo '<font color="#FF2306">' . $fout . '</font>';
		mysql_close($con);
		echo '</body></html>';
		exit;
		}
		else {
			echo '<div align="center"><h3>Data is inserted in database</h3></div>';
		}
} else{

?>





	<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>"> Selecteer een Category: <select name="cat_id"><br>
	<?php
		$sql = "SELECT * FROM category";
	$res=mysql_db_query("$db","$sql");
	while ($rij = mysql_fetch_array($res)) {
		echo "<option value=\"";
	echo $rij["cat_id"]."\">";
	echo  $rij["cat_id"]." &nbsp;&nbsp;&nbsp;&nbsp;".$rij["cat_naam"].	"</option>\n";
	}
	?>
	</select><br><br><br><br>
	
	<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>"> Selecteer een Type: <select name="typ_id"><br>

	<?php
		$sql = "SELECT * FROM typ";
	$res=mysql_db_query("$db","$sql");
	while ($rij = mysql_fetch_array($res)) {
		echo "<option value=\"";
	echo $rij["typ_id"]."\">";
	echo  $rij["typ_id"]." &nbsp;&nbsp;&nbsp;&nbsp;".$rij["typ_naam"].	"</option>\n";
	}
	?>

	</select><br><br><br><br>
	
	<table>
	<tr>
	<td width="140">Item:</td><td><input type="text" name="it_naam"></td></tr>
	<tr>
	<td>&nbsp;</td><td><input type="submit" name="invoeren" value="Toevoegen"></td></tr>
	</table>
	</form>
	<?php
}
	?>


	</body>
	</html>
	<?php
	mysql_close($con);
?>

Opvragen item

PHP:
<?php
include ("../header/header.php");
include("../include/db_soft.php");

$res = mysql_query("SELECT * FROM item") ; 
echo "<table border='1' width='50%' cellpadding='5'> <tr> <th>CD Nummer</th><th>cat_id</th><th>typ_id</th><th>it_id</th><th>cat_naam</th><th>typ_naam</th><th>it_naam</th> </tr>";

while($row = mysql_fetch_array($res))
 {
echo "<tr>";
echo "<td align=\"right\">&nbsp;" . $row['cat_id'] . "" . $row['typ_id'] . "" . $row['it_id'] . "</td>";
echo "<td>&nbsp;" . $row['cat_id'] . "</td>";
echo "<td>&nbsp;" . $row['typ_id'] . "</td>";
echo "<td>&nbsp;" . $row['it_id'] . "</td>";
echo "<td>&nbsp;" . $row['cat_naam'] . "</td>";
echo "<td>&nbsp;" . $row['typ_naam'] . "</td>";
echo "<td>&nbsp;" . $row['it_naam'] . "</td>";

echo "</tr>";
 }
echo "</table>";
 mysql_close($con);
?>

Hartelijk dank aan wie me hierbij kan helpen.
 

Bijlagen

  • item invoeren.jpg
    item invoeren.jpg
    35,2 KB · Weergaven: 45
  • item opvragen.jpg
    item opvragen.jpg
    49,1 KB · Weergaven: 52
  • typ invoeren.jpg
    typ invoeren.jpg
    24,2 KB · Weergaven: 51
  • typ opvragen.jpg
    typ opvragen.jpg
    38 KB · Weergaven: 48
Ok, ik snap nu ongeveer wat je wilt doen. Ik begrijp alleen niet waarom je ook de "cat_naam" en "typ_naam" wilt opslaan in de tabel "Items". Immers heb je in die tabel de "cat_id" en "typ_id" staan. Bij het opvragen van de informatie uit de tabel "Items" can je met die ids via subquery's of joins de namen erbij opvragen.
 
Laatst bewerkt:
autonummering

Kijk, ik wil een uitgebreide databank maken waar ik alle software, drivers, printers,...
kan in plaatsen.
Het zou mij natuurlijk goed uitkomen indien ik via auto nummering zoals in mijn printscreens te zien is, ik over alle gegevens zou kunnen beschikken.
Bij category kan ik dan een nieuwe category invoeren. Bij type kan ik voor een bepaalde category een type invoeren. 1 category kan verschillende types hebben. 1 type kan verschillende Items hebben. Vandaar mijn voorbeeld :
cat_id 1 cat_naam Office kan zowel typ_id 1 typ_naam Word it_id 1 it_naam 2003
typ_id 1 typ_naam Word it_id 2 it_naam 2007
typ_id 2 typ_naam Excel it_id 1 it_naam 2003
typ_id 2 typ_naam Excel it_id 2 it_naam 2007
cat_id 2 cat_naam Printers kan zowel typ_id 2 typ_naam HP Deskjet it_id 3 it_naam 5150
typ_id 2 typ_naam HP Deskjet it_id 4 it_naam 5550
en zo verder....
Ik kan wel zoals je kan zien in mijn dropdown menu mijn data uit de tabel category en typ automatisch invoegen.
Maar in opvragen.php, krijg ik enkel de id's te zien en de item naam.

Misschien is wat ik vraag niet mogelijk, maar indien dit wel mogelijk zou zijn denk ik dat dit iets is wat velen zou intresseren.

Ik heb al met joins gewerkt, maar het resultaat is niet wat ik wens.
Ik krijg bv: alle id's van category die gelijk zijn aan de id's van typ.
Maar dan heb ik
cat_id 1 cat_naam Office typ_id 1 typ_naam Word
cat_id 2 cat_naam Printers typ_id 2 typ_naam Excel

En dat kan niet de bedoeling zijn.

Alvast bedankt voor de hulp.
 
Ik blijf denken dat je te veel opslaat als je dingen dubbel (in meerdere tabellen) gaat opslaan, maar ik ben er geen expert in. Ik neem aan dat je er goed over nagedacht hebt en als je dat echt wil kan ik twee manieren bedenken om dat voor elkaar te krijgen.

De eerste is om na
PHP:
if(isset($_POST['invoeren'])){
        $it_naam=$_POST['it_naam'];
        $typ_id=$_POST['typ_id'];
        $cat_id=$_POST['cat_id'];
Met een query de cat_naam en typ_naam op te vragen:
PHP:
$query = "SELECT cat_naam FROM category WHERE cat_id = " . $_POST['cat_id'];
$result = mysql_query($query);
$row = mysql_fetch_assoc($result)
$cat_naam = $row['cat_naam'];
Ditzelfde kan je, mutatis mutandis, ook doen voor typ_naam.

De andere manier die ik kan bedenken (enigszins smerig) is om de naam toe te voegen aan de value, dus i.p.v.
PHP:
echo "<option value=\"";
    echo $rij["cat_id"]."\">";
    echo  $rij["cat_id"]." &nbsp;&nbsp;&nbsp;&nbsp;".$rij["cat_naam"].  "</option>\n";
gebruik je
PHP:
echo "<option value=\"";
    echo $rij["cat_id"]."-" . $rij["cat_naam"] . "\">";
    echo  $rij["cat_id"]." &nbsp;&nbsp;&nbsp;&nbsp;".$rij["cat_naam"].  "</option>\n";

Dan kan je met strpos de index van het '-' teken opvragen. Dan kan je met substr de cat_id (substr(0, <index min-teken>)) en de cat_naam (substr(<index min-teken>+1)) opvragen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan