Gå til innhold

[Løst] Problemer med fwrite


Anbefalte innlegg

Skrevet

Warning: fopen(text.txt) [function.fopen]: failed to open stream: Permission denied in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 10

Warning: fwrite() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 11

Warning: fwrite() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 12

Warning: fwrite() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 13

Warning: fwrite() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 14

Warning: fwrite() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 15

Warning: fwrite() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 16

Warning: fwrite() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 17

Warning: fwrite() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 18

Warning: fclose() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/PhpProject1/skjema2.php on line 19

 

 

Får opp denne feimeldingen når jeg bruker fwrite.. er problemet at jeg ikke har root access?

 

 

$fp =fopen("text.txt","w");
fwrite($fp,$_SESSION["navn"]."\n");
fwrite($fp, $_SESSION["email"]."\n");
fwrite ($fp, $_SESSION["telefon"]."\n");
fwrite ($fp, $_SESSION["adresse"]."\n");
fwrite ($fp, $_SESSION["kommentar"]."\n");
fwrite ($fp, $_SESSION["dropdown"]."\n");
fwrite ($fp, $_SESSION["svar"]."\n");
fwrite($fp,"\r\n");
fclose($fp);

Videoannonse
Annonse
Skrevet

Hvis text.txt er en eksisterende fil, betyr det at du ikker har skrivetilgang til filen.

Hvis text.txt ikke eksisterer, betyr det at du ikke har skrivetilgang til mappen du prøver å opprette filen i.

  • Liker 1
Skrevet (endret)

Legg inn en kontroll på om $fp er en resource eller er false, det er de to verdiene fopen returnerer

if (false !== ($fp =fopen("text.txt","w"))) {
 fwrite($fp,$_SESSION["navn"]."\n");
 fwrite($fp, $_SESSION["email"]."\n");
 fwrite ($fp, $_SESSION["telefon"]."\n");
 fwrite ($fp, $_SESSION["adresse"]."\n");
 fwrite ($fp, $_SESSION["kommentar"]."\n");
 fwrite ($fp, $_SESSION["dropdown"]."\n");
 fwrite ($fp, $_SESSION["svar"]."\n");
 fwrite($fp,"\r\n");
 fclose($fp);
}
else
 echo 'Klarte ikke åpne eller opprette fila, sjekk skriverettigheter';

// alternativt
$fp =fopen("text.txt","w");

if ($fp !== false) {
// fwrite osv her
}

// eller
if (is_resource($fs)) {
 // fwrite osv her
}

 

Løser ikke problemet med manglende skriverettigheter, men hindrer å kjøre unødvendig kode. Dermed ingen "Warning: fwrite() expects ...", men man bør da skrive sin egen feilmeldingen i en else.

Endret av Crowly
Skrevet

Problemet er løst! Endret litt på rettigheter, men den skriver ikke ut disse.

 

 fwrite ($fp, $_SESSION["kommentar"]."\n");
 fwrite ($fp, $_SESSION["dropdown"]."\n");
 fwrite ($fp, $_SESSION["svar"]."\n");

 

 

Merkelig, er jo helt lik kode?

Skrevet (endret)

<form action="skjema.php" method="POST">
	<p>Navn</p> <input type="text" name="navn">
	<p>Email</p> <input type="text" name="kundemail">
	<p>Telefon</p> <input type="text" name="telefon">
	<p>Adresse</p><input type="text" name="adresse">

<p>Hva lurer du på?<br/>
<select size="1" name="dropdown">
<option>Produkter</option>
<option>Frakt</option>
<option>Reklamasjon</option>
<option>Annet</option>
</select>

<br />
<br />

	<td>Er du kunde?<br />
		Ja <input type="radio" name="svar" value="Ja" />
		Nei<input type="radio" name="svar" value="Nei" />
	</td>



	<br />
	<br />
<p>Comment</p><textarea wrap="OFF" name="kommentar" rows="6" cols="25"></textarea><br />	
<br />
<input type="submit" value="Send" />
</form>

 

Jeg henter de fra index filen min. Har et form, som leder til neste side hvor detaljene blir skrevet ut. Hvor koden min skriver ut det kunden fyllte inn i skjema. Videre derifra kommer man til side tre hvor jeg skal drive med dette. Det er en skoleoppgave så jeg prøver å skjønne litt.

Endret av nepz
Skrevet

$_SESSION henter ikke ting i fra ett form. Du må se hvilken metode du bruker for sending, i dette tilfellet så er det to alternativer POST og GET, du bruker POST: method="POST"

 

Bruk $_GET eller $_POST, avhengig av hvilken metode skjemaet bruker, til å hente ut verdiene til feltene.

 

fwrite($fp,$_POST["navn"]."\n");
fwrite($fp, $_POST["email"]."\n");
fwrite ($fp, $_POST["telefon"]."\n");
fwrite ($fp, $_POST["adresse"]."\n");
fwrite ($fp, $_POST["kommentar"]."\n");
fwrite ($fp, $_POST["dropdown"]."\n");
fwrite ($fp, $_POST["svar"]."\n");

 

For å få tilgang til $_SESSION, så må session_start() kalles før noe annen output. Jeg pleier alltid å ha den helt først i php skriptet

<?php session_start();
// mer kode

Men det er ikke noen grunn til å bruke session her.

Skrevet

$_SESSION henter ikke ting i fra ett form. Du må se hvilken metode du bruker for sending, i dette tilfellet så er det to alternativer POST og GET, du bruker POST: method="POST"

 

Bruk $_GET eller $_POST, avhengig av hvilken metode skjemaet bruker, til å hente ut verdiene til feltene.

 

fwrite($fp,$_POST["navn"]."\n");
fwrite($fp, $_POST["email"]."\n");
fwrite ($fp, $_POST["telefon"]."\n");
fwrite ($fp, $_POST["adresse"]."\n");
fwrite ($fp, $_POST["kommentar"]."\n");
fwrite ($fp, $_POST["dropdown"]."\n");
fwrite ($fp, $_POST["svar"]."\n");

 

For å få tilgang til $_SESSION, så må session_start() kalles før noe annen output. Jeg pleier alltid å ha den helt først i php skriptet

<?php session_start();
// mer kode

Men det er ikke noen grunn til å bruke session her.

 

Da blir ikke text.txt lagret med informasjon :)

Skrevet (endret)

$_SESSION henter ikke ting i fra ett form. Du må se hvilken metode du bruker for sending, i dette tilfellet så er det to alternativer POST og GET, du bruker POST: method="POST"

 

Bruk $_GET eller $_POST, avhengig av hvilken metode skjemaet bruker, til å hente ut verdiene til feltene.

 

fwrite($fp,$_POST["navn"]."\n");
fwrite($fp, $_POST["email"]."\n");
fwrite ($fp, $_POST["telefon"]."\n");
fwrite ($fp, $_POST["adresse"]."\n");
fwrite ($fp, $_POST["kommentar"]."\n");
fwrite ($fp, $_POST["dropdown"]."\n");
fwrite ($fp, $_POST["svar"]."\n");

 

For å få tilgang til $_SESSION, så må session_start() kalles før noe annen output. Jeg pleier alltid å ha den helt først i php skriptet

<?php session_start();
// mer kode

Men det er ikke noen grunn til å bruke session her.

 

Tror du jeg må endre på denne?

 

$fp =fopen("text.txt","w");

 

Prøvde med denne og da dukker gammel informasjon opp også.

 

$fp =fopen("text.txt","a+");

Endret av nepz
Skrevet

Har du lest hva forskjellen på w og a+ er? Hvis ikke så ta en titt på http://www.php.net/manual/en/function.fopen.php og sjekk mode under parameter, forklarer bra forskjellen. Hvilken mode du skal bruke avhenger av hvordan du ønsker å bruke/skrive til fila.

 

Ser ut til at du har løst problemet med å skrive til fila, hvis ikke så vis hele innholdet i skjema2.php, så det blir enklere å se alt du gjør (eller prøver å gjøre).

Skrevet

Har du lest hva forskjellen på w og a+ er? Hvis ikke så ta en titt på http://www.php.net/m...ction.fopen.php og sjekk mode under parameter, forklarer bra forskjellen. Hvilken mode du skal bruke avhenger av hvordan du ønsker å bruke/skrive til fila.

 

Ser ut til at du har løst problemet med å skrive til fila, hvis ikke så vis hele innholdet i skjema2.php, så det blir enklere å se alt du gjør (eller prøver å gjøre).

 

Hadde en skriveleif i koden!

 

$fp =fopen("text.txt","w");

 

Bruker "w" nå! Takker for hjelp

Skrevet (endret)

<p>Hva lurer du på?<br/>
<select size="1" name="dropdown">
<option>Produkter</option>
<option>Frakt</option>
<option>Reklamasjon</option>
<option>Annet</option>
</select>

<br />
<br />

	<td>Er du kunde?<br />
		Ja <input type="radio" name="svar" value="Ja" />
		Nei<input type="radio" name="svar" value="Nei" />
	</td>



	<br />
	<br />
<p>Kommentar</p><textarea wrap="OFF" name="kommentar" rows="6" cols="25"></textarea><br />  

 

Dropdown menyen, radioknappene og kommentar feltet vil ikke vises i .txt dokumentet.

 

 

Dette får jeg skrevet ut

 

<form action="skjema.php" method="POST">
	<p>Navn</p> <input type="text" name="navn">
	<p>Email</p> <input type="text" name="kundemail">
	<p>Telefon</p> <input type="text" name="telefon">
	<p>Adresse</p><input type="text" name="adresse">

 

Her er 3. siden min hvor informasjonen som ble fyllt ut i skjema skal lagres i et .txt dokument.

 

<?php
session_start();
echo "<br/>";
echo "<h3>Din henvendelse er sendt!</h3>";
$fp =fopen("temp/text.txt","w");
fwrite($fp,$_SESSION["navn"]."\n");
fwrite($fp,$_SESSION["telefon"]."\n");
fwrite($fp,$_SESSION["adresse"]."\n");
fwrite($fp,$_SESSION["kundemail"]."\n");
fwrite($fp,$_SESSION["svar"]."\n");
fwrite($fp,$_SESSION["dropdown"]."\n");
fwrite($fp,$_SESSION["kommentar"]."\n");
fwrite($fp,"\r\n");
fclose($fp);
?>

 

Dette skal jo være riktig? Nå står jeg helt fast. Fikk beskjed av foreleser om å bruke $_SESSION gjennom oppgaven.

Endret av nepz
Skrevet (endret)

Igjen, informasjon sendt fra ett html form havner ikke i $_SESSION (så fremt man ikke gjør $_SESSION=$_POST;). Du bruker post og informasjonen er da tilgjengelig i $_POST. Hvorfor har du fått beskjed om å bruke en session? Kan være oppgaven krever bruk av $_SESSION, men det må være til andre ting enn å behandle informasjonen fra form'et.

 

Kommenter ut alt nedenfor session_start(); i skjema.php og legg til dette i stedet for

echo 'Innhold i $_SESSION:<br/>';
echo '<pre>';
print_r($_SESSION);
echo '</pre>';

echo '<br/>Innhold i $_POST:<br/>';
echo '<pre>';
print_r($_POST);
echo '</pre>';

Da får du se alle felter i $_SESSION og $_POST, og hvilke verdier de har, hvis de har noen. print_r() og var_dump() er veldige kjekke til debugging, og det bør plasseres i <pre> tagger slik at det blir mest mulig lesbart (spesielt på større array's).

 

Når du vet hvilke felter/variabler du skal bruke så kan du fjerne denne debugging koden igjen, og sette den andre tilbake.

Endret av Crowly
Skrevet (endret)

$_SESSION["comment"];$_REQUEST["kommentar"];
$_SESSION["dropdown"];$_REQUEST["dropdown"];


 

Hadde for mange semikolon!

Endret av nepz
Skrevet (endret)

Ikke bruk $_REQUEST, avhengig av konfigurasjon og php versjon så inneholder $_REQUEST alt fra $_GET, $_POST og evt. $_COOKIE. Du vet ikke hvor informasjonen kommer i fra. Gjør det heller til en vane å bruke $_POST, $_GET og $_COOKIE etter hvilket behov du har/hva du jobber med. Det gjør det også lettere for andre som leser koden, og se hvor man forventer at informasjonen skal komme/bli hentet fra.

Endret av Crowly
  • Liker 1

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...