Gå til innhold

Trenger litt hjelp på veien.


Anbefalte innlegg

Hei, har gjennom senhøsten og vinteren lært meg HTML, CSS, (muligens enkel) JavaScript og nå altså PHP. Har lest en del på w3schools (som jeg forøvrig synes er ubrukelig fordi den tar ting altfor generelt), og sett instruksjonsvideoene i "VTC - Real World PHP-Programming - The Basics".

 

Jeg forstår det aller meste jeg har lært i JavaScript og PHP, men har problemer med å tenke som en programmerer, altså finne på løsninger selv. Nå vil jeg gjerne at dere skal finne på noen enkle oppgaver til meg...har forresten ikke lært noe om OOP i PHP.

 

Også har jeg et spørsmål:

Ville det være trygt å sende en form med et passord med method='post' til en php-fil som sjekker dette opp mot en varibel i scriptet for så å lage en cookie og en session for denne brukeren som gir han tilgang til administratorsidene?(ikke til brukeradgang, da må jeg vel bruke MySQL, men til f.eks. et universalt administratorpassord i oppstartsfasen til en side)?

 

edit: en liten skrivefeil.

-bronze

Endret av pedervl
Lenke til kommentar
Videoannonse
Annonse

Nå er jeg ferdig med kontaktskjemaet. Har bare hatt med litt tilfeldige fields, og gadd ikke å fylle ut alle fylkene. Siden validerer som XHTML 1.0 strict og scriptet sjekker om alle felter er fylt ut, og at epost-adressene stemmer overens. I tillegg forsvinner ikke alt om man glemmer et felt før man trykker submit.

 

Husker at han som er i tutorialsene jeg har sett gjorde noe lignende, så føler ikke at alt dette er selvstendig kode, men trengte hvertfall ikke å se etter noe når jeg skrev det.

 

Kom gjerne med flere eksempler på oppgaver! Litt mer avansert kanskje...

 

Her er koden:

-kontaktskjema.php:

 

<?

include("submit.php");

if($_GET[action]=="check") {
$status=checkForm();

if($status!="ok") {
	kontaktskjema();
	print "\n<p style='color:red;font-weight:bold'>$status</p>";
	slutten();
}
elseif($status=="ok") {
	lagreSkjema();
	kontaktskjema();
	print "<p>Din informasjon har blitt innsendt</p>";
	slutten();
}
}
else {
kontaktskjema();
slutten();
}

?>

-submit.php:

<?

function kontaktskjema() {
print "
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' />
<title>Kontakt-skjema</title>
</head>

<body>
<form method='post' action='kontaktskjema.php?action=check'>
<p>Fornavn:
<input type='text' name='fornavn' value='$_POST[fornavn]' /></p>
<p>Etternavn:
<input type='text' name='etternavn' value='$_POST[etternavn]' /></p>
<p>Epost-adresse:
<input type='text' name='epost' value='$_POST[epost]' /></p>
<p>Skriv in epost-adressen på nytt:
<input type='text' name='epost2' value='$_POST[epost2]' /></p>
<p>Fylke:
<select name='fylke'>
	<option value=''>Velg et fylke</option>
	<option value='oslo'"; if($_POST[fylke]=="oslo") {print " selected='selected'";}; print ">Oslo Fylke</option>
	<option value='akershus'"; if($_POST[fylke]=="akershus") {print " selected='selected'";}; print ">Akershus</option>
	<option value='hordaland'"; if($_POST[fylke]=="hordaland") {print " selected='selected'";}; print ">Hordaland</option>
	<option value='mogr'"; if($_POST[fylke]=="mogr") {print " selected='selected'";}; print ">Møre og Romsdal</option>
</select></p>
<p><input type='submit' value='submit' /></p>
</form>";
}

function slutten() {
print"
</body>
</html>";
}

function checkForm() {
if(!$_POST[fornavn]) {return "Du må skrive inn fornavnet ditt!";}
if(!$_POST[etternavn]) {return "Du må skrive inn etternavnet ditt!";}
if(!$_POST[epost]) {return "Du må skrive inn en epost-adresse!";}
if(!$_POST[epost2]) {return "Du må skrive inn epost-adressen din på nytt!";}
if($_POST[epost]!=$_POST[epost2]) {return "Epost-adressene er ikke de samme!";}
if(!$_POST[fylke]) {return "Du må velge et fylke!";}

return "ok";
}

function lagreSkjema() {
$fornavn=$_POST[fornavn];
$etternavn=$_POST[etternavn];
$epost=$_POST[epost];
$fylke=$_POST[fylke];
}

?>

Endret av pedervl
Lenke til kommentar

1. Det er vanlig å sjekke om ting er greit eller om ting feiler med true eller false, ikke med "ok" eller "feil" osv. Dvs. f.eks. en sjekk-funksjon som skjekker de forskjellige tingene, og returnerer true eller false.

 

2.

<input type='text' name='epost2' value='$_POST[epost2]' /></p>

Når du skriver ut variabler inni tekst-strenger er det vanlig å avsluttet strengen for så å begynne på igjen, slik:

echo "<input type='text' name='epost2' value='" . $_POST[epost2] ."' /></p>";

En annen måte jeg foretrekker er å gjøre det slik, altså med klammene { og }:

echo "<input type='text' name='epost2' value='{$_POST[epost2]}' /></p>";

Den siste kalles complex (curly) syntax.

 

3. Når man skriver ut store skjemaer er det vanlig å avslutte php-taggen eller bruke en slik metode:

<?php
echo <<<eof
Masse hhtml eher 
feawifjawof
eaw...
eof;
?>

Litt usikker på om denne er 100% rett.

 

4. "elseif ($status="ok") {"

Her gjetter jeg at du vil sjekke om $status er ok, men det du egentlig gjør er å sette variabelen til "ok". For å sjekke om det er sant bruker du to likhetstegn;

"elseif ( $status == "ok" ) {"

Om du vil sjekke om det ikke er det "sant" bruker du ett utropstegn og ett likhetstegn;

"elseif ( $status != "ok" ) {"

 

5. I funksjonen checkForm() bruker du mange return's. Du skal bare bruke èn return. Alt du skriver ut til slutt legger du i en variabel.

"$var .= "husk""

"$var .= "den";"

Legg merke til bruken av punktum forran likhetstegn.

Om du nå skriver ut $var vil du få "huskden", men om du fjerner punktum vil du kun få "den" om du skjønner hva jeg mener.

 

6. Short-tags. Du bruker short-tag: "<?". Om du skulle oppleve bytting av server kan det php på den nye serveren har deaktivert bruk av short-tags. Derfor er det en god vane og bruke "<?php" og "?>".

 

7. Sjekk heller om submit knappen en trykket. Du sjekker nå om check er satt;

"action='kontaktskjema.php?action=check'>".

På submit-knappen setter du f.eks. navnet submit og du sjekker om den er isset.

Endret av BigJackW
Lenke til kommentar
1. Det er vanlig å sjekke om ting er greit eller om ting feiler med true eller false, ikke med "ok" eller "feil" osv. Dvs. f.eks. en sjekk-funksjon som skjekker de forskjellige tingene, og returnerer true eller false.

Selv om forskjellen kanskje ikke er så stor, så er dette sett på som bedre kode(eller fremgangsmåte)? Greit.

Når du skriver ut variabler inni tekst-strenger er det vanlig å avsluttet strengen for så å begynne på igjen, slik:

Dette visste jeg ikke. Du ser at jeg har brukt denne metoden i drop-down-boksen, men da til if....print. Greit.

3. Når man skriver ut store skjemaer er det vanlig å avslutte php-taggen eller bruke en slik metode:
<?php
echo <<<eof
Masse hhtml eher 
feawifjawof
eaw...
eof;
?>

Hva betyr "echo <<<eof"? Har kun sett echo "tekst" eller echo ("tekst") før.

 

4. Ja, du har rett, jeg glemte det siste =-tegnet. Har endret til == nå!

 

5. I likhet med metoden å printe ut en variabel i en streng har tutorialsen her også "vranglært" meg, SELV OM det ikke burde ha noe å si da return fører til at resten av koden blir ignorert... men igjen: bedre kode?

 

6. Greit.

 

7. Kan du forklare hvordan dette gjøres i praksis. Regner kanskje med at det har noe med onclick å gjøre, men kan du vise et eksempel?

Endret av pedervl
Lenke til kommentar
Ville det være trygt å sende en form med et passord med method='post' til en php-fil som sjekker dette opp mot en varibel i scriptet for så å lage en cookie og en session for denne brukeren som gir han tilgang til administratorsidene?(ikke til brukeradgang, da må jeg vel bruke MySQL, men til f.eks. et universalt administratorpassord i oppstartsfasen til en side)?

 

Du trenger ikke sende cookie og starte session. start_session() sender cookie. Dersom klienten forkaster cookien brukes en get-variabel til identifisering. Det vil være trygt med passord som variabel i kilden så lenge php-modulen er aktiv. En litt bedre metode ville være å lagre passordet som md5() eller sha(). Du kan lage brukersystem uten database ved å lagre brukerinformasjon i en fil.

 

if($status!='ok') {
 ...
} elseif($status='ok') {
 ...
}

 

Dette er litt smør på flesk. Det hadde holdt med

 

if($status!='ok') {
 ...
} else {
 ...
}

 

Du kan også vurdere å bruke strcmp() for å sammenligne strenger. Den returnerer 0 dersom strengene er like eller et tall som indikerer forskjellen på strengene dersom de er ulike.

 

if(!strcmp($status, 'ok')) {
 //status er ok
} else {
 //status er ikke ok
}

 

Alle option linjene kunne du gjort slik:

 

$fylker = array(
array('oslo', 'Oslo'),
array('akershus', 'Akershus'),
array('hordaland', 'Hordaland'),
array('mogr', 'Møre og Romsdal')
);

$options = '<option value="">Velg et fylke</option>'."\n";

foreach ($fylker as $fylke) {
 $selected = '';
 if (isset($_POST['fylke']) && !strcmp($_POST['fylke'], $fylke[0])) $selected = ' selected="selected"; 
 $options .= '<option value="'.$fylke[0].'".$selected.'>'.$fylke[1].'</option>'."\n";
}

print $options;

 

Man bør ikke repetere. Med denne koden er det enklere å legge inn nye fylker. Den kan også brukes med info fra database.

 

edit: Det var plutselig et par poster som dukket opp. Jeg vil bare si at det ikke er noe i veien med å bruke return slik du bruker det i checkForm så lenge du er klar over at funksjonen blir avsluttet med return.

 

echo <<< ettellerannet

vil printe ut tekst helt til

ettellerannet; //dukker opp

 

ettellerannet kan være en hvilken som helst sammenhengene tekst streng med unntak av php's spesialord som true, false, null osv (så vidt jeg vet).

 

btw: eof står for End Of File

Endret av grimjoey
Lenke til kommentar

3. eof kan også brukes i forhold til variabler:

$str = <<<eof

fewaf

eawfewaf

ewafewa

eof;

 

5. Return "avslutter" funksjonen. Så om brukeren har glemt flere felter, så vil brukeren kun få returert en og en feilmelding!?

 

7. Ja da.

Form:

<form action="check.php" method="post">
<input type="text" name="brukernavn" />
<input type="password" name="passord" />
<input type="submit" name="password" />

 

PHP:

<?php
if ( isset($_POST['submit']) ) {
/* Do stuff here */
}
?>

 

Enkelt og greit; rett frem.

 

Du bør også validere brukerinput.

Sjekke om telefonnr. er kun tall (is_numeric()) om det er 8 tegn (strlen($tlf) == 8). osv.

Endret av BigJackW
Lenke til kommentar

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...