Ik ben bezig om de basis van PHP te begrijpen maar loop op iets vast.
Ik heb een script gemaakt waarmee je een artikel aan meerdere categorieën kunt koppelen in een aparte tabel. Het probleem is dat het scrip het ID van het artikel niet onthoud en ik heb geen idee waarom niet. Ik zelf zit veel te stoeien met: $artikelid = mysql_insert_id(); maar krijg ook dit helaas niet goed.



<?php
if ($_POST["knop"] && $_POST["naam"] && $_POST["omschrijving"] && $_POST["prijs"]) { // artikel ingevoerd?
$sql = "INSERT INTO Artikel (Naam, Omschrijving, Prijs) VALUES ('".$_POST["naam"]."', '".$_POST["omschrijving"]."', ".$_POST["prijs"].");";
if (!mysql_query($sql)) { // voer SQL code uit
echo "Toevoegen artikel mislukt!";
		exit;
} 
else 
{
$artikelid = mysql_insert_id(); // primaire sleutel van zojuist toegevoegde rij
$sql = "INSERT INTO Categorie_per_Artikel (ARTIKEL_ID, CATEGORIE_ID) VALUES ($artikelid, ".$_POST["categorieid"].")";
if (!mysql_query($sql)) { // voer SQL code uit
echo "Toevoegen categorie mislukt!";
		exit;
		}
}
echo "OK, uw artikel ".$_POST["naam"]." is toegevoegd.";	
} 

elseif ($_POST["knop"]) 
{

$sql = "INSERT INTO Categorie_per_Artikel (ARTIKEL_ID, CATEGORIE_ID) VALUES ($artikelid, ".$_POST["categorieid"].")";
if (!mysql_query($sql)) { // voer SQL code uit
echo "Toevoegen categorie mislukt!";
		exit;


}
echo "OK, uw artikel ".$_POST["naam"]." is toegevoegd.";	
}

if ($_POST["knop"]) {
?>
Echo de waarde van mysql_insert_id() eens, dan weet je direct of daar het probleem zit. Zo niet, welke foutmelding(en) krijg je dan? Of wat gaat er precies fout?

Verder is dit script zo lek als een mandje, SQL injectie is hier een serieus probleem. Lees hier eens wat over en zorg dat je je input beveiligd. Tip: [php]mysql_real_escape_string()[/php] doet wonderen.
Dit script is ook een opdracht om de boel te leren daar zitten niet zoveel eisen aan en zal niet worden gebruikt verder. Ik zal straks even de fout opsporen en die hier melden.
Rik schreef op 29.12.2009 09:26
Dit script is ook een opdracht om de boel te leren daar zitten niet zoveel eisen aan (...)
Beveiliging tegen SQL injectie moet je niet als eis aan een script zien maar juist als standaard handeling die je altijd doet...
Okeej zal me daar in verdiepen .

Ik heb nu een echo gemaakt en als ik dan een extra categorie toevoeg blijft de waarde leeg.


elseif ($_POST["knop"]) 
{

$sql = "INSERT INTO Categorie_per_Artikel (ARTIKEL_ID, CATEGORIE_ID) VALUES ($artikelid, ".$_POST["categorieid"].")";
if (!mysql_query($sql)) { // voer SQL code uit
echo "Toevoegen categorie mislukt!";
echo "<br /><strong> WAARDE =".$artikelid."</strong>";
		exit;


}
echo "OK, uw artikel ".$_POST["naam"]." is toegevoegd.";	
}

Je controleert nergens of de betreffende $_POST variabele wel een waarde bevat? Voordat je iets in de database invoert moet je minstens controleren of de variabele wel de gewenste waarde heeft en in het geval van strings de inhoud beveiligen tegen SQL injectie.

Zie ook: SQL beginnershandleiding.

Tevens is de manier waarop je controleert of een formulier gepost is, niet echt gangbaar. Gebruikelijker is:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// Er is een formulier gepost
}
?>
Het gaat erom dat in tabel Categorie_per_Artikel het ARTIKEL_ID komt te staan van het laatst geposte artikel en dan bij elke categorie die ik heb.

ik krijg steeds de melding:

Toevoegen categorie mislukt!
WAARDE =
Dan is $artikelid dus leeg, controleer waarom dat het geval is...
Okeej ik heb wel ontdekt dat het na de 1e aktie wel de waarde onthoud maar zodra je de optie extra categorie doet niet.
mysql_insert_id() heeft betrekking op de laatst uitgevoerde query, mogelijk dat daar je probleem zit? Als je een id op een later tijdstip nog wilt gebruiken, voer dan de INSERT query uit en bepaald direct daarna het id. Zet dat in een variabele en gebruik die verderop in je script.
Okeej zal daar eens mee gaan werken.

Reageren