[PHPgenest if-statement geeft altijd resultaat van eerste if

Pagina: 1
Acties:

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Voor een check op een aantal invoer velden heb ik een aantal ifstatements gemaakt, deze controleren of de velden zijn ingevoerd en zoniet geven ze een melding terug.
Dit werkt goed (kan ook niet heel veel fout aan gaan).

Nu is het zo dat ik een dropdownlist heb met een aantal opties en daaronder een aantal invoervakjes.
Het idee hierachter is dat als een waarde niet in de dropdownlist staat hij toegevoegd kan worden.
De check die ik nu heb controlleert of er iets staan in de $_POST van de dropdownlist, staat hier niets in dan gaat hij verder met een genest if statement om te kijken of dan de invoervakjes ingevuld zijn.
Hij geeft dit nu wel netjes weer, maar rond de rest van de statements gewoon af en dat is juist niet te bedoeling (hij voert de else op het eind ook uit).

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if ($_POST[telnr] == "") {
echo "U heeft uw telefoonnummer niet ingevuld<BR>";
}
if ($_POST[dropdownlist] == "") {

    if ($_POST[naama]== "") {
    echo "U heeft de naam van de locatie niet ingevuld <BR>";
    }
    if ($_POST[adresa] == "") {
    echo "U heeft het adres van de locatie niet ingevuld <BR>";

}

if ($_POST[user] == "") {
echo "U heeft geen user geselecteerd<BR>";
}
if ($_POST[inhoud] == "") {
echo "U heeft geen inhoud opgegeven<BR>";
}

else {

doe commando...


Ik heb al geprobeerd om het script zo aan te passen dat verder alle gegevens in de else komen te staan van de geneste statement, maar dit werkt natuurlijk ook niet, omdat hij alleen de code na de else uitvoert als er geen keuze in de dropdownlist is gemaakt.

Waarschijnlijk is het heel erg simpel en kijk ik er gewoon overheen, maar waar het probleem nu zit zie ik niet.
voglens mijn gedachtengang zou het wel mogelijk moeten zijn om het op een soortgelijke manier uit te voeren
iemand een idee?

[ Voor 6% gewijzigd door TERW_DAN op 07-04-2005 13:16 ]


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 01-04 11:43

koli-man

Bartender!!!!

Misschien moet je dit eens proberen $_POST['variabele']
en er is ook de functie empty()

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Die else hoort alleen bij de laatste if. Als iets met fouten wil doen, en die else alleen wil uitvoeren als er geen fouten zijn gevonden, dan moet je het anders aanpakken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$fout = false;
if ($iets) {
  echo 'fout 1';
  $fout = true;
}
if ($nogiets) {
  echo 'fout 2';
  $fout = true;
}
//enz..
if (!$fout) {
  //doen wat in jouw else staat
}

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
-NMe- schreef op donderdag 07 april 2005 @ 13:19:
Die else hoort alleen bij de laatste if. Als iets met fouten wil doen, en die else alleen wil uitvoeren als er geen fouten zijn gevonden, dan moet je het anders aanpakken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$fout = false;
if ($iets) {
  echo 'fout 1';
  $fout = true;
}
if ($nogiets) {
  echo 'fout 2';
  $fout = true;
}
//enz..
if (!$fout) {
  //doen wat in jouw else staat
}
Het probleem wat ik dan alleen lijk te hebben is het volgende. Het is niet te zeggen of iets fout is of niet fout is. Als de keuze in een dropdownbox leeg is moeten de invoervelden gevuld zijn, maar als er al een keuze is gemaakt dan is het zo dat die invoervelden daaronder WEL leeg mogen zijn.
Het hangt dus van elkaar af of het leeg mag zijn of niet.
En volgens mij maakt het dan niet uit of het via een if gaat of op jouw manier (tenzij ik gewoon niet snap wat je bedoelt).

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Ik denk dat je niet begrijpt wat ik bedoel. :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$fout = false;
if ($iets) {
  echo 'fout 1';
  $fout = true;
}
if ($nogiets) {
  if ($ditmag) {
    //doe iets
  } else {
    echo 'fout 2';
    $fout = true;
  }
}
//enz..
if (!$fout) {
  //doen wat in jouw else staat
}

Zoals je ziet kun je dus $fout op true zetten wanneer je constateert dat er echt iets mis is gegaan, en op basis van de waarde van $fout kun je dan beslissen of je script verder mag of niet. Zoals jij het had, gaat je script alleen die else in, als $_POST['onderhoud'] gelijk is aan iets anders dan een lege string. Die else slaat dus alleen op die laatste if, en daarom heb je iets in de trant van mijn constructie nodig. :)

Zet trouwens eens error_reporting(E_ALL); boven je script. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 07-05 23:29
Edit: Laat maar, ik heb het probleem niet goed begrepen |:(

[ Voor 74% gewijzigd door Kwistnix op 07-04-2005 13:37 ]


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 11:51
-NMe- schreef op donderdag 07 april 2005 @ 13:31:
Ik denk dat je niet begrijpt wat ik bedoel. :)

PHP:
1
code

Zoals je ziet kun je dus $fout op true zetten wanneer je constateert dat er echt iets mis is gegaan, en op basis van de waarde van $fout kun je dan beslissen of je script verder mag of niet. Zoals jij het had, gaat je script alleen die else in, als $_POST['onderhoud'] gelijk is aan iets anders dan een lege string. Die else slaat dus alleen op die laatste if, en daarom heb je iets in de trant van mijn constructie nodig. :)

Zet trouwens eens error_reporting(E_ALL); boven je script. ;)
Eigenlijk ter aanvullig, maar zelf vind ik het altijd netter om het met een array met foutmeldingen op te lossen. Dan kun je het valideren beter los trekken van daadwerkelijke output. Dat wordt dan zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ($iets) { $ERR[] = 'fout1'; }
if ($ietsanders) { $ERR[] = 'fout2'; }
if ($nogiets)
{
  if ($foo) { $ERR[] = 'fout3'; }
  if ($bar) { $ERR[] = 'fout4'; }
}

if (!isset($ERR))
{
 // doe je ding
} else {
 // display errors
}

Regeren is vooruitschuiven


  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Ik ben weer ietsjes verder denk ik, maar nu ik die foutmeldingen gebruik krijg ik continu parse errors als ik iets in de else statement zet.

In het laatste stuk staan nog een aantal statements genoemd om wat data uit tabellen ofuit de form te halen, en dat vertikt het ding.

Het ding kijkt dus of er fouten inzitten en als die erin zitten raporteert hij die ook. Maar nu moet hij het de onderstaande code uitvoeren.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
if ($_POST['inhoud'] == "") {
echo "U heeft geen inhoud opgegeven<BR>";
$fout = true;
}

if (!$fout) {

    if ($_POST['leverancier'] != "");
         {
         $leverancier2 = mysql_query ("SELECT * FROM leverancier WHERE leverancier = '$leverancier' ");
        while ($row3 = mysql_fetch_array($leverancier2)) 
            {
            $naama = $row3['leverancier'];
            $adresa = $row3['adres'];
            $postcodea = $row3['postcode'];
            $plaatsa = $row3['plaats'];
            $telefoona = $row3['telefoon'];
            $faxa = $row3['fax'];
            }
    
    //if ($_POST['leverancier'] == "");
    else
        {
        $naama = $_POST['naama'];
        $adresa = $_POST['adresa'];
        $plaatsa = $_POST['plaatsa'];
        $postcodea = $_POST['postcodea'];
        $faxa = $_POST['faxa'];
        $telnra = $_POST['telnra'];
        }

        $user = $_POST['user'];
        $emailzoeken = mysql_query ("SELECT * FROM user WHERE user = '$user' ");
        while ($row = mysql_fetch_array($emailzoeken)) {
        $email = $row['email'];
}

$recipient = "$email";
$subject = "Een reactie via internet";
$mail_body = "Het contactformulier werd op " . date("d-m-Y") . " om " . date("H:i") . " uur ingevuld.\n";
$mail_body .= "De volgende gegevens zijn ontvangen:\n\n";
$mail_body .= "Naam: " . $_POST['naam'] . "\n";
$mail_body .= "Adres: " . $_POST['adres'] . "\n";
$mail_body .= "Postcode: " . $_POST['postcode'] . "\n";
$mail_body .= "Plaats: " . $_POST['plaats'] . "\n";
$mail_body .= "Telefoonnummer: " . $_POST['telnr'] . "\n\n";
$mail_body .= "Leverancier: " . $naama . "\n";
$mail_body .= "Inhoud: " . $_POST['inhoud'] . "\n";


$mail_body .= $bericht . "\n\n  Einde van het automatisch gegenereerde bericht";

mail ($recipient, $subject, $mail_body, $headers);
// einde verzend details

echo "bedankt voor uw bestelling";
}
}
?>


Op deze manier krijg ik een error op de ELSE (parse error) die op regel 22 staat. Als ik die else vervang door dat weggecommente if statement dan geeft hij geen error (maar dan haalt hij de gegevens niet meer uit de tabel wat natuurlijk wel de bedoeling is.
Het ding mailt overigens dan wel, dus het onderstaande stuk klopt verder (vanaf het mail commando) .

Het enige waar het fout gaat is het else statement dat hij niet pakt (waarvan ik niet weet waarom omdat hij wel de if statement pakt).

  • Obliterator
  • Registratie: November 2000
  • Laatst online: 30-04 16:09
Wat je volgens mij niet helemaal begrijpt is wat de else precies doet. Die kun je niet zomaar ergens in de code plaatsen zo van als geen van de bovenstaande if's waar is dan....

Kijk de definitie van het if-statement nog eens na zou ik zeggen.

in bovenstaande code hoort denk ik op regel 20 ook nog een } ?

[ Voor 13% gewijzigd door Obliterator op 07-04-2005 15:28 ]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Achter een if statement hoort geen ;

En als je normaal indent, krijg je dit soort problemen niet.

Noushka's Magnificent Dream | Unity


  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Topicstarter
Obliterator schreef op donderdag 07 april 2005 @ 15:26:
Wat je volgens mij niet helemaal begrijpt is wat de else precies doet. Die kun je niet zomaar ergens in de code plaatsen zo van als geen van de bovenstaande if's waar is dan....

Kijk de definitie van het if-statement nog eens na zou ik zeggen.

in bovenstaande code hoort denk ik op regel 20 ook nog een } ?
die } stond er op regel 20 met het gevolg dat ik ook een parse error kreeg.

en het moet toch gewoon mogelijk zijn na een if statement een else statement te zetten (dat lijkt mij het idee achter statements).

  • Sybr_E-N
  • Registratie: December 2001
  • Nu online
Terw_Dan schreef op donderdag 07 april 2005 @ 15:40:
en het moet toch gewoon mogelijk zijn na een if statement een else statement te zetten (dat lijkt mij het idee achter statements).
Ja. Alleen je hebt nu overal halve if-statements staan. Statements welke niet goed worden afgesloten waardoor er weer andere problemen op treden. Een if blok begint met een { en eindigd met een } daarna eventueel een else met { en }. Als je een } vergeet wordt er verkeerd genest en krijg je allerlei problemen die je niet wilt.

Je moet je { en } zo neer planten dat je een duidelijk en overzichtelijk geheel krijgt. Indenten is redelijk persoonlijk, maar kijk even in het MS' Coding Guidelines topic. Daar staat best veel info over dit 'probleem'. Maar zorg er iig voor dat het voor jouw zelf, en andere duidelijk is. Want ik zie overal } en { met halve while's gevolgd door else statements door elkaar heen.

[ Voor 3% gewijzigd door Sybr_E-N op 07-04-2005 15:53 . Reden: even wat taalfoutjes gerepared ]

Pagina: 1