Voorraden beheren met SQL PHP - rekenen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

B van der Leeden

B van der Leeden

18/07/2014 10:52:27
Quote Anchor link
Beste mensen,

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?
 
PHP hulp

PHP hulp

26/12/2024 01:26:42
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/07/2014 11:05:13
Quote Anchor link
Ik mag hopen dat 'appels' een eigen id heeft.

dan doe je deze query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$q
= "UPDATE products SET quantity=quantity+" . $aantal . " WHERE id=" . $id;
?>


(quantity is een kolomnaam)
 
B van der Leeden

B van der Leeden

18/07/2014 11:47:35
Quote Anchor link
Ben weer lekker aan het proberen/spelen bedankt voor de tip Frank.

Me code is nu:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
}
}

?>


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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/07/2014 11:49:30
Quote Anchor link
Nu is je code niet meer logisch. Je gaat nu eerst $_POST variabelen gebruiken (regel 4 en 5) en pas dan controleren of er wel iets gepost is (regel 21)
Gewijzigd op 18/07/2014 12:09:30 door Frank Nietbelangrijk
 
B van der Leeden

B van der Leeden

18/07/2014 12:09:23
Quote Anchor link
Effe een overzicht geven van de HTML met de PHP voor een totaal beeld

Html (De opmaak ga ik later scheiden met CSS)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<!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>


En het PHP bestand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
}
}

?>
Gewijzigd op 18/07/2014 12:18:21 door B van der Leeden
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/07/2014 12:09:59
Quote Anchor link
zie nog even mijn vorige opmerking

Toevoeging op 18/07/2014 12:10:59:

Welke kolommen heb je in de tabel onderdelen?
 
B van der Leeden

B van der Leeden

18/07/2014 12:13:37
Quote Anchor link
Heb het volgens mij nu aangepast. Foutje van me het is gelijk weer een stuk duidelijker voor mij. Bedankt.

Tabel ziet er als volgt uit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
CREATE TABLE IF NOT EXISTS `onderdelen` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `part` varchar(20) NOT NULL,
  `locatie` varchar(15) NOT NULL,
  `Aantal` decimal(5,0) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/07/2014 12:20:20
Quote Anchor link
Oke duidelijk. id is dus heel iets anders als part.

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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="text" name="id" value="<?php echo $id; ?>" />

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.
 
B van der Leeden

B van der Leeden

18/07/2014 12:35:33
Quote Anchor link
Bedankt voor de tip/uitleg. Heb er toch een vraagje over als je het niet erg vind.

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
 
Erwin H

Erwin H

18/07/2014 12:48:10
Quote Anchor link
B van der Leeden op 18/07/2014 12:13:37:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
  `Aantal` decimal(5,0) NOT NULL,

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
 
B van der Leeden

B van der Leeden

18/07/2014 12:56:22
Quote Anchor link
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
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/07/2014 13:17:36
Quote Anchor link
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 het ID juiste record selecteren op basis van de part?

(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
 
B van der Leeden

B van der Leeden

18/07/2014 13:33:33
Quote Anchor link
Perfect. Okey ik heb nu de volgende php code

Maar er verandert nog niks in de DB

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
}
}

?>


Tabelnaam = Onderdelen
Rows = id, part, locatie, aantal



Heb heel veel geprobeerd aan te passen maar niks werk nog.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/07/2014 13:41:22
Quote Anchor link
>> Ja dat kan zolang part uniek is. Wel zal het wat langzamer zijn. wellicht kun je part laten indexeren door de database.

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.
 
B van der Leeden

B van der Leeden

18/07/2014 14:18:08
Quote Anchor link
Yeah baby yeah!! :P ff een opluchtingskreet

Het is gelukt dankzij jullie support.
Zal de HTML en PHP plaatsen voor andere mensen. Voor mij werkt deze.

HTML addpart.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<!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>


PHPcode - addpart_check.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
        }
    }
}

?>


Nogmaals heel erg bedankt voor jullie tijd en support op z'n warme dag als deze :)
 
Erwin H

Erwin H

18/07/2014 14:39:42
Quote Anchor link
De haakjes om de query hier dienen geen enkel doel.
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"); }

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>';
}
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.