Toon posts:

[php] probleem met if statements

Pagina: 1
Acties:
  • 186 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Goeiemorgen,

ik heb een pagina die zichzelf elke keer refresht en dan de variabelen weer meeneemt naar zichzelf.
Ik gebruik op de pagina if statements om te kijken of de variabele geset is, zodat je elke keer een ander scherm te zien krijgt.
Bij het laatste gedeelte van het script wil het niet meer lukken. Dan 'sorteerd' hij de variabelen niet meer uit elkaar. Dit stuk script heb ik apart gepakt en nagegeken, maar kan niets vinden:
PHP:
1
<? $dbnaam='localweb'; mysql_connect(); $dbserver= mysql_connect(); mysql_select_db('localweb', $dbserver); $nr ='146'; $sql2 = "SELECT * FROM werknemers WHERE nr='{$nr}' "; $query2 = mysql_query($sql2); $naam = mysql_fetch_assoc($query2); $omschr = 'omschrijving'; $mt = 'maaltijd'; // optie 1 if (!isset ($optie1) AND isset ($mt) AND isset ($omschr)) {      echo "Hallo {$naam['voornaam']} {$naam['tussenv']} {$naam['achternaam']}.<br><br>";      echo "U heeft gekozen voor: <b>$omschr</b> met als hoofdgerecht <b>$mt</b><br><br>";      $sql = "SELECT * FROM meten WHERE omschrijving='$omschr' AND mt='$mt'";      $query = mysql_query($sql);      $optie1 = mysql_fetch_assoc($query);      $optienr1 = $optie1['optie1'];      $sql3 = "SELECT * from mopties WHERE optienummer='$optienr1'";      $query3 = mysql_query($sql3);         if ($optienr1 == 0 ) { echo "U heeft geen verdere opties meer. Klik <a href='eten2.php?nr={$nr}&amp;omschr={$omschr}&amp;mt={$mt}'>hier</a> om uw maaltijd te controleren &amp; te bestellen.<br>"; }        else {      echo "Selecteer de mogelijke optie: ";      echo "<FORM ACTION='eten.php?' method='post'><SELECT NAME='optie1'>";          if ($optienr1 == 1 ) {      while ($optie = mysql_fetch_assoc($query3))      { echo "<option value='{$optie['omschrijving']}'>{$optie['omschrijving']}</option>\n"; }      echo "</SELECT><input type='hidden' name='nr' value='$nr'><input type='hidden' name='mt' value='$mt'><input type='hidden' name='omschr' value='$omschr'> <INPUT TYPE='submit' VALUE='Volgende'></FORM>"; }     } } // optie 2 if (!isset ($optie2) AND isset ($optie1) AND isset ($mt) AND isset ($omschr)) {      echo "Hallo {$naam['voornaam']} {$naam['tussenv']} {$naam['achternaam']}.<br><br>";      echo "U heeft gekozen voor: <b>$omschr</b> met als hoofdgerecht <b>$mt</b>.<br> De eerste optie is: <b>$optie1 </b> <br>";      $sql = "SELECT * FROM meten WHERE omschrijving='$omschr' AND mt='$mt'";      $query = mysql_query($sql);      $optie2 = mysql_fetch_assoc($query);      $optienr2 = $optie2['optie2'];      $sql3 = "SELECT * from mopties WHERE optienummer='$optienr2'";      $query3 = mysql_query($sql3);         if ($optienr2 == 0 ) { echo "U heeft geen verdere opties meer. Klik <a href='eten2.php?nr={$nr}&amp;omschr={$omschr}&amp;mt={$mt}'>hier</a> om uw maaltijd te controleren &amp; te bestellen.<br>"; }        else {      echo "Selecteer de mogelijke optie: "; ?>               <FORM ACTION="eten.php?" method="post">      <SELECT NAME="optie1">          <?php      if ($optienr2 == 1 ) {      while ($optie = mysql_fetch_assoc($query3))      { echo "<option value='{$optie['omschrijving']}'>{$optie['omschrijving']}</option>\n"; }      echo "</SELECT><input type='hidden' name='nr' value='$nr'><input type='hidden' name='mt' value='$mt'><input type='hidden' name='omschr' value='$omschr'><input type='hidden' name='optie1' value='$optie1'> <INPUT TYPE='submit' VALUE='Volgende'></FORM>"; }     } } ?> ?>

het lijkt veel, maar het is de hele tijd hetzelfde :)
Kan iemand me helpen?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

eerst maar eens indenten
PHP:
1
<? $dbnaam='localweb';mysql_connect(); $dbserver= mysql_connect(); mysql_select_db('localweb', $dbserver); $nr ='146'; $sql2 = "SELECT * FROM werknemers WHERE nr='{$nr}' "; $query2 = mysql_query($sql2); $naam = mysql_fetch_assoc($query2); $omschr = 'omschrijving'; $mt = 'maaltijd'; // optie 1 if (!isset ($optie1) AND isset ($mt) AND isset ($omschr)) {          echo "Hallo {$naam['voornaam']} {$naam['tussenv']} {$naam['achternaam']}.<br><br>";          echo "U heeft gekozen voor: <b>$omschr</b> met als hoofdgerecht <b>$mt</b><br><br>";          $sql = "SELECT * FROM meten WHERE omschrijving='$omschr' AND mt='$mt'";          $query = mysql_query($sql);          $optie1 = mysql_fetch_assoc($query);          $optienr1 = $optie1['optie1'];          $sql3 = "SELECT * from mopties WHERE optienummer='$optienr1'";          $query3 = mysql_query($sql3);             if ($optienr1 == 0 )     {         echo "U heeft geen verdere opties meer. Klik <a href='eten2.php?nr={$nr}&amp;omschr={$omschr}&amp;mt={$mt}'>hier</a> om uw maaltijd te controleren &amp; te bestellen.<br>";     }            else     {              echo "Selecteer de mogelijke optie: ";              echo "<FORM ACTION='eten.php?' method='post'><SELECT NAME='optie1'>";                  if ($optienr1 == 1 )         {                  while ($optie = mysql_fetch_assoc($query3))                  {                 echo "<option value='{$optie['omschrijving']}'>{$optie['omschrijving']}</option>\n";             }                  echo "</SELECT><input type='hidden' name='nr' value='$nr'><input type='hidden' name='mt' value='$mt'><input type='hidden' name='omschr' value='$omschr'> <INPUT TYPE='submit' VALUE='Volgende'></FORM>";         }         } } // optie 2 if (!isset ($optie2) AND isset ($optie1) AND isset ($mt) AND isset ($omschr)) {          echo "Hallo {$naam['voornaam']} {$naam['tussenv']} {$naam['achternaam']}.<br><br>";          echo "U heeft gekozen voor: <b>$omschr</b> met als hoofdgerecht <b>$mt</b>.<br> De eerste optie is: <b>$optie1 </b> <br>";          $sql = "SELECT * FROM meten WHERE omschrijving='$omschr' AND mt='$mt'";          $query = mysql_query($sql);          $optie2 = mysql_fetch_assoc($query);          $optienr2 = $optie2['optie2'];          $sql3 = "SELECT * from mopties WHERE optienummer='$optienr2'";          $query3 = mysql_query($sql3);             if ($optienr2 == 0 )     {         echo "U heeft geen verdere opties meer. Klik <a href='eten2.php?nr={$nr}&amp;omschr={$omschr}&amp;mt={$mt}'>hier</a> om uw maaltijd te controleren &amp; te bestellen.<br>";     }            else     {              echo "Selecteer de mogelijke optie: ";         ?>                       <FORM ACTION="eten.php?" method="post">              <SELECT NAME="optie1">                  <?php              if ($optienr2 == 1 )         {                  while ($optie = mysql_fetch_assoc($query3))                  {                 echo "<option value='{$optie['omschrijving']}'>{$optie['omschrijving']}</option>\n";             }                  echo "</SELECT><input type='hidden' name='nr' value='$nr'><input type='hidden' name='mt' value='$mt'><input type='hidden' name='omschr' value='$omschr'><input type='hidden' name='optie1' value='$optie1'> <INPUT TYPE='submit' VALUE='Volgende'></FORM>";         }         } } ?> ?>

en kijk dan gewoon eens naar je phpinfo() of $HTTP_POST_VARS

Doet iets met Cloud (MS/IBM)


  • Grum
  • Registratie: Juni 2001
  • Niet online
AUB indent je code :(

zou je je code aub even in de leesbare vorm zoals
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if(...)
{
    //...
}
elseif(...)
{
    //...
}
else
{
    //...
}

while(...)
{
    //...
}

for(...)
{
    //...
}

kunnen omtikken ?
dan is alles nl STUKKEN leesbaarder

edit:
WHOEI! D2k 0wnage :)

Verwijderd

Topicstarter
Ok, ik heb het inmiddels in mn eigen script ook aangepast (net zoals D2K).
Het is idd een stukje overzichtelijker :) Maar dat andere maakt me ei'k niet zo heel veel uit.

Het probleem is dus dat (op de originele pagina, dit is slechts een stukje) het bovenste gedeelte het wel doet, met dezelfde if statements, maar dit gefet gewoon problemen. Er komt 2x op mn scherm te staan:
[code]U heeft gekozen voor: maaltijd, etc.
De eerste optie is:
U heeft geen ~[/code]
terwijl dit maar 1x moet zijn...
ik heb al diverse dingen geprobeerd, maar niet helpt :(

  • Grum
  • Registratie: Juni 2001
  • Niet online
enorm vluchtig gekeken

maar ik zie de eerste keer
code:
1
if (!isset ($optie1) AND isset ($mt) AND isset ($omschr))

en de 2e keer
code:
1
if (!isset ($optie2) AND isset ($optie1) AND isset ($mt) AND isset ($omschr))

klopt dit ? :)

[edit]

wrom doe je btw 'AND isset ($mt) AND isset ($omschr)' ?? je set die dingen boven in je code :)

Verwijderd

Topicstarter
Op woensdag 13 maart 2002 10:11 schreef Grum het volgende:
enorm vluchtig gekeken

maar ik zie de eerste keer
code:
1
if (!isset ($optie1) AND isset ($mt) AND isset ($omschr))

en de 2e keer
code:
1
if (!isset ($optie2) AND isset ($optie1) AND isset ($mt) AND isset ($omschr))

klopt dit ? :)
Ja, hij moet als de eerste optie nog niet geset is, uitvoeren wat daaronder staat.
Dan zal hij kijken of optie 1 geset is, en optie2 nog niet (2e regel) en voert uit wat daar weer onder staat.

ipv dat hij het dus achterelkaar doet, doet hij het tegelijker tijd!!
Dit werkt bij andere gedeeltes wel, maar hier niet :(

edit:

$mt en $omschr worden in het 'hoofdscript' ook op dezelfde manier achterelkaar geset, maar om te debuggen, heb ik dit stukje in een ander scriptje gefietst. :)

  • Grum
  • Registratie: Juni 2001
  • Niet online
mja (no offence) maar ik krijg hoofdpijn van het staren naar deze code :)

Bv hier:
code:
1
2
3
4
5
6
7
8
9
10
11
$dbnaam='localweb';                      <-- gebruik je niet ?
mysql_connect();                          <-- wat moet die hier ?
$dbserver= mysql_connect();                <-- staat hier ook al
mysql_select_db('localweb', $dbserver);        <-- je set der een var vor en dan gebruik je em niet ?
$nr ='146';
$sql2 = "SELECT * FROM werknemers WHERE nr='{$nr}' "; <-- waarom de {}, waarom * ?
$query2 = mysql_query($sql2);                <-- moeten die '2' aanhangsels nou ? :(
$naam = mysql_fetch_assoc($query2);          <-- :(

$omschr = 'omschrijving';                    <-- waarom set je deze hier en ga je ze 
$mt = 'maaltijd';                        <-- hieronder met isset kijken of ze der zijn ?

waarom niet iets als ?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$theHost   = 'localhost';
$theUser   = 'root';
$thePass   = '';
$theDB     = 'localweb';

$theLink   = mysql_connect($theHost, $theUser, $thePass);
         mysql_select_db($theDB, $theLink);

$theNr       = 146;
$theOmschrijving = 'omschrijving'; 
$theMaaltijd     = 'maaltijd'; 

$theQuery  = "SELECT voornaam, tussenv, achternaam FROM werknemers WHERE nr = $theNr"; 
$theResult = mysql_query($theQuery, $theLink);

list($theVoornaam. $theTussenv,  $theAchternaam) = mysql_fetch_row($theResult);

das toch VEEL netter ?

Verwijderd

Topicstarter
Op woensdag 13 maart 2002 10:20 schreef Grum het volgende:
mja (no offence) maar ik krijg hoofdpijn van het staren naar deze code :)

Bv hier:
code:
1
2
3
4
5
6
7
8
9
10
11
$dbnaam='localweb';                      <-- gebruik je niet ?  //mjah ben ook maar een n00b :)
mysql_connect();                          <-- wat moet die hier ?     // geen id ei'k, nu ik er naar kijk
$dbserver= mysql_connect();                <-- staat hier ook al       // jah
mysql_select_db('localweb', $dbserver);        <-- je set der een var vor en dan gebruik je em niet ?     // n00b!
$nr ='146';
$sql2 = "SELECT * FROM werknemers WHERE nr='{$nr}' "; <-- waarom de {}, waarom * ?     // soms werkt het niet goed als je geen {} om vars zet
$query2 = mysql_query($sql2);                <-- moeten die '2' aanhangsels nou ? :(    // ja, ik wil adhv een nr gegevens opzoeken, en d8 dat een aparte query nodig was :)
$naam = mysql_fetch_assoc($query2);          <-- :(

$omschr = 'omschrijving';                    <-- waarom set je deze hier en ga je ze 
$mt = 'maaltijd';                        <-- hieronder met isset kijken of ze der zijn ?   //omdat dit script uit een ander (groter) script komt, maar dit stk geeft problemen.

  • Grum
  • Registratie: Juni 2001
  • Niet online
zie m'n edit

Verwijderd

Topicstarter
Ik heb het al veranderd, scheelt een stukkie text :)

Maar das het probleem niet :)

(nofi, errug thx dat je me wilt helpen!!)

Verwijderd

Topicstarter
Als je
PHP:
1
<?//optie 2if (!isset ($optie2) AND enz. ?>

veranderd in
PHP:
1
<?if (isset ($optie2) AND enz. ?>

ziet hij wel dat hij de 2e optie niet moet laten zien, immers, deze is niet geset. Waarom doet hij dit dan niet goed als ik er een ! voor zet?

  • Arx
  • Registratie: November 2001
  • Laatst online: 31-08 15:22

Arx

Two Thoughts Ahead!

<?//optie 2if (!isset ($optie2) AND enz. ?>

Ohhh....

voorbeeld 1 - single expression:

if (expr) {
statement
}

voorbeeld 2 - double expression AND:
//Een vergelijking is '=='
//Let op omdat we meerdere expressies gebuiken moet over alle expressie haakjes staan.. We beginnen met (( en eindigen met ))

if ((expr1==blabla) && (expr2==blabla)) {
statement
}

voorbeeld 2 - double expression OR:

if ((expr1==blabla) || (expr2==blabla)) {
statement
}

voorbeeld 3 - multiple expression:

if ((expr1==blabla) || (expr2==blabla) && (expr3==blabla)) {
statement
}

(!expr1) is het zelfde als (expr1==false)

:)

zo...

Copywight 2000,2001,2002,2003,2004,2005,2006,2007 Arx. All wights wesewved. | PS Network tag -> Arx_nl


Verwijderd

Topicstarter
Het kan goed zijn wat je zegt, maar waarom werkt het dan de ene keer zonder dubbele (()) en de andere keer met?

ik ga het nu meteen ff testen

Als ik opgeef
PHP:
1
<?if ((optie2==false) AND ...?>

dan geeft een warning, dat $optie2 een undefined variabele is...

ik kan ook wel het hele script posten, het is alleen wel heel lang...

  • Grum
  • Registratie: Juni 2001
  • Niet online
de dubbele ()'s zijn ook niet nodig.. dat is alleen nodig als jij bepaalde dingen wil groupen

bv:

if($i > 10 && ($i > 14 || $i < 12))

hier staat: als $i groter dan 10 en OF $i groter dan 14 OF kleiner dan 12

dus (ervanuitgaande dat i een int is) kan ie zijn:

11, 15+

dit is niet het zelfde als:

if($i > 10 && $i > 14 || $i < 12)

hier staat: als $i groter dan 10 en $i groter dan 14 of $i kleiner dan 12

dit is voor ELKE $i waar, want als $i groter is dan 14 dan is $i ook groter dan 10, dus groter dan 14 kan je weglaten en $i is ALTIJD of kleiner dan 12 OF groter dan 10 :)

  • Grum
  • Registratie: Juni 2001
  • Niet online
daNpy het volgende: dan geeft een warning, dat $optie2 een undefined variabele is...

zou je der ook niet een $ voor zetten ? :)

je gebruikt toch btw wel error_reporting(E_ALL); he ?

Verwijderd

Topicstarter
Op woensdag 13 maart 2002 11:39 schreef Grum het volgende:
daNpy het volgende: dan geeft een warning, dat $optie2 een undefined variabele is...

zou je der ook niet een $ voor zetten ? :)

je gebruikt toch btw wel error_reporting(E_ALL); he ?
Er staat een $ voor... anders was het undefind constant oid.

Ik gebruik error_reporting, maar ik denk dat hij niet goed staat....
staat na elke 'if (blaat) { statement }s'

  • Grum
  • Registratie: Juni 2001
  • Niet online
Je moet error_reporting op E_ALL zetten dan krijg je ALLES wat er ook maar ranzig is in je source te horen van php.

voor elke 'if {' ? dit is toch welk een 'if (' <-- geen accolade ? :)

en in et stukje code wat je intikte miste de $ wel .. vandaar mijn opmerking

Verwijderd

Topicstarter
Op woensdag 13 maart 2002 11:51 schreef Grum het volgende:
Je moet error_reporting op E_ALL zetten dan krijg je ALLES wat er ook maar ranzig is in je source te horen van php.

voor elke 'if {' ? dit is toch welk een 'if (' <-- geen accolade ? :)

en in et stukje code wat je intikte miste de $ wel .. vandaar mijn opmerking
ow ja, nu zie ik het ook. Maar die staat er gewoon voor hoor. :)

Ik kom er echt niet uit :(

klote statements :o
(De ene keer wel en de andere keer nie)

  • Grum
  • Registratie: Juni 2001
  • Niet online
Op woensdag 13 maart 2002 11:54 schreef daNpy het volgende:
(De ene keer wel en de andere keer nie)
Nee .. het is niet 'random' het heeft een reden.

Coden is gewoon 100% logica .. der zijn geen 'vreemde' dingen. Alles wat er fout gaat gaat door je eigen baksel fout. (Ok ik ga er vanuit dat de taal die je gebruikt 'bug'-vrij is)

Verwijderd

Topicstarter
Op woensdag 13 maart 2002 11:57 schreef Grum het volgende:

[..]

Nee .. het is niet 'random' het heeft een reden.

Coden is gewoon 100% logica .. der zijn geen 'vreemde' dingen. Alles wat er fout gaat gaat door je eigen baksel fout. (Ok ik ga er vanuit dat de taal die je gebruikt 'bug'-vrij is)
Dat d8 ik dus ook, het zal ongetwijfeld ook mijn fout zijn, maar ik vind hem dus niet. Ben er nu al 3 dagen mee bezig!! En het lukt gewoon niet..

Verwijderd

Topicstarter
Sorry dat ik hem omhoogschop maar ik zit echt al 3 dagen op die code te turen, + dat ik er meer mensen bij heb gehaald en mezelf rot gezocht...

Wil iemand misschien de hele code hebben?
Misschien is het dan duidelijker...

  • Grum
  • Registratie: Juni 2001
  • Niet online
gewoon debuggen

kijk eerst WAAR het precies fout gaan, kijk dan wat er nodig is om het fout te laten gaan en kijk vervolgens waar je het zo hebt gemaakt dat het fout gaat.

vergeet het niet te fixen dan :P

Verwijderd

Topicstarter
Op woensdag 13 maart 2002 14:11 schreef Grum het volgende:
gewoon debuggen

kijk eerst WAAR het precies fout gaan, kijk dan wat er nodig is om het fout te laten gaan en kijk vervolgens waar je het zo hebt gemaakt dat het fout gaat.

vergeet het niet te fixen dan :P
Dat probeer ik al 3 dagen :P

Ik weet waar het fout gaat, maar kan de 'exacte'bug niet vinden... en dat vind ik zo ^%%$(.

Als er iets niet werkt -> Kan.
Maar er moet wel een oplossing zijn
Pagina: 1