[php] functie file voegt spaties toe bij uitlezen *

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hallo allemaal,

Ik maak een inlogsysteem waarbij naam en wachtwoord van input velden vergeleken wordt met die uit een textbestand. Op de volgende manier:

$lees=file("gebruikers.txt");
$leespasswd = $lees[$i];

Echter als ik $leespasswd laat uitprinten dan is dit het wachtwoord plus een aantal spaties. Echter het aantal spaties verschilt als je offline of online uitvoert. Offline moet ik deze code uitvoeren:
$leespasswd = substr($leespasswd,0,strlen($leespasswd)-2);

En online deze:
$leespasswd = substr($leespasswd,0,strlen($leespasswd)-1);

Waarom doet deze functie dit?

Moet ik anders een functie schrijven die spaties aan het einde weg haalt of is er een andere manier?

Regards,

Elwin

  • ID-College
  • Registratie: November 2003
  • Laatst online: 15:55
Kan je niet gewoon str_replace gebruiken?

  • Leedbek
  • Registratie: November 2004
  • Laatst online: 12:44

Leedbek

Luuk Luchtloper

www.php.net/trim/

Is dit wat je zoekt?

Klaar voor de steroorlogen?


Verwijderd

Topicstarter
trim is er inderdaad een mooie funtie voor, bedankt!

Toch blijf ik het raar vinden dat hij er spaties achter gooit.

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Wanneer hij er spaties achterzet kun je die er met een substr($str, 0, -1) niet afhalen. Achter je $str zit namelijk ook nog een \r, \n of \r\n, die je erafhaalt. Ik vermoed dus dat het niet om spaties gaat maar om karakters om een nieuwe regel te starten. Op Windows is dit \r\n, op Linux \n (of \r, weet ik niet precies, maar Mac gebruikt weer precies de andere). Dit verklaart denk ik het verschil tussen online (op een Linux server) en offline (thuis onder Windows).

Verwijderd

Topicstarter
Ik heb een ander probleempje bij deze code:
<?php
$naam = $_POST['naam'];
global $naamp;
$naamp =$_POST['naam'];
if($_POST['submit2']){
xxxx
Let even niet op de dubbelzinnigheid
Echter op plaats xxxx zijn de variabele $naam en $naamp dood. En ik heb ze wel nodig op dat punt.

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

De functie file voegt helemaal niets toe, maar zet ook gewoon de regel-eindes in het array.
Dat is natuurlijk ook prima te lezen op http://nl2.php.net/file.
Verwijderd schreef op donderdag 22 februari 2007 @ 01:25:
Ik heb een ander probleempje bij deze code:
PHP:
1
2
3
4
5
6
<?php
  $naam = $_POST['naam'];
  global $naamp;
  $naamp   =$_POST['naam'];
  if($_POST['submit2']){
xxxx

Let even niet op de dubbelzinnigheid
Echter op plaats xxxx zijn de variabele $naam en $naamp dood. En ik heb ze wel nodig op dat punt.
offtopic:
Hmm, ik heb nog nooit levende of dode variabelen gehad.

- Wat bedoel je met 'dood'?
- Zijn ze nog wel goed voor de if?
- Is de waarde van $_POST['naam'] wel goed?

[ Voor 64% gewijzigd door WormLord op 22-02-2007 11:22 ]


Verwijderd

Topicstarter
WormLord schreef op donderdag 22 februari 2007 @ 11:17:
- Wat bedoel je met 'dood'?
- Zijn ze nog wel goed voor de if?
- Is de waarde van $_POST['naam'] wel goed?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
  $naam = $_POST['naam'];
  global $naamp;
  $naamp   =$_POST['naam'];
  if($_POST['submit2']){
  //$k = 1;
  //$f = "i$k";
  //echo $_POST[$f];
  $lees = file("data.txt");
  $aantald = $lees[0];
  
  
  //fputs($fileo,"$naam\n");
  $leeso = file("overzicht.txt");
  
  $i = 0;
  do{
    $temp[$i]=$leeso[$i]; 
    $i++;
  }while($leeso[$i] != "");
  echo "hij is: ".$naamp."%".$naam;
...
else{
   $passwd =$_POST['passwd'];
   $ingelogd = 0;
echo "<br>naam:$naam%<br>naaminfile:$leesnaam%<br>ww:$passwd%<br>wwinfile:$leespasswd%<br>";

en bij het stukje hij is worden de variabele niet afgedrukt en bij het stukje echo "<br>naam... wel.

[ Voor 13% gewijzigd door Verwijderd op 22-02-2007 13:07 ]


Verwijderd

Topicstarter
Voor de duidelijkheid hij komt via een andere php met invoervelden in deze php. Dan begint deze php met die velden uit te lezen en in de variabalen $naam en $passwd te stoppen. Echter op de plaats waar "hij is"... wordt geprint zijn deze variabelen niet meer in tact.

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
Wat doen die ... in je code? Wat staat daar?

Heb je al met een print_r($_POST); gekeken of $_POST wel gevuld is?

Daarnaast geef ik je de tip om variabelen in een zin tussen {} te zetten. Dit verhoogd de leesbaarheid van zulke zinnen enorm. Ook beschrijvende variabelennamen zijn soms erg leesbaarheidsverhogend.

petersmit.eu


Verwijderd

Topicstarter
phsmit schreef op donderdag 22 februari 2007 @ 19:58:
Wat doen die ... in je code? Wat staat daar?

Heb je al met een print_r($_POST); gekeken of $_POST wel gevuld is?

Daarnaast geef ik je de tip om variabelen in een zin tussen {} te zetten. Dit verhoogd de leesbaarheid van zulke zinnen enorm. Ook beschrijvende variabelennamen zijn soms erg leesbaarheidsverhogend.
Die ... staat voor overige niet relevante code.

Ik neem aan dat de post wel gevuld is, aangezien hij bij het else gedeelte de variabele passwd en naam die hij uit de invoervelden haalt wel print

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Afgezien van niet echt makkelijk te lezen code zo (indenten enzo) denk ik dat je probleem ligt bij het controleren of de variabele is gezet van de post. Submit2 is denk ik de naam van de submitknop? Zoja; dan kun je alleen deze manier van controleren gebruiken als er daadwerkelijk op de knop wordt gedrukt, en niet wordt gesubmit m.b.v. enter (return).

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De post een komt binnen via de verstuur knop op deze pagina:
http://www.holeridders.nl/beschikbaarheid/main.php

Dan kom je in wijzigen.php (waar bovenstaande code uit is) en daar, mits naam en wachtwoord goed zijn, komt een nieuwe submit knop en deze heet inderdaad submit2

Ik denk als je op die laatste knop drukt de variabelen van de eerdere post (submit) vervallen??

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Dus als ik het goed begrijp doe je:
1: pagina met formulier: SUBMIT
2: verwerkpagina _ook_ met formulier: $_POST en SUBMIT (met nieuwe gegevens)
3: verwerkpagina: $_POST

Je verstuurt gegevens van 1 naar 2, daar doe je er iets mee, je geeft een formulier weer en die laat je mensen weer submitten? If so; ja, de gegeven van $_POST worden na het verwerken van een pagina weer leeggemaakt.
Wil je dus gegevens van 1 naar 3 krijgen, zul je ze bij 2 in $_SESSION moeten zetten (sessies), of via een hidden input weergeven op je pagina. (zo submit iemand dus de gegevens weer zonder dat hij ze direct ziet) Let er hierbij wel op dat je geen privacygevoelige informatie in hidden fields zet zoals wachtwoorden! Gebruikersnaam kan uiteraard wel, maar dan kun je beter sessies gebruiken.
Mocht je het nog anders willen doen kun je ook denken aan cookies (m.b.v. setcookie() / $_COOKIE of javascript), maar ik denk dat het slimmer is om met sessies te gaan: http://nl3.php.net/session

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

Verwijderd

ik snap die global $naamp niet helemaal, staat deze code in een funtie ofzo?

daarnaast is het beter om informatie tussen php-scripten via de Sessie door te sturen. dan blijft die info ook geheel server-side en komt nooit op het netwerk terecht. zelfs niet de loopback.

daarnaast mag je nooit de inhoud van een POST of GET array vertrouwen. checken dus of ze wel bestaan met een isset if statement er tussen en kijk ook of ze wel de juiste waarde hebben dus:
PHP:
1
2
3
4
5
6
7
8
9
 //juiste manier
 if((isset($_POST['submit2'])) AND ($_POST['submit2'] == "true")){
 
 }

 //slordige en kwetsbare manier, daarnaast ook krijg je ook een E_NOTICE error.
 if($_POST['submit2']){

 }


en file leest inderdaad een bestand in en plaatst elke regel op een nieuwe index in de array. de hele regel wordt ingelezen dus ook new-linebreak oftwel de 2 characters \r en \n oftewel ascii 10 en 13. maar dat staat ok duidelijk in de php-manual.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer het nu door middel van sessies en heb dit aangehouden: http://www.design-web.nl/...=php&volgorde=15&lesnr=13

Volgens designweb moet je geregistreerde variabelen over de hele site kunnen gebruiken. Ik heb de volgende 2 (test) php's aangemaakt:

test.php:
PHP:
1
2
3
4
5
6
7
8
9
<?php
$zomaar = 5;
session_start();
session_register(zomaar);

echo "<html><head></head><body>SDADSSD</body></html>";
echo $zomaar;
echo "<a href='test2.php'>klik</a>";
?>


test2.php:
PHP:
1
2
3
4
5
<?php
session_start();
echo ":".$zomaar;
session_destroy();
?>

De varibale $zomaar (waarde 5) wordt niet afgedrukt op de test2.php. Het zal voor de meeste ervaren mensen wel als een n00b vraag overkomen, maar ik heb nog nooit met sessies gewerkt ;)

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Die tutorial is erg verouderd. Zet bovenaan je script session_start(); en gebruik verder de $_SESSION array. Je kunt dus $_SESSION['zomaar'] gebruiken, en niet $zomaar. De functie session_register heb je niet meer nodig.

PHP:
1
2
3
4
5
6
session_start();
$_SESSION['zomaar'] = 5;

echo '<html><head></head><body>SDADSSD</body></html>';
echo $_SESSION['zomaar'];
echo '<a href="test2.php">klik</a>';


PHP:
1
2
3
session_start();
echo 'De waarde van de sessievariabele zomaar: ' . $_SESSION['zomaar'];
session_destroy();

[ Voor 2% gewijzigd door GlowMouse op 23-02-2007 19:43 . Reden: html output opgekuist ]


Acties:
  • 0 Henk 'm!

  • newpegasus
  • Registratie: Juni 2003
  • Laatst online: 13-03-2022

newpegasus

Hertog

Dan moet je ook wel een sessievariabele gebruiken in PHP, zoals dit: $_SESSION['zomaar'] = 5

//weer eens traag

[ Voor 10% gewijzigd door newpegasus op 23-02-2007 19:41 ]

GuitarFacts | Last.fm | Google Zoekmachine Optimalisatie


Acties:
  • 0 Henk 'm!

Verwijderd

onthoud dat als er iets in een tutorial wordt gedaan dat wordt tegengesproken op de officiele manual dan kun je beter de manual aanhouden.

de beste plek om echt met php te beginnen is de eerste paar hoofdstukken van de officiele manual door te lezen. dan wordt alles meteen een heel stuk duidelijker.

http://nl2.php.net/manual/en/langref.php (vooral het stuk over superglobals)
http://nl2.php.net/manual/en/security.php (omdat je met user-submitted datawerkt is dit wel belangrijk)
http://nl2.php.net/manual/en/ref.session.php (en hoe je sessie's gebruikt).

[ Voor 17% gewijzigd door Verwijderd op 24-02-2007 23:34 ]

Pagina: 1