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?
Ik mag hopen dat 'appels' een eigen id heeft.

dan doe je deze query:
<?php
$q = "UPDATE products SET quantity=quantity+" . $aantal . " WHERE id=" . $id;
?>

(quantity is een kolomnaam)
Ben weer lekker aan het proberen/spelen bedankt voor de tip Frank.

Me code is nu:


<?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.
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)
Effe een overzicht geven van de HTML met de PHP voor een totaal beeld

Html (De opmaak ga ik later scheiden met CSS)

<!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:

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

zie nog even mijn vorige opmerking

[size=xsmall]Toevoeging op 18/07/2014 12:10:59:[/size]

Welke kolommen heb je in de tabel onderdelen?
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


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 ;


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.

<input type="text" name="id" value="<?php echo $id; ?>" />

Indien je wenst kun je later het veld van het type="hidden" maken.

[size=xsmall]Toevoeging op 18/07/2014 12:26:52:[/size]

id is namelijk altijd uniek. Er is in ieder geval maar één record met id nummer x zeg maar.
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 =?");
B van der Leeden op 18/07/2014 12:13:37


  `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?

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

Reageren