[php] heel tekst bestand uitlezen i.p.v de laatse regel.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste tweakers,

Ik ben bezig met een soort agenda te maken. Hierbij kun je bij een formulier een datum invullen en dat wordt dan gepost naar een php pagina en die kijkt of ik beschikbaar ben of dat ik een afspraak heb.
Nu heb ik het volgende gemaakt:
PHP:
1
2
3
4
5
6
7
8
<?
$key = $van;
$fc=file("./bestanden/agenda.txt");
{
     if ($fc==$key) 
           echo "Bezet!"; 
}
?>

En het tekst bestand is:
code:
1
2
3
18-06-2005
19-06-2005
20-06-2005


Maar het werkt niet helemaal. Hoe kan ik er dus voor zorgen dat hij elke regel van het tekstdocumt leest en kijkt of de datum gepost is?

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Combineer file met in_array en je bent er al.

Definiëer trouwens "werkt niet helemaal"? Als je niet zegt wat er niet werkt, kunnen wij niet helpen. Lees onze quickstart, waar je al vaker op bent gewezen, eens door.

'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!

Verwijderd

Topicstarter
Dit is mijn probleem:
Ik heb het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php

$lines = file ('./bestanden/agenda.txt');

foreach ($lines as $line_num => $line) {
 if ($van==$line){
  echo  "Bezet!";
  }
}
?> 

Als ik http://127.0.0.1/agenda/datum.php?van=20-06-2005 intyp geeft hij bezet. Dit is dus de laatste regel van agenda.txt maar typ ik in http://127.0.0.1/agenda/datum.php?van=19-06-2005 (de ena laatste) krijg ik een wit scherm terwijl er bezet moet komen. Hij leest dus alleen de laatste regel uit het tekst bestand.

Hoe kan ik er dus voor zorgen dat hij alle regels leest i.p.v de laatste?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Je zou eens wat kunnen debuggen:
PHP:
1
2
3
4
5
6
7
8
9
10
$lines = file ('./bestanden/agenda.txt'); 

foreach ($lines as $line_num => $line) {
 echo "Trying $line<br>";
 if ($van == $line) {
  echo "Zelfde als $van<br>";
 else {
  echo "Anders dan $van<br>";  
 } 
}

Maar dit is zo basic dat ik me afvraag waarom je het zelf nog niet geprobeerd hebt.

Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 13-09 17:10
gebruik Superglobals :)

$_GET['van'];

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste GlowMouse,
Hij geeft alleen bij "?van=20-06-2005" is gelijk aan 20-06-2005. Voer ik "?van=19-06-2005" aan die wel in het lijstje staat, geeft hij aan: 19-06-2005 is anders dan 19-06-2005 Dus het werkt nog steeds niet.

Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 13-09 17:10
Verwijderd schreef op vrijdag 17 juni 2005 @ 21:24:
Beste GlowMouse,
Hij geeft alleen bij "?van=20-06-2005" is gelijk aan 20-06-2005. Voer ik "?van=19-06-2005" aan die wel in het lijstje staat, geeft hij aan: 19-06-2005 is anders dan 19-06-2005 Dus het werkt nog steeds niet.
Klinkt als een trim() probleem.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<? 
$lines = file ('./bestanden/agenda.txt');  

foreach ($lines as $line_num => $line) { 
 echo "Trying $line<br>"; 
 if (trim($van) == trim($line)) { 
  echo "Zelfde als $van<br>"; 
 else { 
  echo "Anders dan $van<br>";   
 }  
} 
?>

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Waarom gebruik je in_array nou niet? :?

'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!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
-NMe- schreef op vrijdag 17 juni 2005 @ 21:35:
Waarom gebruik je in_array nou niet? :?
Dat zou wel beter zijn, maar dan blijf je dat file line endings meeneemt. Daar is de handleiding erg duidelijk over:
Note: Each line in the resulting array will include the line ending, so you still need to use rtrim() if you do not want the line ending present.
Een combinatie zou dus het beste zijn:
PHP:
1
2
3
4
$lines = file ('./bestanden/agenda.txt'); 
if (in_array(rtrim($_GET['van']),$lines){ 
  echo  "Bezet!"; 
}

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Je trimt nu de verkeerde waarde. ;) Het makkelijkste is IMO het volgende:
PHP:
1
2
3
4
$lines = file_get_contents('./bestanden/agenda.txt');
if (strpos($lines, $_GET['van']) !== false) {
  echo 'Bezet!';
}

[ Voor 3% gewijzigd door NMe op 17-06-2005 22:28 ]

'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!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
-NMe- schreef op vrijdag 17 juni 2005 @ 22:07:
Je trimt nu de verkeerde waarde. ;)
Je hebt gelijk :(
array_walk is een alternatief, maar strpos is heel veel sneller.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heeh beste Tweakers,

Bedankt voor jullie hulp.
Het is uiteindelijk delukt met:
PHP:
1
2
3
4
5
6
7
8
9
<?  
$lines = file ('./bestanden/bezet/aloys.txt');   

foreach ($lines as $line_num => $line) {  
 if (trim($van) == trim($line)) {  
  echo "Bezet<br>"; 
  }  
}  
?>

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Je weet dat dat altijd trager is dan de suggestie die ik in mijn vorige post gaf? ;)

'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!

Verwijderd

Topicstarter
Bij mij geeft jouw suggestie errors want hij herkend de functie
file_get_contents niet.
Misschien omdat ik oude php versie heb?

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Dat zou kunnen. Draai je een oudere versie dan 4.3.0? Dan is het dat waarschijnlijk. :P

'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!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Ik zou het zo doen:

PHP:
1
2
3
4
5
6
$search = trim($_GET["line"]);
$lines = file("bestandsnaam");
$lines=array_map("trim", $lines);
if(in_array($search, $lines){
  print "Het element is aanwezig";
}
Pagina: 1