PHP ver gevorderde |
|
Spring in met tabs, dan zie je meteen waar je accolades bent vergeten (zoals net).
Vertel ons ook even wat de error is die je nu krijgt, dat werkt gemakkelijker.
Edit:
<?php
session_start();
include('config.php');
if (isset($_POST['bumpers'])) {
$sql = mysql_query("SELECT * FROM lid WHERE gebruikernaam ='".$_GET['gebruikernaam']."' LIMIT 1") or die(mysql_error());
while($show = mysql_fetch_object($sql)) {
$geld = htmlspecialchars($show->geld);
$som = $geld;
if($som['num'] > 209) {
echo 'Je hebt geen genoeg geld om bumpers tekopen !'
}
else{
echo 'Je hebt 1 bumper gekocht';
mysql_query("UPDATE lid SET bumpers = bumpers + 1") or die(mysql_error());
}
}
}
?>
<?php include('config.php'); if (isset($_POST['bumpers'])) { $som = $geld; if($som['num'] > 209) { echo 'Je hebt geen genoeg geld om bumpers tekopen !' } else{ echo 'Je hebt 1 bumper gekocht'; } } } ?>
Qua haakjes zou dit moeten werken, maar dit stukje kan ik niet helemaal begrijpen:
$geld = htmlspecialchars($show->geld);
$som = $geld;
if($som['num'] > 209) {
$som = $geld; if($som['num'] > 209) {
Je zegt $som = $geld, vervolgens ga je verder alsof $som een array is, terwijl $geld al geen array meer is.
Volgens mij bedoel je met dat stukje dit:
if (htmlspecialchars($show->geld) > 209) {
//
}
Verder haal je onnodige dingen op uit je database, wat voor extra serverload zorgt.
Dus
$sql = mysql_query("SELECT * FROM lid WHERE gebruikernaam ='".$_GET['gebruikernaam']."' LIMIT 1")
$sql = mysql_query("SELECT * FROM lid WHERE gebruikernaam ='".$_GET['gebruikernaam']."' LIMIT 1")
kan je beter vervangen door:
$sql = mysql_query("SELECT geld FROM lid WHERE gebruikernaam ='".$_GET['gebruikernaam']."' LIMIT 1")
$sql = mysql_query("SELECT geld FROM lid WHERE gebruikernaam ='".$_GET['gebruikernaam']."' LIMIT 1")
Verder is je While ook overbodig, die kan je dus ook weghalen.
Edit 2:
Ik heb een aantal dingen gewijzigd in je script.
<?php
session_start();
include('config.php');
if (isset($_POST['bumpers'])) {
$sql = mysql_query("SELECT geld FROM lid WHERE gebruikersnaam='".$_GET['gebruikersnaam']."' LIMIT 1");
$show = mysql_fetch_object($sql);
if (htmlspecialchars($show->geld) > 209) {
echo 'Je hebt niet genoeg geld om bumpers te kopen!';
}
else {
echo 'Je hebt 1 bumper gekocht';
mysql_query("UPDATE lid SET bumpers = bumpers + 1 WHERE gebruikersnaam='".$_GET['gebruikersnaam']."' ");
}
}
?>
<?php include('config.php'); if (isset($_POST['bumpers'])) { $sql = mysql_query("SELECT geld FROM lid WHERE gebruikersnaam='".$_GET['gebruikersnaam']."' LIMIT 1"); echo 'Je hebt niet genoeg geld om bumpers te kopen!'; } else { echo 'Je hebt 1 bumper gekocht'; mysql_query("UPDATE lid SET bumpers = bumpers + 1 WHERE gebruikersnaam='".$_GET['gebruikersnaam']."' "); } } ?>
Een aantal opmerkinge/veranderingen:
1) Je had bij je update geen WHERE ingevoerd, dus bij iedereen in de tabel 'lid' zou dan 1 bij de bumpers worden opgeteld;
2) Je queries zijn niet veilig, omdat je gebruik maakt van een $_GET-waarde. Het lijkt erop dat je een ledensysteem gebruikt, dan houd je mensen dus ook ingelogd. Dan zou je dus het ID van die persoon in een sessie op kunnen slaan. Zo kan je ook voorkomen dat mensen voor elkaar bumpers kunnen kopen door simpelweg de naam in de url te wijzigen, maar je voorkomt ook SQL-injections via de url.
Als het de bedoeling is dat mensen voor elkaar bumpers kunnen kopen kan dat ook via $_GET, maar is het beter om dan in de url het ID van het lid mee te geven. Getallen zijn gemakkelijk te controleren of het wel echt getallen zijn.. |