Avatar billede sorthvid Nybegynder
26. april 2004 - 22:14 Der er 24 kommentarer og
1 løsning

Dynamisk variabel navn?

Hej hej, Jeg har et script der ser således ud:
<?
$DBhost = "DBhost";
$DBuser = "DBuser";
$DBpass = "DBpass";
$DBName = "DBName";
$table = "testtable";
mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");
@mysql_select_db($DBName) or die("Unable to select database $DBName");

$sqlquery = "UPDATE $table SET felt1=felt1+1 WHERE id = 1";
$results = mysql_query($sqlquery);

mysql_close();
?>

Jeg kunne godt tænke mig at gøre variablen felt1 dynamisk på den måde at nummeret følger den time man er i... så hvis klokken er 15:30 skal den sige:

$sqlquery = "UPDATE $table SET felt15=felt15+1 WHERE id = 1";

Kan det lade sig gøre på en snedig måde?
Avatar billede dennismp Nybegynder
26. april 2004 - 22:21 #1
$felt = 'felt' . date('G');
og så
$sqlquery = "UPDATE $table SET $felt=$felt+1 WHERE id = 1";
Avatar billede sorthvid Nybegynder
26. april 2004 - 22:25 #2
Der var han igen :) Jeg prøver det lige...
Avatar billede sorthvid Nybegynder
26. april 2004 - 22:34 #3
Det virker helt perfekt!!! Men hvad hvis jeg vil hæve nummeret med een?
$felt = 'felt' . date('G')+1; virker ikke :(
Avatar billede sorthvid Nybegynder
26. april 2004 - 22:34 #4
Og hvad står 'G' for?
Avatar billede dennismp Nybegynder
26. april 2004 - 22:37 #5
G:     24-hour format of an hour without leading zeros

brug H, hvis du vil have 04 istedet for 4.

prøv: $felt = 'felt' . (date('G')+1);
Avatar billede dennismp Nybegynder
26. april 2004 - 22:38 #6
se evt her, der er en komplet liste over hvad date() kan: http://dk.php.net/date
Avatar billede olebole Juniormester
26. april 2004 - 22:43 #7
<ole>

$felt = 'felt' . (date('G')+1);

/mvh
</bole>
Avatar billede olebole Juniormester
26. april 2004 - 22:44 #8
Hehe ... sorry, Dennis. Jeg så ikke din sidste linie i (26/04-2004 22:37:33)  :D
Avatar billede sorthvid Nybegynder
26. april 2004 - 22:50 #9
:D Det virker!! Er I friske på endnu en udfordring?

Det her må kunne laves 100 gange smartere med en løkke...

$strokeMax=230;
$biggestNumber=210;

//Række 1
$query = mysql_query("SELECT * FROM $table WHERE id = 1");
$row = @mysql_fetch_array($query);

$time1=$row["felt1"];
$time2=$row["felt2"];
$time3=$row["felt3"];
$time4=$row["felt4"];
$time5=$row["felt5"];
$time6=$row["felt6"];
$time7=$row["felt7"];
$time8=$row["felt8"];
$time9=$row["felt9"];
$time10=$row["felt10"];
$time11=$row["felt11"];
$time12=$row["felt12"];
$time13=$row["felt13"];
$time14=$row["felt14"];
$time15=$row["felt15"];
$time16=$row["felt16"];
$time17=$row["felt17"];
$time18=$row["felt18"];
$time19=$row["felt19"];
$time20=$row["felt20"];
$time21=$row["felt21"];
$time22=$row["felt22"];
$time23=$row["felt23"];
$time24=$row["felt24"];
$strokeLength1=$time1/$biggestNumber*$strokeMax;
$strokeLength2=$time2/$biggestNumber*$strokeMax;
$strokeLength3=$time3/$biggestNumber*$strokeMax;
$strokeLength4=$time4/$biggestNumber*$strokeMax;
$strokeLength5=$time5/$biggestNumber*$strokeMax;
$strokeLength6=$time6/$biggestNumber*$strokeMax;
$strokeLength7=$time7/$biggestNumber*$strokeMax;
$strokeLength8=$time8/$biggestNumber*$strokeMax;
$strokeLength9=$time9/$biggestNumber*$strokeMax;
$strokeLength10=$time10/$biggestNumber*$strokeMax;
$strokeLength11=$time11/$biggestNumber*$strokeMax;
$strokeLength12=$time12/$biggestNumber*$strokeMax;
$strokeLength13=$time13/$biggestNumber*$strokeMax;
$strokeLength14=$time14/$biggestNumber*$strokeMax;
$strokeLength15=$time15/$biggestNumber*$strokeMax;
$strokeLength16=$time16/$biggestNumber*$strokeMax;
$strokeLength17=$time17/$biggestNumber*$strokeMax;
$strokeLength18=$time18/$biggestNumber*$strokeMax;
$strokeLength19=$time19/$biggestNumber*$strokeMax;
$strokeLength20=$time20/$biggestNumber*$strokeMax;
$strokeLength21=$time21/$biggestNumber*$strokeMax;
$strokeLength22=$time22/$biggestNumber*$strokeMax;
$strokeLength23=$time23/$biggestNumber*$strokeMax;
$strokeLength24=$time24/$biggestNumber*$strokeMax;
?>
Avatar billede sorthvid Nybegynder
26. april 2004 - 22:51 #10
Et eller andet med noget while måske?
Avatar billede dennismp Nybegynder
26. april 2004 - 22:58 #11
for($i=1;$i<=24;$i++) {
  $time[$i] = $row['felt'.$i];
  $strokeLength[$i] = $time[$i] / $biggestNumber*$strokeMax;
}

Så kan du nu bruge

$time[1], $time[2] .. osv
Avatar billede dennismp Nybegynder
26. april 2004 - 22:59 #12
smid evt
$time = array();
$strokeLength = array();

foran for() det er lidt pænere.
Avatar billede sorthvid Nybegynder
26. april 2004 - 23:03 #13
Prøver lige...

Jeg har også en variablen $biggestNumber=210; ... er der mulighed for at se hvilken af felt1, felt2, felt3 osv der har det største nummer og så give $biggestNumber værdien af dette felt?
Avatar billede dennismp Nybegynder
26. april 2004 - 23:07 #14
$biggestNumber = 0;
$biggestNumberIdx = 0;

for($i=1;$i<=24;$i++) {
  $t = $row['felt'.$i]; // jeg er doven :)
  if( $t > $biggestNumber ) {
    $biggestNumber = $t;
    $biggestNumberIdx = $i;
  }
}

nu vil $biggestNumberIdx være 3, hvis det er felt3 der  har det største nummer.
Avatar billede sorthvid Nybegynder
26. april 2004 - 23:08 #15
Øv den kommer op med en fejl... skal der ikke stå:

<?
$strokeMax=230;
$biggestNumber=210;

$query = mysql_query("SELECT * FROM $table WHERE id = 1");
$row = @mysql_fetch_array($query);

for($i=1;$i<=24;$i++) {
  $time[$i] = $row['felt'.$i];
  $strokeLength[$i] = $time[$i] / $biggestNumber*$strokeMax;
}
?>


???
Avatar billede dennismp Nybegynder
26. april 2004 - 23:13 #16
Jeg har vist misforstået dig.

Vil du finde ud af, hvilket felt der har den højeste værdi (fx felt3) og hvilen værdi dette er?

Hvis jeg forstår din kode korrekt, så bliver du nød til at lave to løkker. Een hvor du finder maxværdien og den anden hvor du beregner $strokeLength. Er det nogenlunde korrekt?
Avatar billede sorthvid Nybegynder
26. april 2004 - 23:19 #17
Det er præsist som det skal være... Jeg kan bare ikke hente variblen nu?!?!?!?

Jeg har nu det her:
<?
$strokeMax=230;
$biggestNumber = 0;
$biggestNumberIdx = 0;

$time = array();
$strokeLength = array();

for($i=1;$i<=24;$i++) {
  $t = $row['felt'.$i]; // jeg er doven :)
  if( $t > $biggestNumber ) {
    $biggestNumber = $t;
    $biggestNumberIdx = $i;
$strokeLength[$i] = $time[$i] / $biggestNumber*$strokeMax;
  }
}
?>

og til output har jeg:
<tr>
    <td width="90">00:00 - 00:59</td>
    <td width="80" align="center"><? print $time[1]?></td>
    <td><img src="stroke1.gif" width="<? print $strokeLength[1]?>" height="6"></td>
  </tr>

Men den viser ikke noget
Avatar billede sorthvid Nybegynder
26. april 2004 - 23:26 #18
Er det her den er gal?
<? print $time[1]?>
Avatar billede dennismp Nybegynder
26. april 2004 - 23:29 #19
Jeg har samlet koden, og rokeret lidt om. Tilføjet lidt kommentarer.
<?php

$time = array();
$strokeLength = array();
$strokeMax = 230;
$biggestNumber = -1;
$biggestNumberIdx = 1;

/*** Find biggestNumber og smid data i $time array'et ***/

for($i=1;$i<=24;$i++) {
  $time[$i] = $row['felt'.$i];
  if( $time[$i] > $biggestNumber )
    $biggestNumberIdx = $i;
}
$biggestNumber = $time[$biggestNumberIdx];

/*** Beregn $strokeLenght[...] ***/
for($i=1;$i<=24;$i++)
  $strokeLength[$i] = $time[$i] / $biggestNumber*$strokeMax;

/*** Output ***/
..
?>
Avatar billede dennismp Nybegynder
26. april 2004 - 23:30 #20
hovsa, brug denne.

<?php

$time = array();
$strokeLength = array();
$strokeMax = 230;
$biggestNumber = -1;
$biggestNumberIdx = 1;

/*** Find biggestNumber og smid data i $time array'et ***/

for($i=1;$i<=24;$i++) {
  $time[$i] = $row['felt'.$i];
  if( $time[$i] > $biggestNumber ) {
    $biggestNumberIdx = $i;
    $biggestNumber = $time[$i];
  }
}

/*** Beregn $strokeLenght[...] ***/
for($i=1;$i<=24;$i++)
  $strokeLength[$i] = $time[$i] / $biggestNumber*$strokeMax;

/*** Output ***/
..
?>
Avatar billede sorthvid Nybegynder
26. april 2004 - 23:33 #21
Skal det her ikke ind et eller andet sted?

$query = mysql_query("SELECT * FROM $table WHERE id = 1");
$row = @mysql_fetch_array($query);
Avatar billede dennismp Nybegynder
26. april 2004 - 23:37 #22
Jo, bare det er før "/*** Find biggestNumber o"-kommentaren, så burde det virke.
Avatar billede sorthvid Nybegynder
26. april 2004 - 23:38 #23
Det skulle det og nu virker det :D !!!!!!!!!
Avatar billede sorthvid Nybegynder
26. april 2004 - 23:38 #24
Jeg takker gang 1000 og kan du ikke lige lave et svar
Avatar billede dennismp Nybegynder
26. april 2004 - 23:43 #25
Joda :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester