magazijn
heb een relatie gelegd tussen drie tabellen.
maar op een of andere manier zet hij het wel in de twee tabellen neer wat er is ingevoerd.
maar niet in de derde tabel waar de id's in komen zodat er later in die tabel de categorieën opgezocht kunnen worden met de informatie van het produckt wat weer in een ander tabel staat.
maar helaas krijg ik dat niet voor elkaar.
even voor de duidelijk heid.
ik heb 3 tabellen.
1 voor de categorie.
2 voor de magazijn1.
3 voor de id's van de tabel categorie en magazijn.
1 en 2 werken maar 3 werkt niet.
en ik weet niet wat ik fout doe.
wat gaat er fout wie kan mij helpen.
Quote:
<html>
<head>
<title>
produckt toevoegen
</title>
</head>
<body>
<form method ="post">
selecteer een categorie: <select name="categorie_id">
</select><br>
artikel naam : <input type="text" name="naam"><br>
artikel omschrijving: <textarea name="omschrijving"cols="30"
rows="4"></textarea><br>
artikel aantal: <input type="text" name="aantal"><br>
<input type="submit" value="Verzenden" name="knop">
<input type="reset" name="Reset" value="Invoer wissen">
</form>
</body>
</html>
<html>
<head>
<title>
produckt toevoegen
</title>
</head>
<body>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$naam = addslashes($_POST['naam']);
$omschrijving = addslashes($_POST['omschrijving']);
$aantal = addslashes($_POST['aantal']);
//artikel ingevoerd?
mysql_query("INSERT INTO magazijn1 (naam, omschrijving, aantal) VALUES ('".
$naam . "', '".
$omschrijving. "', '".
$aantal. "'
)") or die (mysql_error());
if(!mysql_query($sql))
{
//voer sql code uit
echo "toevoegen artikel mislukt in categorie_per_artikel!";
exit;
}
else
{
$artikel_id= mysql_insert_id();
//primaire sleutel van zo juist toegevoegde rij.
$sql= "insert into categorie_per_artikel (artikel_id, categorie_id) values
($artikel_id,
".$_post["categorie_id"].")";
if (!mysql_query($sql))
{
//voer sql code uit
echo "toevoegen categorie mislukt!";
exit;
}
}
echo "ok, uw artikel ".$_post["naam"]."is toegevoegd.";
}
else
{
?>
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$naam = addslashes($_POST['naam']);
$omschrijving = addslashes($_POST['omschrijving']);
$aantal = addslashes($_POST['aantal']);
//artikel ingevoerd?
mysql_query("INSERT INTO magazijn1 (naam, omschrijving, aantal) VALUES ('".
$naam . "', '".
$omschrijving. "', '".
$aantal. "'
)") or die (mysql_error());
if(!mysql_query($sql))
{
//voer sql code uit
echo "toevoegen artikel mislukt in categorie_per_artikel!";
exit;
}
else
{
$artikel_id= mysql_insert_id();
//primaire sleutel van zo juist toegevoegde rij.
$sql= "insert into categorie_per_artikel (artikel_id, categorie_id) values
($artikel_id,
".$_post["categorie_id"].")";
if (!mysql_query($sql))
{
//voer sql code uit
echo "toevoegen categorie mislukt!";
exit;
}
}
echo "ok, uw artikel ".$_post["naam"]."is toegevoegd.";
}
else
{
?>
<form method ="post">
selecteer een categorie: <select name="categorie_id">
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = "select*from categorie";
$resultaat = mysql_query($sql);
//voer sql code uit
while ($rij = mysql_fetch_array($resultaat))
{
echo "<option value\"";
echo $rij ["categorie_id"]."\">";
echo $rij ["naam"]."</option>\n";
}
?>
$sql = "select*from categorie";
$resultaat = mysql_query($sql);
//voer sql code uit
while ($rij = mysql_fetch_array($resultaat))
{
echo "<option value\"";
echo $rij ["categorie_id"]."\">";
echo $rij ["naam"]."</option>\n";
}
?>
</select><br>
artikel naam : <input type="text" name="naam"><br>
artikel omschrijving: <textarea name="omschrijving"cols="30"
rows="4"></textarea><br>
artikel aantal: <input type="text" name="aantal"><br>
<input type="submit" value="Verzenden" name="knop">
<input type="reset" name="Reset" value="Invoer wissen">
</form>
</body>
</html>
Gewijzigd op 02/01/2012 16:16:49 door Herman fokkinga
code blok 1:
- regels 5 t/m 7 kunnen weg
- controle en validatie ontbreekt tussen check POST en INSERT
- juiste foutafhandeling ontbreekt bij het uitvoeren van _query
- er komen variabelen uit de lucht vallen, zorg ervoor dat je error_report kunt waarnemen op het hoogste niveau
- sql injectie is mogelijk dus verdiep je daar dan ook in
code blok 2:
- select * is voor dummies, het is aan te bevelen de velden te benoemen welke je op dat moment nodig hebt.
- de juiste aanbevolen 2de parameter ontbreekt bij _fetch_array
, maar ja je kan beter fetchen met _fetch_assoc
- strings in het algemeen kan je beter quoten met enkele quotos
* je wordt dan gedwongen php vars erbuiten te plaatsen
muz:
+ sql statements
+ \r \n \t
* je hoeft dan ook niet meer te escapen
m.a.w. zorg eerst dat je code op orde komt en zorg dat je ons kunt vertellen:
1. de parse errors indien aanwezig
2. de sql errors indien aanwezig
3. welke waarden de vars hebben welke het path afdwingen
4. zorg dat je een genormaliseerde database hebt alvorens te gaan coderen
naboodschap:
bedenk een goede gerelateerde topic titel, verboden woorden help, hulp, probleem, vraag ens. Een ieder die hier een topic opent heeft namenlijk EHBO nodig.
Dit soort titels kunnen juist het tegenovergestelde bewerken, namenlijk dat je topic totaal genegeerd wordt.
Gewijzigd op 01/01/2012 23:51:49 door Noppes Homeland
En $_post zal niet bestaan, misschien bedoel je $_POST?
Je query's zijn lek => sql-injection.
Addslashes() is geen beveiliging. Kijk naar mysql_real_escape_string().
want wat hij moet doen is het volgende.
het gaat mij er alleen om dat de twee veld id's in 1 apparte tabel zet maar dat gebeurt niet.
heb in totaal 2 tot 3 aparte invoer pagina's.
1 voer ik de categorie in.
2 op de site waar het omgaat ( waar ik niet uit kom )
is dat de artikel id en categorie id een tweede keer opgeslagen worden.
dat daar later op categorieen kan worden gezocht.
van bv.
ict , beheer , pc's
als je dan daar op klikt dat hij alleen dat weer geeft.
waar ik om vraag.
(en ja ik weet dat ik helaas niet goed ben in lappen tekst lezen.
zal aankomende dag de titel proberen te veranderen)
sorry voor de uit gekozen titel ben hier compleet nieuw mee.
hij vraagt een rij op in categorie.
en id moet hij niet alleen plaatsen naar categorie maar ook naar een tweede tabel
van categorie_per_artikel.
en dat geld ook voor de artikel_id.
dus aan twee inserts zal ik voldoende moeten hebben.
volgens het boek die ik gekocht heb maar het blijkt wel dat wat in dat boek staat
kwa code niet klopt.
deze code komt uit het boek van php 5.3.
maar natuurlijk heb ik de tabel namen aangepast voor een magazijn.
"insert into categorie_per_artikel (artikel_id, categorie_id) values ($artikel_id, ".$_post["categorie_id"].")"
Dan is denk ik het probleem dat je geen quotes om de waardes hebt die je wilt invoeren. Je query zou er dus ongeveer zo uit moeten zien (inclusief alle variabelen buiten quotes halen:
"insert into categorie_per_artikel (artikel_id, categorie_id) values ('".$artikel_id."', '".$_post["categorie_id"]."')"
"insert into categorie_per_artikel (artikel_id, categorie_id) values ('".$artikel_id."', '".$_post["categorie_id"]."')"
dan krijg ik nog een error in beeld.
Notice: Undefined variable: _POST in on line 31
het gaat om dit stukje wat hij op een gekke manier niet wil of kan uitvoeren.
$sql= "insert into categorie_per_artikel (artikel_id, categorie_id) values
($artikel_id,
".$_post["categorie_id"].")";
if (!mysql_query($sql)
hij functioneert prima ik iets nieuws toevoegen en bewerken en deleten.
maar nou wil ik allee nog een keuze menu maken.
maar de optie's staan in de tabel a en dat moet worden opgevraagd het formulier een soort van drop down.
als er een keuze is gemaakt dan moet hij dat weergeven in tabel b.
maar ik zelf weet niet meer hoe ik het gemaakt heb voor alles toen een beetje op geschoont maar helaas is dat verloren gegaan.
kan iemand me een tip geven hoe dat in zijn werk gaat.
heb op dt moment het zo staan
<td width="326">afdeling:<br>
<select name="afdeling">
<option value="$afdelingid"selected>
<option>$afdelingid</option>
maar helaas pakt hij het niet wat vergeet ik ???
Je kan geen PHP vars zonder meer in HTML aanroepen.
<select name="afdeling" option value="/><br/>
dit heb ik er nouw staan het menu geeft hij aan nouw de inhoud nog
moet ik ook nog een mysql connect script toevoegen die naar dat gedeelte verwijst. ?
zo iets als dit bv.
Code (php)
1
2
3
2
3
<?php
$result=mysql_query("select * from afdeling");
while ($row=mysql_fetch_array($result)) {}
$result=mysql_query("select * from afdeling");
while ($row=mysql_fetch_array($result)) {}
en ben daar wat tegen gekomen dat werkte.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php mysql_connect('local', 'gebruikersnaam', 'wachtwoord');
mysql_select_db('magazijn');
$sql = "SELECT afdelingid FROM afdeling"; $result = mysql_query($sql);
echo "<select name='afdeling'>"; while ($row = mysql_fetch_array($result))
{
echo "<option value='" . $row['afdelingid'] . "'>" .
$row['afdelingid'] . "</option>"; } echo "</select>"; ?>
mysql_select_db('magazijn');
$sql = "SELECT afdelingid FROM afdeling"; $result = mysql_query($sql);
echo "<select name='afdeling'>"; while ($row = mysql_fetch_array($result))
{
echo "<option value='" . $row['afdelingid'] . "'>" .
$row['afdelingid'] . "</option>"; } echo "</select>"; ?>
moet hier alleen nog even wat aan veranderen omdat hij nouw alleen e id velden aangeeft en het is de bedoeling dat hij de namen aangeeft.
maar nog even een vraagje misschien dat iemand dat weet.
kan ik dit ook veranderen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php mysql_connect('local', 'gebruikersnaam', 'wachtwoord');
mysql_select_db('magazijn');
naar
[code]<? include ('connect');
[size=xsmall][i]Toevoeging op 21/06/2012 02:02:21:[/i][/size]
deze men werkt.
[code]<?php include('connect.php');
$sql = "SELECT afdeling FROM afdeling"; $result = mysql_query($sql);
echo "<select name='afdeling_id'>"; while ($row = mysql_fetch_array($result))
{
echo "<option value='" . $row['afdeling'] . "'>" .
$row['afdeling'] . "</option>"; } echo "</select>";
?>
maar nu wil ik dat hij de id post naar afdeling_id.
maar dat mag van de rest niet opvallen in de afdeling daar staan de namen.
van de afdelingen die wil ik zien in het menu maar de id die moet hij gaan posten.
zodat er de mogelijkheid bestaat dat je de afdeling naam altijd kunt veranderen
en dat je naderhand niet de hele lijst met artikelen bij langs hoeft om alles 1 voor te veranderen omdat de afdeling verandert is.
mysql_select_db('magazijn');
naar
[code]<? include ('connect');
[size=xsmall][i]Toevoeging op 21/06/2012 02:02:21:[/i][/size]
deze men werkt.
[code]<?php include('connect.php');
$sql = "SELECT afdeling FROM afdeling"; $result = mysql_query($sql);
echo "<select name='afdeling_id'>"; while ($row = mysql_fetch_array($result))
{
echo "<option value='" . $row['afdeling'] . "'>" .
$row['afdeling'] . "</option>"; } echo "</select>";
?>
maar nu wil ik dat hij de id post naar afdeling_id.
maar dat mag van de rest niet opvallen in de afdeling daar staan de namen.
van de afdelingen die wil ik zien in het menu maar de id die moet hij gaan posten.
zodat er de mogelijkheid bestaat dat je de afdeling naam altijd kunt veranderen
en dat je naderhand niet de hele lijst met artikelen bij langs hoeft om alles 1 voor te veranderen omdat de afdeling verandert is.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$sql = "SELECT afdeling_id, afdeling FROM afdeling";
$result = mysql_query($sql);
if ($result === false) {
echo 'Fout in query:<br>' . $sql;
}
else {
echo "<select name='afdeling_id'>";
while ($row = mysql_fetch_assoc($result)) {
echo '<option value="' . $row['afdeling_id'] . '">';
echo $row['afdeling'] . '</option>';
}
echo '</select>';
}
?>
$sql = "SELECT afdeling_id, afdeling FROM afdeling";
$result = mysql_query($sql);
if ($result === false) {
echo 'Fout in query:<br>' . $sql;
}
else {
echo "<select name='afdeling_id'>";
while ($row = mysql_fetch_assoc($result)) {
echo '<option value="' . $row['afdeling_id'] . '">';
echo $row['afdeling'] . '</option>';
}
echo '</select>';
}
?>
Gewijzigd op 21/06/2012 13:02:36 door Ger van Steenderen
else {
echo "<select name='afdeling_id'>";
while ($row = mysql_fetch_assoc($result)
( { )
En je while( mist zijn )
Mijn while dus, is inmiddels aangepast.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php include('connect.php');
$sql = "SELECT afdeling_id, afdeling FROM afdeling";
$result = mysql_query($sql);
if ($result === false) {
echo 'Fout in query:<br>' . $sql;
}
else {
echo "<select name='afdeling_id'>";
while ($row = mysql_fetch_assoc($result) {
echo '<option value="' . $row['afdeling_id'] . '">';
echo $row['afdeling'] . '</option>';
}
echo '</select>';
}
?>
$sql = "SELECT afdeling_id, afdeling FROM afdeling";
$result = mysql_query($sql);
if ($result === false) {
echo 'Fout in query:<br>' . $sql;
}
else {
echo "<select name='afdeling_id'>";
while ($row = mysql_fetch_assoc($result) {
echo '<option value="' . $row['afdeling_id'] . '">';
echo $row['afdeling'] . '</option>';
}
echo '</select>';
}
?>
maar hij loopt vast bij het geen
while ($row = mysql_fetch_assoc($result)
({)
Wat is vastlopen? Geef ons die error.
while ($row = mysql_fetch_assoc($result)) {
$sql = "SELECT afdeling_id, afdeling FROM afdeling";
en dit wel
$sql = "SELECT afdeling FROM afdeling";
maar dan kom de id niet in de afdeling_id veld.
Toevoeging op 21/06/2012 13:31:15:
beste Erwin H da heb ik al aan gepast.
Herman, er stond een foutje in de code die ik eerst gaf, ik heb dat inmiddels aangepast in die post, dus als je die nu overneemt zou het moeten werken.
Herman fokkinga op 21/06/2012 13:29:55:
beste Erwin H da heb ik al aan gepast.
Dan had het misschien goed geweest om die aanpassing dan ook wel hier te posten, want bij de 'dit heb ik nu staan' staat het nog fout....