Jump to content

[PHP + MySQL] Database update niet


-Matthijs-

Recommended Posts

Ik heb een scriptje gemaakt waarmee je de prijs van een sportartikel kunt aanpassen d.m.v. een form. Echter, als ik de nieuwe prijs doorvoer blijft de oude prijs in de database staan. Iemand enig idee wat er fout gaat?

<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "webauth";
$connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
$artikelquery = "SELECT * FROM artikel;";
$artikel = mysqli_query($connection, $artikelquery);
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
Kies een artikel:</br>
<select name="artikel">
<?php
while($artikelrow = mysqli_fetch_row($artikel)) {
echo '<option value="'.$artikelrow[1].'">'."$artikelrow[1], $artikelrow[3] euro</option>";
}
?>
</select>
</br></br>
Vul de nieuwe prijs van het artikel in:</br>
<input type="number" name="prijs"></br></br>
<input type="submit" value="Verzend">
</form>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
$nieuwprijs = $_POST['prijs'];
$artikel = $_POST['artikel'];
$update = "UPDATE artikel SET Verkoopprijs ='". $nieuwprijs ."' WHERE Artikelnr ='". $artikel ."';";
mysqli_query($connection, $update);
echo 'Artikel '. $artikel .' is aangepast naar '. $nieuwprijs .' euro.';
}
?>

De database (.sql) heb ik bijgevoegd, mocht iemand het zelf willen proberen.

firstchoice.rar

Link to comment
Delen op andere websites

Lijkt er in principe goed uit te zien. Behalve dat je de waarde die je naar de server zend niet controleert. Weet niet of dit voor een backoffice is. Maar het lijkt me slim om te controleren of bijvoorbeeld de prijs wel een getal is (met punt en geen komma?) en ook de artikelbeschrijving controleert.

Wat ik altijd doe is gewoon eerst de queries in PhpMyAdmin gooien/testen om te kijken of er niets raar gebeurd en de query doet wat ik wil.

Link to comment
Delen op andere websites

Je kan in ieder geval al starten door (tijdelijk) deze twee regels bovenaan je script toe te voegen:

ini_set('display_errors', '1');
error_reporting(E_ALL);

Hiermee krijg je ook Notices te zien, die anders verborgen worden. Het probleem lijkt zich echter hier te situeren:

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">

Je vergeet daar een echo toe te voegen, dus:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

Link to comment
Delen op andere websites

Lijkt er in principe goed uit te zien. Behalve dat je de waarde die je naar de server zend niet controleert. Weet niet of dit voor een backoffice is. Maar het lijkt me slim om te controleren of bijvoorbeeld de prijs wel een getal is (met punt en geen komma?) en ook de artikelbeschrijving controleert.

Wat ik altijd doe is gewoon eerst de queries in PhpMyAdmin gooien/testen om te kijken of er niets raar gebeurd en de query doet wat ik wil.

De prijs bevat geen decimalen, dus daar kan niet echt iets fout gaan. Normaal gesproken wil ik nog wel eens wat checks inbouwen, maar dit is zo kleinschalig dat ik het niet echt nodig vond. Gaat me er alleen om dat ik de database aan kan passen vanuit een webpagina.

Je kan in ieder geval al starten door (tijdelijk) deze twee regels bovenaan je script toe te voegen:

[..]

Bedankt voor de suggestie, maar dat lost het probleem niet op helaas. Er zijn ook geen notices te zien. Ik staar me er op dood inmiddels. puh2.gif

Link to comment
Delen op andere websites

Je verwijst naar de verkeerde kolom in de tabel artikel. Je artikelnummer staat in kolom 0 en niet in kolom 1, want je begint altijd bij 0 met tellen in lijsten, arrays, etc. Overigens zou ik naar de naam van de kolom verwijzen als je het uitgebreider wil maken. Je hoeft maar de volgorde van de kolommen in je database te veranderen en je hele script werkt niet meer.

Link to comment
Delen op andere websites

Je verwijst naar de verkeerde kolom in de tabel artikel. Je artikelnummer staat in kolom 0 en niet in kolom 1, want je begint altijd bij 0 met tellen in lijsten, arrays, etc. Overigens zou ik naar de naam van de kolom verwijzen als je het uitgebreider wil maken. Je hoeft maar de volgorde van de kolommen in je database te veranderen en je hele script werkt niet meer.

Dat was 'm, bedankt! thumbsup2.gif

Link to comment
Delen op andere websites

Nog even een vraagje... Hoe kan ik d.m.v. een foreach-loop mijn database updaten? Ik heb een webpagina gemaakt waarop een overzicht staat van een aantal maaltijden. De hoeveelheid benodigde ingrediënten (bijv. 100g kip, 75g tomaten) van een maaltijd kunnen aangepast worden en dat moet weer in de database opgeslagen worden.

Code:

http://codepaste.net/7o2cho

Ik heb al van alles geprobeerd, maar krijg het niet werkend...

Link to comment
Delen op andere websites

Je POST-variabele aantal is inmiddels een array, die zich dus leent voor een lus. Als je dan foreach over aantal doet zul je automatisch de waarden terug krijgen die je zoekt.

Ik zou alleen wel de ID in de HTML van aantal toevoegen, zodat je zeker weet dat je het juiste artikel aanpast.

(hoop dat het duidelijk is, typ dit vanaf m'n mobiel :puh:)

Link to comment
Delen op andere websites

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...