Avatar billede marzman Nybegynder
07. december 2004 - 20:28 Der er 42 kommentarer og
1 løsning

fejl, counter

Hejsa...

Jeg har kigget på denne counter, http://eksperten.dk/spm/289554

Mit problem er at den ikke rigtig virker...

Nogle der kan hjælpe...

http://marzman.dk/counter.php :


<?php
session_start();
include('dbconnect.php');
if(!$_COOKIE["tael"]) {
    mysql_query("UPDATE taeller set hit=hit+1");
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}
?>


<?
$res = mysql_query("SELECT * FROM taeller");
    while($tal = mysql_fetch_array($res)) {
        echo "du er gæst nummer " . $tal[hit];
    }
?>

dbconnect.php :

<?php
mysql_connect("localhost", "marzman_dk", "MIN_KODE");
mysql_select_db("marzman_dk");
?>
Avatar billede hmortensen Nybegynder
07. december 2004 - 20:30 #1
Tjek at du ikke har noget mellemrum eller linieskift før <?php
Avatar billede marzman Nybegynder
07. december 2004 - 20:33 #2
Kan du ikke lige copy paste koden så jeg bare skal sætte den ind har nemlig prøvet at ændre!
Avatar billede marzman Nybegynder
07. december 2004 - 20:47 #3
Så virker den MEN den skriver ikke noget på siden!!!! :) nogen forslag ?
Avatar billede neocron Nybegynder
07. december 2004 - 22:31 #4
Hej! Har lige hurtigt tjekket din kode, og det virker faktisk her - her et fungerende eksempel (det kan let omskrives til at passe til din):

<?php
$id = mysql_connect("host", "user", "pass");
mysql_select_db("database", $id);
$res = mysql_query("SELECT * FROM taeller");
    while($tal = mysql_fetch_array($res)) {
        echo "du er gæst nummer " . $tal["hit"];
    }
?>
Avatar billede neocron Nybegynder
07. december 2004 - 22:34 #5
En anden lille ting - når du kun skal returnere én ting kan du undlade at køre en while loop - og din kode kan f.eks. se sådan ud så:

<?php
$id = mysql_connect("host", "user", "pass");
mysql_select_db("database", $id);
$res = mysql_query("SELECT * FROM taeller");
$tal = mysql_fetch_array($res); // ingen behov for while her
echo "du er gæst nummer " . $tal["hit"];
?>
Avatar billede marzman Nybegynder
07. december 2004 - 22:42 #6
Hejsa...

Hvordan skal koden så se ud....

sådan:

<?php

session_start();

include('dbconnect.php');

if(!$_COOKIE["tael"]) {
    mysql_query("UPDATE taeller set hit=hit+1");
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}
?>

<?php
$id = mysql_connect("localhost", "marzman_dk", "marz1199");
mysql_select_db("database", $id);
$res = mysql_query("SELECT * FROM taeller");
$tal = mysql_fetch_array($res); // ingen behov for while her
echo "du er gæst nummer " . $tal["hit"];
?>
Avatar billede neocron Nybegynder
07. december 2004 - 22:57 #7
Du kan smide min databasekode ind i din dbconnect.php eller simpelthen bare rykke

$id = mysql_connect("localhost", "marzman_dk", "pass");
mysql_select_db("database", $id);

op og erstatte din include som sådan her:

<?php

session_start();

// include('dbconnect.php');
$id = mysql_connect("localhost", "marzman_dk", "marz1199");
mysql_select_db("database", $id);

if(!$_COOKIE["tael"]) {
    mysql_query("UPDATE taeller set hit=hit+1");
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}

$res = mysql_query("SELECT * FROM taeller");
$tal = mysql_fetch_array($res); // ingen behov for while her
echo "du er gæst nummer " . $tal["hit"];
?>
Avatar billede marzman Nybegynder
08. december 2004 - 16:28 #8
så ser koden sådan ud!

<?php
$id = mysql_connect("localhost", "marzman_dk", "PASSWORD");
mysql_select_db("marzman_dk", $id);

session_start();

// include('dbconnect.php');
$id = mysql_connect("localhost", "marzman_dk", "marz1199");
mysql_select_db("database", $id);

if(!$_COOKIE["tael"]) {
    mysql_query("UPDATE taeller set hit=hit+1");
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}

$res = mysql_query("SELECT * FROM taeller");
$tal = mysql_fetch_array($res); // ingen behov for while her
echo "du er gæst nummer " . $tal["hit"];
?>

og den skirver stadig KUN: "du er gæst nummer" men IKKE hvad nr. man er !!!
Avatar billede marzman Nybegynder
08. december 2004 - 16:30 #9
eller sådan her!

<?php


session_start();

$id = mysql_connect("localhost", "marzman_dk", "marz1199");
mysql_select_db("marzman_dk", $id);

if(!$_COOKIE["tael"]) {
    mysql_query("UPDATE taeller set hit=hit+1");
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}

$res = mysql_query("SELECT * FROM taeller");
$tal = mysql_fetch_array($res); // ingen behov for while her
echo "du er gæst nummer " . $tal["hit"];
?>
Avatar billede neocron Nybegynder
08. december 2004 - 16:46 #10
Er du sikker på at din SQL er sat rigtig op?
Prøv lige at gå ind i PHPMyAdmin og se om der overhovedet er noget data i din tabel.

Hvis ikke, så prøv at indsætte (via PHPMyAdmin) et felt med navnet hit og standardværdi 0 af typen INT.
Avatar billede neocron Nybegynder
08. december 2004 - 16:48 #11
Du kan også prøve at opfange en evt. fejl ved at rette følgende kode:

if(!$_COOKIE["tael"]) {
    mysql_query("UPDATE taeller set hit=hit+1");
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}

til:

if(!$_COOKIE["tael"]) {
    // printer en eventuel fejl fra MySQL ud
    mysql_query("UPDATE taeller set hit=hit+1") or die("Fejlen er: " . mysql_error());
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}
Avatar billede marzman Nybegynder
08. december 2004 - 17:10 #12
det virker ikke... den laver ikke fejl før jeg includer den på selve siden!

http://marzman.dk
Avatar billede neocron Nybegynder
08. december 2004 - 17:41 #13
Nu er jeg inde på din side - tænker du på Warning: session_start()? Du skal have session_start() øverest i dit dokument. Det samme gælder hvis du bruger header(). Flyt dem op i starten før <html> tagget, så vil de højst sandsynligt forsvinde.
Avatar billede marzman Nybegynder
08. december 2004 - 18:31 #14
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at

Siger den!

Og koden ser sådan ud nu:

<?php
session_start();



$id = mysql_connect("localhost", "marzman_dk", "marz1199");
mysql_select_db("marzman_dk", $id);

if(!$_COOKIE["tael"]) {
    // printer en eventuel fejl fra MySQL ud
    mysql_query("UPDATE taeller set hit=hit+1") or die("Fejlen er: " . mysql_error());
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}

$res = mysql_query("SELECT * FROM taeller");
    while($tal = mysql_fetch_array($res)) {
        echo "gæst nummer " . $tal[hit];
    }

 
?>
Avatar billede neocron Nybegynder
08. december 2004 - 19:43 #15
Din session_start() skal initialiseres før noget andet. Når den siger Headers already sent, betyder det at den er gået igang med at formatere siden osv.

Du skal sætte session_start(); ind FØR denne, hvis det ikke allerede er gjort:

*** her skal sessionen startes ***
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
Avatar billede hmortensen Nybegynder
08. december 2004 - 20:05 #16
Altså, du skal flytte ud session_start(); fra din counter fil, og over i din index fil, så den står øverst.

Det er ikke nok at den står øverst på en side, som inkluderes længere nede på en anden side
Avatar billede marzman Nybegynder
08. december 2004 - 20:29 #17
altså fx. mit index.php:

<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>

....

Sådan!

og stadig counter.php:

<?php
session_start();

$id = mysql_connect("localhost", "marzman_dk", "marz1199");
mysql_select_db("marzman_dk", $id);

if(!$_COOKIE["tael"]) {
    // printer en eventuel fejl fra MySQL ud
    mysql_query("UPDATE taeller set hit=hit+1") or die("Fejlen er: " . mysql_error());
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}

$res = mysql_query("SELECT * FROM taeller");
    while($tal = mysql_fetch_array($res)) {
        echo "gæst nummer " . $tal[hit];
    }

 
?>
Sådan! ???
Avatar billede hmortensen Nybegynder
08. december 2004 - 20:32 #18
Hvis du så lige fjerner session_start() fra counter.php, så skulle den være der...
Avatar billede neocron Nybegynder
08. december 2004 - 20:44 #19
hmortensen har helt ret - sessionen skal ikke startes to gange - sessionen skal -kun- startes helt oppe i toppen, så prøv den, og så burde det umiddelbart virke.
Avatar billede marzman Nybegynder
08. december 2004 - 20:46 #20
stadig fejl!

http://marzman.dk

index.php
<?php
session_start();
?>

----------------

længere nede php include counter.php!
Avatar billede neocron Nybegynder
08. december 2004 - 20:59 #21
Det kunne godt se ud som du har brugt Header(); - er det sandt?
Headers må heller ikke stå midt inde på en side, og jeg mener ikke at du kan bruge sessions og headers på samme side. Så du må lave en workaround, hvis det er en Header med location. F.eks. vha. javascript.

Tjek evt. top.php om der også er noget med session i.
Avatar billede marzman Nybegynder
08. december 2004 - 21:04 #22
<?php
session_start();
 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-4" />
<title>||-|| The private website of marZman --|-- Kenneth Mortensen ||-||</title>

<script language="javascript" type="text/javascript">
  function PopUp(){
    var ScreenWidth=window.screen.width;
    var ScreenHeight=window.screen.height;
    var movefromedge=0;
    placementx=ScreenWidth-290-movefromedge;
    placementy=movefromedge;
    var PopUpUrl="http://marzman.dk/player/player-safe.php"
    WinPop=window.open(PopUpUrl,"","width=290,height=200,toolbar=0,location=0,directories=0,status=0,scrollbars=0,menubar=0,resizable=0,left="+placementx+",top="+placementy+",screenX="+placementx+",screenY="+placementy+",");
  }
  </script>
<link rel="stylesheet" href="/style.css" type="text/css" media="all" />

</head>

<body>

<table align="center" border="0" width="800" cellpadding="0" cellspacing="0"><tr><td style="border: 1px #000000 solid;">
<div align="center"><img src="/top.jpg" border="0" width="800" height="75" alt="kenneth.marzman.dk" /></div>

<div style="padding-left: 5px; background-color: #000000; color: #FFFFFF; text-align: center;">
<strong>marZman.dk - Forsøgs hjemmeside lavet i php</strong></div>

<table align="center" style="border: 0px; width: 800px; height: 440px;"><tr>
<td width="150" valign="top" style="background-color:transparent">

<table border="0" width="130">
<tr><td class="menu"><a href="/" class="menu">Home</a></td></tr>
<tr><td class="menu"><a href="/info" class="menu">Profil</a></td></tr>
<tr><td class="menu"><a href="/pc" class="menu">Min PC</a></td></tr>
<tr><td class="menu"><a href="/geek" class="menu">Nørd eller hvad?</a></td></tr>
<tr><td class="menu"><a href="/gaver" class="menu">Ønske seddel</a></td></tr>
<tr><td class="menu"><a href="/guestbook" class="menu">Se gæstebogen</a></td></tr>
<tr><td class="menu"><a href="/guestbook/add.php" class="menu">Skriv i gæstebogen</a></td></tr>
<tr><td height="250" bgcolor="#FFFFFF" valign="top">

      <a href="http://validator.w3.org/check?uri=referer"><img
          src="/images/xhtml.gif"
          alt="Valid XHTML 1.0!" border="0" height="31" width="88" /></a>
<br />

    <a href="http://jigsaw.w3.org/css-validator/">
      <img style="border:0;width:88px;height:31px"
      src="/images/css.gif"
      alt="Valid CSS!" /></a>
<br />

<a href="java script:PopUp()"><img src="http://marzman.dk/player/grafik/link.jpg" border="0" alt="Hør netradio" class="win" /></a><br />
Prøv min netradio med alle de kendte kannaler
</td>
</tr></table>

</td>

<td width="475" height="300" valign="top" class="menu">

NEJ!!! :) siden ser sådan ud!

jeg har sat siden sammen med: top | main | bund

I bund ligger der include news.?

det er i news jeg includer counter.php!
Avatar billede neocron Nybegynder
08. december 2004 - 21:18 #23
Du er 100% sikker på at der ikke ligger mere end én session_start() eller en Header() og lurer et sted?
Avatar billede marzman Nybegynder
08. december 2004 - 21:24 #24
ikke i top... men måske i de andre filer jeg har includet ! Må de ikke være der ??
Avatar billede marzman Nybegynder
08. december 2004 - 21:27 #25
hvad med evt. at teste det på din egen server ?
Avatar billede hmortensen Nybegynder
08. december 2004 - 21:40 #26
Nu så jeg lige en fejl mere.

Du kan ikke bruge setcookie() efter output.
Avatar billede marzman Nybegynder
08. december 2004 - 21:52 #27
hvis du/I ikke har flere ideer... kan i så ikke bygge en counter der fungere ?? tror det ville være lettete!
Avatar billede hmortensen Nybegynder
08. december 2004 - 22:10 #28
Den virker fint.

Du skal bare placere tingene anderledes, hvilket vi har prøvet at forklare dig...
Avatar billede marzman Nybegynder
08. december 2004 - 22:15 #29
ja men hvordan anderledes!
Avatar billede hmortensen Nybegynder
08. december 2004 - 22:18 #30
Den her del øverst, i din top fil:

<?php
session_start();
include('dbconnect.php');
if(!$_COOKIE["tael"]) {
    mysql_query("UPDATE taeller set hit=hit+1");
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}
?>


Og den anden del der udskriver, kan du blot inkludere hvor du vil ha det udskrevet
Avatar billede marzman Nybegynder
08. december 2004 - 22:27 #31
hvad er den anden del så ???
Avatar billede hmortensen Nybegynder
08. december 2004 - 22:32 #32
Ja, hvad er der tilbage....

<?
$antal = mysql_result(mysql_query("SELECT hit FROM taeller"), 0);
echo "Du er gæst nummer ".$antal;
?>
Avatar billede marzman Nybegynder
09. december 2004 - 09:00 #33
Fejl... Se selv...

http://marzman.dk/

og der er de 2 koder du har skrevet sidst jeg har sat ind...
Avatar billede hmortensen Nybegynder
09. december 2004 - 15:20 #34
Har du tjekket for mellemrum og enter tryk får <?php ??
Avatar billede marzman Nybegynder
09. december 2004 - 15:50 #35
ingen mellemrum og ingen enter tryk....

Så det skulle være sat ordenligt op...
se selv..

index.php:
<?php
session_start();
$id = mysql_connect("localhost", "marzman_dk", "marz1199");
mysql_select_db("marzman_dk", $id);
if(!$_COOKIE["tael"]) {
    mysql_query("UPDATE taeller set hit=hit+1");
    setcookie("tael", time()+86400);
} else {
    setcookie("tael", time()+86400);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-4" />
<title>||-|| The private website of marZman --|-- Kenneth Mortensen ||-||</title>

--------------------------

counter.php:
<?
$antal = mysql_result(mysql_query("SELECT hit FROM taeller"), 0);
echo "Du er gæst nummer ".$antal;
?>
--------------

og min newz.txt (den der inculder counter.php):
<table width="150" class="win" cellpadding="0" cellspacing="0">
<tr><td width="150" class="top">05/12/2004</td></tr>
<tr><td width="150" style="padding-left: 5px;">

Så ligger min ønske liste online. Med Links til mere info!<br />
Også en side med nogle nørd sætninger er lagt online...


</td></tr></table>


<table width="150" class="win" cellpadding="0" cellspacing="0">
<tr><td width="150" class="top">04/12/2004</td></tr>
<tr><td width="150" style="padding-left: 5px;">
Nu virker min gæstebog perfekt! Der er mulighed for enden at bruge smilies som almindelig tekst, eller som billeder!

</td>
</tr></table>

<table width="150" class="win" cellpadding="0" cellspacing="0">
<tr><td width="150" class="top">29/11/2004</td></tr>
<tr><td width="150" style="padding-left: 5px;">
Sidens design er lavet og lagt online!

</td></tr>
</table>
<br />

<table width="150" class="win" cellpadding="0" cellspacing="0">
<tr><td width="150" class="top">Statistik:</td></tr>
<tr><td width="150" style="padding-left: 5px;">
<strong>Din Ip:</strong>
<?php
$ip = getenv("REMOTE_ADDR"); // get the ip number of the user
echo "$ip";
?>
<br />
<?php
include'/customers/marzman.dk/marzman.dk/httpd.www/users-online.php';
?> 
<br />
<strong>Din opløsning: </strong><script language="Javascript" type="text/javascript">document.write(window.screen.width + " x " + window.screen.height)</script>
<br />
<strong>Browser:</strong> <?php

if ( strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') )
{
  if ( strpos($_SERVER['HTTP_USER_AGENT'], 'Netscape') )
  {
    $browser = 'Netscape';
  }
  else if ( strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') )
  {
    $browser = 'Mozilla Firefox';
  }
  else
  {
    $browser = 'Mozilla';
  }
}
else if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') )
{
  if ( strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') )
  {
    $browser = 'Opera';
  }
  else
  {
    $browser = 'Internet Explorer';
  }
}
else
{
  $browser = 'Ukendt browser';
}

echo $browser;

?>
<br />

<strong>Dato:</strong>
<?php
// prints something like: Wednesday the 15th
echo date("d F Y");
?>
<br />

<strong>Tid:</strong>
<?php
// prints something like: Wednesday the 15th
echo date("H:i");
?>

<br />

<strong>Genererings tid:</strong> <br />
<?php
$time_start = microtime(true);

// Sleep for a while
usleep(100);

$time_end = microtime(true);
$time = $time_end - $time_start;

echo "$time sekunder\n";
?>
<br />
<?php include'/customers/marzman.dk/marzman.dk/httpd.www/counter.php'; ?>

</td></tr></table>
Avatar billede neocron Nybegynder
09. december 2004 - 16:15 #36
Lige en enkelt kommentar, som ganske vist ikke har noget med counteren at gøre - du bruger getenv() til at returnere brugerens ip adresse - den virker ganske vist, men den er deprecated. Brug istedet superglobalen, $_SERVER:

$ip = $_SERVER["REMOTE_ADDR"];

Mere om superglobals: http://dk.php.net/manual/en/reserved.variables.php#reserved.variables.server

Andre eksempler på superglobals er f.eks. $_SESSION, $_POST, $_REQUEST, $_COOKIE osv...

Mht. til din counter, der må kun være én session_start() pr side! Eventuelle sider, der includes / requires må da heller ikke have session_start() fordi de bliver "integreret" i siden, de kaldes via.
Avatar billede marzman Nybegynder
09. december 2004 - 17:37 #37
der er da ikke 2 session_start() ???
Avatar billede neocron Nybegynder
09. december 2004 - 21:43 #38
Nej måske ikke - men hvis der var. Der er bare noget der tyder på det, hvis du stadig får "headers already sent". Bruger du funktionen header() nogensteds?
Avatar billede marzman Nybegynder
09. december 2004 - 22:01 #39
nopp...

faktisk, har jeg fundet et andet script som jeg også kunen bruge... :)

dermed problemet løst... Jeg mente at det var lettere for både mig og jer!

er du venlig at ligge et svar ???

Det er jo tros alt dig der har hjælpet mest.
Avatar billede neocron Nybegynder
09. december 2004 - 22:03 #40
Det er helt i orden.. men interessant diskussion - håber du har lært noget :) Det er ihvertfald godt at se at du ikke bare gav op! Thumbs up.
Avatar billede marzman Nybegynder
09. december 2004 - 22:33 #41
hehe....
Vi lærer jo hele tiden noget nyt...

Men jeg ønsker nogle lærerbøger om php i julegave så må jeg læse lidt på di faste variabler $...

by the way... the point, there you are!
Avatar billede neocron Nybegynder
09. december 2004 - 22:50 #42
Tak ska' du ha!
Jeps lærebøger er altid en god ting - jeg har faktisk ikke selv nogen endnu, men jeg skal have anskaffet mig både om PHP og C/C++...

Og glædelig jul, da.. :)
Avatar billede marzman Nybegynder
10. december 2004 - 09:49 #43
mange tak og i lige måde... :)
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