18. oktober 2004 - 14:48
Der er
27 kommentarer og 3 løsninger
Hjælp til Tæller og mysql
Hej alle sammen. Er der en som har en besøgstæller, som tæller på index.php ind i en mysql DB, den samme ip skal kunne tælles hele tiden, på siden. Det samlet antal af besøgende skal vises på admin.php så derfor ikke på samme side :0).. Den skal også skrive dato og Tid på hvornår de var inde, for vil gerne høre om der også kan laves at den kan lave på en måde så den skriver at "Sidste måned var der: $antal" .. og "Sidste kl. $tid dato: $dato" eller sådan noget.. Kan det laves? Mvh.
Annonceindlæg fra Lector
18. oktober 2004 - 15:01
#1
Du er temmelig svær at forstå... Men det lyder som om du skal have en tæller pr. måned: Så kan du inserte ip og maaned i tabellen: $ip = $_SERVER['REMOTE_ADDR']; $maaned = date("m"); mysql_query("INSERT INTO taeller(ip, maaned) VALUES('$ip', '$maaned')") or die(mysql_error()); Når du vil have hele tallet kan du: $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']; .... <html> Du er besøgende nr: <?= $nr ?> :) Når du vil have for en bestemt måned kan du så: $maaned = 5; //Maj $antal = mysql_num_rows(mysql_query("SELECT nr FROM taeller WHERE maaned='$maaned'")); Tabellen skal laves sådan her: mysql_query("CREATE TABLE taeller(nr int(5) auto_increment PRIMARY KEY, ip varchar(15), maaned int(2));"); :)
18. oktober 2004 - 15:18
#2
det det blev lidt kludret forklaret :o).. Det jeg tænkte på var at få lavet så man kunne ved hjælp af en select menu, vælge en måned hvor den så automatisk nedenfor skriver det andtal som var i den måned. Det er i hvert fald det første jeg skal se om jeg kan få lavet på en måde :/ og så naturligvis et samlet antal af hele året..
18. oktober 2004 - 15:36
#3
Jeg har skrevet ovenfor hvordan du kan inserte ip og måned i databasen, og hvordan du får resultatet fra en bestemt måned. Så det er jo egentlig grundlaget for det du ønsker. Men med selectoren ville det nok være en god ide at læse alle resultaterne ind i en javascript funktion først: <?php mysql_connect(localhost", "brugernavn", "pass"); mysql_select_db("database"); $maanedstal = array(); for($i = 1; $i < 13; $i++) { array_push($maanedstal, mysql_num_rows(mysql_query("SELECT * FROM taeller WHERE maaned='$i'")); } ?> <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> <form name="monthcount"> <select name="maaneder" onChange="visNummer(this);"> <option value="januar">Januar</option> <option value="februar">Februar</option> ..... </select> <input type="text" name="textfelt" size="5"> </form> Så skulle den med selectoren være løst :)
18. oktober 2004 - 15:57
#4
så på index skal der egentlig bare øverst på siden stå: <?php require "db.php"; $ip = $_SERVER['REMOTE_ADDR']; $maaned = date("m"); mysql_query("INSERT INTO taeller(ip, maaned) VALUES('$ip', '$maaned')") or die(mysql_error()); ?> så smækker den det ind i DB .. og så på min admin side har jeg: <?php mysql_connect(localhost", "brugernavn", "pass"); mysql_select_db("database"); $maanedstal = array(); for($i = 1; $i < 13; $i++) { array_push($maanedstal, mysql_num_rows(mysql_query("SELECT * FROM taeller WHERE maaned='$i'")); } ?> <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> <form name="monthcount"> <select name="maaneder" onChange="visNummer(this);"> <option value="januar">Januar</option> <option value="februar">Februar</option> ..... </select> <input 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"; ?>
18. oktober 2004 - 16:02
#5
Tja, du skal lige udfylde selectoren med resten af månederne :) Og så naturligvis rette til i database kontakten. Men med lidt tilpasning til din side, skulle det virke fint.
18. oktober 2004 - 16:08
#6
Du er ikke sød og lave den korrekte Mysql forespørgelse O:)?
18. oktober 2004 - 16:22
#7
De SQL kald jeg har skrevet er skam korrekte, hvis du laver tabellen, som jeg skrev i første kommentar med navnet taeller og de nævnte felter nr, ip, maaned :) Det jeg mener er at du på din første side require er db fil, men på anden side står der stadig mine mysql_connect linier :) Det skal du lige have fikset.
18. oktober 2004 - 16:45
#8
nåå jaja :) .. men finder den selv ud af at lave "maaned" i databsen ? jeg skal bare udfylde selected sådan her ikke: <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> og det er det eneste jeg skal høre ? bortset fra lige at skrive <?php require "db.php"; $maanedstal = array(); for($i = 1; $i < 13; $i++) { array_push($maanedstal, mysql_num_rows(mysql_query("SELECT * FROM taeller WHERE maaned='$i'")); } ikke ? :o)
18. oktober 2004 - 16:56
#9
Jeg ved ikke om det er mig der er blind men den siger fejl her: array_push($maanedstal, mysql_num_rows(mysql_query("SELECT * FROM taeller WHERE maaned='$i'")); men kan ikke rigtig se hvorfor ?
18. oktober 2004 - 18:29
#10
Der mangler lige en ) til sidst... Det er det :) Men ellers er din selector fin
18. oktober 2004 - 20:10
#11
YES kanon .. det virker perfekt.. jeg har lige lidt mere hvis du orker :):) Kan man lave det med års tal ?? så man først vælger år og så kommer måned select frem så man kan mælge der.. og så kommer det andet frem efter.. kan man det?
18. oktober 2004 - 21:20
#12
Selvfølgelig :) Men så bliver du nødt til at gemme året i databasen også (naturligvis) Så du skal have et felt i tabellen, der heder aar og er int(4) Og så skal disse ting ændres: Når du inserter (din index.php): $ip = $_SERVER['REMOTE_ADDR']; $maaned = date("m"); $aar = date("Y"); mysql_query("INSERT INTO taeller(ip, maaned, aar) VALUES('$ip', '$maaned', '$aar')") or die(mysql_error()); Når du henter: (Vi bliver desværre nødt til at reloade siden, når der skiftes år) Her er selectoren til år, den putter du ind lige over den anden selector, altså lige under <form name="monthcount">: <select name="aar" onChange="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?aar='+this.value';"> <script type="text/javascript"> tid = new Date(); aar = tid.getFullYear(); for(i = aar; i > aar-3; i--) { document.write("<option value=\"" + i + "\">" + i + "</option>"); } </script> </select> Og så endelig i toppen af siden her skal der ændres lidt: <?php require "db.php"; $maanedstal = array(); $aar = $_GET['aar']; for($i = 1; $i < 13; $i++) { array_push($maanedstal, mysql_num_rows(mysql_query("SELECT * FROM taeller WHERE maaned='$i' AND aar='$aar'")); } Så er den smuk :)
18. oktober 2004 - 21:23
#13
Lige en rettelse: <?php require "db.php"; $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'")); } ...ellers virker det ikke :)
18. oktober 2004 - 22:13
#14
hvor skal det her helt præcis hen ?
18. oktober 2004 - 22:23
#15
på din admin-side, hvor det er i forvejen (bare uden de nye ændringer) Den nye selecor skal ind oven over den anden
19. oktober 2004 - 11:31
#16
jeps fint nok.. nu sætter den fint dato ind i DB. Men den kan ikke ses på admin side, den laver fint select boksen, men den er bare tom inden i? siden ser sådan herud: <?php $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';"> <script type="text/javascript"> tid = new Date(); aar = tid.getFullYear(); for(i = aar; i > aar-3; i--) { document.write("<option value=\"" + i + "\">" + i + "</option>"); } </script> </select> <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="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"; ?>
19. oktober 2004 - 13:33
#17
Sådan her :) Der var lidt for mange ting, der hed aar... <select name="aar" onChange="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?aar='+this.value;"> <script type="text/javascript"> tid = new Date(); aarstal = tid.getFullYear(); for(i = aarstal; i > aarstal-3; i--) { document.write("<option value=\"" + i + "\">" + i + "</option>"); } </script> </select>
19. oktober 2004 - 22:46
#18
Okay, jeg tror måske det virker men vil lige vende tilbage til det, for tror der måske er noget galt hihi.. men jeg vil lige se om du ved hvordan man kan lave en knap til så man kan trykke på den, så sletter/nulstiller den databasen.. for selv om jeg har slettet alt i DB, og går ind på forsiden for at registrer besøget, skriver den igen eks. "15" .. selv om der kun er en i DB :o)
19. oktober 2004 - 22:49
#19
Du skal bruge SQL-kaldet "TRUNCATE TABLE tabelnavn;" Så bliver tabellen tømt...
19. oktober 2004 - 23:14
#20
det er noget med: <?php require "db.php"; if (submit { mysql_query("Truncate table `taeller`"); or die(mysql_error()); echo "Info opdateret for: "; ?> <form> <form action="admin.php" method="post"> <input type="submit" value="Gem Ændringer" class="box"> </form> ikke ? kan du rette det sidste :(?
19. oktober 2004 - 23:57
#21
<?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="Slet Alt !"> </form> :)
20. oktober 2004 - 00:19
#22
Lækkert .. det virker :o).. I selection skriver den årstalene 2004, 2003, 2002 .. det ved jeg godt kan ændres her: "for(i = aarstal; i > aarstal-3; i--) {" Men når jeg vælger 2003 eks. så virker den fint nede i måned selction, men i "år" hopper den auto op på 2004 som gør det muligt ikke at kunne vælge 2004 igen og se månederne der.. hvorfor ? ved ikke om du forstår hehe, men ellers kan jeg vise en test site
20. oktober 2004 - 00:34
#23
Joooh, men så må du jo sætte den til at vise det valgte :) Skriv dette lige efter selectoren: <script type = "text/javascript"> document.getElementById('aarselector').value = "<?= $aar ?>"; </script> og put id på selectoren: <select id="aarselector" name="aar" onChange="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?aar='+this.value;"> Det skulle gerne fikse det :)
20. oktober 2004 - 00:42
#24
Det kunne bare ikke blive bedre !!.. måske lige den sidste ting, jeg kan aldrig huske hvad det er man skriver for at "hidde" et tekstfelt, men så man stadig kan se hvad der står i felt.. kan du det ?
20. oktober 2004 - 00:51
#25
og kan det laves på den måde at den henter års talene i select fra DB?
20. oktober 2004 - 01:17
#26
Dit første spørgsmål, har jeg vist allerede brugt her: <input type="hidden" name="slet" value="jeps"> Dit andet spørgsmål er lidt mere kompliceret *suk*: $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']); } ?> ............ <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=\"".$i."\">".$i."</option>"; } ?> </select> Jeg er lidt for træt til at checke det, men det burde være noget lign. dette :)
20. oktober 2004 - 17:48
#27
$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']); } ?> skal ind i stedet for: tid = new Date(); aarstal = tid.getFullYear(); for(i = aarstal; i > aarstal-3; i--) { document.write("<option value=\"" + i + "\">" + i + "</option>"); } eller ?
20. oktober 2004 - 18:06
#28
Nej. PHP koden skal ind øverst på siden i den php blok der... Og koden til selectoren, skal erstatte den nuværende kode: <select name="aar" onChange="window.location.href='<?= $_SERVER['PHP_SELF'] ?>?aar='+this.value';"> <script type="text/javascript"> tid = new Date(); aar = tid.getFullYear(); for(i = aar; i > aar-3; i--) { document.write("<option value=\"" + i + "\">" + i + "</option>"); } </script> </select> Skal ændres til: <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> Prøv med det :)
20. oktober 2004 - 19:35
#29
sådan: <?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>
16. november 2004 - 10:30
#30
Vi tilbyder markedets bedste kurser inden for webudvikling