[PHP] Echo probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Momenteel heb ik deze code met hulp van google in elkaar gezet:
Dit zorgt ervoor dat nieuws vanuit een txt file wordt gelezen en dan tot regel 10 op het scherm wordt getoond. Daaronder komt dan een "Archive" link.

Wanneer er op de archive link geklikt wordt moeten alle regels uit news.txt getoond worden.
Ik heb al heel veel geprobeerd en op google gezocht, maar ik kom er niet echt meer uit?
Wie kan mij helpen?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$fileName = file ("news.txt");
$rows = count ($fileName);
$maxRows = 10;

//Als het aantal regels meer is dan $maxRows:
if ($rows > $maxRows) { 

    for ($i = 0; $i < $maxRows; $i++) {
            echo '<br>'.$fileName[$i]; 
        }
    echo '<br><a href="'.$fileName.'">Archive</a>';

//Als het aantal regels minder is dan $maxRows:
} else {
    for ($i = 0; $i < $rows; $i++) {
            echo '<br>'.$fileName[$i];
        }
}

?>


Test voorbeeld is hier te zien: http://deepfreeze.stx.nl/shoutcast/index.php

[ Voor 99% gewijzigd door DeepFreeze.NL op 06-06-2006 18:20 ]


Acties:
  • 0 Henk 'm!

Verwijderd

a) je gebruikt $row en $rows doorelkaar

hier zit denk ik de fout

Acties:
  • 0 Henk 'm!

  • EnnaN
  • Registratie: September 2002
  • Laatst online: 12-09 11:42

EnnaN

Toys in the attic

Dan kun je toch gewoon een fucntie aanroepen die de file opent, en dan iets doet van

while (filehandle){
echo filehanddle
}

dat weet google ook nog wel te vinden, lijkt me een stuk makkelijker dan niet de hele, maar een gedeelte van een file te printen

sig


Acties:
  • 0 Henk 'm!

  • enveekaa
  • Registratie: September 2003
  • Laatst online: 21-09 06:09
Laat maar }:O

[ Voor 141% gewijzigd door enveekaa op 06-06-2006 16:53 ]


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Verwijderd schreef op dinsdag 06 juni 2006 @ 16:51:
a) je gebruikt $row en $rows doorelkaar

hier zit denk ik de fout
De regels worden wel gewoon getoond op het scherm met onderaan de archive link. Alleen de link van archive dat alles getoond wordt (echo $filename) werkt niet.

Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

File() retourneerd de inhoud van het bestand dan ook in een array :) . Anders zou je er ook niet overheen kunnen loopen in je vorige functie. Je zal dus of door de count heen moeten loopen, of file_get_contents() gebruiken, welke een string teruggeeft.

DM!


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
DeepFreeze.NL schreef op dinsdag 06 juni 2006 @ 16:52:
[...]
De regels worden wel gewoon getoond op het scherm met onderaan de archive link. Alleen de link van archive dat alles getoond wordt (echo $filename) werkt niet.
PHP:
19
     echo '<br><a href="'.$filename.'">Archive</a>';
:Y)
Vergelijk de kleurtjes in deze code met jouw code en de fout moge duidelijk zijn. :)

Overigens zou ik niet linken naar het bestand zelf, maar met GET parameters werken en zo je script aanroepen. Verder is de hele $row variabele overbodig, want deze is altijd 0 en verandert nooit. En 0 optellen/aftrekken is nogal useless.

Verder indenteer je onlogisch en zijn de 2 regels commentaar totaal onnuttig. Je gebruikt $maxRows zodat je geen magisch getal hebt midden in je script, en vervolgens zet je dat magische getal wel in je commentaar. Verder is een simpele boolean vergelijking toelichten een beetje onnodig.

[ Voor 60% gewijzigd door Voutloos op 06-06-2006 17:01 ]

{signature}


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Vind je het gek dat die link niet werkt? Je gebruikt <PHP> tags in plaats van <?php> tags, en bovendien kun je die tags binnen PHP niet eens gebruiken. Ik kan me dan ook niet echt aan de indruk onttrekken dat je geen idee hebt wat je aan het doen bent. Probeer eens wat tutorials door te nemen, want daar is iets als dit best in te vinden. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Nog iets. Je gebruikt zowel $fileName en $filename, en php is hoofdletter gevoelig.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Overigens zou ik niet linken naar het bestand zelf, maar met GET parameters werken en zo je script aanroepen. Verder is de hele $row variabele overbodig, want deze is altijd 0 en verandert nooit. En 0 optellen/aftrekken is nogal useless.
Aangepast :)
Verder indenteer je onlogisch en zijn de 2 regels commentaar totaal onnuttig. Je gebruikt $maxRows zodat je geen magisch getal hebt midden in je script, en vervolgens zet je dat magische getal wel in je commentaar. Verder is een simpele boolean vergelijking toelichten een beetje onnodig.
Ook aangepast :) en die simpele boolean vergelijking is voor mij nog wel handig haha.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Overigens leest het doorgaans prettiger als je het consequent print of echo gebruikt. Bovendien kan je gewoon
PHP:
10
    echo $fileName[$i].'<br>';
doen. :)

Verder is de check op regel 14 altijd true, aangezien die conditie hetzelfde is als degene die op regel 7 al true was. :)

Maar goed, ik denk net als -NMe- dat het wellicht handig is om je iets meer in te lezen. :)

{signature}


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Voutloos schreef op dinsdag 06 juni 2006 @ 17:19:
Overigens leest het doorgaans prettiger als je het consequent print of echo gebruikt. Bovendien kan je gewoon
PHP:
10
    echo $fileName[$i].'<br>';
doen. :)

Verder is de check op regel 14 altijd true, aangezien die conditie hetzelfde is als degene die op regel 7 al true was. :)

Maar goed, ik denk net als -NMe- dat het wellicht handig is om je iets meer in te lezen. :)
Ok, dankje voor je tips! Heb het ondertussen al aangepast...

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Dit kan nog wel wat korter:
PHP:
1
2
3
4
5
6
7
8
9
10
$fileName = file("news.txt");
$rows = count ($fileName);
$maxRows = 10;
$numRowsToPrint= $rows > $maxRows ? $maxRows : $rows;
for ($i = 0; $i < $numRowsToPrint; $i++) {
    echo '<br>'.$fileName[$i]; 
}
if ($rows > $maxRows) { 
    echo '<br><a href="'.$fileName.'">Archive</a>';
}


Zulk commentaar is overigens vrij overbodig, die kun je net zo goed weglaten. Beter is om je intentie uit te leggen, niet hoe je het realiseert.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Michali schreef op dinsdag 06 juni 2006 @ 16:57:
Nog iets. Je gebruikt zowel $fileName en $filename, en php is hoofdletter gevoelig.
Hoe kom je daar nou bij? :? Heb dat nog nooit gemerkt eigenlijk, ook niet in eigen gemaakte functies... :)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
In het algemeen zou die eigenschap van een programmeertaal irrelevant moeten zijn. Voor consistentie en duidelijkheid van je code zou je altijd elke variabele maar op 1 manier moeten schrijven en variabelenamen voldoende van elkaar laten verschillen. :Y) Als je je consequent aan een bepaalde codingstyle/namingstyle houd, moet dit ook als vanzelf gaan. :)

{signature}


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
GJ-tje schreef op woensdag 07 juni 2006 @ 17:29:
[...]
Hoe kom je daar nou bij? :? Heb dat nog nooit gemerkt eigenlijk, ook niet in eigen gemaakte functies... :)
code:
1
2
3
4
5
6
7
<?php

error_reporting(E_ALL);
$var = "123";
print $Var;

?>

Output:
Notice: Undefined variable: Var in D:\webroot\test.php on line 5
De code in de startpost is inmiddels gewijzigd, daar werd ie wel op 2 verschillende manieren gebruikt.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Michali schreef op dinsdag 06 juni 2006 @ 18:31:
..
$numRowsToPrint= $rows > $maxRows ? $maxRows : $rows;
for ($i = 0; $i < $numRowsToPrint; $i++) {
..
[/php]
Waarom niet
PHP:
1
 for ($i = 0; $i < min($numRowsToPrint, $rows); $i++) {

?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Performance issue (niet dat het erg veel uitmaakt) en complexiteit van de statement. Maar als je dat fijner vindt, dan moet je dat gewoon doen.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Michali schreef op woensdag 07 juni 2006 @ 17:36:
PHP:
1
2
3
4
5
6
7
<?php

error_reporting(E_ALL);
$var = "123";
print $Var;

?>

Output:

[...]


De code in de startpost is inmiddels gewijzigd, daar werd ie wel op 2 verschillende manieren gebruikt.
Omdat je error_reporting op E_ALL hebt staan gaat ie idd over de zeik vanwege de hoofdletters, maar is anders niet... ;) Met E_ALL word er stricter op de syntax gelet... ;)

[ Voor 3% gewijzigd door CH4OS op 07-06-2006 17:53 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Andere error_reporting modes zijn alleen voor live en productie situaties, als je geen errors in de pagina wilt. Bij ontwikkelen moet je hem altijd op de zo zeikerig mogelijke mode zetten. Dit is gewoon fout. Geen onherstelbare error, vandaar een notice, maar wel gewoon fout.

In PHP5 stel ik hem altijd zo in trouwens:
PHP:
1
error_reporting(E_ALL | E_STRICT);

[ Voor 15% gewijzigd door Michali op 07-06-2006 17:52 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Rowanov
  • Registratie: Februari 2004
  • Niet online

Rowanov

Kop eens wat anders...

GJ-tje schreef op woensdag 07 juni 2006 @ 17:45:
Omdat je error_reporting op E_ALL hebt staan gaat ie idd over de zeik vanwege de hoofdletters, maar is anders niet... ;) Met E_ALL word er stricter op de syntax gelet... ;)
Dan is het nog wel fout ;)

[ Voor 0% gewijzigd door Rowanov op 07-06-2006 17:56 . Reden: langzaam en zo ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

GJ-tje schreef op woensdag 07 juni 2006 @ 17:29:
[...]
Hoe kom je daar nou bij? :? Heb dat nog nooit gemerkt eigenlijk, ook niet in eigen gemaakte functies... :)
PHP is dan ook alleen hoofdlettergevoelig bij variabelename (en ook bij klassenamen geloof ik), en niet bij functienamen. Lekker consistent ja, maar het is nou eenmaal zo. ;) Daarnaast is het niet krijgen van een notice niet het zelfde als het goed zijn van je code. Zoals de mensen hierboven al zeggen: je moet altijd foutloze code zien op te leveren op het meest stricte niveau van de taal, en anders ben je IMO gewoon fout bezig. PHP is al inconsistent genoeg van zichzelf als je je wèl strict aan de taal houdt; daar hoef je verder niet aan mee te helpen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Inmiddels heb ik, met hulp van iemand anders, het script werkende gekregen. Mocht je het willen zien: http://music.deepfreeze.nl Mocht je de source willen hebben dan hoor ik het wel.

Acties:
  • 0 Henk 'm!

  • Javache
  • Registratie: Mei 2006
  • Laatst online: 13-02-2010
Count() telt toch het aantal karakters en niet het aantal regels ?

Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Javache schreef op woensdag 07 juni 2006 @ 21:25:
Count() telt toch het aantal karakters en niet het aantal regels ?
Count telt het aantal regels.

Acties:
  • 0 Henk 'm!

  • Javache
  • Registratie: Mei 2006
  • Laatst online: 13-02-2010
Ik gebruik het altijd bij array's maar php.net zegt
int count ( mixed var [, int mode] )

count -- Count elements in an array, or properties in an object

Returns the number of elements in var, which is typically an array, since anything else will have one element.
Misschien was dit de reden dat je script niet werkte ?

EDIT : Srry laat maar :
file -- Reads entire file into an array

array file ( string filename [, int use_include_path [, resource context]] )

Identical to file_get_contents(), except that file() returns the file in an array. Each element of the array corresponds to a line in the file, with the newline still attached. Upon failure, file() returns FALSE.

[ Voor 46% gewijzigd door Javache op 07-06-2006 21:35 ]


Acties:
  • 0 Henk 'm!

  • FTPlus
  • Registratie: Februari 2003
  • Laatst online: 10-11-2024

FTPlus

Pluisje

Count telt het aantal elementen in een array. File() maakt van elke regel een nieuw element dus daarmee krijg je het aantal regels. :)

-=Waiz=-

Pagina: 1