script leest variabele niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan West

Johan West

19/10/2014 20:52:08
Quote Anchor link
Ik heb een script gemaakt waarbij het doel is via een input tag een veld in te geven.

Verder moet de input achter aan het nieuwe bestand worden toegevoegd.

Nu heb ik eerst de variabele $data gedefinieerd (zo heet dat toch als je eerst een lege variabele instelt?)

Goed als je het volgende scriptje runt dan pakt hij altijd de variabele die in $data in regel 3 is gezet. Zet je er pietje neer dan pakt hij pietje en dan vult hij dat netjes in in het text bestand en op het scherm.

Ook als ik in het input veld bijv. een andere variable invul dan blijft hij pietje geven.

hier het script en mijn vraag is: op welke manier moet de variabele $data zo worden ingesteld dat hij echt variabel is?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
$filename
= 'BestandSchrijven4.txt';
$data = ' ' ;

$header = fopen($filename, 'a') or die('Could not open file!');

?>


<html>
<body>
<form action = "werkfopennw9.php" method="post">
<input type = "text" value = ' <?php echo $data ?>'>
<input type="submit">
</form>

</body>

</html>
<?php
fwrite($header, $data) or die ('Could not write to file');

fclose($header)

?>


<html>
<body>
<?php

$filename
= 'BestandSchrijven4.txt';

$data=file($filename) or die ('Could not READ file!');

foreach($data as $line) {echo $line."<br>";}


?>

<br>

</body>
</html>

- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 19/10/2014 22:51:40 door - Ariën -
 
PHP hulp

PHP hulp

29/03/2024 14:49:04
 
- SanThe -

- SanThe -

19/10/2014 21:14:24
Quote Anchor link
Je moet <input type = "text" ... een name="iets" meegeven.
Na het posten kan je die terugvinden in $_POST['iets'].
 
Johan West

Johan West

19/10/2014 22:07:54
Quote Anchor link
Goed ik heb $_POST gebruikt, maar werkt ook (nog) niet.

in deze regel zit een fout: fwrite($header, $data) or die ('Could not write to file');

de foutmelder zegt:

Warning: fwrite() expects parameter 2 to be string, array given in H:\wamp\www\FormAfh\werkfopennw12.php on line 24
Call Stack
# Time Memory Function Location
1 0.0082 242168 {main}( ) ..\werkfopennw12.php:0
2 0.0085 243776 fwrite ( ) ..\werkfopennw12.php:24

________________________________________________________________________

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
$filename
= 'BestandSchrijven4.txt';

$data = $_POST=['data'];

$header = fopen($filename, 'a') or die('Could not open file!');

?>


<html>
<body>
<form action = "werkfopennw9.php" method="post">
<input type="text" name="data" >
<input type="submit" name="submit" value="verstuur">
</form>

</body>

</html>

<?php
fwrite($header, $data) or die ('Could not write to file');

fclose($header)

?>


<html>
<body>
<?php

$filename
= 'BestandSchrijven4.txt';

$data=file($filename) or die ('Could not READ file!');

foreach($data as $line) {echo $line."<br>";}


?>

<br>

</body>
</html>
Gewijzigd op 20/10/2014 16:59:40 door - Ariën -
 
Obelix Idefix

Obelix Idefix

20/10/2014 13:13:38
Quote Anchor link
Johan West op 19/10/2014 22:07:54:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$data
= $_POST=['data'];
?>

Lijkt me niet goed, geen wonder dus dat er een foutmelding volgt.

Verder zie ik in je openingspost dat je 2x <html> en <body> hebt staan. Beide kun je niet meerdere keren gebruiken in één bestand.
 
Ivo P

Ivo P

20/10/2014 17:58:21
Quote Anchor link
stap 1:
toon een pagina met een formulier

stap 2:
als er iets gepost is, schrijf dat dan weg in een file.

dat moet je echt uit elkaar houden. Nu loopt alles door elkaar. De eerste aanroep probeer je direct iets in een file te schrijven, nog voor de gebruiker iets heeft ingevuld, laat staan dat hij iets gepost heeft.
 
Johan West

Johan West

20/10/2014 23:28:29
Quote Anchor link
Kan iemand het 1 en ander vertellen over de verschillende stappen die er genomen moeten worden alvorens een script werkt.

Welke variabelen moet je instellen en op welke manier?
Wanneer moet je operatoren inschakelen?
wat vooral lastig is de samenwerking tussen html en php, dus hoe moeten die samen werken?
Hoe schrijf je variabelen weg, in welke bestanden (txt/php/tabel) en waarom MOET DAT of niet?
wat is ahw de route vanaf het ingeven van tekst in een input veld tot aan de output en welke stappen worden door de computer genomen?
de phpcode kun je later zelf zoeken, als ik de logica erachter echter maar kan begrijpen.

Hoe ziet een diagram (PSD, PSS, SSS)van een programma zoals hierboven er uit? Enige uitleg zou meer verduidelijken over de logica achter het programmeren.
Gewijzigd op 20/10/2014 23:30:59 door Johan West
 
Ivo P

Ivo P

21/10/2014 00:31:40
Quote Anchor link
bijvoorbeeld:
http://www.pfz.nl/wiki/het-wiel-uitgevonden/

en dan met name misschien hello world en Formulieren.
 
Johan West

Johan West

22/10/2014 10:04:05
Quote Anchor link
@ Ivo P ik heb niet zo'n behoefte aan het copypasten van code. Ik wilde code echt begrijpen.

Goed ik zal de probleemstelling / doelstelling herhalen:

Een bezoeker van een webpagina vult een invoervak in met een naam. Deze wordt onderaan een nieuwe webpagina zichtbaar gemaakt.

Mijn keuze om dit te programmeren was door MySQl niet te gebruiken. Er wordt wel gebruikt gemaakt van een array maar slechts 1 dus kies ik voor het wegschrijven in een txt bestand.

Mijn vraag is of een ik een voorwaarde MOET instellen? En met welke reden?
 
Peter K

Peter K

22/10/2014 10:35:21
Quote Anchor link
Een script is niet definieerbaar door wat je moet instellen en op welke manier dit moet.

Je zult de basisbeginselen van het programmeren moeten begrijpen wil je keuzes kunnen maken wat je nodig hebt om iets te maken. Belangrijk is dat je gewoon een begin maakt en dan aan de hand van de foutmeldingen verder gaat.

Er is niet echt een lijn te trekken waarin je zegt vanaf 10 regels moet het op die manier en t/m 10 regels op een andere manier. Je doet wat je fijn vindt werken en vooral waar je het beste mee overweg kunt.

Ben je nu echt met een script bezig of probeer je gewoon zomaar wat PHP aan elkaar te knopen zonder een einddoel voor ogen? Anders adviseer ik je om eerst een doel te stellen voor jezelf.

Begin zoals Ivo zegt met basisbeginselen van PHP en ga hier stukje bij beetje steeds verder mee aan de slag. Gaandeweg zul je keuzes moeten maken waar je voor wilt kiezen. Zoals ik hierboven ook al aangaf, dit is afhankelijk van wat je wilt maken.
 
Johan West

Johan West

22/10/2014 11:12:52
Quote Anchor link
Bedankt voor je goede raad Peter. Ik zie het programmeren vooral als een hobby. Ik ben nieuwsgierig naar hoe het werkt, maar ik neem het wel vrij serieus. Ik wil begrijpen hoe het werkt. En het is altijd goed om over bepaalde dingen te posten en te vragen.

Ik heb het script weer aangepast ik zal het posten. Ik krijg de foutmelding: Notice: Array to string conversion op regel 23

Daarnaast geeft het text bestand nu iedere keer de toevoeging Array. Er wordt dus wel iets bijgeschreven, nl. het woord array. Wat betekent dit?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
$filename
= 'BestandSchrijven4.txt';
$name = ' ' ;
$header = fopen($filename, "a") or die('Could not open file!');
$name = (string)$name ;

?>


<html>
<body>


<form action = "BestandSchrijven4.txt" method="post">
<input type = "text" value = ' <?php $name = $_POST=['name']; ?>'>
<input type="submit">
</form>

<?php

if($name) {
fwrite($header, (string)$name) or die ('Could not write to file');
fclose($header);

}


else { //Formulier nog niet uitgevoerd



$filename= 'BestandSchrijven4.txt';

$name=file($filename) or die ('Could not READ file!');

foreach($name as $line) {echo $line."<br>";}

}

?>


<br>

</body>
</html>
Gewijzigd op 22/10/2014 12:38:47 door - Ariën -
 
Ivo P

Ivo P

22/10/2014 11:42:06
Quote Anchor link
Ik begrijp uit je opmerking, dat je niet de logische weg wilt volgen, maar even ter vergelijk:

het is vast veel leuker om in een auto te stappen en eens lekker een rondje door de stad te rijden.
Maar dat gaat een stuk beter als je eerst even op een rustig pleintje probeert hoeveel gas je moet geven en hoe en wanneer je moet schakelen.

Er loopt nu vanalles in je script door elkaar.

--
je begint met het openen van een file (om te schrijven), en het vullen van de var $name met een spatie.
En die var $name forceer je 2 regels verder tot een string. (en dat was het al)

--
dan toon je een form op het scherm. De input mist een name <input name="foo" value="">
Het is me niet duidelijk waarom je daar midden in een html-tag ineens php gaat uitvoeren.
Het kán wel, maar iets zegt me dat je daar niet snapt wat je doet.

Je wijst namelijk aan de var $name, die tot nu tot een spatie bevatte, de waarde $_POST=['name'] toe.

Ik dacht eerst $_POST['name'], maar er staat een = tussen.

dus: $_POST wordt een array met 1 element: de string 'name']
Zou dus gelijk zijn aan $_POST = array('name');
ofwel: $_POST[0] = 'name';

En dat kopieer je vervolgens naar $name.


Verder heeft dit geen effect op de html, want je echoot niets.

Daarna kom je op een plek waar je je afvraagt of $name een waarde bevat.
Ja, die heb je net toegekend: het is een array.

En
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $myArray = ['aap', 'noot'];  echo $myArray; ?>
levert inderdaad het woord Array op

Toevoeging op 22/10/2014 11:44:14:

daarna schrijf je iets in die file.

Beetje jammer dat die al open is, want er is ook de mogelijkheid in je script, dat je niet wilt schrijven, maar lezen.
Daarvoor gebruik je file() dus dan was het openen van de file niet nodig geweest.
 
Peter K

Peter K

22/10/2014 12:35:38
Quote Anchor link
Dat je het woord array krijgt is omdat je letterlijk een array neer zet. Je kunt met diverse functies de waarden ook echt weergeven:

http://php.net/manual/en/function.array-values.php

Tevens zie ik ook dat je <form action = "BestandSchrijven4.txt" method="post"> niet klopt.

Dit betekend dat als het form gepost wordt je de browser doorstuurt naar het tekstbestand.

Zoals ik al zei, begin bij het begin en stel doelen:

1. Maak eens een php pagina met een formulier met 2 velden:
Voornaam & achternaam
2. Zorg dat dit formulier gepost kan worden naar hetzelfde bestand en verwerk vervolgens de geposte waarden.
3. Geef de voornaam en de achternaam weer op het scherm.

Als je dit voor elkaar hebt zul je begrijpen dat 50% van je code verkeerd in elkaar zit.
 
Johan West

Johan West

22/10/2014 12:52:54
Quote Anchor link
misschien vat ik niet iets over dit vb script over de tag name die de waarde email of name bevat.

http://www.w3schools.com/php/php_forms.asp

Later wordt met php [name] en als variabele hergebruikt. Hieruit blijkt dat de (html) input tag waarden kan bevatten die met php gebruikt kunnen worden.
Gewijzigd op 22/10/2014 12:54:37 door Johan West
 
Ivo P

Ivo P

22/10/2014 12:58:32
Quote Anchor link
precies.

Maar dáár komt een <input> voor met name="name"

En daar staat niet een extra = in het script waarmee je $_POST overschrijft.

Kijk eerst eens of je een voorbeeld na kunt spelen. Werkt dat, dan pas ga je proberen om dingen aan te passen.
Je slaat in dat proces een stap of 5 over, en wilt direct in een file gaan schrijven.

Probeer het stap voor stap te doen. Je gaat, denk ik, al in de eerste aanpassing van het script mis: je mist volgens mij volledig het kwartje dat moet vallen mbt "hoe ontstaat $_POST['name']" met als gevolg dat er helemaal niets meer werkt.

Zelf werk ik meer dan 10 jaar met php, en nog begin ik al mijn scripts waarin echt iets nieuws staat voor mij, stap voor stap.
 
- Ariën  -
Beheerder

- Ariën -

22/10/2014 13:00:15
Quote Anchor link
Dat klopt, alle waardes die je in een formulier invult komen na het versturen van het formulier (via uiteraard POST) terecht in de $_POST-global (een container).
 
Peter K

Peter K

22/10/2014 13:08:41
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$voornaam
= $_POST['voornaam'];

printf("$voornaam");
?>


<form action="index.php" method="POST">
<input type="text" name="voornaam">
<input type="submit" value="Verzenden">
</form>


Zo ingewikkeld is het dus...
 
Ivo P

Ivo P

22/10/2014 13:12:44
Quote Anchor link
de eerste keer dat je dit script aanroept, zal er nog niet gePOST zijn, en dus zou je een foutmelding moeten krijgen:
zet op de eerste regels van je script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
?>


om dat af te vangen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
   $voornaam = $_POST['voornaam'];
   echo 'hallo '. htmlspecialchars($voornaam);
}

?>


Ontwikkel ALTIJD met error-reporting aan. Anders zie je 90% van de fouten niet en denk je mogelijk dat iets goed gaat, of snap je maar niet waarom iets niet werkt, terwijl het een simpel typfoutje was: $Voornaam ipv $voornaam bijvoorbeeld
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.