/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Problem med if-sætning...
Fra : Dennis Munding


Dato : 26-03-06 14:05

Hej NG!

Jeg har et lille problem, som jeg håber, at I kan hjælpe mig med...

Jeg har hentet et script til tælling af, hvor mange der er online, og den
skrevne tekst er p.t.:

Der er lige nu x bruger(e) online.

Jeg kunne så godt tænke mig, at i stedet for "bruger(e)", så skal der stå
"bruger", hvis der kun er én online, ellers skal der stå "brugere" (også ved
0 - nul).

Koden til selve tællingen ser således ud:

$antal_online = mysql_query("SELECT COUNT(*) AS antal FROM online") or
die(mysql_error());

Og jeg har så forsøgt at lave en variabel til at få udskrevet enten "bruger"
eller "brugere", som ser således ud:

if($antal_online < 1) {
$antal = "brugere";
} elseif($antal_online > 1) {
$antal = "brugere";
} else {
$antal = "bruger";
}

Jeg har også prøvet med:

if(!$antal_online == 1) {
$antal = "brugere";
} else {
$antal = "bruger";
}

....men ingen af delene virker!??

Hvad gør jeg galt (er PHP-newbie!)

På forhånd tak for hjælpen!


Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/



 
 
Leonard (26-03-2006)
Kommentar
Fra : Leonard


Dato : 26-03-06 14:13

"Dennis Munding" <mail@invalid.dk> wrote:

>if(!$antal_online == 1) {
> $antal = "brugere";
>} else {
> $antal = "bruger";
>}

Enten:

if($antal_online != 1) {
$antal = "brugere";
} else {
$antal = "bruger";
}

eller vende den om:

if($antal_online == 1) {
$antal = "bruger";
} else {
$antal = "brugere";
}


--
Leonard
http:/leonard.dk/hjemmeside/

Dennis Munding (26-03-2006)
Kommentar
Fra : Dennis Munding


Dato : 26-03-06 14:20

Hej Leonard!
"Leonard" <usenet@leonard.dk> skrev i en meddelelse
news:4q4d229rhheje4ld084rmcbbe39jgmjjmn@4ax.com...
> Enten:
>
> if($antal_online != 1) {
> $antal = "brugere";
> } else {
> $antal = "bruger";
> }
>
> eller vende den om:
>
> if($antal_online == 1) {
> $antal = "bruger";
> } else {
> $antal = "brugere";
> }

Desværre...
Begge modeller udskriver "brugere", selv om der kun er én online....?

Kan det have nogen betydning, at jeg har delt hele scriptet op i 3:

1: Kald til fil, som forbinder til database og tæller op
2: Udskriv resultatet (virker uden problemer)
3: Kald til fil, som lukker forbindelsen


Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/



Geert Lund (26-03-2006)
Kommentar
Fra : Geert Lund


Dato : 26-03-06 14:37

Dennis Munding wrote:

> Begge modeller udskriver "brugere", selv om der kun er én online....?

1) Har du checket at $antal_brugere indeholder det forventede?

> Kan det have nogen betydning, at jeg har delt hele scriptet op i 3:

> 1: Kald til fil, som forbinder til database og tæller op
> 2: Udskriv resultatet (virker uden problemer)
> 3: Kald til fil, som lukker forbindelsen

Det er jo umuligt at svare dig på sålænge du ikke har inkluderet noget
konkret kode ud over 4-5 linier der udlæser en tekst til skærmen.

Derudover - hvis $antal_online indeholder korrekt data kan følgende bruges:

echo $antal_online . ' ' . ( (int) $antal_online == 1 ? 'bruger' :
'brugere' ) . ' online ';

--
Med venlig hilsen
Geert Lund,
www.GLD.dk

Dennis Munding (26-03-2006)
Kommentar
Fra : Dennis Munding


Dato : 26-03-06 16:17

Hej Geert!
"Geert Lund" <glund-news@post.tele.dk> skrev i en meddelelse
news:44269888$0$2084$edfadb0f@dtext02.news.tele.dk...
> Dennis Munding wrote:
>
>> Begge modeller udskriver "brugere", selv om der kun er én online....?
>
> 1) Har du checket at $antal_brugere indeholder det forventede?

Hvordan kan jeg se det? Med en var_dump()?? Hvis ja, så se mit svar til
Leonard...

>> Kan det have nogen betydning, at jeg har delt hele scriptet op i 3:
>
>> 1: Kald til fil, som forbinder til database og tæller op
>> 2: Udskriv resultatet (virker uden problemer)
>> 3: Kald til fil, som lukker forbindelsen

> Det er jo umuligt at svare dig på sålænge du ikke har inkluderet noget
> konkret kode ud over 4-5 linier der udlæser en tekst til skærmen.

1: <? require($_SERVER['DOCUMENT_ROOT']."/Inc/online_connect.php"); ?>

(online_connect.php):
<?php
/* Vi connecter til databasen. */
$connection = mysql_connect("mydb2.surf-town.net", "Munding_Admin",
"LeneDennis");
mysql_select_db("Munding_fotoadgang");

/* Brugerens ip-adresse gemmes i variablen $ip. */
$ip = $_SERVER['REMOTE_ADDR'];

/* Vi tjekker om brugeren allerede findes i tabellen. */
$tjek_ip = mysql_query("SELECT COUNT(*) AS antal FROM online WHERE
ip='$ip'") or die(mysql_error());

/* Hvis brugeren ikke findes i tabellen, vil brugeren blive oprettet der,
med den nuværende tid og brugerens ip. Hvis brugerens tid allerede findes i
tabellen, vil denne blot blive opdateret. Der tages ikke højde for vekslende
ip'er */
if(!mysql_result($tjek_ip,0)) {
mysql_query("INSERT INTO online (time, ip) VALUES (NOW(),'$ip')") or
die(mysql_error());
} else {
mysql_query("UPDATE online SET time=NOW() WHERE ip='$ip'") or
die(mysql_error());
}

/* Vi sletter alle brugere fra online-listen der ikke har været aktive i 5
min. Jeg synes 5 min. er passende, men antallet af min kan ændres ved
simpelt at ændre 5 MINUTE til det antal min. man ønsker. */
mysql_query("DELETE FROM online WHERE date_add(time,interval 5 MINUTE) <
NOW()") or die(mysql_error());

/* Vi tæller antallet af brugere/rækker i tabellen */
$antal_online = mysql_query("SELECT COUNT(*) AS antal FROM online") or
die(mysql_error());

var_dump($antal_online);

if($antal_online != 1) {
$antal = "brugere";
} else {
$antal = "bruger";
}
?>

2: <? echo "<p class=\"online\">Der er lige nu
".mysql_result($antal_online,0)." ".$antal." online</p>"; ?>

3: <? require($_SERVER['DOCUMENT_ROOT']."/Inc/online_close.php"); ?>

(online_close.php):
<?php mysql_close($connection); ?>

> Derudover - hvis $antal_online indeholder korrekt data kan følgende
> bruges:
>
> echo $antal_online . ' ' . ( (int) $antal_online == 1 ? 'bruger' :
> 'brugere' ) . ' online ';

Det gør den så åbenbart ikke, for det virkede ikke.... (eller også klokkede
jeg bare i det...)


Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/



Leonard (26-03-2006)
Kommentar
Fra : Leonard


Dato : 26-03-06 14:20

"Dennis Munding" <mail@invalid.dk> wrote:

>$antal_online = mysql_query("SELECT COUNT(*) AS antal FROM online") or
>die(mysql_error());

Det duer ikke, du mangler at udtrække resultatet.
Til mySQL forespørgsler bruger jeg altid linier der ligner disse:

$sel="SELECT COUNT(*) AS antal FROM online";

$que=mysql_query($sel) or exit("Errorline: ".__LINE__."<br />$sel<br
/>".mysql_error());

if ($arr=mysql_fetch_array($que)) {
   $antal_online = $arr['antal'];

if kan også være en while, hvis der udtrækkes flere resultater, men
når der kun kommer et resultat, så sætter jeg altid en LIMIT 1 på
$sel:

$sel="SELECT COUNT(*) AS antal FROM online LIMIT 1";

så sparer du mySQL-serveren for at skulle lede videre efter noget du
alligevel ikke bruger. Om det har nogen effekt lige i dette tilfælde
ved jeg ikke, men ved almindelige SELECT har det.

--
Leonard
http:/leonard.dk/hjemmeside/

Dennis Munding (26-03-2006)
Kommentar
Fra : Dennis Munding


Dato : 26-03-06 14:25

Hej igen Leonard!
"Leonard" <usenet@leonard.dk> skrev i en meddelelse
news:3t4d2256ai1khq0frkvi0hro00loilasvp@4ax.com...
> "Dennis Munding" <mail@invalid.dk> wrote:
>
>>$antal_online = mysql_query("SELECT COUNT(*) AS antal FROM online") or
>>die(mysql_error());
>
> Det duer ikke, du mangler at udtrække resultatet.
> Til mySQL forespørgsler bruger jeg altid linier der ligner disse:
>
> $sel="SELECT COUNT(*) AS antal FROM online";
>
> $que=mysql_query($sel) or exit("Errorline: ".__LINE__."<br />$sel<br
> />".mysql_error());
>
> if ($arr=mysql_fetch_array($que)) {
> $antal_online = $arr['antal'];
>
> if kan også være en while, hvis der udtrækkes flere resultater, men
> når der kun kommer et resultat, så sætter jeg altid en LIMIT 1 på
> $sel:
>
> $sel="SELECT COUNT(*) AS antal FROM online LIMIT 1";
>
> så sparer du mySQL-serveren for at skulle lede videre efter noget du
> alligevel ikke bruger. Om det har nogen effekt lige i dette tilfælde
> ved jeg ikke, men ved almindelige SELECT har det.

Er ikke helt med på, hvad du mener, men jeg glemte at skrive endnu en
ting...

Linjen, der udskriver resultatet, ser således ud:

echo "<p>Der er lige nu ".mysql_result($antal_online,0)." ".$antal."
online</p>";


Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/



Martin (27-03-2006)
Kommentar
Fra : Martin


Dato : 27-03-06 01:07

"Dennis Munding" <mail@invalid.dk> wrote:
>
> $antal_online = mysql_query("SELECT COUNT(*) AS antal FROM online") or
> die(mysql_error());

$antal_online = mysql_result(mysql_query("SELECT ...."),0) OR DIE ();

sådan kan du få $antal_online ud, på 1 linje.

Leonard (26-03-2006)
Kommentar
Fra : Leonard


Dato : 26-03-06 14:35

"Dennis Munding" <mail@invalid.dk> wrote:

>Koden til selve tællingen ser således ud:
>
>$antal_online = mysql_query("SELECT COUNT(*) AS antal FROM online") or
>die(mysql_error());
>
>Og jeg har så forsøgt at lave en variabel til at få udskrevet enten "bruger"
>eller "brugere", som ser således ud:

Hvad viser en var_dump($antal_online); dig ligefør denne if?

>if($antal_online < 1) {


--
Leonard
http:/leonard.dk/hjemmeside/

Dennis Munding (26-03-2006)
Kommentar
Fra : Dennis Munding


Dato : 26-03-06 16:10

Hej Leonard!
"Leonard" <usenet@leonard.dk> skrev i en meddelelse
news:616d221lddia33cfndkh8cgu6242npqqgq@4ax.com...
> Hvad viser en var_dump($antal_online); dig ligefør denne if?
>
>>if($antal_online < 1) {

Den viser:

resource(10) of type (mysql result)


Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/



Leonard (26-03-2006)
Kommentar
Fra : Leonard


Dato : 26-03-06 16:18

"Dennis Munding" <mail@invalid.dk> wrote:

>> Hvad viser en var_dump($antal_online); dig ligefør denne if?
>>
>>>if($antal_online < 1) {
>
>Den viser:
>
>resource(10) of type (mysql result)

Altså mangler du at trække data ud af denne resource og det gør du fx
med mysql_fetch_array og får så data i et array, som jeg viste dig i
et tidligere indlæg.

Ellers kan du ikke bruge dit udtræk til noget.

--
Leonard
http:/leonard.dk/hjemmeside/

Dennis Munding (26-03-2006)
Kommentar
Fra : Dennis Munding


Dato : 26-03-06 17:28

Hej Leonard!
"Leonard" <usenet@leonard.dk> skrev i en meddelelse
news:o2cd22dg1p4vunqplghooak6k4j3to6aa4@4ax.com...
> "Dennis Munding" <mail@invalid.dk> wrote:
>
>>> Hvad viser en var_dump($antal_online); dig ligefør denne if?
>>>
>>>>if($antal_online < 1) {
>>
>>Den viser:
>>
>>resource(10) of type (mysql result)
>
> Altså mangler du at trække data ud af denne resource og det gør du fx
> med mysql_fetch_array og får så data i et array, som jeg viste dig i
> et tidligere indlæg.
>
> Ellers kan du ikke bruge dit udtræk til noget.

Det er til at forstå, men jeg forstår ikke lige hvordan, jeg skal skrive det
i koden - jeg har prøvet med det du postede, men så fik jeg en fejlmelding -
har nok bare klokket i det....

Troede lige jeg havde lært noget af alle de scripts, som jeg efterhånden har
samlet sammen, men det er åbenbart ikke så ligetil alligevel... Øv! :-/

Må nok bare bøje mig i støvet og lade det ligge - mangler den fornødne
viden....

Men tak for hjælpen.


Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/



Erlend Klakegg Bergh~ (27-03-2006)
Kommentar
Fra : Erlend Klakegg Bergh~


Dato : 27-03-06 08:29

Dennis Munding skrev:
> Hej Leonard!
> "Leonard" <usenet@leonard.dk> skrev i en meddelelse
> news:o2cd22dg1p4vunqplghooak6k4j3to6aa4@4ax.com...
>> "Dennis Munding" <mail@invalid.dk> wrote:
>>
>>>> Hvad viser en var_dump($antal_online); dig ligefør denne if?
>>>>
>>>>> if($antal_online < 1) {
>>> Den viser:
>>>
>>> resource(10) of type (mysql result)
>> Altså mangler du at trække data ud af denne resource og det gør du fx
>> med mysql_fetch_array og får så data i et array, som jeg viste dig i
>> et tidligere indlæg.
>>
>> Ellers kan du ikke bruge dit udtræk til noget.
>
> Det er til at forstå, men jeg forstår ikke lige hvordan, jeg skal skrive det
> i koden - jeg har prøvet med det du postede, men så fik jeg en fejlmelding -
> har nok bare klokket i det....
>
> Troede lige jeg havde lært noget af alle de scripts, som jeg efterhånden har
> samlet sammen, men det er åbenbart ikke så ligetil alligevel... Øv! :-/
>
> Må nok bare bøje mig i støvet og lade det ligge - mangler den fornødne
> viden....

Jeg kan ikke fatte at dette skal være så vanskelig.

Jeg gjør en liten endring:

-----------
/* Vi tæller antallet af brugere/rækker i tabellen */
$result = mysql_query("SELECT COUNT(*) AS `antal` FROM `online`") or
die(mysql_error());

// Vi vet at det skal ligge en linje i resultatet.
$arr = mysql_fetch_array($result);

// Gjøre tilgjengelig den ønskede verdien for resten av siden.
$antal_online = (int) $arr["antal"];

var_dump($antal_online);

if($antal_online != 1) {
$antal = "brugere";
} else {
$antal = "bruger";
}
-----------

var_dump() skal nå levere en int med det antallet som er online, og skal
naturligvis fjernes før scriptet ferdigstilles ... ;)


Hva som var feil, er at du prøvde å ta et resultat fra Mysql, en
resource, og bruke den uten å bruke mysql-funksjonalitet til å faktisk
gjøre dataene tilgjengelig. mysql_fetch_array() henter neste linje
(begynner på første) og returnerer linjen som en matrise (array)
tilbake, og som vi igjen bruker som en helt ordinær array.

http://php.net/mysql
http://php.net/manual/en/language.types.resource.php
http://php.net/resource
http://php.net/manual/en/language.types.array.php

Håper dette er med på å hjelpe deg videre.


--

Vennlig hilsen

Erlend Klakegg Bergheim

Dennis Munding (27-03-2006)
Kommentar
Fra : Dennis Munding


Dato : 27-03-06 12:28

Hej Erlend!
"Erlend Klakegg Bergheim" <bergheim-remove@stud.ntnu.no> skrev i en
meddelelse news:e08486$80t$1@orkan.itea.ntnu.no...
> Jeg kan ikke fatte at dette skal være så vanskelig.

Når man er "newbie", er der meget, som er vanskelig...

> Jeg gjør en liten endring:
>
> -----------
> /* Vi tæller antallet af brugere/rækker i tabellen */
> $result = mysql_query("SELECT COUNT(*) AS `antal` FROM `online`") or
> die(mysql_error());
>
> // Vi vet at det skal ligge en linje i resultatet.
> $arr = mysql_fetch_array($result);
>
> // Gjøre tilgjengelig den ønskede verdien for resten av siden.
> $antal_online = (int) $arr["antal"];
>
> var_dump($antal_online);
>
> if($antal_online != 1) {
> $antal = "brugere";
> } else {
> $antal = "bruger";
> }
> -----------

Jamen det er jo fantastisk!!
Det virker!! Mange tak for hjælpen!!

> var_dump() skal nå levere en int med det antallet som er online, og skal
> naturligvis fjernes før scriptet ferdigstilles ... ;)
>
> Hva som var feil, er at du prøvde å ta et resultat fra Mysql, en resource,
> og bruke den uten å bruke mysql-funksjonalitet til å faktisk gjøre dataene
> tilgjengelig. mysql_fetch_array() henter neste linje (begynner på første)
> og returnerer linjen som en matrise (array) tilbake, og som vi igjen
> bruker som en helt ordinær array.

Ok! Men jeg forstår bare ikke, at resultatet ikke var tilgængeligt uden din
ændring - det blev jo udskrevet på skærmen...??
Men jeg må prøve at kæmpe mig igennem de sider, som du har skrevet link
til - teknisk engelsk er absolut ikke min stærke side, men jeg må
efterhånden erkende, at det er nødvendigt at lære, hvis jeg vil blive bedre
til web-design....

> http://php.net/mysql
> http://php.net/manual/en/language.types.resource.php
> http://php.net/resource
> http://php.net/manual/en/language.types.array.php
>
> Håper dette er med på å hjelpe deg videre.

Så absolut!
Og endnu en gang tak for hjælpen!

Resultatet kan nu beskues her (i menuen til venstre):

http://www.skovaa-munding.dk/


Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/



Michael Zedeler (27-03-2006)
Kommentar
Fra : Michael Zedeler


Dato : 27-03-06 12:56

Dennis Munding wrote:
> "Erlend Klakegg Bergheim" <bergheim-remove@stud.ntnu.no> skrev i en
> meddelelse news:e08486$80t$1@orkan.itea.ntnu.no...
>
>>Jeg kan ikke fatte at dette skal være så vanskelig.
>
> Når man er "newbie", er der meget, som er vanskelig...

Du skulle tage et kig på denne tutorial. Det burde hjælpe en del:

http://www.w3schools.com/php/php_intro.asp

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf

Dennis Munding (26-03-2006)
Kommentar
Fra : Dennis Munding


Dato : 26-03-06 14:09

Hej igen!
"Dennis Munding" <mail@invalid.dk> skrev i en meddelelse
news:ukwVf.87$4P1.26@news.get2net.dk...

Glemte lige noget i farten....

> Koden til selve tællingen ser således ud:
>
> $antal_online = mysql_query("SELECT COUNT(*) AS antal FROM online") or
> die(mysql_error());
>
> Og jeg har så forsøgt at lave en variabel til at få udskrevet enten
> "bruger" eller "brugere", som ser således ud:
>
> if($antal_online < 1) {
> $antal = "brugere";
> } elseif($antal_online > 1) {
> $antal = "brugere";
> } else {
> $antal = "bruger";
> }

Ovenstående udskriver "brugere" uanset hvor mange, der er online...

> Jeg har også prøvet med:
>
> if(!$antal_online == 1) {
> $antal = "brugere";
> } else {
> $antal = "bruger";
> }

....og her udskriver det "bruger" uanset hvor mange, der er online...??


Med venlig hilsen
--
Dennis Munding
Web-master
http://www.skovaa-munding.dk/, http://www.mundings-memorial.dk/
http://www.cantica.dk/, http://www.eds-denmark.dk/



Martin (27-03-2006)
Kommentar
Fra : Martin


Dato : 27-03-06 01:05

Dennis Munding wrote:
> Hej NG!
>
> Jeg har et lille problem, som jeg håber, at I kan hjælpe mig med...
>
> Jeg har hentet et script til tælling af, hvor mange der er online, og den
> skrevne tekst er p.t.:
>
> Der er lige nu x bruger(e) online.
>
> Jeg kunne så godt tænke mig, at i stedet for "bruger(e)", så skal der stå
> "bruger", hvis der kun er én online, ellers skal der stå "brugere" (også ved
> 0 - nul).
>
> Koden til selve tællingen ser således ud:
>
> $antal_online = mysql_query("SELECT COUNT(*) AS antal FROM online") or
> die(mysql_error());
>
> Og jeg har så forsøgt at lave en variabel til at få udskrevet enten "bruger"
> eller "brugere", som ser således ud:
>
> if($antal_online < 1) {
> $antal = "brugere";
> } elseif($antal_online > 1) {
> $antal = "brugere";
> } else {
> $antal = "bruger";
> }

Den sjove inline if, bare for at se det hele med et andet perspektiv,
eller hvad man nu kan kalde det :)

print "I øjeblikket er der $antal_online
bruger".($antal_online==1?"":"e")." online";

hele skidtet på en linje :)



>
> Jeg har også prøvet med:
>
> if(!$antal_online == 1) {
> $antal = "brugere";
> } else {
> $antal = "bruger";
> }
>
> ...men ingen af delene virker!??
>
> Hvad gør jeg galt (er PHP-newbie!)
>
> På forhånd tak for hjælpen!
>
>
> Med venlig hilsen

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste