Is het mogelijk om deze query korter op te schrijven?
mysql_query("UPDATE ppm_resources SET
stone='".($stone-$hqcost_arr['Stone'])."',
metal='".($metal-$hqcost_arr['Metal'])."',
food='".($food-$hqcost_arr['Food'])."',
wood='".($wood-$hqcost_arr['Wood'])."',
gold='".($gold-$hqcost_arr['Gold'])."'
WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
nee, volgens mij niet, of je moet je variabelen kortere namen geven, maar anders niet.
?
Onbekende gebruiker
09-03-2007 14:11
O, okej, jmmr, want dit vreet plaats als dit zo door gaat. (Voor een spel om je grondstoffen te updaten nadat het gebouw wordt gemaakt.) Omdat het 15 gebouwen op 1 pagina is.
Miscchien een efficiente oplossing?
Wannt in principe is het iedere keer een stuk code maar dan is het eigelijk: Ctrl+v...
[edit]Om het te laten zien wat ik voor ieder gebouw moet neerzetten:[/edit]
<?php
##
##BUILDING 1
##BUILDING 1
##
if(isset($_GET['action']) && isset($_GET['bid']) && $_GET['bid'] == 1){
$action = strtolower($_GET['action']);
$bid = $_GET['bid'];
if($action == "cancel"){
mysql_query("DELETE FROM ppm_countdown WHERE building='1' AND userid='".$_SESSION['user_id']."'") or die(mysql_error());
mysql_query("UPDATE ppm_resources SET
stone='".($stone + $hqcost_arr['Stone'])."',
metal='".($metal + $hqcost_arr['Metal'])."',
food='".($food + $hqcost_arr['Food'])."',
wood='".($wood + $hqcost_arr['Wood'])."',
gold='".($gold + $hqcost_arr['Gold'])."' WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$relative_url = "buildings.php";
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
}
}
if(isset($_GET['action']) && isset($_GET['bid']) && $_GET['bid'] == 1){
$action = strtolower($_GET['action']);
$bid = $_GET['bid'];
if($action == "done" && $future_unix <= $now_unix){
mysql_query("DELETE FROM ppm_countdown WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$result = mysql_query("UPDATE ppm_levels SET level='".($hq_lvl + 1)."' WHERE building='".$_GET['bid']."' AND userid='".$_SESSION['user_id']."'") or die(mysql_error());
$relative_url = "buildings.php";
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
}
}
?>
<?php
echo '<br />';
$check = mysql_query("SELECT * FROM ppm_countdown WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$num_rows = mysql_num_rows($check);
$row = mysql_fetch_array($check);
$whatbuilding = $row['building'];
$future_unix = $row['targetdate_unix'];
if($num_rows == 0){
if($stone-$hqcost_arr['Stone'] <= 0 || $metal-$hqcost_arr['Metal'] <= 0 || $food-$hqcost_arr['Food'] <= 0 || $wood-$hqcost_arr['Wood'] <= 0 || $gold-$hqcost_arr['Gold'] <= 0){
echo "<span style='color: red;'>Upgrade</span>";
}else{
echo "<a href=\"?upgrade=".$md5_hq."&bid=1\">Upgrade</a>";
}
if(isset($_GET['upgrade']) && isset($_GET['bid']) && $_GET['bid'] == 1){
if($_GET['upgrade'] == $md5_hq){
$future_unix=strtotime("+".$string_future."seconds");
$now_unix=strtotime("NOW");
$diff = ($future_unix-$now_unix);
$future_format = date("Y-m-d H:i:s",$future_unix);
mysql_query("INSERT INTO ppm_countdown (userid,building,targetdate_unix,targetdate,cntseconds) VALUES ('".$_SESSION['user_id']."','".$_GET['bid']."','".$future_unix."','".$future_format."','".$diff."')") or die(mysql_error());
mysql_query("UPDATE ppm_resources SET stone='".($stone-$hqcost_arr['Stone'])."', metal='".($metal-$hqcost_arr['Metal'])."', food='".($food-$hqcost_arr['Food'])."', wood='".($wood-$hqcost_arr['Wood'])."', gold='".($gold-$hqcost_arr['Gold'])."' WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$relative_url = "buildings.php";
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
}
}elseif(isset($_GET['upgrade']) && $_GET['upgrade'] != $md5_hq){
echo 'Error occured, or you messed up the upgrade link. Refresh the page to remove the mistake.';
}
}elseif($num_rows == 1){
if($whatbuilding == 1){
$query = mysql_query("SELECT targetdate_unix FROM ppm_countdown WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
$result = mysql_fetch_array($query);
$future_unix = $result['targetdate_unix'];
$now_unix=strtotime("NOW");
$difference = ($future_unix-$now_unix);
?>
<div id="bxx" class="z"></div>
<script language=JavaScript>
pp="<?php echo $difference; ?>";
bid="1";
t();
</script>
<?php
}else{
echo "";
}
}
?>
Tja, ik weet niet hoe je code in elkaar zit en of deze ook efficient gemaakt is, maar een script van 400 a 500 regels komt meer voor hoor.
EDIT: 96 regels voor 1 gebouw, ik weet niet wat voor spel het is en heb je code ook niet grondig bestudeerd, dus weet ook niet precies wat er voor 1 gebouw allemaal moet gebeuren, maar kun je niet een paar query's samennemen oid?
en eventueel dezelfde code meerdere keren gebruiken door middel van een for loop?
dat voor elk gebouw steeds dezelfde code doorlopen wordt, eventueel met gebouwafhankelijke variabelen.
?
Onbekende gebruiker
09-03-2007 14:20
Tis meer een tekst-based strategie spel waarbij je gebouwen kunt upgraden e.d. Verder om fraude te voorkomen heb ik nogal veel checks erin zitten... Misschien zou ik een for loop kunnen doen omdat alleen een paar dingetjes veranderen...
Gebouw 1 gebruikt: $hq.... (headquarters)
Gebouw 2 gebruikt: $sm... (stonemine) etc.
EDIT:
Toch zijn er wel veel dingen die met de hand bewerkt moet worden, dus ik zal maar eerst beginnen met alles in een config te zetten en dan kijk ik wel wat er te verkleinen is.
Maar wel raar dat er geen loop oid kan worden gebruikt in een sql query.
Is het mogelijk om deze query korter op te schrijven?
mysql_query("UPDATE ppm_resources SET
stone='".($stone-$hqcost_arr['Stone'])."',
metal='".($metal-$hqcost_arr['Metal'])."',
food='".($food-$hqcost_arr['Food'])."',
wood='".($wood-$hqcost_arr['Wood'])."',
gold='".($gold-$hqcost_arr['Gold'])."'
WHERE userid='".$_SESSION['user_id']."'") or die(mysql_error());
En wat is daar het doel van? Zolang de query op 1 A4-tje past, is er sprake van een korte query. Wat is dan het probleem?
@Frank: ik denk dat de TS de query 'makkelijker' wil opbouwen door bijvoorbeeld een array mee te geven, waarmee een query automatisch gegenereerd kan worden.
Overigens gok ik dat 99% van de gebruikers hier op phphulp nog nooit een query van meer dan een half A4'tje heeft gemaakt, dus je opmerking dat een query korter dan een A4'tje niet lang is mist hier even z'n doel M.I.
@Pim: 1 A4-tje of 7 regeltjes. Het lijkt mij dan wel duidelijk dat hier sprake is van een korte query. Het lijkt mij dan ook zinloos om dat verder te optimaliseren, tijdswinst valt daar niet of nauwelijks te maken.
@Pim: 1 A4-tje of 7 regeltjes. Het lijkt mij dan wel duidelijk dat hier sprake is van een korte query. Het lijkt mij dan ook zinloos om dat verder te optimaliseren, tijdswinst valt daar niet of nauwelijks te maken.
Het gaat hier denk ik om het genereren van query's, niet om de tijdsduur van het uitvoeren ervan. De TS is opzoek naar een makkelijke, snelle manier om query's te bouwen, in plaats van het steeds zelf typen van de query's.
@TS:
In dit geval zou het niet veel uitmaken, aangezien je de gegevens nog bewerkt voordat je ze in de database zet. Anders zou het vrij makkelijk met een foreach constructie kunnen. Zoek even op sql generator oid. Zat scriptjes die al doen wat je vraagt.