Avatar billede Slettet bruger
15. juli 2004 - 21:31 Der er 54 kommentarer og
1 løsning

Resource id #11

hvorfor kommer denne besked øverst på min side?.. alt andet virker perfekt?
Avatar billede Slettet bruger
15. juli 2004 - 21:34 #1
Du prøver at udskrive noget, som ikke er en normal variable, men bare er et resource id. Det kan for eksempel være resultatet fra en mysql_query() eller en fopen() eller andre lignende ting, der ikke indeholder information i sig selv, men bare er et "håndtag", som kan bruges til at få fat i information.
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 21:35 #2
nok fordi du har noget i retning af

  $r=mysql_query("...");
  print $r;
Avatar billede Slettet bruger
15. juli 2004 - 21:49 #3
<?
require "database.php";
//titlen
$title = "Brugere";
//querien til at finde medlemmer
$brugq = mysql_query("SELECT * FROM medlemmer") or die(mysql_error());
//antallet af medlemmer
$antal = mysql_num_rows($brugq);
//wile løkken
while($raew = mysql_fetch_array($brugq))
    {

    $brug .=
    "
    <tr>
      <td height=\"25\">$raew[nick]</td>
      <td>$raew[mail]</td>
      <td>$raew[oprettet]</td>
    </td>
    ";
   
    }
er her noget?
Avatar billede Slettet bruger
15. juli 2004 - 21:53 #4
Nej, det er ikke i den del, der er noget galt.

Kan det være, at du kommer til at udskrive $brugq et sted?
Avatar billede Slettet bruger
15. juli 2004 - 21:53 #5
ok her kommer der hele:

<?
require "database.php";

//titlen
$title = "Brugere";

//querien til at finde medlemmer
$brugq = mysql_query("SELECT * FROM medlemmer ORDER BY opret ASC") or die(mysql_error());

//antallet af medlemmer
$antal = mysql_num_rows($brugq);

//wile løkken
while($raew = mysql_fetch_array($brugq))
    {
$opret = date("j / n - Y", $raew[oprettet]);
    $brug .=
    "
    <tr>
      <td height=\"25\">$raew[nick]</td>
      <td>$raew[mail]</td>
      <td>$opret</td>
    </td>
    ";
   
    }

//selve content
$content =
"
<table width=\"100%\">
<tr>
  <td colspan=\"3\" valign=\"top\" align=\"center\"><u><b>Brugere oprettet på $hjemmeside ($antal)</b></u></td>
</tr>
<tr>
  <td colspan=\"3\" height=\"30\">&nbsp;</td>
</tr>
$brug
</table>
";


replace();
?>
Avatar billede Slettet bruger
15. juli 2004 - 21:54 #6
det er ikke replace() der er noget galt med
Avatar billede Slettet bruger
15. juli 2004 - 22:00 #7
Fejlen er nødt til enten at være et sted, hvor du fylder i variabler til udskrift, eller hvor du udskriver. Hvis den kode, du har vist her er hele din side, så er fejlen i database.php et sted.
Avatar billede Slettet bruger
15. juli 2004 - 22:08 #8
hvis jeg fjerner:

//querien til at finde medlemmer
$kh = mysql_query("SELECT * FROM medlemmer ORDER BY oprettet ASC") or die(mysql_error());

//wile løkken
while($yf = mysql_fetch_array($kh))
    {
   
    $opret = date("j / n - Y | H:i", $yf[oprettet]);
   
    $brug .=
    "
    <tr>
      <td height=\"25\">$yf[nick]</td>
      <td>$yf[mail]</td>
      <td>$opret</td>
    </td>
    ";
   
    }

så kommer "fejlen" ikke
Avatar billede Slettet bruger
15. juli 2004 - 22:14 #9
Hjalp det ikke bare at kalde den $kh i stedet for $brugq?

Kan jeg få et link, og gerne også replace(), så jeg kan se nøjagtigt hvor fejlen optræder? Det er letter end at skulle skyde sig frem i blinde.
Avatar billede Slettet bruger
15. juli 2004 - 22:15 #10
link = http://balmer1.frac.dk/brugere.php


function replace()
    {
    global $design, $buffer, $alert, $content, $title, $status, $hoejre;
   
    $design = fopen("template.php", "r");   
   
    while(!feof($design))
        {
   
          $buffer .= fgets($design, 4096);
   
        }   

    fclose($design);
   
   
    $buffer = ereg_replace('<--hoejre-->', $hoejre, $buffer);
    $buffer = ereg_replace('<--content-->', $content, $buffer);
    $buffer = ereg_replace('<--alert-->', $alert, $buffer);
    $buffer = ereg_replace('<--title-->', $title, $buffer);
    $buffer = ereg_replace('<--status-->', $status, $buffer);
   
    echo $buffer;
    }
?>
Avatar billede Slettet bruger
15. juli 2004 - 22:16 #11
Hvis du trykker "vis kilde" så kommer:

<table width="100%">
<tr>
  <td colspan="3" height="40" valign="top"  align="center"><u><b>Brugere oprettet på Wicez.com</b></u></td>
</tr>
<tr>
  <td colspan="3" height="22" valign="top"><b>fed</b> = Administrator</td>
</tr>
<tr>
  <td colspan="3" height="22" valign="top"><u>understreget</u> = Redaktør</td>
</tr>
<tr>
  <td colspan="3" height="22" valign="top"><em>kursiv</em> = inaktiv</td>
</tr>
<tr>
  <td colspan="3" height="30">&nbsp;</td>
</tr>
Resource id #11
    <tr>
      <td height="25">Wicez</td>
      <td>andersbalmer@hotmail.com</td>
      <td>10 / 7 - 2004 | 17:07</td>
    </tr>

så det står uden for tabellen?
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 22:17 #12
Du skal nu også have rettet
    <tr>
      <td height=\"25\">$yf[nick]</td>
      <td>$yf[mail]</td>
      <td>$opret</td>
    </td>
til
    <tr>
      <td height=\"25\">$yf[nick]</td>
      <td>$yf[mail]</td>
      <td>$opret</td>
    </tr>

Så står fejlbeskeden måske det rigtige sted. Husk altid at lave en HTML-varlidering af dine sider.
Avatar billede Slettet bruger
15. juli 2004 - 22:17 #13
jeg bruger også database.php på alle mine andre sider, og der kommer det ikke det der "resource id"
Avatar billede Slettet bruger
15. juli 2004 - 22:18 #14
ja det har jeg også haft gjort ^^, men det virkede også med </td> :?
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 22:18 #15
Sæt $brug="";
inden din whileløkke. Den kommer nok fra din include fil
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 22:18 #16
"virkede også med </td>"  ... browsere er underlige, men det er altså forkert.
Avatar billede Slettet bruger
15. juli 2004 - 22:19 #17
ja i know.. men stadig mystisk o_O
Avatar billede Slettet bruger
15. juli 2004 - 22:19 #18
det med $brug = ""; virkede

hvordan kan du gøre det erik?
Avatar billede Slettet bruger
15. juli 2004 - 22:20 #19
det er gang på gang på gang på gang på gang på gang du har det rigtige svar :D
Avatar billede Slettet bruger
15. juli 2004 - 22:20 #20
men du vil ikke have point?
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 22:20 #21
Jeg har psykokinetiske evner, og kan se alle bits på din computer. Derfor.
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 22:20 #22
Nej tak, ingen points.
Avatar billede Slettet bruger
15. juli 2004 - 22:21 #23
;-) Hvorfor kom du så ikke bare med løsningen med det samme?
Avatar billede Slettet bruger
15. juli 2004 - 22:21 #24
ok :) jeg tror godt på det der psykokinetiske evner, er du freelance programmør?
Avatar billede Slettet bruger
15. juli 2004 - 22:22 #25
du får point så sand ^^
Avatar billede Slettet bruger
15. juli 2004 - 22:25 #26
Tak.

Så vil jeg tillade mig at lege synsk også... Mon ikke $brug har været brugt til din brugervalidering i database.php?
Avatar billede Slettet bruger
15. juli 2004 - 22:25 #27
$brug = mysql_query("SELECT * FROM online WHERE brugerid>0");

i database.php
Avatar billede Slettet bruger
15. juli 2004 - 22:26 #28
mens vi er i gang, en der kan sige mig om man kan lave det her lidt nemmere?

require "counter.php";
$brugerq = mysql_query("SELECT * FROM medlemmer");
$brugere = mysql_num_rows($brugerq);
$onlineq = mysql_query("SELECT * FROM online");
$online = mysql_num_rows($onlineq);
$count = mysql_query("SELECT * FROM counter");
$besogende = mysql_num_rows($count);   
$be = mysql_query("select distinct ip from counter") or die(mysql_error());
$raaa = mysql_num_rows($be);
$brug = mysql_query("SELECT * FROM online WHERE brugerid>0");
$bru = mysql_num_rows($brug);

    $nu = time();
    $month = date("m", $nu);
    $year = date("y", $nu);
    $dag = date("d", $nu);
    $start = mktime(0,0,0,$month,$dag,$year);
   
$daag = mysql_query("SELECT * FROM medlemmer WHERE oprettet>'$start'");
$toda = mysql_num_rows($daag);
$koe = mysql_query("SELECT count(distinct ip) AS antal, tid FROM counter GROUP BY tid ORDER BY antal DESC LIMIT 0,1") or die(mysql_error());
$hoejst = mysql_fetch_array($koe);
$hojst = $hoejst['antal'];
$dat = explode("-", $hoejst['tid']);
$dathj = mktime(0, 0, 0, $dat[1], $dat[2], $dat[0]);
$datj = date("d/m-y", $dathj);
Avatar billede Slettet bruger
15. juli 2004 - 22:33 #29
Du kan lave en funktion.

function hentAntal($query){
  $result=mysql_query($query);
  if($result){
    $antal=mysql_num_rows($result);
    mysql_free_result($result);
  } else {
    $antal=false;
  }
  return $antal;
}

Du bruger den således:

$brugere = hentAntal("SELECT * FROM medlemmer");
$online = hentAntal(SELECT * FROM online");

osv.
Avatar billede Slettet bruger
15. juli 2004 - 22:34 #30
så sparer jeg mysql_num_rows oder was?
Avatar billede Slettet bruger
15. juli 2004 - 22:36 #31
Ja, plus at dine queries bliver afsluttet med det samme, der ikke er brug for dem mere, så serveren ikke spilder hukommelse på at huske dem til dit script afslutter.
Avatar billede Slettet bruger
15. juli 2004 - 22:37 #32
ok, thx ^^
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 22:37 #33
Jeg ville nu nok sige
$brugerq = mysql_query("SELECT count(*) as antal FROM medlemmer");
...eller tilsvarende... og så aflæse feltet antal. Min intuition siger at det
er mere effektivt.
Avatar billede Slettet bruger
15. juli 2004 - 22:40 #34
ok, hvis jeg har den er $brugerq[antal] så lig med antallet af rækker i medlemmer?
Avatar billede Slettet bruger
15. juli 2004 - 22:40 #35
Det er nok rigtigt. Så skal alle queries til det bare skrives om.
Avatar billede Slettet bruger
15. juli 2004 - 22:41 #36
Nej, den skal hentes med en af mysql_fetch_*-funktionerne først.
Avatar billede Slettet bruger
15. juli 2004 - 22:42 #37
hvad er så fordelen ved at count(*) og fetch, i forhold til en alm ' og num_rows?
Avatar billede Slettet bruger
15. juli 2004 - 22:43 #38
Med count(*) skal Mysql ikke til at gøre sig parat til at sende dig alle de rækker, du alligevel ikke gider have, for så ved den, at du bare vil tælle.
Avatar billede Slettet bruger
15. juli 2004 - 22:44 #39
ok
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 22:45 #40
Fordelen er at sql-serveren ved at den kun skal give dig een række med eet felt,
og ikke alt, som en "SELECT * FROM ..." lægger op til. Derfor vil det være
muligt for sql-serveren at gøre det hurtigere. Om den reelt gør det mærkbart
hurtigere ved jeg så ikke, men det er god skik ikke at bede om mere end man skal bruge.
Avatar billede Slettet bruger
15. juli 2004 - 22:45 #41
ok, hvis man altid kun beder om det man skal bruge, kan man måske mærke det i sidste ende ?
Avatar billede Slettet bruger
15. juli 2004 - 22:50 #42
Det vil jeg tro. Uden at have undersøgt nærmere, hvordan MySQL fungerer internt, vil jeg tro, at når man sender en query, vil den klargøre hele resultatet, og derefter sende rækkerne en af gangen, når man beder om dem. Og alt andet lige, vil det nok kunne mærkes på antallet af brugere, som systemet kan holde til, om man beder om hele tabeller eller enkelte tal, når man gør det så tit.
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 22:51 #43
"måske" er et godt ord at vælge, ja.

Men snakker vi store databaser, rigtigt store, så vil både struktur af databasen,
og de tilhørende forespørgsler have afgørende betydning for effektiviteten.
Avatar billede Slettet bruger
15. juli 2004 - 22:53 #44
ok så har jeg lige en lille ting mere

jeg vil godt have at hvis man ikke har været logget på i 100 dage, skal "inaktiv" i databasen være '1'.

men jeg tror at det her er en dum idé:

//finder ud af om nogle er inaktive
$mange = 60*60*24*100;
$sidst_set = $nu-$mange
mysql_query("UPDATE medlemmer SET inaktiv='1' WHERE sidst<'sidst_set'");

//finder ud af om nogle ikke er inaktive

mysql_query("UPDATE medlemmer SET inaktiv='0' WHERE sidst>'$sidst_set'");
Avatar billede Slettet bruger
15. juli 2004 - 22:53 #45
da det jo løber alle brugere igennem, kan det passe?
Avatar billede Slettet bruger
15. juli 2004 - 22:54 #46
"sidst" i tabellen 'medlemmer' er den dato i time() man var online sidst
Avatar billede Slettet bruger
15. juli 2004 - 23:00 #47
Ja, de to til sammen, vil update alle medlemmer (Men muligvis har MySQL en optimering, der får den til at ignorere updates, der ikke ændrer noget...)

Du kan rette dem til

mysql_query("UPDATE medlemmer SET inaktiv='1' WHERE sidst<'$sidst_set' and inaktiv=0");

og

mysql_query("UPDATE medlemmer SET inaktiv='0' WHERE sidst>'$sidst_set' and inaktiv=1");

Derudover kan den anden gøres overflødig vedsimpelthen at sætte inaktiv=0, når du alligevel sætter sidst-feltet.
Avatar billede Slettet bruger
15. juli 2004 - 23:01 #48
nåh ja, tak for det sand ^^
Avatar billede erikjacobsen Ekspert
15. juli 2004 - 23:03 #49
Hvorfor have et felt, inaktiv, når du kan se det på 'sidst'-feltet.
Det kræver bare at du bruger din SELECT sætning lidt anderledes, eller
laver en lille beregning når du viser status.

Derved vil du også nemmere kunne ændre de 100 dage til noget andet, eller have
en mellemting: lidt inaktiv.

Groft sagt vil du få redundans, dvs. ens og overflødig, information i tabellen,
når 'inaktivt' og 'sidst' har den kobling.
Avatar billede Slettet bruger
15. juli 2004 - 23:07 #50
nåh ja... thx erik..!
Avatar billede Slettet bruger
15. juli 2004 - 23:10 #51
Her er en ny funktion til dig. Den virker lidt anderledes end den første.

function hentAntal($tabel, $where=''){
  if(!empty($where)){$where="WHERE " . $where;}
  $result=mysql_query("SELECT COUNT(*) FROM $tabel $WHERE");
  if($result){
    $row=mysql_fetch_assoc($result)
    $antal=$row['antal'];
    mysql_free_result($result);
  } else {
    $antal=false;
  }
  return $antal;
}

Den bruges således:

$brugere = hentAntal('medlemmer');

eller

$bru = hentAntal('online','brugerid>0');

Det vil sige, den skal have navnet på tabellen, den skal tælle, og en eventuel betingelse.
Avatar billede Slettet bruger
15. juli 2004 - 23:10 #52
Og en rettelse:

function hentAntal($tabel, $where=''){
  if(!empty($where)){$where="WHERE " . $where;}
  $result=mysql_query("SELECT COUNT(*) as antal FROM $tabel $WHERE");
  if($result){
    $row=mysql_fetch_assoc($result)
    $antal=$row['antal'];
    mysql_free_result($result);
  } else {
    $antal=false;
  }
  return $antal;
}
Avatar billede Slettet bruger
15. juli 2004 - 23:12 #53
thx
Avatar billede Slettet bruger
15. juli 2004 - 23:12 #54
Og en rettelse mere:

function hentAntal($tabel, $where=''){
  if(!empty($where)){$where="WHERE " . $where;}
  $result=mysql_query("SELECT COUNT(*) as antal FROM $tabel $where");
  if($result){
    $row=mysql_fetch_assoc($result)
    $antal=$row['antal'];
    mysql_free_result($result);
  } else {
    $antal=false;
  }
  return $antal;
}
Avatar billede Slettet bruger
15. juli 2004 - 23:13 #55
jeg går i seng nu.. men tak for det sand og erik ^^
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