Geld bijschrijven

Status
Niet open voor verdere reacties.

Webklus

Gebruiker
Lid geworden
22 okt 2014
Berichten
164
ik wil in het spel wat ik aan het maken ben een soort opdrachten maken'

dat je bv daar naar een pagina in het spel moet gaan en daar op een knop afronden drukt en dat er dan geld word bij geschreven op $_geld iemand een idee hoe ik dat kan doen?
 
Daarvoor zul je in HTML een formulier moeten maken en een PHP-script waarmee je dat formulier afhandelt.

Dit kan in het zelfde bestand, dat is afhankelijk van wat je zelf prettig vindt.

Waar sla je het geld op? In een database?
 
jgeld zit in de database dit is me ondertussen duidelijk geworden. waar ik nu mee zit is we hebben een winkel gemaakt waar mensen voor credits aantal premium dagen kunnen kopen we hebben nu dit
PHP:
$totaal = $vipdagen + $addvipdagen;
		$totaal1 = $credits - $losecredits;
		
		if($vipdagen == 0 or $vipdagen > 0){
		$sql = "UPDATE Accounts SET vipdagen='$totaal' WHERE naam='$naam'";
		if($credits > 1)
		$sql1 = "UPDATE Accounts SET credits='$totaal1' WHERE naam='$naam'";
de credits gaan er netjes van af maar er worden geen vip/perimium dagen bijgeschreven hoe doe ik dat?
 
Laatst bewerkt door een moderator:
Waarschijnlijk zit er iets met de accolades niet goed, op regel 4 wordt er namelijk wel één geopend maar ik zie geen sluiten.

PHP staat het toe op een statements zonder accolades te maken, maar ik zou aanraden ze er altijd bij te zetten zodat je zelf niet in de war komt.

Ik vind de statements ook wat merkwaardig, je gaat dus het aantal vipdagen aanpassen wanneer $vipdagen 0 of groter is (Dit kan in één check) maar je update de credits pas wanneer die groter dan 1 zijn, dus als ik één credit heb dan wordt hij niet bijgewerkt

Desondanks zal dit waarschijnlijk beter werken:
PHP:
$totaal = $vipdagen + $addvipdagen;
$totaal1 = $credits - $losecredits;

if ($vipdagen >= 0) {
    $sql = "UPDATE Accounts SET vipdagen='$totaal' WHERE naam='$naam'";
}
if ($credits > 1) {
    $sql1 = "UPDATE Accounts SET credits='$totaal1' WHERE naam='$naam'";
}
Waar je wel op moet letten is het uitvoeren van de queries, dat kun je beter binnen de IF-statements meteen regelen want anders krijg je foutmeldingen over variabelen die niet bestaan.

Als dit alle code is die je hebt dan zou je uberhaupt een foutmelding moeten krijgen dus zorg er voor dat je PHP-fouten ook weergeeft (http://stackoverflow.com/questions/845021/how-to-get-useful-error-messages-in-php)
 
Met dat stukje code werkt het nog niet ik heb dit als volledig code

PHP:
<div id="koopvip">
		<?	//voor vip te kopen//	?>
		<h4><font color="red">Koopvip</font></h4>
		<br>
		<h5>Met een VIP-account kan je gebruik maken van extra spelopties.<br>
		Je krijgt een extra herkenning in de chat en krijgt toegang tot limited-items.<br>
		Met VIP kan je onder andere extra parkeer- en werkplekken openen,<br>
		Je kan nog meer werknemers aannemen, je krijgt toegang om luxere auto's te maken <br>
		En nog veeel meer....<br>
		VIP kopen?</h5>
						<form action="" method="post">
			<input type="submit" value="koop hier VIP" name="submit1"/><br>
		</form>

		<?php 
				
		
		If (isset($_POST['submit1'])) {
	
		require_once ('connect.php');
		
		$username = $_SESSION['gebruiker'];
		
		$sql1 = "SELECT * FROM Accounts where naam='$username'";
		$result1 = mysql_query($sql);

		while($row = mysql_fetch_array($result1)) {
		$naam = $row  ['naam'];
		$xp = $row ['xp'];
		$geld = $row ['geld'];
		$credits = $row ['credits'];
		$vipdagen = $row ['vipdagen'];
		$addvipdagen = 30;
		$losecredits = 2;

		}

		$totaal = $vipdagen + $addvipdagen;
		$totaal1 = $credits - $losecredits;
 
		if ($vipdagen >= 0) {
		$sql = "UPDATE Accounts SET vipdagen='$totaal' WHERE naam='$naam'";
		}
		if ($credits > 1) {
		$sql1 = "UPDATE Accounts SET credits='$totaal1' WHERE naam='$naam'";
		}	
		
		
		$result1 = mysql_query($sql1);
		
		if (!$result1) die ("Database access failed: " . mysql_error());
	
		header('location:winkel.php');
	
		}
		
		else {
			echo "U heeft nog niet genoeg credits hiervoor";
		}
		
		
		?>
		<br>
</div>
 
Laatst bewerkt door een moderator:
Op zich is het logisch dat er niets met de VIP-dagen gebeurd, je voert de query immers niet uit ;)

Het lijkt mij dat je pas VIP-dagen er bij krijgt wanneer je in ieder geval 2 credits hebt, probeer dit eens:
PHP:
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    require_once ('connect.php');
    
    // Get account
    $queryAccount = "SELECT * FROM Accounts where naam='". $_SESSION['gebruiker'] ."'";
    $resultAccount = mysql_query($queryAccount);
    if ($resultAccount) {
        $account = mysql_fetch_assoc($resultAccount);
        if ($account) {
            // Dit zou ik eerder ergens in een configuratie-bestand declareren zodat je het centraal houdt.
            $addvipdagen = 30;
            $losecredits = 2;
            
            if (($totalCredits = $account['credits'] - $losecredits) >= 0) {
                // Nieuwe waarde van credits en VIP-dagen wegschrijven
                $updateCredits = mysql_query("
                    UPDATE
                        Accounts
                    SET
                        credits = '". $totalCredits ."',
                        vipdagen = '". $account['vipdagen'] + $addvipdagen ."'
                    WHERE
                        naam='". $_SESSION['gebruiker'] ."'
                ");
                // Doorsturen naar link
                header('location:winkel.php');
            } else {
                echo 'U heeft onvoldoende credits';
            }
        } else {
            echo 'Er is geen account gevonden met de gebruikersnaam "'. $_SESSION['gebruiker'] .'"';
        }
    } else {
        echo 'Er is een fout opgetreden: '. mysql_error();
    }
}
?>
<div id="koopvip">
    <h4><font color="red">Koopvip</font></h4>
    <br>
    <h5>Met een VIP-account kan je gebruik maken van extra spelopties.<br>
        Je krijgt een extra herkenning in de chat en krijgt toegang tot limited-items.<br>
        Met VIP kan je onder andere extra parkeer- en werkplekken openen,<br>
        Je kan nog meer werknemers aannemen, je krijgt toegang om luxere auto's te maken <br>
        En nog veeel meer....<br>
        VIP kopen?</h5>
    <form action="" method="post">
        <input type="submit" value="koop hier VIP" name="submit1"/><br>
    </form>
<br>
</div>
Overigens zou ik het opwaarderen pas mogelijk maken wanneer de gebruiker daadwerkelijk genoeg credits heeft in plaats van eerst de mogelijkheid aanbieden en dan pas checken of het eigenlijk wel kan :)
 
Laatst bewerkt:
Wat gebeurt er wel en wat niet? Krijg je foutmeldingen?
 
nee er worden geen credits afgeschreven en geen dagen bijgeschreven en de melding je hebt te weinig credits komt altijd in beeld
 
controleer eens
PHP:
<?php
// hier zetten we een error reporting all @TODO remove next line before upload
error_reporting(E_ALL);
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    require_once ('./connect.php');    
    // Get account
    $queryAccount = "SELECT * FROM Accounts where naam='". $_SESSION['gebruiker'] ."'";
    $resultAccount = mysql_query($queryAccount);
    if ($resultAccount) {
        $account = mysql_fetch_assoc($resultAccount);
        if ($account) {
            // Dit zou ik eerder ergens in een configuratie-bestand declareren zodat je het centraal houdt.
            $addvipdagen = 30;
            $losecredits = 2;
            if (($totalCredits = $account['credits'] - $losecredits) >= 0) {
                // Nieuwe waarde van credits en VIP-dagen wegschrijven
               //mijn opmerking was onterecht
                $updateCredits = mysql_query("UPDATE Accounts ".
                   " SET credits = '". $totalCredits ."',vipdagen = '". $account['vipdagen'] + $addvipdagen ."' WHERE naam='". $_SESSION['gebruiker'] ."'
                ");
                // Doorsturen naar link
                header('location:winkel.php');
            } else {
                echo 'U heeft onvoldoende credits';
            }
        } else {
            echo 'Er is geen account gevonden met de gebruikersnaam "'. $_SESSION['gebruiker'] .'"';
        }
    } else {
        echo 'Er is een fout opgetreden: '. mysql_error();
    }
}
?>
<div id="koopvip">
    <h4><font color="red">Koopvip</font></h4>
    <br>
    <h5>Met een VIP-account kan je gebruik maken van extra spelopties.<br>
        Je krijgt een extra herkenning in de chat en krijgt toegang tot limited-items.<br>
        Met VIP kan je onder andere extra parkeer- en werkplekken openen,<br>
        Je kan nog meer werknemers aannemen, je krijgt toegang om luxere auto's te maken <br>
        En nog veeel meer....<br>
        VIP kopen?</h5>
    <form action="" method="post">
        <input type="submit" value="koop hier VIP" name="submit1"/><br>
    </form>
<br>
</div>
 
Laatst bewerkt:
Die query op een regel plaatsen gaat weinig invloed hebben, hij wordt gewoon uitgevoerd en een nieuwe regel wordt als spatie gezien. Ik vraag me dan ook af hoe je er bij komt dat je queries niet mag "breken".

Daarnaast is het heel verwarrend dat je de hele code opnieuw plaatst, ik denk nu in ieder geval dat je veel hebt aangepast terwijl dat dus niet zo is.
 
Sorry maar je zult toch er bij moeten zeggen wat er wel werkt en niet. Met "Het werkt niet" kunnen wij ook niets.

Plaats op diverse plaatsen binnen het script eens wat echo's om te kijken waar hij wel en niet komt.
var_dump desnoods bepaalde variabelen om te achterhalen wat daar de waarde van is.

Ik neem aan dat je in de tussentijd zelf ook dingen aan het proberen bent?
 
@Tha devil je hebt meer gelijk of ik dacht: ik dacht dat je alleen kon breken op select where order maw keywords .maar dat is niet dus


ontopic: kunnen we require_once ('./connect.php'); zien
 
ja zeker zijn we dingen aan het proberen ik zal vanavond is uitpluisen waar het fout gaat
 
Nog wat gevonden?
 
Heb je hier nog iets mee gedaan?
Sorry maar je zult toch er bij moeten zeggen wat er wel werkt en niet. Met "Het werkt niet" kunnen wij ook niets.

Plaats op diverse plaatsen binnen het script eens wat echo's om te kijken waar hij wel en niet komt.
var_dump desnoods bepaalde variabelen om te achterhalen wat daar de waarde van is.
 
we zijn opnieuw begonnen bij de website te scripten dus dit script komt weer een keer aanbod
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan