Voorraden beheren met SQL PHP - rekenen?
Ik probeer nu het volgende te doen. Ik heb een DB met een webinterface waar ik gegevens van producten kan invoeren. Nu loop ik tegen het volgende aan:
Wat is de juiste manier om waardes uit een invoerveld op te tellen of af te trekken van de waardes in de DB
BV.
Heb in databse 10 appels. ik wil er 2 appels bij toevoegen via een HTMLform. Hoe kan ik deze rekensom(?)maken met waardes die ik uit een HTML form haal en de waardes die ik uit me Database haal?
Ik heb zelf geen flauw idee. Kan iemand me misschien een beetje op weg helpen?
dan doe je deze query:
(quantity is een kolomnaam)
Me code is nu:
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
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
<?php
//Variables
$part = $_POST[ 'part' ];
$aantal = $_POST[ 'aantal' ];
// het valideren doen we in een aparte functie om onze code overzichtelijk te houden.
function validate()
{
$errors = array();
if(strlen($_POST['aantal']) == 0)
$errors[] = 'U moet de aantal opgeven.';
return $errors;
}
// lege array voor de errors
$errors = array();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate(); // roep de functie validate() aan en zet de foutmeldigen in $errors.
if(!count($errors)) // als er geen foutmeldingen zijn
{
// include connection file
include("config.php");
$sql = "UPDATE aantal SET onderdelen=aantal+" . $aantal . " WHERE id=" . $part;
{ header( "location:admin.php"); }
}
// laat de foutmeldingen zien als ze er zijn
foreach($errors as $error)
{
echo $error.'<br>';
}
}
?>
//Variables
$part = $_POST[ 'part' ];
$aantal = $_POST[ 'aantal' ];
// het valideren doen we in een aparte functie om onze code overzichtelijk te houden.
function validate()
{
$errors = array();
if(strlen($_POST['aantal']) == 0)
$errors[] = 'U moet de aantal opgeven.';
return $errors;
}
// lege array voor de errors
$errors = array();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate(); // roep de functie validate() aan en zet de foutmeldigen in $errors.
if(!count($errors)) // als er geen foutmeldingen zijn
{
// include connection file
include("config.php");
$sql = "UPDATE aantal SET onderdelen=aantal+" . $aantal . " WHERE id=" . $part;
{ header( "location:admin.php"); }
}
// laat de foutmeldingen zien als ze er zijn
foreach($errors as $error)
{
echo $error.'<br>';
}
}
?>
Enig idee waar ik de mist in gaar? of zit ik totaal verkeerd te denken?
BEdankt voor de tip zover.
Ik krijg wel een doorverwijzing anar me admin page maar de aantal worden niet geupdate.
Gewijzigd op 18/07/2014 12:09:30 door Frank Nietbelangrijk
Html (De opmaak ga ik later scheiden met CSS)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DemoPool</title>
</head>
<body background="Plaatje.png">
<div style="width:100%" align="center" >
<div style="color: white">
<h1>Welkom</h1>
<h2>Vul hier de gegevens in</h2>
</div>
<div style="color: white">
<form name="form1" method="POST" action="test.php">
<table width="500" border="15" align="center" cellpadding="3" cellspacing="6" bgcolor="BLACK">
<tr>
<td>
<table width="100%" border="0" cellpadding="10" cellspacing="5" bgcolor="#FFFFFF">
<tr>
<td style="color: Black">
Partnummer:<br />
<?php
// include connection file
include("config.php");
// Gegevens opvragen uit DB
$sth = $dbh->prepare("SELECT part FROM onderdelen");
$sth->execute();
$data = $sth->fetchAll();
?>
<select name="part" id="part">
<?php foreach ($data as $row): ?>
<option><?=$row["part"]?></option>
<?php endforeach ?>
</select>
<br />
Aantal:
<br />
<input type="text" name="aantal" id="aantal">
<br />
<input type="submit" name="toevoegen" value="Toevoegen">
</td>
</tr>
<tr>
<td style="color: Black">
<input type="button" value="Nieuw Onderdeel" onclick="location.href = '../DemoPool/addpart_new.php'">
</td>
</tr>
<tr>
<td style="color: Black">
<input type="button" value="Vorige pagina" onclick="location.href = '../DemoPool/voorraadbeheer.php'">
<input type="button" value="Logout" onclick="location.href = '../DemoPool/login.php'">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DemoPool</title>
</head>
<body background="Plaatje.png">
<div style="width:100%" align="center" >
<div style="color: white">
<h1>Welkom</h1>
<h2>Vul hier de gegevens in</h2>
</div>
<div style="color: white">
<form name="form1" method="POST" action="test.php">
<table width="500" border="15" align="center" cellpadding="3" cellspacing="6" bgcolor="BLACK">
<tr>
<td>
<table width="100%" border="0" cellpadding="10" cellspacing="5" bgcolor="#FFFFFF">
<tr>
<td style="color: Black">
Partnummer:<br />
<?php
// include connection file
include("config.php");
// Gegevens opvragen uit DB
$sth = $dbh->prepare("SELECT part FROM onderdelen");
$sth->execute();
$data = $sth->fetchAll();
?>
<select name="part" id="part">
<?php foreach ($data as $row): ?>
<option><?=$row["part"]?></option>
<?php endforeach ?>
</select>
<br />
Aantal:
<br />
<input type="text" name="aantal" id="aantal">
<br />
<input type="submit" name="toevoegen" value="Toevoegen">
</td>
</tr>
<tr>
<td style="color: Black">
<input type="button" value="Nieuw Onderdeel" onclick="location.href = '../DemoPool/addpart_new.php'">
</td>
</tr>
<tr>
<td style="color: Black">
<input type="button" value="Vorige pagina" onclick="location.href = '../DemoPool/voorraadbeheer.php'">
<input type="button" value="Logout" onclick="location.href = '../DemoPool/login.php'">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
En het PHP bestand:
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
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
<?php
// het valideren doen we in een aparte functie om onze code overzichtelijk te houden.
function validate()
{
$errors = array();
if(strlen($_POST['aantal']) == 0)
$errors[] = 'U moet de aantal opgeven.';
return $errors;
}
// lege array voor de errors
$errors = array();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate(); // roep de functie validate() aan en zet de foutmeldigen in $errors.
if(!count($errors)) // als er geen foutmeldingen zijn
{
// include connection file
include("config.php");
//Variables
$part = $_POST[ 'part' ];
$aantal = $_POST['aantal'];
$sql = "UPDATE onderdelen SET aantal=aantal+" . $aantal . " WHERE id=" . $part;
{ header( "location:admin.php"); }
}
// laat de foutmeldingen zien als ze er zijn
foreach($errors as $error)
{
echo $error.'<br>';
}
}
?>
// het valideren doen we in een aparte functie om onze code overzichtelijk te houden.
function validate()
{
$errors = array();
if(strlen($_POST['aantal']) == 0)
$errors[] = 'U moet de aantal opgeven.';
return $errors;
}
// lege array voor de errors
$errors = array();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate(); // roep de functie validate() aan en zet de foutmeldigen in $errors.
if(!count($errors)) // als er geen foutmeldingen zijn
{
// include connection file
include("config.php");
//Variables
$part = $_POST[ 'part' ];
$aantal = $_POST['aantal'];
$sql = "UPDATE onderdelen SET aantal=aantal+" . $aantal . " WHERE id=" . $part;
{ header( "location:admin.php"); }
}
// laat de foutmeldingen zien als ze er zijn
foreach($errors as $error)
{
echo $error.'<br>';
}
}
?>
Gewijzigd op 18/07/2014 12:18:21 door B van der Leeden
Toevoeging op 18/07/2014 12:10:59:
Welke kolommen heb je in de tabel onderdelen?
Tabel ziet er als volgt uit
je moet in heel je code $part veranderen naar $id en $_POST['part'] naar $_POST['id']. vervolgens moet er ook een formulierveld in je form komen (als die er nog niet is) met name="id". Hierin moet het correcte id komen van de database record die bewerkt wordt.
Indien je wenst kun je later het veld van het type="hidden" maken.
Toevoeging op 18/07/2014 12:26:52:
id is namelijk altijd uniek. Er is in ieder geval maar één record met id nummer x zeg maar.
Mijn part kolom heeft als eigenschap unique. Kan het dan ok met de part of moet het ID zijn?
en kan ik het ID selecteren op basis van de part?
of vraag ik dingen die nergens op slaan ? dat kan natuurlijk ook :P
alvast enorm bedankt voor je tijd en support
*** ff nagedacht dus ik kan bv
(SELECT id FROM onderdelen WHERE part =?");
Gewijzigd op 18/07/2014 12:39:49 door B van der Leeden
Wat is de reden dat je voor aantal een decimal data type hebt gekozen? Ergens kan ik me nog voorstellen dat je halve aantallen kan hebben (als je bijvoorbeeld kaas per kilo administreert, kan je een halve kaas hebben), maar doordat je DECIMAL(5,0) definieert kan je weer geen decimalen opslaan. Per saldo is dit dus gewoon een INT type, waarom dan niet ook een INT type definieren?
Gewijzigd op 18/07/2014 12:48:38 door Erwin H
Daar zat ik aan te denken, maar ben nog echt een groentje. Dus komt wel is voor da de meest voor de hand liggen dingen voor mijn nog mysterieuze zaken zijn
B van der Leeden op 18/07/2014 12:35:33:
Mijn part kolom heeft als eigenschap unique. Kan het dan ok met de part of moet het ID zijn?
en kan ik hetID juiste record selecteren op basis van de part?
(SELECT id FROM onderdelen WHERE part =?");
en kan ik het
(SELECT id FROM onderdelen WHERE part =?");
Ja dat kan zolang part uniek is. Wel zal het wat langzamer zijn. wellicht kun je part laten indexeren door de database.
Gewijzigd op 18/07/2014 13:18:56 door Frank Nietbelangrijk
Maar er verandert nog niks in de DB
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
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
<?php
// het valideren doen we in een aparte functie om onze code overzichtelijk te houden.
function validate()
{
$errors = array();
if(strlen($_POST['aantal']) == 0)
$errors[] = 'U moet de aantal opgeven.';
return $errors;
}
// lege array voor de errors
$errors = array();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate(); // roep de functie validate() aan en zet de foutmeldigen in $errors.
if(!count($errors)) // als er geen foutmeldingen zijn
{
// include connection file
include("config.php");
//Variables
$part = $_POST[ 'part' ];
$aantal = $_POST['aantal'];
$sql = ("UPDATE onderdelen SET aantal=aantal+" . $aantal . " WHERE part=" . $part);
{ header( "location:admin.php"); }
}
// laat de foutmeldingen zien als ze er zijn
foreach($errors as $error)
{
echo $error.'<br>';
}
}
?>
// het valideren doen we in een aparte functie om onze code overzichtelijk te houden.
function validate()
{
$errors = array();
if(strlen($_POST['aantal']) == 0)
$errors[] = 'U moet de aantal opgeven.';
return $errors;
}
// lege array voor de errors
$errors = array();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate(); // roep de functie validate() aan en zet de foutmeldigen in $errors.
if(!count($errors)) // als er geen foutmeldingen zijn
{
// include connection file
include("config.php");
//Variables
$part = $_POST[ 'part' ];
$aantal = $_POST['aantal'];
$sql = ("UPDATE onderdelen SET aantal=aantal+" . $aantal . " WHERE part=" . $part);
{ header( "location:admin.php"); }
}
// laat de foutmeldingen zien als ze er zijn
foreach($errors as $error)
{
echo $error.'<br>';
}
}
?>
Tabelnaam = Onderdelen
Rows = id, part, locatie, aantal
Heb heel veel geprobeerd aan te passen maar niks werk nog.
Is niet nodig, staat al een UNIQUE index op.
@ B
Je query klopt niet, part is datatype varchar, dus moet de waarde daarvan tussen enkele aanhalingtekens.
Daarnaast voer je de query nergens uit.
Het is gelukt dankzij jullie support.
Zal de HTML en PHP plaatsen voor andere mensen. Voor mij werkt deze.
HTML addpart.php
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DemoPool</title>
</head>
<body background="Plaatje.png">
<div style="width:100%" align="center" >
<div style="color: white">
<h1>Welkom</h1>
<h2>Vul hier de gegevens in</h2>
</div>
<div style="color: white">
<form name="form1" method="POST" action="addpart_check.php">
<table width="500" border="15" align="center" cellpadding="3" cellspacing="6" bgcolor="BLACK">
<tr>
<td>
<table width="100%" border="0" cellpadding="10" cellspacing="5" bgcolor="#FFFFFF">
<tr>
<td style="color: Black">
Partnummer:<br />
<?php
// include connection file
include("config.php");
// Gegevens opvragen uit DB
$sth = $dbh->prepare("SELECT part FROM onderdelen");
$sth->execute();
$data = $sth->fetchAll();
?>
<select name="part" id="part">
<?php foreach ($data as $row): ?>
<option><?=$row["part"]?></option>
<?php endforeach ?>
</select>
<br />
Aantal:
<br />
<input type="text" name="aantal" id="aantal">
<br />
<input type="submit" name="toevoegen" value="Toevoegen">
</td>
</tr>
<tr>
<td style="color: Black">
<input type="button" value="Nieuw Onderdeel" onclick="location.href = '../DemoPool/addpart_new.php'">
</td>
</tr>
<tr>
<td style="color: Black">
<input type="button" value="Vorige pagina" onclick="location.href = '../DemoPool/voorraadbeheer.php'">
<input type="button" value="Logout" onclick="location.href = '../DemoPool/login.php'">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DemoPool</title>
</head>
<body background="Plaatje.png">
<div style="width:100%" align="center" >
<div style="color: white">
<h1>Welkom</h1>
<h2>Vul hier de gegevens in</h2>
</div>
<div style="color: white">
<form name="form1" method="POST" action="addpart_check.php">
<table width="500" border="15" align="center" cellpadding="3" cellspacing="6" bgcolor="BLACK">
<tr>
<td>
<table width="100%" border="0" cellpadding="10" cellspacing="5" bgcolor="#FFFFFF">
<tr>
<td style="color: Black">
Partnummer:<br />
<?php
// include connection file
include("config.php");
// Gegevens opvragen uit DB
$sth = $dbh->prepare("SELECT part FROM onderdelen");
$sth->execute();
$data = $sth->fetchAll();
?>
<select name="part" id="part">
<?php foreach ($data as $row): ?>
<option><?=$row["part"]?></option>
<?php endforeach ?>
</select>
<br />
Aantal:
<br />
<input type="text" name="aantal" id="aantal">
<br />
<input type="submit" name="toevoegen" value="Toevoegen">
</td>
</tr>
<tr>
<td style="color: Black">
<input type="button" value="Nieuw Onderdeel" onclick="location.href = '../DemoPool/addpart_new.php'">
</td>
</tr>
<tr>
<td style="color: Black">
<input type="button" value="Vorige pagina" onclick="location.href = '../DemoPool/voorraadbeheer.php'">
<input type="button" value="Logout" onclick="location.href = '../DemoPool/login.php'">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
PHPcode - addpart_check.php
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
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
<?php
// het valideren doen we in een aparte functie om onze code overzichtelijk te houden.
function validate()
{
$errors = array();
if(strlen($_POST['aantal']) == 0)
$errors[] = 'U moet de aantal opgeven.';
return $errors;
}
// lege array voor de errors
$errors = array();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate(); // roep de functie validate() aan en zet de foutmeldigen in $errors.
if(!count($errors)) // als er geen foutmeldingen zijn
{
// include connection file
include("config.php");
//Variables
$part = $_POST['part'];
$aantal = $_POST['aantal'];
$sql = ("UPDATE onderdelen SET aantal=aantal+" . $aantal . " WHERE part='$part'");
$query = $dbh->prepare( $sql );
$query->execute();
{ header( "location:admin.php"); }
// laat de foutmeldingen zien als ze er zijn
foreach($errors as $error)
{
echo $error.'<br>';
}
}
}
?>
// het valideren doen we in een aparte functie om onze code overzichtelijk te houden.
function validate()
{
$errors = array();
if(strlen($_POST['aantal']) == 0)
$errors[] = 'U moet de aantal opgeven.';
return $errors;
}
// lege array voor de errors
$errors = array();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate(); // roep de functie validate() aan en zet de foutmeldigen in $errors.
if(!count($errors)) // als er geen foutmeldingen zijn
{
// include connection file
include("config.php");
//Variables
$part = $_POST['part'];
$aantal = $_POST['aantal'];
$sql = ("UPDATE onderdelen SET aantal=aantal+" . $aantal . " WHERE part='$part'");
$query = $dbh->prepare( $sql );
$query->execute();
{ header( "location:admin.php"); }
// laat de foutmeldingen zien als ze er zijn
foreach($errors as $error)
{
echo $error.'<br>';
}
}
}
?>
Nogmaals heel erg bedankt voor jullie tijd en support op z'n warme dag als deze :)
B van der Leeden op 18/07/2014 14:18:08:
$sql = ("UPDATE onderdelen SET aantal=aantal+" . $aantal . " WHERE part='$part'");
Net zoals de accolades hier.
B van der Leeden op 18/07/2014 14:18:08:
{ header( "location:admin.php"); }
{ header( "location:admin.php"); }
En dit wordt niet meer uitgevoerd omdat je er direct boven de redirect uitvoert. De foutmeldingen krijg je dus niet te zien.
B van der Leeden op 18/07/2014 14:18:08:
// laat de foutmeldingen zien als ze er zijn
foreach($errors as $error)
{
echo $error.'<br>';
}
foreach($errors as $error)
{
echo $error.'<br>';
}