Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  14 588
Jeg har en webside med et enkelt form/php script som fungerer som gjestebok.

Jeg har ikke laget det selv, men har fått det av en kompis for noen år siden. Jeg har lagt inn "navn" "aar" og "type" i formdokumentet, som da sender infoen til dette PHPscriptet. Men når jeg nå prøver å kjøre det på websiden min, så kommer det opp at det er feil i skriptet. Hvis jeg legger til et utropstegn før $navn, så forsvinner feilmeldingene, men da får jeg opp at "ikke alle feltene er fylt ut".

Noen som kan hjelpe meg og finne ut om det er noen andre feil med scriptet. Jeg har kjørt det gjennom en syntax php checker, og den sa at scriptet var ok.

Poster scriptet rett inn her siden det ikke er så langt. Hvis noen har problemer med det så kan jeg poste det på en annen måte.

<?
IF($navn){
echo "Du fylte ikke inn alle felt!";
}

else{
$navn = stripslashes($navn);

$fil = fopen("tiref.txt", "r");
$gamle = fread($fil, filesize("tiref.txt"));
fclose($fil);
$fil = fopen ("tiref.txt", "w");
fwrite($fil, "$aar, $type, $gamle");
fclose($fil);

echo "Referansen er lagt til!";
}
?>

Takk!
Trådstarter
38 3
Jeg får opp denne feilmeldingen når jeg prøver å "submitte" formdokumentet:

Warning: fread() [function.fread]: Length parameter must be greater than 0 in /home/comfortk/public_html/send1.php on line 50

Warning: fopen(paref.txt) [function.fopen]: failed to open stream: Permission denied in /home/comfortk/public_html/send1.php on line 52

Warning: fwrite(): supplied argument is not a valid stream resource in /home/comfortk/public_html/send1.php on line 58

Warning: fclose(): supplied argument is not a valid stream resource in /home/comfortk/public_html/send1.php on line 59
IF($navn){
echo "Du fylte ikke inn alle felt!";
}


Hvis navn? Hva da?


Kode

if (empty($navn)) {
 echo "Du fylte ikke inn alle felt!";
}
Sist endret av curx; 5. juni 2009 kl. 11:09.
Du validerer feil.

Kode

<?php

if( $navn == '' )
	echo "Du fylte ikke inn alle felt!";
}
else
{
	$navn = stripslashes($navn);
	
	$fil = fopen("tiref.txt", "a");
	fwrite($fil, "$aar, $type, $gamle");
	fclose($fil);
	
	echo "Referansen er lagt til!";
}
?>
Tror noe lignende det der vil fungere...
m0b
m0b's Avatar
DonorAdministrator
Det er fordi du har en veldig optimistisk kode der. Koden antar at alt går helt fint, alltid, og vil fortsette å kjøre selv om en funksjon returnerer uforventet data til variablene. Det du trenger er defensiv programmering.

Kode

$fil = fopen("tiref.txt", "r");
Kan omskrives til dette; fordi fopen returnerer false dersom operasjonen ikke lot seg gjøre. Du bør sjekke de individuelle funksjonene du bruker, og sjekke mot feilverdiene de kan returnere.

Kode

$fil = fopen("tiref.txt", "r");
if( $fil == false )
   die( "Filen lot seg ikke åpne" );

// eller slik
if( false != ($fil = fopen("tiref.txt", "r")) )
{
   // fortsett videre.
}
Men jeg vil tro at det som forårsaker problemene dine er lese- og skriverettigheter til filen du prøver åpne.
Sist endret av m0b; 5. juni 2009 kl. 11:14.
Sitat av |d13m0b Vis innlegg

Men jeg vil tro at det som forårsaker problemene dine er lese- og skriverettigheter til filen du prøver åpne.
Vis hele sitatet...
Jepp, har opplevd samme. Åpne din ftp program, (gjerne fireFTP pluginnen til fireworks), høyreklikk filen og trykk egenskaper og aktiver "skrive / endre"... tror det var 0777 hvis jeg husker riktig.
Trådstarter
38 3
Jeg har satt begge php-filene samt .txt-filen til 777.
Det som nå er problemet er at jeg får syntax error, fordi nå står det:

<?php
if( $navn == '' )
echo "Du fylte ikke inn alle felt!";
}

Men på linken med } så står det at det er en syntaxerror, sikkert siden jeg avslutter med } uten at jeg har startet med {
husk å holde deg en still igjennom koden også, for ryddigheten sin skyld. Er mye lettere å legge til eller lese koden for andre også da.
Trådstarter
38 3

Kode

<?php

if( $navn == '' )
    echo "Du fylte ikke inn alle felt!";
}
else
Sitat av olsen89n Vis innlegg

Kode

<?php

if( $navn == '' )
    echo "Du fylte ikke inn alle felt!";
}
else
Vis hele sitatet...
Du har glemt "{" etter if( $navn == '' ), eller så må du ta vekk "}" før else.
Sist endret av powerchip; 5. juni 2009 kl. 12:39.
Trådstarter
38 3
Selv om jeg skriver det akuratt slik dere sier, så kommer det fortsatt opp, "Du fylte ikke inn alle felt!".
Sitat av olsen89n Vis innlegg
Selv om jeg skriver det akuratt slik dere sier, så kommer det fortsatt opp, "Du fylte ikke inn alle felt!".
Vis hele sitatet...

Kode

/*  variabelen $navn må være satt og ha innhold ellers går den til ikke til else */

if( $navn == "" ) {
       // Dette hender vist $navn ikke har innhold.
       echo "Du fylte ikke inn alle felt!";
} else {
        // Dette hender vist $navn har innhold.
}
Sist endret av powerchip; 5. juni 2009 kl. 13:08.
Trådstarter
38 3
Det er det som er problemet. Jeg har en annen PHP-fil som er satt opp med et form dokument.

HTML-kode

<form action="send1.php" method="post">
Navn på referanse
<br>
<input type="text" name="navn">
<br>
Årstall
<br>
<input type="text" name="aar">
<br>
Type
<br>
<textarea cols="19" rows="6" name="type">
</textarea>
<br>
<br>
<input type="submit" value="Legg til"> 
<input type="reset" value="Reset">
<br>
</form>
Så da skal det vel egentligt bare være å skrive inn navn, og det skal ikke være noe problem?
Husk også at det er noe som heter register global, denne fungsjonen ble tatt av fra php fra versjon 5.3 som standard, vist jeg ikke husker feil. Og fjernet fra php i versjon 6.0. Samt at de fleste hoster ikke kjører med register global av sikkerhetsmessigere grunner.

Nå har jeg ikke sett resten av koden din, men vist du ikke har satt $navn overfor, så kan du legge til dette:

Kode

if (!ini_get('register_globals')){
     /* Vist du bruker POST */
     $navn= $_POST['navn'];

     /* Vist du bruker GET */
     $navn= $_GET['navn'];
}
Men ville anbefale deg å bruke POST til dette formålet.

Edit: Ser nå at du bruker POST
Da kan du ta vekk:
/* Vist du bruker GET */
$navn= $_GET['navn'];
Sist endret av powerchip; 5. juni 2009 kl. 13:28.
Du må definere at $navn er form-feltet "navn"