Avatar billede trevi Nybegynder
22. oktober 2004 - 10:15 Der er 37 kommentarer og
1 løsning

hvorfor virker tælleren ikke?

Hej kan i hjælpe mig med at se hvad der er galt i denne tæller?

<?php
$aarstal = array();
$detteaar = date("y");
$aarstalquery1 = mysql_query("SELECT * FROM taeller WHERE aar='$detteaar' ORDER BY aar LIMIT 0, 1");
if($aarstalrow1 = mysql_fetch_assoc($aarstalquery1)) {
  array_push($aarstal, $aarstalrow1['aar']);
}
$sidsteaar = $detteaar-1;
$aarstalquery2 = mysql_query("SELECT * FROM taeller WHERE aar='$sidsteaar' ORDER BY aar LIMIT 0, 1");
if($aarstalrow2 = mysql_fetch_assoc($aarstalquery2)) {
  array_push($aarstal, $aarstalrow2['aar']);
}
$forrigeaar = $detteaar-2;
$aarstalquery3 = mysql_query("SELECT * FROM taeller WHERE aar='$forrigeaar' ORDER BY aar LIMIT 0, 1");
if($aarstalrow3 = mysql_fetch_assoc($aarstalquery3)) {
  array_push($aarstal, $aarstalrow3['aar']);
}
$maanedstal = array();
if(isset($_GET['aar'])) $aar = $_GET['aar'];
else $aar = date("Y");
for($i = 1; $i < 13; $i++) {
  array_push($maanedstal, mysql_num_rows(mysql_query("SELECT * FROM taeller WHERE maaned='$i' AND aar='$aar'")));
}
?>
<script type="text/javascript">
<?
print "var months = [";
$maaned = 0;
foreach($maanedstal as $mt) {
  $maaned++; 
  if($maaned != 12) print $mt.",";
  else print $mt;
}
print "];";
?>
function visNummer(sel) {
  sel.form.textfelt.value = months[sel.selectedIndex];
}
?>
</script>
<select name="aar" onChange="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?aar='+this.value;">
<?php
for($i = $aarstal[count($aarstal)]; $i > 0; $i--) {
  print "<option value=\"".$aarstal[$i]."\">".$aarstal[$i]."</option>";
}
?>
</select>
<script type = "text/javascript">
document.getElementById('aarselector').value = "<?= $aar ?>";
</script>

<form name="monthcount">
<select name="maaneder" onChange="visNummer(this);">
<option value="januar">Januar</option>
<option value="februar">Februar</option>
<option value="marts">Marts</option>
<option value="april">April</option>
<option value="maj">Maj</option>
<option value="juni">Juni</option>
<option value="juli">Juli</option>
<option value="august">August</option>
<option value="september">September</option>
<option value="oktober">Oktober</option>
<option value="november">November</option>
<option value="december">December</option>
</select>
<input type="hidden" name="textfelt" size="5">
</form>
<?
$query = mysql_query("SELECT nr FROM taeller ORDER BY nr DESC LIMIT 1") or die(mysql_error());
if($row = mysql_fetch_assoc($query)) $nr = $row['nr'];

echo "Der har været $nr besøgende";
?><br>
              <br>
<?php
if(isset($_POST['slet'])) {
  $slet = $_POST['slet'];
  if($slet == "jeps") {
      require "db.php";
      mysql_query("TRUNCATE TABLE taeller");
      print "Tabellen taeller er tømt max";
  }
}
?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
<input type="hidden" name="slet" value="jeps">
<input type="submit" value="Nulstil">
</form>



det har noget med:

$aarstal = array();
$detteaar = date("y");
$aarstalquery1 = mysql_query("SELECT * FROM taeller WHERE aar='$detteaar' ORDER BY aar LIMIT 0, 1");
if($aarstalrow1 = mysql_fetch_assoc($aarstalquery1)) {
  array_push($aarstal, $aarstalrow1['aar']);
}
$sidsteaar = $detteaar-1;
$aarstalquery2 = mysql_query("SELECT * FROM taeller WHERE aar='$sidsteaar' ORDER BY aar LIMIT 0, 1");
if($aarstalrow2 = mysql_fetch_assoc($aarstalquery2)) {
  array_push($aarstal, $aarstalrow2['aar']);
}
$forrigeaar = $detteaar-2;
$aarstalquery3 = mysql_query("SELECT * FROM taeller WHERE aar='$forrigeaar' ORDER BY aar LIMIT 0, 1");
if($aarstalrow3 = mysql_fetch_assoc($aarstalquery3)) {
  array_push($aarstal, $aarstalrow3['aar']);
}
$maanedstal = array();
if(isset($_GET['aar'])) $aar = $_GET['aar'];
else $aar = date("Y");
for($i = 1; $i < 13; $i++) {
  array_push($maanedstal, mysql_num_rows(mysql_query("SELECT * FROM taeller WHERE maaned='$i' AND aar='$aar'")));
}
?>


som er øverst.

Håber i kan hjælpe.
Avatar billede stois Nybegynder
22. oktober 2004 - 13:40 #1
Skal det ikke være: " $detteaar = date("y", time()); "
Date plejer gerne at ville vide hvad det er den skal oversætte til forståelig tid.
Desuden hvis du havde regnet med fire cifre så skal du skrive " date("Y", time()); "
Avatar billede Slettet bruger
22. oktober 2004 - 17:57 #2
stois: se http://dk.php.net/date

date behøver ikke at få et tidsstempel. Hvis man udelader det, tager den selv time()

Derudover er det korrekt, at man skal passe på med stort Y og småt y, for de giver ikke samme resultat.
Avatar billede trevi Nybegynder
22. oktober 2004 - 21:53 #3
Jeps det er jeg klar over. ;o).

Men ved i hvorfor jeg ikke kan få denne op og virke?
Avatar billede Slettet bruger
22. oktober 2004 - 22:12 #4
Prøv at beskrive, hvad der går galt? "Virker ikke" er et meget vidt begreb, som kan have mange årsager.
Avatar billede trevi Nybegynder
22. oktober 2004 - 22:30 #5
den siger fejl her:

document.getElementById('aarselector').value = "2004";

hele tiden :(

test  side kan vises
Avatar billede trevi Nybegynder
22. oktober 2004 - 22:39 #6
altså naturligvis her:

document.getElementById('aarselector').value = "<?= $aar ?>";
Avatar billede Slettet bruger
22. oktober 2004 - 23:03 #7
Hvilken fejl?
Avatar billede Slettet bruger
22. oktober 2004 - 23:05 #8
Måske fordi din år-select ikke har et id?

<select id="aarselector" name="aar" onChange="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?aar='+this.value;">
<?php
Avatar billede trevi Nybegynder
22. oktober 2004 - 23:41 #9
Det fjernede da en fejl hehe !..

Men der er stadig en eller anden fejl ..

den kan ses her:

www.trevi.dk/jens/adm/besog.php

det skal siges siden kun er en test til at afprøve scripts af på!
Avatar billede Slettet bruger
22. oktober 2004 - 23:55 #10
Du har en løsthængende ?> to linier før aarselectoren.

Og jeg ville nok lave den javascript-funktion om til:

function visNummer(sel) {
  document.getElementById('textfelt').value = months[sel.selectedIndex];
}

og så give textfeltet et id også.
Avatar billede Slettet bruger
22. oktober 2004 - 23:58 #11
for($i = $aarstal[count($aarstal)]; $i > 0; $i--) {
  print "<option value=\"".$aarstal[$i]."\">".$aarstal[$i]."</option>";
}

Skulle det ikke have været

for($i = count($aarstal); $i > 0; $i--) {
  print "<option value=\"".$aarstal[$i]."\">".$aarstal[$i]."</option>";
}
Avatar billede trevi Nybegynder
23. oktober 2004 - 09:20 #12
nu siger den i hvert fald ikke rigtig fejl ved mig. den skriver bare ikke i aarselecteren..

<?php
$aarstal = array();
$detteaar = date("y");
$aarstalquery1 = mysql_query("SELECT * FROM taeller WHERE aar='$detteaar' ORDER BY aar LIMIT 0, 1");
if($aarstalrow1 = mysql_fetch_assoc($aarstalquery1)) {
  array_push($aarstal, $aarstalrow1['aar']);
}
$sidsteaar = $detteaar-1;
$aarstalquery2 = mysql_query("SELECT * FROM taeller WHERE aar='$sidsteaar' ORDER BY aar LIMIT 0, 1");
if($aarstalrow2 = mysql_fetch_assoc($aarstalquery2)) {
  array_push($aarstal, $aarstalrow2['aar']);
}
$forrigeaar = $detteaar-2;
$aarstalquery3 = mysql_query("SELECT * FROM taeller WHERE aar='$forrigeaar' ORDER BY aar LIMIT 0, 1");
if($aarstalrow3 = mysql_fetch_assoc($aarstalquery3)) {
  array_push($aarstal, $aarstalrow3['aar']);
}
$maanedstal = array();
if(isset($_GET['aar'])) $aar = $_GET['aar'];
else $aar = date("Y");
for($i = 1; $i < 13; $i++) {
  array_push($maanedstal, mysql_num_rows(mysql_query("SELECT * FROM taeller WHERE maaned='$i' AND aar='$aar'")));
}
?>
<script type="text/javascript">
<?
print "var months = [";
$maaned = 0;
foreach($maanedstal as $mt) {
  $maaned++; 
  if($maaned != 12) print $mt.",";
  else print $mt;
}
print "];";
?>
function visNummer(sel) {
  document.getElementById('text').value = months[sel.selectedIndex];
}

</script>
<select id="aarselector" name="aar" onChange="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?aar='+this.value;">
<?php
for($i = count($aarstal); $i > 0; $i--) {
  print "<option value=\"".$aarstal[$i]."\">".$aarstal[$i]."</option>";
}
?>
</select>
<script type = "text/javascript">
document.getElementById('aarselector').value = "<?= $aar ?>";
</script>

<form name="monthcount">
<select name="maaneder" onChange="visNummer(this);">
<option value="januar">Januar</option>
<option value="februar">Februar</option>
<option value="marts">Marts</option>
<option value="april">April</option>
<option value="maj">Maj</option>
<option value="juni">Juni</option>
<option value="juli">Juli</option>
<option value="august">August</option>
<option value="september">September</option>
<option value="oktober">Oktober</option>
<option value="november">November</option>
<option value="december">December</option>
</select>
<input id="text" type="text" name="textfelt" size="5">
</form>
<?
$query = mysql_query("SELECT nr FROM taeller ORDER BY nr DESC LIMIT 1") or die(mysql_error());
if($row = mysql_fetch_assoc($query)) $nr = $row['nr'];

echo "Der har været $nr besøgende";
?><br>
              <br>
<?php
if(isset($_POST['slet'])) {
  $slet = $_POST['slet'];
  if($slet == "jeps") {
      require "db.php";
      mysql_query("TRUNCATE TABLE taeller");
      print "Tælleren er nulstillet";
  }
}
?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
<input type="hidden" name="slet" value="jeps">
<input type="submit" value="Nulstil">
</form>


sådan ser koden ud nu
Avatar billede Slettet bruger
23. oktober 2004 - 09:22 #13
Har du 2cifrede eller firecifrede årstal i databasen?
Avatar billede trevi Nybegynder
23. oktober 2004 - 09:27 #14
det er et 4 cifrede .. 2004, 2005, 2006
Avatar billede Slettet bruger
23. oktober 2004 - 09:33 #15
Så er det jo klart, for du leder efter år i databasen med 2cifrede årstal. Som vi forresten også gjorde opmærksom på helt fra starten.

Du skal bruge stort Y.

$detteaar = date("Y");
Avatar billede trevi Nybegynder
23. oktober 2004 - 10:22 #16
ja men jeg har begge dele som en test...

Men prøver lige at ændre alle til det..
Avatar billede trevi Nybegynder
23. oktober 2004 - 10:29 #17
nej det hjalp intet. Den er helt blank selecteren
Avatar billede Slettet bruger
23. oktober 2004 - 10:58 #18
Hov, år er jo et tal, så prøv uden '' om.

Derudover kan dine tre queries samles til en enkelt.

$aarstalquery = mysql_query("SELECT DISTINCT aar FROM taeller WHERE aar<=$detteaar ORDER BY aar DESC LIMIT 3");
while($aarstalrow1 = mysql_fetch_assoc($aarstalquery1)) {
  array_push($aarstal, $aarstalrow1['aar']);
}
Avatar billede Slettet bruger
23. oktober 2004 - 11:01 #19
Den vil dog springe over eventuelle huller der måtte være. (f.eks hvis der er data for 2004,2002 og 2001 men ikke for 2003, vil den vise alle tre år)

Hvis det er nødvendigt, kan det sagten rettes ved at tilføje OR aar>=$detteaar-2
Avatar billede trevi Nybegynder
23. oktober 2004 - 11:07 #20
Hov, år er jo et tal, så prøv uden '' om. 

----=>

Hvor henne mener du det helt præcis ? :)
Avatar billede Slettet bruger
23. oktober 2004 - 11:23 #21
Alle steder i din SQL, hvor du spørger om aar='variabel' ret til aar=variabel
Avatar billede trevi Nybegynder
23. oktober 2004 - 11:31 #22
update:

<?php
$aarstal = array();
$detteaar = date("Y");
$aarstalquery = mysql_query("SELECT DISTINCT aar FROM taeller WHERE aar<=$detteaar ORDER BY aar DESC LIMIT 3");
while($aarstalrow = mysql_fetch_assoc($aarstalquery)) {
  array_push($aarstal, $aarstalrow['aar']);
}
$maanedstal = array();
if(isset($_GET['aar'])) $aar = $_GET['aar'];
else $aar = date("Y");
for($i = 1; $i < 13; $i++) {
  array_push($maanedstal, mysql_num_rows(mysql_query("SELECT * FROM taeller WHERE maaned=$i AND aar=$aar")));
}
?>
<script type="text/javascript">
<?
print "var months = [";
$maaned = 0;
foreach($maanedstal as $mt) {
  $maaned++; 
  if($maaned != 12) print $mt.",";
  else print $mt;
}
print "];";
?>
function visNummer(sel) {
  document.getElementById('textfelt').value = months[sel.selectedIndex];
}

</script>
<select id="aarselector" name="aar" onChange="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?aar='+this.value;">
<?php
for($i = count($aarstal); $i > 0; $i--) {
  print "<option value=\"".$aarstal[$i]."\">".$aarstal[$i]."</option>";
}
?>
</select>
<script type = "text/javascript">
document.getElementById('aarselector').value = "<?= $aar ?>";
</script>

<form name="monthcount">
<select name="maaneder" onChange="visNummer(this);">
<option value="januar">Januar</option>
<option value="februar">Februar</option>
<option value="marts">Marts</option>
<option value="april">April</option>
<option value="maj">Maj</option>
<option value="juni">Juni</option>
<option value="juli">Juli</option>
<option value="august">August</option>
<option value="september">September</option>
<option value="oktober">Oktober</option>
<option value="november">November</option>
<option value="december">December</option>
</select>
<input id="text" type="text" name="textfelt" size="5">
</form>
<?
$query = mysql_query("SELECT nr FROM taeller ORDER BY nr DESC LIMIT 1") or die(mysql_error());
if($row = mysql_fetch_assoc($query)) $nr = $row['nr'];

echo "Der har været $nr besøgende";
?><br>
              <br>
<?php
if(isset($_POST['slet'])) {
  $slet = $_POST['slet'];
  if($slet == "jeps") {
      require "db.php";
      mysql_query("TRUNCATE TABLE taeller");
      print "Tælleren er nulstillet";
  }
}
?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
<input type="hidden" name="slet" value="jeps">
<input type="submit" value="Nulstil">
</form>



sådan ser siden ud nu, og der er stadig ikke noget i aarselecteren.

siden kan ses her:

www.trevi.dk/jens/adm/besog.php
kan bare ikke se hvorfor :/
Avatar billede Slettet bruger
23. oktober 2004 - 11:46 #23
Det kan jeg nu.

Arrays bliver nummereret fra 0 og opefter, men count() giver det egentlige antal elementer i arrayet. Det højeste element er altså på $array[count($array)-1)]. Jeg vil vædde med, at der kun er data for denne måned i din tabel, og derfor er der kun et årstal i arrayet. Det har nummer 0, og den ser løkken jo slet ikke på. Løkken ser kun på nummer 1, som ikke er defineret.

Løsning:

for($i = count($aarstal)-1; $i >= 0; $i--) {
Avatar billede trevi Nybegynder
23. oktober 2004 - 14:15 #24
Ja lige præcis. Den havde jeg aldrig set hehe !!.

lidt pinligt at spørge om:

<input id="text" type="text" name="textfelt" size="5">

men denne textfelt, hvordan er det nu man gør så man ikke kan skrive eller noget i den, eller se omridset af den. men kun det der står i feltet. kan du huske det? hvis det er type="hidden" forsvinder den jo helt :/?
Avatar billede Slettet bruger
23. oktober 2004 - 14:21 #25
Måske <input id="text" type="text" name="textfelt" size="5" disabled="disabled">
Avatar billede trevi Nybegynder
23. oktober 2004 - 15:24 #26
ja nu kan man i det mindste ikke ændre i den .. men der er os en måde at fjerne rammerne om den
Avatar billede Slettet bruger
23. oktober 2004 - 15:26 #27
Mon ikke det er:

<input id="text" type="text" name="textfelt" size="5" disabled="disabled" style="border:0;">
Avatar billede Slettet bruger
23. oktober 2004 - 15:28 #28
Hov, der skal lige lidt mere til:

<input id="text" type="text" name="textfelt" size="5" disabled="disabled" style="border:0;background:transparent;">
Avatar billede trevi Nybegynder
23. oktober 2004 - 16:00 #29
LIGE PRÆCIS :D..

Skal bare lige finde ud af hvordan man kan gøre den disable, men hvor den bare er tydelig i stedet, for den kan næsten ikke ses nu;).

Tusind tak for hjælpen, den virker som den skal nu. Smider du et svar
Avatar billede Slettet bruger
23. oktober 2004 - 16:46 #30
<input id="text" type="text" name="textfelt" size="5" disabled="disabled" style="border:0;background:transparent;color:black;">
Avatar billede Slettet bruger
23. oktober 2004 - 16:56 #31
Men der kommer slet ikke noget i feltet i Firefox. Prøv at rette

function visNummer(sel) {
  document.getElementById('textfelt').value = months[sel.selectedIndex];
}

til

function visNummer(sel) {
  document.getElementById('textfelt').value = months[sel.value];
}

Og sæt tal ind i value-felterne i den dropdown med månedsnavne. (Fra 0 til 11)
Avatar billede trevi Nybegynder
23. oktober 2004 - 16:57 #32
Det har jeg prøvet engang :).

Men det virkede ikke ;). Men jeg leger bare lidt med det.. ellers kommer der bare noget css på ..
Avatar billede trevi Nybegynder
23. oktober 2004 - 17:53 #33
function visNummer(sel) {
  document.getElementById('textfelt').value = months[sel.selectedIndex];
}

til

function visNummer(sel) {
  document.getElementById('textfelt').value = months[sel.value];
}

Og sæt tal ind i value-felterne i den dropdown med månedsnavne. (Fra 0 til 11)




hvad skal det gøre ? det var ikke det som jeg mente jeg har prøvet
Avatar billede trevi Nybegynder
23. oktober 2004 - 17:54 #34
så siger den bare "undefined" i feltet.
Avatar billede trevi Nybegynder
23. oktober 2004 - 17:55 #35
det virker fint som det er nu :o)
Avatar billede Slettet bruger
23. oktober 2004 - 23:23 #36
OK, hvis du bliver ved at bruge IE, så er det nok godt nok, men hvis du skulle få lyst til at bruge Firefox, er det tekstfelt altid tomt. (ikke bare svært at se, men direkte uden indhold.)

Eventuelt kunne du prøve med:

function visNummer(sel) {
  document.getElementById('textfelt').value = months[sel.selectedIndex.value];
}

Men det er naturligvis din beslutning. Der er jo dig, der skal bruge det, går jeg ud fra.
Avatar billede trevi Nybegynder
24. oktober 2004 - 11:41 #37
Nej den siger stadig undefined når jeg skifter den ud.. Jo det vil kun være med IE der kommer til at blive tjekket noget med :)
Avatar billede trevi Nybegynder
16. november 2004 - 10:29 #38
smider du et svar og evt kan hjælpe mig her:

http://www.eksperten.dk/spm/561677
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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