Avatar billede Slettet bruger
27. september 2004 - 07:35 Der er 24 kommentarer og
1 løsning

Kontrol over if sætning

Hej.

I dette spørgasmå:

http://www.eksperten.dk/spm/541261

fik jeg en løsning, som umiddelbart er ok.

Jeg bruger det på denne måde:

if ($post_empty == 0) {
  $insertSQL = sprintf("INSERT INTO ........ en masse kode


Desværre virker det ikke hvis man trykker på opdatér i browseren.

Så er if-sætningen sand og udfører koden derunder, og det må den ikke før alle felter er udfyldt.

Hvordan kan jeg rette op på det ?

På forhånd tak.
Avatar billede webcreator Nybegynder
27. september 2004 - 07:44 #1
Du kan skrive (!$post_empty) i stedet for ($post_empty == 0).

Kan vi få lidt mere kode? Hvis vi skal hjælpe, så er det nemmest når vi kender navne på alle variabler mm.

Men som udgangspunkt kan du tjekke, om der er noget i en variabel, ved blot at skrive :

if ($var1 && $var2 && $var2) {
    echo "Alle variabler indeholder et eller andet";
} else {
    echo "Mindst én af variablerne var tomme";
}
Avatar billede Slettet bruger
27. september 2004 - 08:01 #2
Det var for ikke at gentage at jeg lavede en link til det andeet spørgsmål. Der er koden der checker om felterne er udfyldt. Jeg prøver lige at lege med dit eksempel.
Avatar billede Slettet bruger
27. september 2004 - 08:07 #3
(!$post_empty) giver det samme. Den gemmer i basen når jeg trykker opdater. Det vil jeg meget gerne undgå.
Avatar billede Slettet bruger
27. september 2004 - 08:34 #4
Nu har jeg forsøgt lidt forskelligt igen, og enten skriver den i databasen når den skal, og så gør den det også ved opdatering, eller også det modsatte. Jeg kan ikke finde en kombination der ikke gemmer ved opdatering.
Avatar billede erikjacobsen Ekspert
27. september 2004 - 09:22 #5
Du kan gøre det på denne måde

1) Din form bruger POST
2) Den går til en side, der gemmer data i databasen
3) Denne side redirecter til en side, der viser et svar til brugeren, evt ved at hente noget i databasen

På grund af denne redirect vil en opdater kun opdater "vis et svar" siden, og ikke
den side, der gemmer i databasen.

(hvis jeg ellers har forstået dig korrekt)
Avatar billede Slettet bruger
27. september 2004 - 09:28 #6
Ja du har forstået det, bortset fra at jeg ikke har flere sider. Det foregår på een side. Sidst jeg lavede noget lignende, blev jeg nødt til, at lave det på to sider for netop at undgå, at den gemmer i utide.

Men jeg ville gerne have det til at virke på een side. Jeg kan bare ikke finde en kombination der udelukker opdatering og så gemmer når alle felter er udfyldt og der trykkes på submit knappen.
Avatar billede erikjacobsen Ekspert
27. september 2004 - 09:30 #7
Siden i 2) kan sagtens være samme side som i 3) - det er redirecten der er vigtig.
Avatar billede Slettet bruger
27. september 2004 - 09:32 #8
Ok. Form og det hele er på samme side. og jeg kan ikke finde nogen redirect.
Avatar billede Slettet bruger
27. september 2004 - 09:43 #9
Det starter sådan her:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

if (!isset($_POST['form1']))
{
  $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 "<center><font color='#FF0000'>";
  echo 'Du skrev ikke noget i '.$post_emptykey[$i].'!<br><br>';
  echo "</font></center>";
  }
}
if ($post_empty == 0) {


if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {


if (!isset($_POST['form1']))
{
  $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 "<center><font color='#FF0000'>";
  echo 'Du skrev ikke noget i '.$post_emptykey[$i].'!<br><br>';
  echo "</font></center>";
  }
}

og det går galt her:

if ($post_empty == 0) {
  $insertSQL = sprintf("INSERT INTO ...... en masse linier kode
Avatar billede Slettet bruger
27. september 2004 - 09:44 #10
Nå det gik vist helt galt her
Avatar billede Slettet bruger
27. september 2004 - 09:45 #11
Sådan skulle det have været:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

if (!isset($_POST['form1']))
{
  $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 "<center><font color='#FF0000'>";
  echo 'Du skrev ikke noget i '.$post_emptykey[$i].'!<br><br>';
  echo "</font></center>";
  }
}
if ($post_empty == 0) {
  $insertSQL = sprintf("INSERT INTO ...... en masse linier kode
Avatar billede erikjacobsen Ekspert
27. september 2004 - 09:56 #12
Så skal du ca. sådan her

if ($post_empty == 0) {
  $insertSQL = sprintf("INSERT INTO ...... en masse linier kode
  header("Location: sammefil.php?vis=$id");
  exit;
}

hvor $id er nummeret på den indsatte, og vis gør, at der kommer et passende
svar til kunden (du skal have en ny if, der checker på om vi kommer ind på denne
måde).

Jeg har ikke kode, jeg kan vise dig nu, men jeg bruger det selv for tiden ;)
Avatar billede Slettet bruger
27. september 2004 - 09:59 #13
Mener du at:

  header("Location: sammefil.php?vis=$id");
  exit;

Skal ind i bunden lige før denne:

}

Giver det ikke en header already sent .... fejl ? Jeg synes jeg har prøvet noget lignende, men jeg prøver lige efter kaffepausen :-)
Avatar billede Slettet bruger
27. september 2004 - 10:40 #14
Hmmm, det virker, men ikke som det skal. Den glemmer simpelthen alle variabler ved at kalde den. Jeg har de fleste af felterne i sessions og dem glemmer den ved at bruge den header i bunden.
Avatar billede Slettet bruger
27. september 2004 - 10:43 #15
Rolig nu. Det er vist mig der er et fjols. Tester lige lidt mere.
Avatar billede Slettet bruger
27. september 2004 - 10:44 #16
Det ser ud til at virke Erik. TAK. Vil du svare, eller ? ;-)
Avatar billede Slettet bruger
27. september 2004 - 10:56 #17
Men jeg får en fejl i denne:

header("Location: sammefil.php?vis=$id");

når alle felter ikke er udfylt og den ryger i det check. Så skriver den:

Warning: Cannot modify header information - headers already sent by .....
Avatar billede erikjacobsen Ekspert
27. september 2004 - 11:01 #18
Hvis alle felter ikke er udfyldt skal det vel ikke sættes ind i databasen, og så
kommer du ikke dertil...?

Men ellers skal dit script selvfølgelig overholde en passende struktur, der sikrer,
at der ikke kommer noget "ud" før det skal. Beregning først, og så al det der HTML
bagefter.
Avatar billede Slettet bruger
27. september 2004 - 11:04 #19
Det er jo en formular og hvis man glemmer et felt ryger den i:

if (!isset($_POST['form1']))
{
  $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 "<center><font color='#FF0000'>";
  echo 'Du skrev ikke noget i '.$post_emptykey[$i].'!<br><br>';
  echo "</font></center>";
  }
}

og så stopper den med den der warning, hvor den før kom med formularen igen og man kunne udfylde resten. Jeg kan ikke se hvorfor den lander helt nede i bunden hvor jeg satte den header ind.
Avatar billede Slettet bruger
27. september 2004 - 11:05 #20
Jo så er den her:
if ($post_empty == 0) {
  $insertSQL = sprintf("INSERT INTO ...... en masse linier kode

jo ikke 0 og den springer gem rutinen over, men lander så i header linien. Den skal nok flyttes uden for den rutine ?
Avatar billede Slettet bruger
27. september 2004 - 11:11 #21
Nej, det gav samme advarsel at sætte den udenfor.
Avatar billede Slettet bruger
27. september 2004 - 11:12 #22
Nu fandt jeg vist det rigtige sted :-)
Avatar billede Slettet bruger
27. september 2004 - 11:15 #23
Det er simpelthen ren luxus nu :-)

TAk for hjælpen. Hvordan nu med at svare ?
Avatar billede erikjacobsen Ekspert
27. september 2004 - 11:19 #24
Nej tak, jeg samler slet ikke på point.
Avatar billede Slettet bruger
27. september 2004 - 11:20 #25
Jamen tusind tak for hjælpen.
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