Gå til innhold

debug på form


Anbefalte innlegg

Noe slikt burde kanskje funke. Med forbehold om feil. Du får modifisere litt om nødvendig.

 

$error = '';
if (empty($fornavn) || empty($etternavn) || empty($alder) || empty($tlf) || empty($brukernavn) || empty($passord) || empty($pass)) { 
 $error .= "<p><b>Et eller flere felt mangler nødvendig informasjon!</b></p>";

 if (!empty($email) && !ereg("^[^@ ()$#><;%*?&+='\{}æøåÆØÅ]+@[^@ ()$#><;%*?&+='\{}æøåÆØÅ]+\.[^@ ()$#><;*%?&+='\{}æøåÆØÅ\.]+$", $email)) {
   $error .= "<p><b>ERROR! Feil format på mailadresse!</b></p>";
 }

 if (is_numeric($tlf)) {
   $error .= "<p>Telefonnr. må skrives i tallformat eks: 72483293</p>";
 }

 if (is_numeric($alder)) {
   $error .= "<p><b>Alderen må skrives i tallformat!</p></b>";
 }

 if ($passord == "False") {
   $error .= "<p><b>Passordene må være like!<b></p>";
 }

 if ($alder < 12) {
   $error .= "<p><b>Du må være minst 12 år for å være med på nisselink dataparty</b></p>";
 }

 if ($alder > 25) {
   $error .= "<p><b>Nisselink er bare for ungdommer mellom 12-25år.</b></p>";
 }

} else {

 mysql_connect($mySQLhost, $mySQLuser, $mySQLpass)
        or die("Could not connect: " . mysql_error());
 mysql_select_db($mySQLdb);

 if (mysql_result(mysql_query("SELECT count(*) as count FROM users WHERE brukernavn = '".$brukernavn."' LIMIT 1"),0,"count") == 1) {
   $error .= "<p><b>Brukernavnet $brukernavn er opptatt!</b></p>";
 }
}

if (!empty($error) {
 echo $error;
}

Lenke til kommentar
Videoannonse
Annonse

hmm...fårr en parse error unexpected '{' her:

 

if (!empty($error) { <---

echo $error;

}

 

skjønner ikke hvorfor...

 

<?php 
include("config.php");

echo <<< end
<form name='reg' method= '$formMethod' action= '$regScript'>
<p>Fornavn: <input type='text' name='fornavn' size='30'>*
<p>Etternavn: <input type='text' name='etternavn' size='30'>*
<p>Alder: <input type='text' name='alder' size='2'>*
<p>Telefonnr.: <input type='text' name='tlf' size='30'>*
<p>Ønsket brukernavn: <input type='text' name='brukernavn' size='30'>*
<p>Ønsket passord: <input type='password' name='passord' size='30'>*
<p>Bekreft passord: <input type='password' name='pass' size='30'>*
<p>E-mail: <input type='text' name='email' size='30'>*
<p>URL: <input type='text' name='url' size='30'>
<p><input name='send' type='submit' value='Registrer!'> <input type='reset' value='Reset!'>
</form>
end;

echo '<p>Alle felter merket med * MÅ fylles ut</p>';

if ($_POST['send'] == 'Registrer!'){

if($formMethod == "post") {
$fornavn = $_POST['fornavn'];
$etternavn = $_POST['etternavn'];
$alder = $_POST['alder'];
$tlf = $_POST['tlf'];
$brukernavn = $_POST['brukernavn'];
$passord = $_POST['passord'];
$pass = $_POST['pass'];
$email = $_POST['email'];
$url = $_POST['url'];
$dato = date ("d/m/Y, H:i:s");
}

$fornavn = trim(addslashes(strtolower($fornavn)));
$etternavn = trim(addslashes(strtolower($etternavn)));
$alder = trim(addslashes(strtolower($alder)));
$tlf = trim(addslashes(strtolower($tlf)));
$brukernavn = trim(addslashes(strtolower($brukernavn)));
$passord = trim(addslashes(strtolower(md5($passord))));
$pass = trim(addslashes(strtolower(md5($pass))));
$url = trim(addslashes(strtolower($url)));
$uid = md5(uniqid(rand(), true));

if ($passord == $pass){
$passord = $pass; 
}
else{
$passord = "False";
}

$error = '';
if (empty($fornavn) || empty($etternavn) || empty($alder) || empty($tlf) || empty($brukernavn) || empty($passord) || empty($pass)) {
$error .= "<p><b>Et eller flere felt mangler nødvendig informasjon!</b></p>";

if (!empty($email) && !ereg("^[^@ ()$#><;%*?&+='\{}æøåÆØÅ]+@[^@ ()$#><;%*?&+='\{}æøåÆØÅ]+\.[^@ ()$#><;*%?&+='\{}æøåÆØÅ\.]+$", $email)) {
  $error .= "<p><b>ERROR! Feil format på mailadresse!</b></p>";
}

if (is_numeric($tlf)) {
  $error .= "<p>Telefonnr. må skrives i tallformat eks: 72483293</p>";
}

if (is_numeric($alder)) {
  $error .= "<p><b>Alderen må skrives i tallformat!</p></b>";
}

if ($passord == "False") {
  $error .= "<p><b>Passordene må være like!<b></p>";
}

if ($alder < 12) {
  $error .= "<p><b>Du må være minst 12 år for å være med på nisselink dataparty</b></p>";
}

if ($alder > 25) {
  $error .= "<p><b>Nisselink er bare for ungdommer mellom 12-25år.</b></p>";
}

} else {

mysql_connect($mySQLhost, $mySQLuser, $mySQLpass)
       or die("Could not connect: " . mysql_error());
mysql_select_db($mySQLdb);

if (mysql_result(mysql_query("SELECT count(*) as count FROM users WHERE brukernavn = '".$brukernavn."' LIMIT 1"),0,"count") == 1) {
  $error .= "<p><b>Brukernavnet $brukernavn er opptatt!</b></p>";
}
}

if (!empty($error) {
echo $error;
}

if(!$url){
$url = 'ingen url';
}
$regurl = "http://nisselink.sjurvaage.com/registrer.php?uid=$uid";
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "To: $fornavn <$email>\r\n";
$headers .= "From: Registreringsskjema <$email2>\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$email2 = 'registrering@nisselink';

$to = $email; //Hvem som skal ta imot mailen
$subject = 'Registrering, Nisselink'; //subject i mail

$mailinnhold = <<<mail

<h3>Velkommen som medlem på Nisselink sine hjemmesider</h3>

Denne infoen ble registrert i Nisselinks database:
<br></br>
<div><strong>Navn:</strong> $fornavn $etternavn</div><br>
<div><strong>Alder:</strong> $alder</div><br>
<div><strong>E-mail:</strong> $email</div><br>
<div><strong>Brukernavn:</strong> $brukernavn</div><br>
<div><strong>URL:</strong> $url</div><br>
<div><strong>Telefonnummer:</strong> $tlf</div><br>

<h3>Viktig!</h3>
<div>For å kunne logge deg inn på nisselink sine sider, må du aktivere kontoen din ved å trykke på linken nedenfor. Hvis du har hotmail anbefaler vi at du kopierer liken og limer den inn i et nytt vindu og trykker på enter:
<br><a href="$regurl">$regurl<a/></br></div>
<p></p>Med vennlig hilsen Crewet i Nisselink dataparty

mail;



if(mail($to, $subject, $mailinnhold, $headers)) {
$email = trim(addslashes(strtolower($email)));

if (mysql_query("INSERT INTO $mySQLtable (fornavn,etternavn,alder,tlf,brukernavn,passord,email,url,dato,uid) VALUES ('$fornavn','$etternavn','$alder','$tlf','$brukernavn','$passord','$email','$url','$dato','$uid')")) {
echo "En mail ble sendt til $email. For å kunne logge inn må du aktivere kontoen din, dette gjør du ved å trykke på aktiveringslinken som står i mailen du ble tilsendt"; }}
else { 

echo "Noe gikk galt, prøv igjen senere". mysql_error(); }

}
}
?>

Lenke til kommentar

Når jeg gjør det slik få jeg enda en parse error...på linje 140 (den nest siste linjen) unexpected } nå. Hvis jeg fjerner denne får jeg ingen errorer lenger men da funker ikke debuggingen i det hele tatt..

 

slik ser koden ut nå:

 

<?php 
include("config.php");

echo <<< end
<form name='reg' method= '$formMethod' action= '$regScript'>
<p>Fornavn: <input type='text' name='fornavn' size='30'>*
<p>Etternavn: <input type='text' name='etternavn' size='30'>*
<p>Alder: <input type='text' name='alder' size='2'>*
<p>Telefonnr.: <input type='text' name='tlf' size='30'>*
<p>Ønsket brukernavn: <input type='text' name='brukernavn' size='30'>*
<p>Ønsket passord: <input type='password' name='passord' size='30'>*
<p>Bekreft passord: <input type='password' name='pass' size='30'>*
<p>E-mail: <input type='text' name='email' size='30'>*
<p>URL: <input type='text' name='url' size='30'>
<p><input name='send' type='submit' value='Registrer!'> <input type='reset' value='Reset!'>
</form>
end;

echo '<p>Alle felter merket med * MÅ fylles ut</p>';

if ($_POST['send'] == 'Registrer!'){

if($formMethod == "post") {
$fornavn = $_POST['fornavn'];
$etternavn = $_POST['etternavn'];
$alder = $_POST['alder'];
$tlf = $_POST['tlf'];
$brukernavn = $_POST['brukernavn'];
$passord = $_POST['passord'];
$pass = $_POST['pass'];
$email = $_POST['email'];
$url = $_POST['url'];
$dato = date ("d/m/Y, H:i:s");
}

$fornavn = trim(addslashes(strtolower($fornavn)));
$etternavn = trim(addslashes(strtolower($etternavn)));
$alder = trim(addslashes(strtolower($alder)));
$tlf = trim(addslashes(strtolower($tlf)));
$brukernavn = trim(addslashes(strtolower($brukernavn)));
$passord = trim(addslashes(strtolower(md5($passord))));
$pass = trim(addslashes(strtolower(md5($pass))));
$url = trim(addslashes(strtolower($url)));
$uid = md5(uniqid(rand(), true));

if ($passord == $pass){
$passord = $pass; 
}
else{
$passord = "False";
}

$error = '';
if (empty($fornavn) || empty($etternavn) || empty($alder) || empty($tlf) || empty($brukernavn) || empty($passord) || empty($pass)) {
$error .= "<p><b>Et eller flere felt mangler nødvendig informasjon!</b></p>";

if (!empty($email) && !ereg("^[^@ ()$#><;%*?&+='\{}æøåÆØÅ]+@[^@ ()$#><;%*?&+='\{}æøåÆØÅ]+\.[^@ ()$#><;*%?&+='\{}æøåÆØÅ\.]+$", $email)) {
 $error .= "<p><b>ERROR! Feil format på mailadresse!</b></p>";
}

if (is_numeric($tlf)) {
 $error .= "<p>Telefonnr. må skrives i tallformat eks: 72483293</p>";
}

if (is_numeric($alder)) {
 $error .= "<p><b>Alderen må skrives i tallformat!</p></b>";
}

if ($passord == "False") {
 $error .= "<p><b>Passordene må være like!<b></p>";
}

if ($alder < 12) {
 $error .= "<p><b>Du må være minst 12 år for å være med på nisselink dataparty</b></p>";
}

if ($alder > 25) {
 $error .= "<p><b>Nisselink er bare for ungdommer mellom 12-25år.</b></p>";
}

} else {

mysql_connect($mySQLhost, $mySQLuser, $mySQLpass)
      or die("Could not connect: " . mysql_error());
mysql_select_db($mySQLdb);

if (mysql_result(mysql_query("SELECT count(*) as count FROM users WHERE brukernavn = '".$brukernavn."' LIMIT 1"),0,"count") == 1) {
 $error .= "<p><b>Brukernavnet $brukernavn er opptatt!</b></p>";
}
}

if (!empty($error)) {
echo $error;
}

if(!$url){
$url = 'ingen url';
}
$regurl = "http://nisselink.sjurvaage.com/registrer.php?uid=$uid";
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "To: $fornavn <$email>\r\n";
$headers .= "From: Registreringsskjema <$email2>\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$email2 = 'registrering@nisselink';

$to = $email; //Hvem som skal ta imot mailen
$subject = 'Registrering, Nisselink'; //subject i mail

$mailinnhold = <<<mail

<h3>Velkommen som medlem på Nisselink sine hjemmesider</h3>

Denne infoen ble registrert i Nisselinks database:
<br></br>
<div><strong>Navn:</strong> $fornavn $etternavn</div><br>
<div><strong>Alder:</strong> $alder</div><br>
<div><strong>E-mail:</strong> $email</div><br>
<div><strong>Brukernavn:</strong> $brukernavn</div><br>
<div><strong>URL:</strong> $url</div><br>
<div><strong>Telefonnummer:</strong> $tlf</div><br>

<h3>Viktig!</h3>
<div>For å kunne logge deg inn på nisselink sine sider, må du aktivere kontoen din ved å trykke på linken nedenfor. Hvis du har hotmail anbefaler vi at du kopierer liken og limer den inn i et nytt vindu og trykker på enter:
<br><a href="$regurl">$regurl<a/></br></div>
<p></p>Med vennlig hilsen Crewet i Nisselink dataparty

mail;



if(mail($to, $subject, $mailinnhold, $headers)) {
$email = trim(addslashes(strtolower($email)));

if (mysql_query("INSERT INTO $mySQLtable (fornavn,etternavn,alder,tlf,brukernavn,passord,email,url,dato,uid) VALUES ('$fornavn','$etternavn','$alder','$tlf','$brukernavn','$passord','$email','$url','$dato','$uid')")) {
echo "En mail ble sendt til $email. For å kunne logge inn må du aktivere kontoen din, dette gjør du ved å trykke på aktiveringslinken som står i mailen du ble tilsendt"; }}
else { 

echo "Noe gikk galt, prøv igjen senere". mysql_error(); }

}
} <--- parse error her!
?>

Endret av Tha_Zaynt
Lenke til kommentar
det ville vært kjekt om hele koden var indentert

Hva er det? at det er fargekoder på koden mener du? Isåfall er jeg ikke sikker på hvordan jeg får til det her på forumet...Det er vel ingen egen BB-kode for php?

 

@ christt: Hvis Jeg fjerner den siste }' en så får jeg ingen feilmelding, men debuggingen funker ikke i det heke att da...

Lenke til kommentar

Gikk igjennom koden din med UltraEdit og indenterte/sjekket brackets mot hverandre. Sånn bortsett fra at koden er noe rotete (koden skjemmer ingen), så har Christt rett, den siste bracketen har ingen åpnings bracket. Spørsmålet er jo hva som ligger i "config.php".

 

Personlig synes jeg du bør se over koden en gang til. Den bærer preg av at når du begynte å skrive den viste du litt lite om hvor du ville hen. Dette er et greit utgangspunkt, men for din egen del bør den skrives om slik at når du skal tilbake å legge til et felt om 2 måneder, så kommer det til å bli unødig vannskelig.

 

En grei måte å restrukturere denne koden på vil være å sette seg ned å tenke gjennom hva den skal gjøre. Lage et enkelt flytdiagram på et a4 ark. Skal forsøke å lage noe tilsvarende her:

 

1. Er data Postet. JA gå til 2, Nei gå til 9

2. Er alle felter ok. JA gå til 3, Nei gå til 7

3. Legge data inn i database. Gikk dette? Ja gå til 4, Nei gå til 6

4. Alt ok. Send Mail.

5. Avslutt.-----

6. Probelmer med database. Skriv feilmelding, gå til 9.

7. Undersøke hvilke felter som er gale. Lag feilmeldinger.

8. Skriv ut feilmeldinger. Gå til 9.

9. Ingen Post data, skriv ut form.

 

 

 

Dette blir litt rart, siden de egentlig burde være bokser, men de gir deg en pekepinn. Neste vil være å trekke ut noen av disse tingene i funksjoner. Eksemplevis kan du droppe de øverste linjene som flytter alle $_POST['foo'] over i $foo samt fikser $foo med trim, addslashes og strtolower inn i en funskjon. Det kan da være enklere å arbeide med dataene videre hvis du legger de inn i en array.

 

Eksempel:

 

Vi må deffinere funksjonen getdata:

function getdata($postarray) { //Funksjonen heter getdata og tar et argument.
    $data['fornavn']=trim(addslashes(strtolower($postarray['fornavn']))); //Omformatering og overlegging av fornavn
    $data['etternavn']=trim(addslashes(strtolower($postarray['etternavn')));
//Omformatering og overlegging av etternavn
    ... //Fortsett med alle feltene.
}

 

Når vi så kaller i hovedscriptet :

 $data=getdata($_POST); 

vil vi ha en array med alle data, ferdig fikset. Vi må nå sjekke dem. Det er mange måter å gjøre det på, men en enkel måte er å lage en funksjon som retturnerer en array med feilmeldinger, eller true.

 

function checkdata($data) { // Funksjonen heter checkdata og tar et argument.

   $returnvalue=true; //Gå utifra at alt er ok.

    //Sjekke email:
    if (empty($data['email']) || !ereg("^[^@ ()$#><;%*?&+='\{}æøåÆØÅ]+@[^@            
    ()$#><;%*?&+='\{}æøåÆØÅ]+\.[^@ ()$#><;*%?&+='\{}æøåÆØÅ\.]+$", 
    $data['email'])) { //Slår ut om den er tom, eller om ereg'en reagerer (jeg er ikke 
                              // ekspert på regexp, så denne går jeg ikke god får).
         $returnvalue[]= "<p><b>ERROR! Feil format på 
                                   mailadresse!</b></p>";
         }

     //SJekke telefonnummer:
     if(empty($data['tlf']) || !isnumeric($data['tlf']) {
           //Slår ut dersom ikke numeric, eller tom
           $returnvalue[]="<p>Telefonnr. må skrives i tallformat eks: 72483293</p>";
     }

      // Sjekke passord
      if(empty($data['pass'] || or empty($data['passord'] || 
         $data['pass']!=$data['passord']) {
            //Slår ut dersom en av de er tomme, eller de ikke er like
            $returnvalue[]="<p><b>Passordene må være like!<b></p>";
       }
       .... //Fortsett nedover med sjekker og feilmeldinger for alle felter

       //Nå har vi da en verdi $returnvalue som enten er true, eller en array med
       //feilmledinger. Hva den er bryr vi oss ikke om, da dete er jobben til noe annet
        return $returnvalue //Vi bare returnerer den
}

 

I koden din skriver du rett etter å ha brukt getdata():

$error=checkdata($data);

 

Du kan nå teste om $error er en array med funksonen is_array(). Denne returnerer false hvis den ikke er en array, og i så tilfelle så er alt fint for oss. Dersom den retturnerer true, så må vi skrive ut feilemldingene, og skrive ut formen på ny.

 

if(!is_array($error)) {
      //Alt er ok, data sjekket og klar for databasen.
      //Her kan du kjøre mysql delen av scriptet ditt, og mail delen.
      //Husk å bruke arrayen $data, istede for dine gamle variable navn.
      //For eksempel så er  $fornavn nå erstattet med $data['fornavn']
}
else {
      //$error var en array, og inneholder derfor feilmeldinger.
      //Først må vi skrive ut de:
      echo "Alle felter merket med * MÅ fylles ut<br>;
      foreach($error as $key=>$value) {
              //Denne går gjennom alle verdiene i arrayen, og så skriver de ut. Nøklene  
              //brukes ikke, men vi tar de med for oversiktens skyld. Les om foreach i               
              //PHP manualen
              echo $value;
      }
      //Skriv ut formen på ny
      ...
      exit;
}

 

Da har vi noen greie funksjoner å forholde oss til. Getdata og Checkdata. Et fult script blir da mer oversiktlig. Og en pseudo kode av hele scriptet ditt blir noe sånt som:

If($_POST['send']=="Registrer!") {
       //Vi har postdata, kjør sjekker
       $data=getdata($_POST);
       $error=checkdata($data);
       if(!is_array) {
           //Alt godt, kjør db ting og mail
        //Hvis alt gikk bra:
        echo "DU ER REGISTRERT!"
        exit;
        }
        else {
           //Skriv ut feilmeldinger
           //Siden scriptet fortsetter her behøver vi ikke skrive ut formen
         }
}
//Skriv ut formen

 

Forøvrig ligger årsaken til at ditt sjekke script ikke funker i if settningene. Gå gjennom dem, så ser du det. Eksemplevis, dersom Telefonnummer er et nummer vil den ikke slå ut på den første if testen, men dersom en av de andre feltene er tomme, vil if-testen tilførende telefonnummer slå ut dersom den er numerisk. Altså vil du få feilmelding på telefonnummer dersom det er korekt utfylt, dersom en av de andre feltene er tomme, ikke under andre omstendigheter.

 

Ble litt lang post, men håper den hjelper deg noe. Sjekk forøvrig artikklene på PHPBuilder. De har noen flotte artikler som kan hjelpe deg med akkurat dette. Riktig nok en litt annen måte å gjøre det på en det jeg har presentert her, men mist like bra (sansynligvis bedre :yes: ). Det er gode artkler, riktignok skrevet på engelsk, men lette å forstå, de fleste av dem.

 

P.S. Beklager alle skriveleifene, men sånn er det nå engang.

 

Dagga

Lenke til kommentar

kan du ikke bare gjøre det sånn:

 

if(enfeil) {

$feil = 1;

print feilmelding<br/>

}

if(endaenfeil) {

$feil = 1;

print feilmelding<br/>

}

if(endaenfeil) {

$feil = 1;

print feilmelding<br/>

}

if(endaenfeil) {

$feil = 1;

print feilmelding<br/>

}

if($feil != 1) {

alt er ok...

}

 

da får du alle feilmeldingene og hvis ingen av de kjøres så gjør noe annet... synes det var en enkel måte å gjøre det på...

Endret av WaBBiT
Lenke til kommentar

Har prøvd så godt jeg kan å lage skriptet etter oppskriften over, men det stopper opp her;

 

parse error; unexpected '{' on line 72

 

<?php
include("config.php");

echo <<< end
<form name='reg' method= '$formMethod' action= '$regScript'>
<p>Fornavn: <input type='text' name='fornavn' size='30'>*
<p>Etternavn: <input type='text' name='etternavn' size='30'>*
<p>Alder: <input type='text' name='alder' size='2'>*
<p>Telefonnr.: <input type='text' name='tlf' size='30'>*
<p>Ønsket brukernavn: <input type='text' name='brukernavn' size='30'>*
<p>Ønsket passord: <input type='password' name='passord' size='30'>*
<p>Bekreft passord: <input type='password' name='pass' size='30'>*
<p>E-mail: <input type='text' name='email' size='30'>*
<p>URL: <input type='text' name='url' size='30'>
<p><input name='send' type='submit' value='Registrer!'> <input type='reset' value='Reset!'>
</form>
end;

echo '<p>Alle felter merket med * MÅ fylles ut</p>';

function getdata($postarray) {
   $data['fornavn']=trim(addslashes(strtolower($postarray['fornavn']))); 
   $data['etternavn']=trim(addslashes(strtolower($postarray['etternavn'])));
$data['alder']=trim(addslashes(strtolower($postarray['alder'])));
$data['tlf']=trim(addslashes(strtolower($postarray['tlf'])));
$data['brukernavn']=trim(addslashes(strtolower($postarray['brukernavn'])));
$data['passord']=trim(addslashes(strtolower(md5($postarray['passord']))));
$data['pass']=trim(addslashes(strtolower(md5($postarray['pass']))));
$data['url']=trim(addslashes(strtolower($postarray['url'])));
$data['uid']=md5(uniqid(rand($postarray['uid']), true));

}

$data=getdata($_POST);

$error=checkdata($data);

function checkdata($data) {

  $returnvalue=true; 

   
   if (empty($data['email']) || !ereg("^[^@ ()$#><;%*?&+='\{}æøåÆØÅ]+@[^@            
   ()$#><;%*?&+='\{}æøåÆØÅ]+\.[^@ ()$#><;*%?&+='\{}æøåÆØÅ\.]+$",
   $data['email'])) {
                            
        $returnvalue[]= "<p><b>ERROR! Feil format på
                                  mailadresse!</b></p>";
        }

   
    if(empty($data['tlf']) || !isnumeric($data['tlf'])) {
       
          $returnvalue[]="<p>Telefonnr. må skrives i tallformat eks: 72483293</p>";
    }

   
     if(empty($data['pass']) ||  empty($data['passord']) ||
        $data['pass']!=$data['passord']) {
      
           $returnvalue[]="<p><b>Passordene må være like!<b></p>";
      }

  mysql_connect($mySQLhost, $mySQLuser, $mySQLpass)
       or die("Could not connect: " . mysql_error());
mysql_select_db($mySQLdb);

if (mysql_result(mysql_query("SELECT count(*) as count FROM users WHERE brukernavn = '".$brukernavn."' LIMIT 1"),0,"count") == 1) {
$data['brukernavn'] = false;
}
  
    if (empty($data['brukernavn']) || ($data['brukernavn']=false){ <---- Linje 72!
        
          $returnvalue[]="<p>Brukernavnet $data['brukernavn'] er opptatt!</p>";
    }
      
       return $returnvalue 
}

if(!is_array) {

   if (mysql_query("INSERT INTO $mySQLtable (fornavn,etternavn,alder,tlf,brukernavn,passord,email,url,dato,uid) VALUES ('$data['fornavn']','$data['etternavn']','$data['alder']','$data['tlf']','$data['brukernavn']','$data['passord']','$data['email']','$data['url']','$data['dato']','$data['uid']')")) {
echo "En mail ble sendt til $data['email']. For å kunne logge inn må du aktivere kontoen din, dette gjør du ved å trykke på aktiveringslinken som står i mailen du ble tilsendt"; exit;}

else{

echo"$returnvalue";}

?>

Lenke til kommentar

Et annet triks er å legge funksjonene et annet sted en midt inne i selce scriptet. PHP er så grei med dette at du kan legge de midt i scriptet, helt først, eller helt sist. Du kan også legge de i en ekstern fil som du inkluderer i toppen av scriptet med

inculde ("my.inc.php");

Filnavnet er bare min standard, kanskje ikke den beste.

 

Ved å legge funksjoner i eksterne filer oppnår du to viktige fordeler: De forsvinner fra hovedscriptet, sånn at du kan konsentere deg om de viktige tingene, og om det er en bracket feil i funksjonen så rapporterer php parseren at feilen ligger i den filen, ikke i dit script (selv om den rapporterer feil i det også, fordi du bruker en funksjon som da ikke lenger er definert).

 

Husk å legge til start og slutt tags for php i den eksterne fila.

 

I tilleg: det som Torbjørn skriver er veldig viktig. Å holde orden på brackets er vanskelig, så riktig indentering er viktig. Bruk en ordentlig tekst editor også. Jeg foretrekker selv UltraEdit, men det finnes flere som er bra. Noen har PHP highlighting, som er veldig kjekt stort sett, og litt forvirrende av og til... :yes:

 

Ellers: Siste linja i getdata funksjonen mangler en ) på slutten. Du har lagt inn MYSQL stasj i checkdata funksjonen, og dette har ikke noe der å gjøre. I denne funksjonen skal du bare sjekke all data, og returnere en array med feilmeldinger for alle feil, eller TRUE. Du begynner bra med det jeg skrev, men fortsett med å sjekke alle feltene på den måten. If settningen skal slå ut hvis feltet er tomt eller feil skrevet inn. Da setter du feilmeldingen inn i arrayen med:

 $returnvalue[]="noe html kode"

Denne måten å legge til en verdi inn i en array er veldig kjek. Den legger da inn verdien uten nøkkel, eller det vil si den lager nøkkel utifra det som ligger i arrayen fra før. Den siste nøkkelen som ble lagt inn blir økt med en, og det er den nye nøkkelen. Om ingenting eksisterer fra før begynner den på 0.

 

Så vidt jeg kan forstå av tidligere diskusjon i denne tråden har du ikke satt deg helt inn i Arrayer enda. Dette burde du gjøre. Arrayer er en måte å lagre data på en effektiv måte i mange sammenhenger (langt ifra alle). Når du snakker om arrayer er det tre begreper å forholde seg til: Arrayen, nøkkler og verdier. Mens vanlige verdier har et navn og en verdi (f.eks a=5, b=navn eller navn=Arild) så har Arrayer et navn, 1 til mange nøkler og 1 til mange verdier. Hver nøkkel har en, og nøyaktig en verdi, og hver verdi har nøyaktig en nøkkel. Verdiene kan selvfølgelig være hva som helst, og nøkklene kan også være nesten hva som helst. Du henter eller setter data i en array ved å benytte nøkkelen. I php manualen finnes det masse eksempler på dette, og for noe som helst vettug php programering (eller noe annet språk for den saks skyld) MÅ du kunne dette.

 

Når det er sagt er Arrayer komplisert og jeg møter til stadig utfordringer med Arrayer, om hvordan de oppfører seg. Når dette skjer lager jeg et test script for å se hvordan de reagerer på forskjellige måter å behandle de. En veldig grei funksjon å benytte da er print_r(). Den tar en array som argument og lager en output av arrayen. Da kan du se hvilke nøkler som er lagt inn, og hvilke verdier de nøklene har. Av og til blir man meget overasket over hva som befinner seg inne i disse arrayene.. :)

Lenke til kommentar

Wabbit: Det er selvfølgelig en måte å gjøre ting på, men en ønsker ofte å identifisere feilmeldingene tidlig, og deretter sende de til output på et senere tidspunkt. Ved å lagre de i en array kan man velge når disse skal skrives til skjerm, og enkelt inkludere scriptet i en eller annen form for HTML design (som andre en programerne selv gjør, right.. :))

 

Det er som regel god kode praksis å skille funksjonalitet og utseende, og derfor bør man benytte løsninger som gjør det enkelt å bestemme når output skal skje.

 

Selv pleier jeg å gjøre det meste av data sjekker før jeg sender noe som helst data. På den måten kan jeg sende en header med ny url om jeg ønsker. Enten for føre brukern videre til en "Alt OK" side, eller en "Du er ikke logget inn side", eller hva jeg måte finne på.. muhaha... :thumbup:

Lenke til kommentar

Tror jeg har kommet et steg videre nå, men det er fortsatt noe som mangler...Tror der er denne setningen som er litt feilplassert, men jeg vet ikke helt hvor den skal stå:

 

$error=checkdata($data);

 

error:

Warning: Cannot use a scalar value as an array in /hsphere/local/home/sjurvaag/nisselink.sjurvaage.com/reg.php on line 57

Warning: Cannot use a scalar value as an array in /hsphere/local/home/sjurvaag/nisselink.sjurvaage.com/reg.php on line 64

Warning: Cannot use a scalar value as an array in /hsphere/local/home/sjurvaag/nisselink.sjurvaage.com/reg.php on line 71

 

sånn ser koden ut:

 

<?php
include("config.php");

echo <<< end
<form name='reg' method= '$formMethod' action= '$regScript'>
<p>Fornavn: <input type='text' name='fornavn' size='30'>*
<p>Etternavn: <input type='text' name='etternavn' size='30'>*
<p>Alder: <input type='text' name='alder' size='2'>*
<p>Telefonnr.: <input type='text' name='tlf' size='30'>*
<p>Ønsket brukernavn: <input type='text' name='brukernavn' size='30'>*
<p>Ønsket passord: <input type='password' name='passord' size='30'>*
<p>Bekreft passord: <input type='password' name='pass' size='30'>*
<p>E-mail: <input type='text' name='email' size='30'>*
<p>URL: <input type='text' name='url' size='30'>
<p><input name='send' type='submit' value='Registrer!'> <input type='reset' value='Reset!'>
</form>
end;

echo '<p>Alle felter merket med * MÅ fylles ut</p>';

if ($_POST['send'] == 'Registrer!'){



function getdata($postarray) {
$data['fornavn']=trim(addslashes(strtolower($postarray['fornavn'])));
$data['etternavn']=trim(addslashes(strtolower($postarray['etternavn'])));
$data['alder']=trim(addslashes(strtolower($postarray['alder'])));
$data['tlf']=trim(addslashes(strtolower($postarray['tlf'])));
$data['brukernavn']=trim(addslashes(strtolower($postarray['brukernavn'])));
$data['passord']=trim(addslashes(strtolower(md5($postarray['passord']))));
$data['pass']=trim(addslashes(strtolower(md5($postarray['pass']))));
$data['url']=trim(addslashes(strtolower($postarray['url'])));
$uid = md5(uniqid(rand(), true));

}


$data=getdata($_POST);


function checkdata($data) {



 $returnvalue=true;

  
  if (empty($data['email']) || !ereg("^[^@ ()$#><;%*?&+='\{}æøåÆØÅ]+@[^@            
  ()$#><;%*?&+='\{}æøåÆØÅ]+\.[^@ ()$#><;*%?&+='\{}æøåÆØÅ\.]+$",
  $data['email'])) {
                          
       $returnvalue[]= "<p><b>ERROR! Feil format på
                                 mailadresse!</b></p>";
       }

  
   if(empty($data['tlf']) || !isnumeric($data['tlf'])) {
      
         $returnvalue[]="<p>Telefonnr. må skrives i tallformat eks: 72483293</p>";
   }

  
    if(empty($data['pass']) ||  empty($data['passord']) ||
       $data['pass']!=$data['passord']) {
    
          $returnvalue[]="<p><b>Passordene må være like!<b></p>";
     }


      return $returnvalue;
}

$error=checkdata($data);

if(!is_array) {

if (mysql_query("INSERT INTO $mySQLtable (fornavn,etternavn,alder,tlf,brukernavn,passord,email,url,dato,uid) VALUES ($data[fornavn],$data[etternavn],$data[alder],$data[tlf],$data[brukernavn],$data[passord],$data[email],$data[url],$data[dato],'$uid')")) {
echo "En mail ble sendt til $data[email]. For å kunne logge inn må du aktivere kontoen din, dette gjør du ved å trykke på aktiveringslinken som står i mailen du ble tilsendt";}

else{echo"$returnvalue";}}}

?>

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å
×
×
  • Opprett ny...