[PHP] POST waarden komen niet aan in File

Pagina: 1
Acties:

Onderwerpen


  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
Edit: "opgelost" (zie last post)

Ik ben een vette PHP-newbie, sorry daarvoor ;). Probeer ook niet te erg van de code te schrikken.

Ik tracht:
- strings (naam, nickname etc.) die zijn ingevoerd in op een HTML Form te submitten naar een .php
- die ze vervolgens in een file schrijft in de vorm van een html-tabel
- daarna include ie die file

Maar... de ene keer schrijft ie ze wel goed weg, de andere keer niet. Toen ik 'm tijdens het coden teste met 'adsf' (lekker makkelijk :P) leek ie 't goed te doen, totdat ik 'echte' namen ging invoeren. Maar of 't nou aan hoofdletter ligt of spaties kan ik niet zeker zeggen, want "ene keer wel de andere keer niet".
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
27
28
29
30
31
32
33
<?php
$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$nickname =  $_POST["nickname"];
$email =  $_POST["email"];
$website =  $_POST["website"];
$comment = $_POST["comment"];

$filename = "inschrijvingen.txt";
$filename_total = "total.txt";

$total = file($filename_total);
$total = $total[0];

if (trim($firstname)) {
   $total = $total + 1;

   $filepointer2 = fopen ($filename, "a");
   fputs($filepointer2,"<tr valign=\"top\">");
   fputs($filepointer2,"<td>$lastname, $firstname</td>");
   fputs($filepointer2,"<td>$nickname</td>");
   fputs($filepointer2,"<td><a href=mailto:$email>$email</a></td>");
   fputs($filepointer2,"<td><a href=$website>$website</a></td>");
   fputs($filepointer2,"<td>$comment</td>");
   fputs($filepointer2,"</tr>");
   fclose($filepointer2);
}

$filepointer_total2 = fopen ($filename_total, "w");
fputs($filepointer_total2, $total);
fclose($filepointer_total2);

?>

Zit er al een tijdje mee te klooien dus als jullie me kunnen helpen is het erg gewaardeerd. Klinkt 't bekend, of is er geen hoop voor bovenstaande rommel?
(Apache/2.0.39 PHP/4.2.2)

[ Voor 64% gewijzigd door Timer op 15-09-2003 12:54 . Reden: code update ]


  • TheDuke
  • Registratie: Juni 1999
  • Niet online
Er moet iig een fclose($fa) toegevoegd worden...

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
TheDuke schreef op 21 augustus 2003 @ 14:23:
Er moet iig een fclose($fa) toegevoegd worden...
Je hebt gelijk, tnx.
(fixed)

(Probleem blijft bestaan trouwens...)

[ Voor 11% gewijzigd door Timer op 21-08-2003 14:30 ]


  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Van
if ($firstname!=null) {

Zou ik in ieder geval makemn
if (trim($firstname)) {

Dit is een veiligere manier om te checken of een veld juist is ingevuld aangezien de trim functie de surrounding spaties in een string automatisch filtert.

Het is mij niet duidelijk wat het volgende statement voor nut heeft:
PHP:
1
2
3
if (file_exists($filename_total)==false) { 
    $fb = fopen ($filename_total, "w"); 
}

Je opent hier de file voor write, maar doet vervolgens niets meer met de filepointer $fb.
Als je deze code uitvoert om een lege file aan te maken moet je in ieder geval fclose($fb) moeten toevoegen na het fopen statement.

It’s nice to be important but it’s more important to be nice


  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
Goeie tips allemaal, ik heb ze toegepast. _/-\o_

Het neemt helaas niet die frustrerende output weg.

Met input overal 'bla', 'boe'', 'Eifeltoren', 'Test test' vindt ie prima.
Als ik korte woordjes zonder spaties doe en overal verschillend werkt ie ook.
Het lijkt er nu nog het meest op dat als je meerdere woorden per veld doet én ze verschillen van elkaar, dat het fout gaat :?

Acties:
  • 0 Henk 'm!

Verwijderd

ik ben zelf ook een redelijke phpnewbie dus vergeef me als ik t fout heb.

ik vraag me alleen af waarom je in het begin de strings hernoemd, is dat wel nodig??

en kan het zijn dat ik wel 3x if zie, maar nergens een Else??

Acties:
  • 0 Henk 'm!

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
Verwijderd schreef op 22 augustus 2003 @ 20:37:
ik vraag me alleen af waarom je in het begin de strings hernoemd, is dat wel nodig??
Ja, dat stond er eerst niet, maar dat is een van de dingen die ik heb neergezet toen er zulke vreemde dingen gebeurden. Kan toch iig geen kwaad ;)
en kan het zijn dat ik wel 3x if zie, maar nergens een Else??
Dat hoeft toch niet perse? Dat else-block zou dan de hele rest van de code moeten bevatten.

[ Voor 10% gewijzigd door Timer op 22-08-2003 20:43 ]


Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 13-09 21:40
TheTimer schreef op 22 August 2003 @ 20:42:
[...]
Ja, dat stond er eerst niet, maar dat is een van de dingen die ik heb neergezet toen er zulke vreemde dingen gebeurden. Kan toch iig geen kwaad ;)


[...]
Dat hoeft toch niet perse? Dat else-block zou dan de hele rest van de code moeten bevatten.
Niet echt...

PHP:
1
2
3
4
5
6
7
8
9
<?php

if($bla) //zelfde als if($bla == true)
{
    doeIets();
}

doeNogIets();
?>

is iets anders dan
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

if($bla)
{
    doeIets();
}
else
{
    doeNogIets();
}
?>


verder kun je

PHP:
1
2
3
4
<?php
if($bla == false)
{}
?>

ook schrijven als
PHP:
1
2
3
4
<?php
if(!$bla)
{}
?>


Verder zou je dit:

PHP:
1
2
3
4
5
6
7
8
9
<?php
if (file_exists($filename)==false) { 
    $fb = fopen ($filename, "w"); 
} 

if (file_exists($filename_total)==false) { 
    $fb = fopen ($filename_total, "w"); 
} 
?>

Moeten vervangen door
PHP:
1
2
3
4
5
6
7
8
9
<?php
if (file_exists($filename)==false) { 
    $fb = fopen ($filename, "w"); 
} 
elseif (file_exists($filename_total)==false) { 
    fclose($fb);
    $fb = fopen ($filename_total, "w"); 
} 
?>


verder is een naam als 'fb' niet echt netjes. "$file_pointer" is misschien netter, of wat voor beschrijvende naam ook :)

[edit]
fb close je trouwens alleen als de naam bestaat, terwijl je het andersom moet doen. Als je de pointer gebruikt moet je 'm maken en ook weer verwijderen.

Ik denk dat je dus de opzet van je schript eens onder de loep moet nemen.

[ Voor 13% gewijzigd door Mithrandir op 22-08-2003 21:09 ]

Verbouwing


Acties:
  • 0 Henk 'm!

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
Bedankt voor de tips.

Ik heb de code enigzins aangepast, ziet er nu zo uit:
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
27
28
29
30
31
32
33
<?php
$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$nickname =  $_POST["nickname"];
$email =  $_POST["email"];
$website =  $_POST["website"];
$comment = $_POST["comment"];

$filename = "inschrijvingen.txt";
$filename_total = "total.txt";

$total = file($filename_total);
$total = $total[0];

if (trim($firstname)) {
   $total = $total + 1;

   $filepointer2 = fopen ($filename, "a");
   fputs($filepointer2,"<tr valign=\"top\">");
   fputs($filepointer2,"<td>$lastname, $firstname</td>");
   fputs($filepointer2,"<td>$nickname</td>");
   fputs($filepointer2,"<td><a href=mailto:$email>$email</a></td>");
   fputs($filepointer2,"<td><a href=$website>$website</a></td>");
   fputs($filepointer2,"<td>$comment</td>");
   fputs($filepointer2,"</tr>");
   fclose($filepointer2);
}

$filepointer_total2 = fopen ($filename_total, "w");
fputs($filepointer_total2, $total);
fclose($filepointer_total2);

?>
Zo ingewikkeld is ie toch niet. Ik heb dat hele file-aanmaak gedoe weggelaten, ik zorg er zelf wel voor dat die file bestaat enzo.

Maar wat ik nou zo vreemd vind is dat ik +/- 6x iets in kan vullen, die komen netjes in het lijstje te staan. Maar daarna houdt 't ineens op. Tik ik daarna echter weer ff iets korts in, dan slaat ie soms weer aan... bizar...

Hij zou toch iig consistent moeten zijn, en steeds hetzelfde moeten doen :? (ookal is het helemaal fout :)).

[ Voor 14% gewijzigd door Timer op 22-08-2003 21:49 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

deze stukken zijn overbodig trouwens:
code:
1
2
3
4
5
6
if (file_exists($filename)==false) {
    $fb = fopen ($filename, "w");
}

if (file_exists($filename_total)==false) {
    $fb = fopen ($filename_total, "w");

Want de fopen met a als parameter maakt de files sowieso ook al aan als ie nog niet bestond.

Als je verstandig bent, dan ga je kijken wat er in je bestand staat (en niet wat jij _denkt_ dat er in staat, maar echt ophalen met een ftp-programma en analyseren met een teksteditor ofzo), want de enige manier om te achterhalen of het toevoegen goed ging maar jij een foutje maakte is toch echt op die manier.

Acties:
  • 0 Henk 'm!

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
Zie de post boven jouw post: dat stuk is er al uit :)
Ik weet nl. dat de file bestaat. Ik test 'm hier op localhost en kan dus zo met notepad in die file kijken... er wordt idd niet in de file geschreven (af en toe dus :S) zoals ook al is te zien in de topic-titel. Ik heb 'm ook geupload naar m'n webspace (op de VU), maar daar is het precies hetzelfde probleem. Permissies staan goed. Tis dan ook vreemd dat ie soms wel, soms niet schrijft.

Edit: zal voor de duidelijkheid de code in de startpost even veranderen.

[ Voor 23% gewijzigd door Timer op 23-08-2003 00:06 ]


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Mmm, ff gezocht op nl.php.net/fputs . Daar staat eea over data die niet geod geschreven wordt en een aantal dingen die op jouw probleem lijken, een van de oplossing die gegevens wordt is dat je voor elke fputs hetvolgende gebruikt:
PHP:
1
2
$insert="<td>$lastname, $firstname</td>";
fputs($filepointer2,$insert,strlen($insert));

Dus bij elke fputs de stringlengte meegeven.

Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Huuu... het derde argument van de fputs functie staat voor het aantal bytes, niet het aantal karakters. Ik kan zo niet meteen op een functie komen die het aantal bytes die een string inneemt bedenken... Dat wordt dus een retourtje php.net

If you can't beat them, try harder


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
dingstje schreef op 23 August 2003 @ 09:49:
Huuu... het derde argument van de fputs functie staat voor het aantal bytes, niet het aantal karakters. Ik kan zo niet meteen op een functie komen die het aantal bytes die een string inneemt bedenken... Dat wordt dus een retourtje php.net
Zit ik verkeerd te denken of is dat in dit geval hetzelfde, elk character is hier toch ook 1 byte. :? Via een post form kun je toch geen 2bytes characters versturen...

* beetle71 says: Correct me if I'm wrong

Acties:
  • 0 Henk 'm!

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
Nogmaals bedankt voor de moeite allemaal. En ach, ik heb 't gewoon geprobeerd.
De code ziet er nu alsvolgt uit:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$nickname =  $_POST["nickname"];
$email =  $_POST["email"];
$website =  $_POST["website"];
$comment = $_POST["comment"];

$filename = "inschrijvingen.txt";
$filename_total = "total.txt";

$total = file($filename_total);
$total = $total[0];

if (trim($firstname)) {
   $total = $total + 1;

   $filepointer = fopen ($filename, "a");

   $regel1="<tr valign=\"top\">";
   $regel2="<td>$lastname, $firstname</td>";
   $regel3="<td>$nickname</td>";
   $regel4="<td><a href=mailto:$email>$email</a></td>";
   $regel5="<td><a href=$website>$website</a></td>";
   $regel6="<td>$comment</td>";
   $regel7="</tr>\n";

   fputs($filepointer,$regel1,strlen($regel1));
   fputs($filepointer,$regel2,strlen($regel2));
   fputs($filepointer,$regel3,strlen($regel3));
   fputs($filepointer,$regel4,strlen($regel4));
   fputs($filepointer,$regel5,strlen($regel5));
   fputs($filepointer,$regel6,strlen($regel6));
   fputs($filepointer,$regel7,strlen($regel7));

   fclose($filepointer);
}

$filepointer_total = fopen ($filename_total, "w");
fputs($filepointer_total, $total);
fclose($filepointer_total);

?>
Maar het maakt geen verschil |:(
Het is vooral zo vervelend dat je steeds bij de 3e naam in het lijstje denkt van "Jaa...? Jaa...?" en dan bij 4 *zip*... Ik ga eens kijken wat er gebeurd als er een 5 min. interval tussen de invoeringen zit... je moet wat 8)7

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Misschien een hele domme suggestie, maar is een MySql databaseje niet makkelijker..??

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
Heb ik niet op m'n webspace :)
Zou natuurlijk dat dat ene inschrijfformuliertje via m'n webserver kunnen gaan draaien maar ik denk ook dat MySQL een beetje overdreven is voor zoiets simpels.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Die toevoeging van de lengte is iig zinloos, behalve dat het blijkbaar invloed op de magic_quotes_runtime heeft (maar waarom :?).

Wat je iig zult moeten doen is wat zinvoller debuggen. Output bijvoorbeeld de inhoud van $_POST via print_r($_POST);

En stop wat echo "ik doe nu deze-en-deze operatie met deze-en-deze $parameters"; statements buiten en binnen je if.

Acties:
  • 0 Henk 'm!

  • n3ck
  • Registratie: Mei 2002
  • Laatst online: 24-07 19:47
Misschien deze declaraties weghalen? ::

$firstname = $_POST["firstname"];
$lastname = $_POST["lastname"];
$nickname = $_POST["nickname"];
$email = $_POST["email"];
$website = $_POST["website"];
$comment = $_POST["comment"];

Wazig probleem..

Acties:
  • 0 Henk 'm!

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
Ok, dan ook nog maar even de "oplossing", of beter de oorzaak.

Ik had nl. een pop-up waarin het form stond. Als je die had gesubmit closed() hij zichzelf en ververstte de parent (die o.a. de $filename include) zodat je leuk kon zien wat je had toegevoegd.

Wanneer ik het form gewoon op dezelfde pagina plaats is er niets aan de hand verder. Zonde want het zag er leuker uit, maar hij lust het niet.

(nog steeds vreemd dat hij het zo inconsistent "soms wel, soms niet" deed though.)

[ Voor 12% gewijzigd door Timer op 15-09-2003 12:54 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:12

crisp

Devver

Pixelated

TheTimer schreef op 15 September 2003 @ 12:53:
Ok, dan ook nog maar even de "oplossing", of beter de oorzaak.

Ik had nl. een pop-up waarin het form stond. Als je die had gesubmit closed() hij zichzelf en ververstte de parent (die o.a. de $filename include) zodat je leuk kon zien wat je had toegevoegd.

Wanneer ik het form gewoon op dezelfde pagina plaats is er niets aan de hand verder. Zonde want het zag er leuker uit, maar hij lust het niet.

(nog steeds vreemd dat hij het zo inconsistent "soms wel, soms niet" deed though.)
Poste je het form naar de opener, of naar de popup zelf? Je kan in een form namelijk een target opgeven, als je je 'parent'-window een name geeft kan je die targetten.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • slm
  • Registratie: Januari 2003
  • Laatst online: 12-11-2023

slm

Als je serverside de betreffende variabelen (nog) niet nodig hebt, kan je denk ik beter via gebruik van opener de form element values wijzigen. Zo voorkom je dat de post data ergens in cyberspace blijft hangen als je post naar een ander window en het is bovendien sneller omdat er niks via de server gaat, maar alles clientside wordt afgehandeld.

Ik ben het probleem zelf wel eens tegengekomen wanneer ik in Flash5 een form probeerde te submitten naar target=_blank. _POST was helemaal leeg.

To study and not think is a waste. To think and not study is dangerous.


Acties:
  • 0 Henk 'm!

  • Timer
  • Registratie: Januari 2002
  • Laatst online: 01-07 19:15
Hij lijkt het verdomd te doen (klop klop klop ;)). Bovendien is nu meteen dat refresh javascriptje overbodig. Tss, dan kom je er gewoon niet op hè 8)7. Maar met die ondertitel van crisp, kon het al niet mis :P

Bedankt mensen. Ook voor het 'opruimen' van de code natuurlijk, waar ik nu mee verder ga.
Pagina: 1