Avatar billede krydset Nybegynder
07. januar 2004 - 20:37 Der er 48 kommentarer og
1 løsning

sizeof($row); viser forkert

Hejsa har det her script hvor jeg har en line der hedder

if ( sizeof($row) == 0 ) { // There was nothing in the DB
?>
        <tr>
            <td>Der er ikke oprettet nogen link endnu!</td>
        <tr>
Men selvom db' en er tom returnere sizeof($row) 1 og hvorfor gør den det her er scriptet

Ps. der kommer et spm efter der er svaret på dette derfor 50 point

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


<?PHP
/*
*    +-----------------------------------------------------------------------------+
*        Projekt Name Show products
*    +-----------------------------------------------------------------------------+
*        Copyright Notes Copyrights 2003 pc-dk.dk
*    +-----------------------------------------------------------------------------+
*      Disclaimer Notice(s)                                                         
*      DONT USE THIS SCRIPT UNLESS YOU HAVE MY PERMISSIONS ON PARER     
*      WITH MY PERSONAL SIGNATURE ANY QUESTIONS FOR THAT
*      SEND ME A MAIL: TLARSEN@PC-DK.DK                                                                   
*      IF YOU WANT TO USE THIS SCRIPT THEN MAIL ME AND PAY FOR IT
*    +-----------------------------------------------------------------------------+
*        Author(s): Thomas Larsen / Dk-Medieburner E-Mail: Tlarsen@pc-dk.dk
*    +-----------------------------------------------------------------------------+
*/

    error_reporting(E_ALL); //For debuggin only, prints all error!   
                            //remove the # to debug

/**
*    Module comments (Brief shorly what this piece of code do)
    This script is logging a user in.
*/



/*
    Here starts the code
*/

    //includes the file there is opening a connection to a databse
include('dbconnect.php');
    //Selects the tabels produkter in the MySql Database
$res = mysql_query("SELECT * FROM produkter") or die(mysql_query());
    //to avoid a warning i am setting $row to an emty array here-->
$row = array();
    //runs the $res trough a while statement
while ($row[] = mysql_fetch_array($res));
$antal = mysql_num_rows($res);

/*
    Here stops the code
*/
?>


<html>
    <head>
        <title></title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>

    <body bgcolor="#EAEAEA">
    <table>
<?php
if ( sizeof($row) == 0 ) { // There was nothing in the DB
?>
        <tr>
            <td>Der er ikke oprettet nogen link endnu!</td>
        <tr>
<?php
} else { // There was something in the db
    foreach($row as $produkt){
?>
        <tr>
            <td><a href="index.php?id=<?php echo $produkt['produkt_id']; ?>"><?php echo $produkt['produkt_navn']; ?></a></td>
      </tr>
     
        <tr>
            <td><?php echo $produkt['produkt_beskrivelse'];?></td>
        </tr>
       
        <tr>
            <td><?php echo "$produkt[pris]";?></td>
        </tr>
       
        <tr>
            <td><br /></td>
        </tr>
<?php
    } // end forelse
} // end else

//LITTLE DEBUG INFO
echo sizeof($row);
echo "<br>$antal";
?>
    </table>
    </body>
</html>
Avatar billede krydset Nybegynder
07. januar 2004 - 20:38 #1
det skal lige siges $antal retunere 0
Avatar billede erikjacobsen Ekspert
07. januar 2004 - 20:40 #2
Ja, for du indsætter et element med værdien false. Du skal

while ($r = mysql_fetch_array($res)) { $row[] = $r; }
Avatar billede fcknet Nybegynder
07. januar 2004 - 20:41 #3
prøv med count() istedet for sizeof()
www.php.net/count
Avatar billede erikjacobsen Ekspert
07. januar 2004 - 20:43 #4
sizeof er blot et alias for count http://php.net/sizeof
Avatar billede fcknet Nybegynder
07. januar 2004 - 20:48 #5
erik ved da også alt ;)
Avatar billede erikjacobsen Ekspert
07. januar 2004 - 20:49 #6
Eller alternativt:

$row = array();
while ($row[] = mysql_fetch_array($res));
array_pop($row);

Det er muligvis en anelse mere effektivt.
Avatar billede krydset Nybegynder
07. januar 2004 - 20:52 #7
hvad gør array_pop?
Avatar billede erikjacobsen Ekspert
07. januar 2004 - 20:58 #8
Fjerner det største element i arrayet, og det vil netop altid være være et element med værdien false.
Avatar billede stingbat Nybegynder
07. januar 2004 - 20:59 #9
Hmm... lige en sidebemærkning - hvorfor have linien:
$antal = mysql_num_rows($res);

tidl. i scriptet, og så ikke benytte denne, hvis du alligevel blot skal se om der er indhold?!
Er lidt dobbeltkonfekt, at lave 2 løsninger som giver (skulle gerne!) samme indhold...
Avatar billede krydset Nybegynder
07. januar 2004 - 21:01 #10
Det er jo det de ikke gør
$antal returnere 0 og
echo sizeof($row); 1
Avatar billede stingbat Nybegynder
07. januar 2004 - 21:04 #11
Hvad er det korrekte antal da? (altså af rækker i db'en)
Avatar billede krydset Nybegynder
07. januar 2004 - 21:08 #12
men erik smider du et svar det var rigtig array_pop virkede nu gør den det ikke mere
Avatar billede krydset Nybegynder
07. januar 2004 - 21:08 #13
1 og echo sizeof($res); returnerede 2 men prob er løst nu ;)
Avatar billede erikjacobsen Ekspert
07. januar 2004 - 21:12 #14
"men erik smider du et svar det var rigtig array_pop virkede nu gør den det ikke mere"

I skolen lærte jeg noget om kommaer og punktummer. De kan bruges til at
gøre lange følger af ord nemmere at læse og forstå. Jeg forstår nemlig ikke
hvad du skriver.
Avatar billede krydset Nybegynder
07. januar 2004 - 21:15 #15
Erik smider du et svar.
Det var rigtig, array_pop fjernede det der årsagen til fejlen, nu gør den det ikke mere.

Skal da osse være nudansk.
Jeg kan desværre ikke sætte kryds og bolle her ;)
Avatar billede krydset Nybegynder
07. januar 2004 - 21:16 #16
Undskyld der skulle stå.

Erik smider du et svar.
Det var rigtig, array_pop fjernede det der var årsagen til fejlen, nu gør den det ikke mere.

Skal da osse være nudansk.
Jeg kan desværre ikke sætte kryds og bolle her ;)
Avatar billede stingbat Nybegynder
07. januar 2004 - 21:19 #17
Men så skulle både $antal samt sizeof($row) være ens nu, ik?!

Ergo - fravælg én af løsningerne, så du ikke har den dobbeltkonfekt ($antal har du jo så ikke brug for).
Avatar billede krydset Nybegynder
07. januar 2004 - 21:21 #18
Bruger kun 1 nu det var bare lidt debug ;)
Avatar billede stingbat Nybegynder
07. januar 2004 - 21:25 #19
Nååh okay :-)
Håbede jeg også på...

Er der forresten én grund til at du hiver alle rækkerne ind i et array fra start?

Så lige to ting...:
            <td><?php echo $produkt['produkt_beskrivelse'];?></td>
Du kan "spare" lidt, ved at udskifte "php echo" med =
Altså:
            <td><?= $produkt['produkt_beskrivelse']; ?></td>

En anden lille ting - som du nok har fundet ud af er der fejl i linien:
            <td><?php echo "$produkt[pris]";?></td>

Skal nok være:
            <td><?= $produkt["pris"]; ?></td>
Avatar billede krydset Nybegynder
07. januar 2004 - 21:32 #20
<? virker ikke hos mig derfor det andet
<td><?PHP echo $produkt["pris"]; ?></td> er fundet

Er der forresten én grund til at du hiver alle rækkerne ind i et array fra start?
ja for ikke at få blandet html og php vildt meget
Avatar billede krydset Nybegynder
07. januar 2004 - 21:35 #21
HALLO ERIK gider du og lægge et svar??
Avatar billede stingbat Nybegynder
07. januar 2004 - 21:35 #22
Lyder da underligt, hvis det ikke skulle virke... altså:
<?= "noget værdi til output" ?>

Er en normal standard i PHP - men kan være noget opsætning i php.ini, eller ældre version etc...
Avatar billede krydset Nybegynder
07. januar 2004 - 21:38 #23
php er 4.3.2
Avatar billede stingbat Nybegynder
07. januar 2004 - 21:40 #24
Skulle meget gerne også virke så... :-s
Avatar billede krydset Nybegynder
07. januar 2004 - 21:42 #25
Det gør det ikke :-(
Har prøvet utallige gange det giver ikke noget
Avatar billede stingbat Nybegynder
07. januar 2004 - 21:45 #26
Aldrig selv været ude for det - men må så nok være noget opsætning der er sat forkert.
Avatar billede krydset Nybegynder
07. januar 2004 - 21:48 #27
Ja men pyt det virker på den anden måde så det er jo ok :-D
Avatar billede erikjacobsen Ekspert
07. januar 2004 - 21:49 #28
Opsætningen med at <? ?> ikke virker er bestemt ikke forkert. Det er
bare valgt til ikke at understøttet short-tags, eller hvad det nu hedder,
som faktisk giver bøvl ved fx XML. Portabel kode bør derfor ikke benytte <? og <?=

Nej, tak, ingen point. Det er så nemt et problem at selv 50p er for meget for mig.
Avatar billede stingbat Nybegynder
07. januar 2004 - 21:52 #29
Er jo så rigtigt nok... har dog selv haft oplevet "problemer" ved det, når man skulle have XML ind (ved brug af XHTML)...

Men selve det med short-tags eller ej, er vel en vane sag hvad man bedst kan lide :)
Avatar billede krydset Nybegynder
07. januar 2004 - 21:53 #30
Jamen så deler vi.
Lidt skal du ha kom så med et svar!
Avatar billede stingbat Nybegynder
07. januar 2004 - 21:53 #31
Anyway, glemte lige at tilføje - at det er korrekt nok at det ikke er forkert. Men default opsætning, plejer at være at man kan skrive begge dele.
Avatar billede fangel Nybegynder
07. januar 2004 - 21:55 #32
prøv

while(($row[] = mysql_fetch_assoc($res)) !== false);

hvis det passer det med at den sidste indeholder "false" - så burde det der afhjælp problemet...

Morten
Avatar billede stingbat Nybegynder
07. januar 2004 - 21:57 #33
dea_pg:
Problemet er løst :)
Avatar billede krydset Nybegynder
07. januar 2004 - 21:58 #34
>>dea_pg Problemet er løst ingen fejl ;)
Venter bare på erik kommer med et svar
Avatar billede erikjacobsen Ekspert
07. januar 2004 - 22:01 #35
Så kan du vente længe ;) - nej tak, ingen point.
Avatar billede fangel Nybegynder
07. januar 2004 - 22:04 #36
ARG, må virkelig lære at læse hele spørgsmålet og ikke bare de første 5 kommentare og tænke - der er ingen der har haft min ide...

Morten
Avatar billede krydset Nybegynder
07. januar 2004 - 22:05 #37
hmmm vil du virkelig være skyld i ekspertens regler ikke bliver overholdt.

i reglerne står der noget om at man skal lukke spm efter efter endt svar, og give de lovede point for et tilfredsstillende svar. Jeg har fået et yderst tilfredsstillende svar og vil gerne takke dig med at give dig hva der er lovet af pint, så jeg synes ikke rigtigt du kan være bekendt at afvise hele tiden, du fornærmer mig faktisk. Vil du ikke godt være flink at ligge det svar! ?
Avatar billede stingbat Nybegynder
07. januar 2004 - 22:06 #38
erikjacobsen:
Du gir dig bare ikk hva? ;-)
Avatar billede erikjacobsen Ekspert
07. januar 2004 - 22:14 #39
Hvis du mener jeg er skyld i at ekspertens regler ikke bliver overholdt må du da gerne anmelde mig.

Jeg bidrager ikke (længere) til pointinflation, så hvis det antal point
spørgsmålet er oprettet med ikke svarer til sværhedsgraden af svaret, så
springer jeg enten over, eller vil ikke have point. Ja, man kan dele point,
men det er åbenbart svært for mange, og jeg synes ikke jeg så vil ulejlige
med et "nu skal du have point tilbage"-spørgsmål, der bare generener alle
andre. Jeg gider ikke løbe den risiko, og have det besvær.
Avatar billede krydset Nybegynder
07. januar 2004 - 22:18 #40
Jeg deler dem her!!
Avatar billede erikjacobsen Ekspert
07. januar 2004 - 22:19 #41
Jeg hopper ud af spørgsmålet.
Avatar billede krydset Nybegynder
07. januar 2004 - 22:20 #42
Du kan ikke være det bekendt, du irreterer mig faktisk nu!!! :@
Avatar billede stingbat Nybegynder
07. januar 2004 - 22:25 #43
krydset:
Rooolig nu :-) Så må du vælge at tage point'ne tilbage, eller vælge at give dem til en anden.
Avatar billede krydset Nybegynder
07. januar 2004 - 22:26 #44
Nej jeg er faktisk stædig.

Erik hvordan får jeg dig til at forstå at du skal have de point ?
Hvordan får jeg dig tl at tage imod dem kun de 25
Avatar billede stingbat Nybegynder
07. januar 2004 - 22:29 #45
Det kan du ikke, med mindre at han acceptere ;)
Men - han er vidst hoppet videre... :-/
Avatar billede krydset Nybegynder
07. januar 2004 - 22:50 #46
Erik ved ikke om du tjekker din hotmail konto har lige sendt en mail til dig,
Hvis du ikke tjekker den lægger jeg en copy paste af mailen her
-------------------------------------------------------------------------------
To: xxxx@hotmail.com

Subject: Læg et svar på eksperten på spm. http://www.eksperten.dk/spm/448504

Message:

Hej Erik.



Ja håbede ikke jeg skulle ende med at skrive mails til dig og plage dig om at at lægge et svar på E i denne her tråd http://www.eksperten.dk/spm/448504 .

Men jeg tog åbenbart fejl, k´jeg synes det er skuffende at du ikke vil tage imod de pint da jeg virkelig sætter pris på den hjælp jeg får på eksperten, når det virkelig brænder på så er hjælpen der.



Så derfor vil jeg gerne bede dig om at lægge et svar på spm. http://www.eksperten.dk/spm/448504 så du kan modtage et X antal point du vælger selv.(ikke under 10) jeg vil bare give dig lidt.



Ved godt at du syntes at ”bare det jeg er glad er det tak nok for dig” men det er ikke nok for os som virkelig værdsætter hjælpen.



Så please læg et svar



Mvh.



Thomas Larsen

www.pc-dk.dk/forum/

Msn :medieburner@ofir.dk

E-Mail: Tlarsen@pc-dk.dk
Avatar billede krydset Nybegynder
07. januar 2004 - 22:50 #47
og håber så du læser den
Avatar billede krydset Nybegynder
08. januar 2004 - 13:34 #48
Gider ikke blive ved æder de point selv iggg hvor kan folk være irreterende nogen gange
Avatar billede wilweb Nybegynder
11. januar 2004 - 18:41 #49
krydset :Z det er sgu da fair nok at erikjacobsen ikke gider det med point, det må være hans sag, ikke noget du bør gå så meget op i!
Eksperten.dk handler også om at hjælpe hinnanden, og det er erikjacobsen da ikke bleg for, det tager jeg hatten af for med eller uden point! Positivt ment!!!
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