Avatar billede Slettet bruger
17. april 2003 - 08:00 Der er 44 kommentarer og
1 løsning

Check variabler

Hej.

Jeg har en del felter i en form der bagefter flyttes til en session variabel. Men inden skal der kontrolleres om variablen er tom, altså der er ikke skrevet noget i formularen. Den kan f. eks. se sådan ud:

$_SESSION['skole'] = $_POST['skole'];

Er det så

if $_POST['skole'] = "" .... og hvad gør man så. Den skal jo blive på samme side og gøre brugeren opmærksom på at der skal stå noget i feltet. Da der er en del, kan man så evt. lave det som en lille rutine, så der ikke skal stå en masse linier for hvert felt. Man kan jo nok ikke gøre det før der trykkes på submit, men det er sådan set også godt nok.

Jeg har også en $email og den ville jeg også gerne have checket for om den er skrevet nogenlunde rigtigt.

Jeg er meget villig til at give 60 til 100 point pr. GODE løsning ;-)
Avatar billede intel4004 Novice
17. april 2003 - 08:39 #1
Hvis din submit har name="submitbutton" :

if (isset($_POST['submitbutton']))
{
  $post_empty = 0;
  foreach ($_POST as $key => $value) {
      if ($_POST[$key] == "" || $_POST[$key] == NULL)
      {
        $post_emptykey[] = $key;
        $post_empty++;
      }
  for ($i = 0; $i < $post_empty; $i++)
  {
      echo 'Du skrev ikke noget i '.$post_emptykey[$i].'!<br>';
  }

}

skriv evt. formen herefter...

Mvh Intel4004
Avatar billede Slettet bruger
17. april 2003 - 08:43 #2
Checker den alle POST variablerne ? Det havde da vist været en god idé med lidt kommentarer hist og pist ;)

Du skriver "skriv evt. formen herefter..." - betyder det at den vil gøre det on the fly ? Nej vel ?
Avatar billede Slettet bruger
17. april 2003 - 08:46 #3
submitbutten hedder:  Næste >  og det kan man vel ikke. Jeg går ud fra at du mener hvilken value den har ?
Avatar billede intel4004 Novice
17. april 2003 - 08:46 #4
du kunne evt. lavet endnu et array med forklarende betydninger:

$post_disc['name'] = 'Navne-feltet';
$post_disc['adress'] = 'Adresse-feltet';

og i for-løkken istedet skrive:

echo 'Du skrev ikke noget i '.$post_disc[$post_emptykey[$i]].'!';

Intel4004
Avatar billede intel4004 Novice
17. april 2003 - 08:49 #5
Ja den tjekker alle POST varabler...
Det det sker at den laver et kontrol-array med navne på dem der var tomme - og en variabel med antal der var tomme.

Du kan godt lave en name til submit-knappen. Denne sendes også til scriptet i action. Jeg plejer at have form og script i samme fil hvor jeg så har action=$_SERVER['PHP_SELF'] - har du ikke det? Bruger den anden fil?

Intel4004
Avatar billede Slettet bruger
17. april 2003 - 08:53 #6
Jo form og script er i en fil, derefter sendes den til en side magen til hvor man kan kontrollere sine indtastninger inden afsendelse.

Nu har jeg lagt dit script ind og den skriver at der er en parse error i linien efter sidste linie, hvis du forstår. Linien eksisterer ikke.
Avatar billede intel4004 Novice
17. april 2003 - 08:59 #7
hvilken fejl får du da? Har du sat name="submitbutton" eller skrevet det om i mit kode-eksempel?

Jeg kan ikke lige se en syntax-fejl i eksemplet...
Avatar billede sukos Juniormester
17. april 2003 - 09:00 #8
mangler der ikke en } til afslutning?
Avatar billede sukos Juniormester
17. april 2003 - 09:01 #9
Og skriver den ikke meddelsen lige så mange gange som der er felter?
Avatar billede Slettet bruger
17. april 2003 - 09:03 #10
Den skriver bare parse error i en linie efter sidste linie. Den eksisterer ikke.

Jeg har disse to:
<td><input type="submit" value="Videre >">
<input type="hidden" name="MM_insert" value="form2">

og jeg har prøvet flere med samme resultat.

Skal den hedde sådan her:  name="MM_insert"  ?
Avatar billede intel4004 Novice
17. april 2003 - 09:05 #11
jo sorry - foreach mangler en sorry!!! Nej den skulle gerne kun skrive meddelelsen for de felter hvor de er tomme...

Intel4004
Avatar billede Slettet bruger
17. april 2003 - 09:05 #12
Den skriver

Parse error: parse error in /usr/local/..../..../fil.php on line 189

og sidste program (script) linie er 188, så det er da underligt.
Avatar billede intel4004 Novice
17. april 2003 - 09:07 #13
nej du har en <input type="submit" name="submitbutton"> Det er denne du skal bruge i den overordnede if-sætning...
Avatar billede Slettet bruger
17. april 2003 - 09:09 #14
Skal jeg så tilføje name="submitbutton" til denne linie ?

<input type="submit" value="Videre >">

?
Avatar billede intel4004 Novice
17. april 2003 - 09:11 #15
yep!
Avatar billede intel4004 Novice
17. april 2003 - 09:12 #16
Forstår den at du skriver value="Videre >" siden > er et specielt tegn i html (og php)...??
Avatar billede Slettet bruger
17. april 2003 - 09:12 #17
intel4004 skrev:  sorry - foreach mangler en sorry

Men hvor skal den afsluttende stå ?
Avatar billede Slettet bruger
17. april 2003 - 09:14 #18
Ja videre > virker fint nok, og det gjorde Næste > også, men da jeg trode det var den knap der skulle bruges til check, så rettede jeg det så der ingen dk bogstaver var i ;) Og så var det slet ikke det.

Nu har jeg fået den til at køre videre, men nu skriver den ingen fejl ved tomme felter, så den afsluttende } står nok forkert.
Avatar billede intel4004 Novice
17. april 2003 - 09:14 #19
Den manglede } skal stå lige før for-løkken...
Avatar billede Slettet bruger
17. april 2003 - 09:15 #20
Hvor skal den være:
if (isset($_POST['submitbutton']))
{
  $post_empty = 0;
  foreach ($_POST as $key => $value) {
      if ($_POST[$key] == "" || $_POST[$key] == NULL)
      {
        $post_emptykey[] = $key;
        $post_empty++;
      }
  for ($i = 0; $i < $post_empty; $i++)
  {
      echo 'Du skrev ikke noget i '.$post_emptykey[$i].'!<br>';
  }
} --->>> her har jeg sat den ;)
}
Avatar billede sukos Juniormester
17. april 2003 - 09:15 #21
Jeg har selv rodet med det på et tidspunkt, men fandt ikkerigtig ud af det :O)

Resultatet blev ligesom flg. gi'r:

<?php
if(isset($_POST["felt1"])) {

$post_empty = 0;
foreach ($_POST as $key => $value) {
    if ($_POST[$key] == "" || $_POST[$key] == NULL)
    {
    $post_emptykey[] = $key;
    $post_empty++;
    }

    for ($i = 0; $i < $post_empty; $i++)
    {
    echo 'Du skrev ikke noget i '.$post_emptykey[$i].'!<br>';
        }
    }
}
?>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
Test for tomme input<br>
<table border="0"><tr>
    <td>Felt 1:</td>
    <td class="small"><input type="text" name="felt1"></td>
</tr><tr>
    <td>Felt 2:</td>
    <td class="small"><input type="text" name="felt2"></td>
</tr><tr>
    <td>Felt 3:</td>
    <td class="small"><input type="text" name="felt3"></td>
</tr><tr>
    <td>Din email:</td>
    <td><input type="text" name="email"></td>
</tr></table>
<input type="submit" value="Tjek felter">
</form>
Avatar billede Slettet bruger
17. april 2003 - 09:15 #22
Ok.
Avatar billede Slettet bruger
17. april 2003 - 09:17 #23
Nu skriver den ikke parse error mere, men udskriver heller ikke at feltet er tomt, øv ;)
Avatar billede intel4004 Novice
17. april 2003 - 09:19 #24
og du har name="submitbutton" med??
Avatar billede intel4004 Novice
17. april 2003 - 09:21 #25
Jeg er pludselig i tvivl om formen sender felterne via POST hvis de er tomme. Hvis ikke eksisterer de slet ikke i $_POST-arrayet :(

intel4004
Avatar billede Slettet bruger
17. april 2003 - 09:23 #26
Jeg har nu:

<form method="post" name="form2"

og

if (isset($_POST['form2']))
{
  $post_empty = 0;
  foreach ($_POST as $key => $value) {
      if ($_POST[$key] == "" || $_POST[$key] == NULL)
      {
        $post_emptykey[] = $key;
        $post_empty++;
      }
  }
  for ($i = 0; $i < $post_empty; $i++)
  {
      echo 'Du skrev ikke noget i '.$post_emptykey[$i].'!<br>';
  }

}

Skulle det så ikke være OK ?
Avatar billede Slettet bruger
17. april 2003 - 09:24 #27
Ok, men hvis ikke den sender dem, er de jo tomme, eller ?
Avatar billede Slettet bruger
17. april 2003 - 09:32 #28
Hvis jeg skriver:

if (!isset($_POST['form2']))

får jeg:

Warning: Cannot add header information - headers already sent by (output started at /usr/local/apache/htdocs/biograf/bestil.php:60) in /usr/local/apache/htdocs/biograf/bestil.php on line 102

og linie 102 er:

  header(sprintf("Location: %s", $insertGoTo));
Avatar billede Slettet bruger
17. april 2003 - 09:34 #29
og først udskriver den alle de tomme felter, så det virker. Nu skal det der header bare rettes, men jeg er nok ikke god nok til at hitte ud af det selv.
Avatar billede Slettet bruger
17. april 2003 - 09:55 #30
Hvis det hjælper noget kan hele koden til siden ses her:

http://www.uups.dk/bestil.phps
Avatar billede Slettet bruger
17. april 2003 - 10:33 #31
Har I helt opgivet ;)
Avatar billede intel4004 Novice
17. april 2003 - 10:41 #32
Fejlen med header() er fordi der er skrevet noget tekst til browseren. Har du en header efter mit kodeeksempel eller får du en fejlmeddelelse inden header-fejlen? En fejl-meddelelse er jo også tekst sendt fra php-parseren - derfor kan der forekomme fejl ved header() senere i scriptet...
Avatar billede Slettet bruger
17. april 2003 - 10:44 #33
Det virker sådan nu, at er der et tomt felt så skriver den at man skal skrive i det felt og så kommer fejlen.

Jeg ved ikke hvormeget du er inde i dete, men jeg lagde en link til hele siden så I kan se hvad der sker. Det er lidt kompliseret at se i synes jeg. Siden er genereret maf Dreamweaver MX og jeg har så rettet til i den derefter.
Avatar billede intel4004 Novice
17. april 2003 - 11:09 #34
Du skal bare flytte mit kode eksempel nedunder din header(), men før html'en... Der er en echo før din header() - det vil ikke fungere da du benytter en location: i headeren... Den kan ikke sende denne header-type hvis der allerede er skrevet noget til browseren...

Intel4004
Avatar billede Slettet bruger
17. april 2003 - 11:14 #35
Det har jeg prøvet og igen lige under location .... header linien, men så checker den ingenting og der kommer heller ingen fejl. Hmmm, det er da vist mere besværligt end jeg lige regnede med.
Avatar billede Slettet bruger
17. april 2003 - 11:24 #36
Nu har jeg prøvet at flytte noget rundt med dit eksempel, og lige så snart det er uden for denne rutine:

if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"] == "form2")) {


checker den ikke noget. Og inde i rutinen kommr header fejlen. Så det driller ;)
Avatar billede Slettet bruger
17. april 2003 - 12:59 #37
Nå. Jeg slog Warnings fra i php.ini og det løste så mit problem i denne omgang. Om det så starter nogle andre problemer vil tiden vise.

intel4004 > Du får de 60 point for besværet og idén.

Du har vel ikke lige en idé også til det email check jeg også skrev om ? Så kan jeg jo altid lave et spørgsmål med point, hvis det også løses.

Tak for hjælpen.
Avatar billede intel4004 Novice
17. april 2003 - 15:26 #38
Ang. mail-tjeck brugte jeg selv denne her engang:

preg_match("/^([\w|\.|\-|_]+)@([\w||\-|_]+)\.([\w|\.|\-|_]+)$/i", $email)

Denne linie tjekker om strengen $email tjekker om den består at de korrekte tegn... Smid den i en if-sætning...

Intel4004
Avatar billede Slettet bruger
17. april 2003 - 16:02 #39
Jeg forsøgte mig med noget der ligner dette, og på lidt forskellige måder, men det bevirker at den slet ikke loader siden :-)

if preg_match("/^([\w|\.|\-|_]+)@([\w||\-|_]+)\.([\w|\.|\-|_]+)$/i", $email)
{
$_SESSION['email'] = $_POST['email'];
}
else {
echo 'Din e-mail adresse er ikke gyldig.';
}


Hvad gør jeg forkert ?
Avatar billede Slettet bruger
17. april 2003 - 16:06 #40
Nårh, jeg havde lige glemt at sætte $email til noget :-)

Men den checker ikke på den måde jeg har lavet det.
Avatar billede Slettet bruger
18. april 2003 - 07:09 #41
Den laver simpelthen en blank side når det stykke er sat ind. Underligh, ikk' ?
Avatar billede Slettet bruger
18. april 2003 - 07:48 #42
Tak for forsøgene. Det ser ud til at denne virker. Den er lidt anderledes:

$regexp = "/^\w(\.?[\w-])*@\w(\.?[-\w])*\.[a-z]{2,4}$/i";
if(preg_match($regexp, $email)) {
$_SESSION['email'] = $_POST['email'];
} else {
echo 'Din e-mail adresse er ikke gyldig.';
}
Avatar billede intel4004 Novice
18. april 2003 - 10:35 #43
Du sætter den bare ind i en if-sætning:

if (preg_match("/^([\w|\.|\-|_]+)@([\w||\-|_]+)\.([\w|\.|\-|_]+)$/i", $email))
{
  // email adresse er ok
}
else
{
  // email adresse er ikke ok
}
Avatar billede Slettet bruger
18. april 2003 - 10:45 #44
Det ser ud til at det også var det jeg gjorde, men det ville ikke samarbejde, men jeg fandt så den anden og den virker, så jeg er glad for den :-)

Men bortset fra det vil jeg da gerne give dig noget for din ulejlighed. Man skulle jo gerne kunne komme igen ;)
Avatar billede Slettet bruger
18. april 2003 - 10:46 #45
Nårh nej, det er jo lige et sæt paranteser for lidt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester