31. december 2007 - 00:37
Der er
23 kommentarer og 1 løsning
Reducere koder
Hej eksperter... Hvordan kan man reducere: if ($attackamount['0'] > $row['s1'] ) { header('Location: attack.php'); exit; } if ($attackamount['1'] > $row['s2'] ) { header('Location: attack.php'); exit; } if ($attackamount['2'] > $row['s3'] ) { header('Location: attack.php'); exit; } if ($attackamount['3'] > $row['s4'] ) { header('Location: attack.php'); exit; } if ($attackamount['4'] > $row['s5'] ) { header('Location: attack.php'); exit; } if ($attackamount['5'] > $row['s6'] ) { header('Location: attack.php'); exit; } if ($attackamount['6'] > $row['s7'] ) { header('Location: attack.php'); exit; } if ($attackamount['7'] > $row['s8'] ) { header('Location: attack.php'); exit; } sådan at det bliver en kortere kode? Noget med løkker gætter jeg på, men jeg kan ikke helt hitte ud af det. Jeg har desuden også enn kode som: $defenceamount = array($row['s1'],$row['s2'],$row['s3'],$row['s4'],$row['s5'],$row['s6'],$row['s7'],$row['s8']); Kan den gøres kortere? Eller hvad nu med: $query = mysql_query("UPDATE users SET s1=s1-".($attackamount['0']-$aa['0']).", s2=s2-".($attackamount['1']-$aa['1']).", s3=s3-".($attackamount['2']-$aa['2']).", s4=s4-".($attackamount['3']-$aa['3']).", s5=s5-".($attackamount['4']-$aa['4']).", s6=s6-".($attackamount['5']-$aa['5']).", s7=s7-".($attackamount['6']-$aa['6']).", s8=s8-".($attackamount['7']-$aa['7'])." WHERE username='" . $_SESSION['user'] . "'") or die(mysql_error()); På forhånd tak.
Annonceindlæg fra HP
31. december 2007 - 00:45
#1
for($i = 0; $i <= 7; $i++) { if ($attackamount['$i'] > $row['s$i'] ) { header('Location: attack.php'); exit; } } Jeg er ikke sikker, jeg er ret ny i php verden - men det er da et forsøg værd. :)
31. december 2007 - 01:32
#2
Jeg er også selv ny i PHP, men jeg kan se at du mangler at lægge 1 til ("plusse" med en) her: $row['s$i'] :-)
31. december 2007 - 10:46
#3
Dette vil nok nærmere virke med $row['s'.$i] Thesurfer han laver jo increate med $i++... :) eksempel: for($i = 0; $i <= 7; $i++) { if ($attackamount['$i'] > $row['s'.$i] ) { header('Location: attack.php'); exit; } }
31. december 2007 - 11:06
#4
Er helt med på hvad du mener, thesurfer - men det er bare lige hvordan det udføres i praksis ;) zynzz attackamount['$i'] skal være attackamount[$i], ellers fungerer det ikke. Jeg har i midlertid prøvet mig lidt frem og jeg får et resultat med for($i=0; $i<8; $i++) { $o=$i+1; if ($attackamount[$i] > $row['s'.$o]) { header('Location: attack.php'); exit; } }
31. december 2007 - 11:09
#5
Ja det er min fejl... :), 2 sek så laver jeg også lige din sql... :)
31. december 2007 - 11:16
#6
Her er en lidt mindre sql, dog utestet..: <? $sql = "UPDATE users SET"; for($i = 1; $i <= 7; $i++) { $endelse = ($i == 7) ? "" : "," ; $sql .= "s".$i."=s".$i."-".($attackamount['0']-$aa['0']).$endelse; } $sql .= " WHERE username='". $_SESSION['user']."'"; $query = mysql_query($sql) or die(mysql_error()); ?>
31. december 2007 - 11:21
#7
Og den nemmeste måde på nr. 2 ville nok være: <? $defenceamount = array(); for($i = 1; $i <= 8; $i++) { array_push($defenceamount, $row[$i]); } ?>
31. december 2007 - 11:45
#8
Af en eller anden årsag så duer nedenstående kode ikke. $defenceamount = array(); for($i = 1; $i <= 8; $i++) { array_push($defenceamount, $row[$i]); } Når jeg benytter mig af for($i=0; $i<8; $i++) { echo $defenceamount[$i] . " "; } som burde udskrive alle oplysninger i mit array, viser ingenting andet end et mellemrum.
31. december 2007 - 11:48
#9
Og din sql: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=s1-12,s2=s2-12,s3=s3-12,s4=s4-12,s5=s5-12,s6=s6-12,s7=s7-12 WHERE username='pet' at line 1
31. december 2007 - 16:17
#10
Kan du ikke prøve at udskrive både den nye og den gamle ? uden mysql_guery... ? echo $sql;
31. december 2007 - 16:21
#11
Men den laver 8 felter ?
31. december 2007 - 16:27
#12
Eksempel nr. 2 virker altså fint..., jeg har selv testet det...
31. december 2007 - 16:28
#13
Men prøv at skrive: print_r($defenceamount); for at se hvad dit array indeholder...
31. december 2007 - 16:29
#14
Jeg mente forholdet mellem attackamount og row ("s"): $attackamount['0'] > $row['s1'] row er altid 1 højere end attackamount.. Jeg ville nok bare have lagt 1 til sådan her: $attackamount['$i'] > $row['s' . $i + 1] (ingen grund til en ekstra variabel) Eller hvordan man nu gør i PHP.. :-)
31. december 2007 - 16:33
#15
Ja jeg så det godt senere hvad du mente, men det med +1 er en dum ide så bliver $i jo plusset med 2 hver gang...
31. december 2007 - 16:33
#16
Prøvede jeg også først thesurfer, men af en eller andet grund kan man ikek gøre sådan :P Så jeg fandt en alternattiv løsning. Jeg vender lige tilbage i 2008.
31. december 2007 - 16:37
#17
zynzz> Nej, nu misforstår du mig.. :-) Det er ikke $i skal pluses med 1.. det er værdien/indholdet af "$i", inden det smides sammen med "s".. Eksempel: $1 = 4; s = $1 + 1; giver: s5 $1 = 4 :-)
31. december 2007 - 16:39
#18
flodhesten> Vender først tilbage om et år?? ;-) Hvis $row['s' . $i + 1] ikke virker, prøv med "$row['s' . ($i + 1)]".. Det plejer at hjælpe når man putter parenteser udenom matematiske operationer.. :-)
31. december 2007 - 16:49
#20
gammelhat> Kunne man få et hurtigt resume..? :-) Jeg ville bruge "()" pga den måde man normalt samler ting.. Eksempel: "hello" + "world" + 5 + 2 giver "helloworld52" "hello" + "world" + (5 + 2) burde give "helloworld7" Men nu bruger PHP jo "." til at samle ting (hedder vist "to concate"), så jeg var ikke helt sikker på det med "." og "+" når man så har tal/integers..
31. december 2007 - 16:59
#21
+ og . er lige vigtige, så den evaluerer udtrykket fra venstre mod højre. "hello" . "world" . 5 + 2 vil i php give 2
31. december 2007 - 17:07
#22
'123' + 1 kan php godt finde ud af, da php automatisk konverterer strengen om til et tal først. En streng, som ikke kan laves om til et gyldigt tal, bliver lavet om til 0 's'.$i+1 bliver til 's1'+1 's1' kan ikke laves om til et tal, så det endelige resultat bliver: 0+1=1 (og ikke 's2')
20. januar 2008 - 00:56
#23
Beklager at jeg har glemt alt om denne tråd. zynzz, du er velkommen til at poste et svar.
20. januar 2008 - 01:03
#24
Hermed et svar
Vi tilbyder markedets bedste kurser inden for webudvikling