php if else statement staat ergens verkeerd

Status
Niet open voor verdere reacties.

gebruiker78

Gebruiker
Lid geworden
29 jun 2010
Berichten
428
hallo ik heb nu dit:
maar hij zegt dat er een onverwagse else statement is, en als ik op die } klik klopt er inderdaad iets niet want hij gaat dan naar de verkeerde if statement, ik heb veel { en } verplaats maar ik krijg het er niet uit kan iemand die fout eruit halen?
anders word forum zo groot.
 
Laatst bewerkt:
Dit is de reden dat je normaal gesproken je code indent. That is,

PHP:
<?php

   $iets = 42;

   if($iets == 1337)
   {
      $iets = 2;
   }

?>

zo zie je gelijk waar je if/switch/while/for statements fout gaan. Hier is je code met identjes:
PHP:
<?php

   session_start();
   $email = $_SESSION['email'];
   // if mail exist
   if ($email) {
      // if pressed submit
      if ($_POST['submitnpassword']) {
         // check if filled in
         $opassword = md5($_POST['opassword']);
         $npassword = md5($_POST['npassword']);
         $repeatnpassword = md5($_POST['repeatnpassword']);
         // connect to datbase and check if password is rite
         $connect = mysql_connect("localhost", "-", "-") or die("no connection");
         mysql_select_db("-") or die("no db");
         $queryget = mysql_query("SELECT password  FROM users  WHERE email='$email'") or die("Something went wrong");
         $row = mysql_fetch_assoc("$gueryget");
         $opassworddb = $row['password'];
         // if old filled in is same as datbase
         if ($opassword == $opassworddb) {
            // ceck if npassword and repeatnpassword are the same
            if ($npassword == $repeatnpassword) {
               echo "test";
            } else die("new password didn't match");
         }
      } else die("old password filled in wrog!");
      else {
         echo "<de html stond hier>";
      } else die("You must be logged in!");
   }

?>

Daarnaast is het ook wel handig als je expliciet if{}else{} brackets gebruikt. Want nu weet je dus niet precies wat en wanneer.
 
Laatst bewerkt:
Het if statement wat je als eerste opende werd te vroeg gesloten, daardoor kon de laatste else niet geplaats worden.

PHP:
<?php
	session_start();
	$email = $_SESSION['email'];
	
	// if mail exist
	if ($email)
	{
		// if pressed submit
		if ($_POST['submitnpassword'])
		{
			// check if filled in
			$opassword = md5($_POST['opassword']);
			$npassword = md5($_POST['npassword']);
			$repeatnpassword = md5($_POST['repeatnpassword']);
			// connect to datbase and check if password is rite
			$connect = mysql_connect("localhost","-","-") or die("no connection");
			mysql_select_db("-") or die("no db");
			$queryget = mysql_query("SELECT password FROM users WHERE email='$email'") or die("Something went wrong");
			$row = mysql_fetch_assoc("$gueryget");
			$opassworddb = $row['password'];
			if($opassword==$opassworddb)
			{
				// check if npassword and repeatnpassword are the same
				if($npassword==$repeatnpassword)
				{
					echo "test";
				}
				else
				{
					die ("new password didn't match");	
				}
			}
			else
			{
				die("old password filled in wrog!");			
			}
		}
		else
		{
?>
            <form action='-' method='POST'>
                <table>
                    <tr>
                    <td>
                    Email:
                    </td>
                    <td>
                    <input type='text' name='email' value='$email'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    Password:
                    </td>
                    <td>
                    <input type='password' name='password' maxlength='30'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    Repeat password:
                    </td>
                    <td>
                    <input type='password' name='repeatpassword' maxlength='30'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    First name:
                    </td>
                    <td>
                    <input type='text' name='firstname' maxlength='30'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    Last name:
                    </td>
                    <td>
                    <input type='text' name='lastname' maxlength='30'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    Sex:
                    </td>
                    <td>
                    <SELECT NAME='sex'>
                    <OPTION> male
                    <OPTION> female
                    </SELECT>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    age:
                    </td>
                    <td>
                    <SELECT NAME='age'>
                        <OPTION> 1</OPTION>
                        <OPTION> 2</OPTION>
                        <OPTION> 3</OPTION>
                        <OPTION> 4</OPTION>
                        <OPTION> 5</OPTION>
                        <OPTION> 6</OPTION>
                        <OPTION> 7</OPTION>
                        <OPTION> 8</OPTION>
                        <OPTION> 9</OPTION>
                        <OPTION> 10</OPTION>
                        <OPTION> 11</OPTION>
                        <OPTION> 12</OPTION>
                        <OPTION> 13</OPTION>
                        <OPTION> 14</OPTION>
                        <OPTION> 15</OPTION>
                        <OPTION> 16</OPTION>
                        <OPTION> 17</OPTION>
                        <OPTION> 18</OPTION>
                        <OPTION> 19</OPTION>
                        <OPTION> 20</OPTION>
                    </SELECT>
                    </td>
                    </tr>
                </table>
                <input type='submit' name='submitall' value='update'>
                </form>
                <br />
                <form action='membereddit.php' method='POST'>
                <table>
                    <tr>
                        <td>
                          Old password:
                        </td>
                    <td>
                    <input type='password' name='opassword'/>
                    </td>
                    </tr>
                        <td>
                         New password:
                        </td>
                    <td>
                    <input type='password' name='npassword'/>
                    </td>
                    </tr>
                        <td>
                          Repeat new password:
                        </td>
                        <td>
                           <input type='password' name='repeatnpassword'/>
                        </td>
                    </tr>
                </table>
                <input type='submit' name='submitnpassword' value='changepassword'>
            </form>
<?
		}
	}
	else
	{
		die("You must be logged in!");
	}
?>
Oh, de oplossing lag er al.
In ieder geval, je had inderdaad ook een aantal keren een else zonder brackets.
Wat het heel lastig lezen maakt

Dus altijd {} gebruiken en altijd even tabje er tussen en je ziet sneller je problemen:)
 
Laatst bewerkt:
dankje,
ik heb idd
if
if
if
else
else
else
niet toegepast omdat ik verkeerde instellingen had bij mijn editor.

*edit
nou heb ik 1 klein probleembje, in:
<input type='text' name='email' value='$email'/>
staat nu email (en niet meer bijv. david@hotmail.com) wat eerst wel zo was.

dit komt omdat daar de php ophoud maar als ik er php invoeg dan krijg ik weer een error van onverwachte else statement.

hoe los ik dit op? - ik ga nu ook nog wel ff er aan knutsellen
 
Laatst bewerkt:
Verplaatst Website maken > overige vragen --->> PHP.
 
nou heb ik 1 klein probleembje, in:
<input type='text' name='email' value='$email'/>
staat nu email

Je zou bijvoorbeeld dit kunnen doen:
HTML:
<input type='text' name='email' value='<?php echo $email; ?>'/>

Verder zou je eigenlijk nog mysql_real_escape_string moeten aanroepen op alle velden die de gebruiker invult. Zoals het nu is, is je script kwetsbaar voor SQL-injectie.
 
dankje,
ik heb idd
if
if
if
else
else
else
niet toegepast omdat ik verkeerde instellingen had bij mijn editor.

*edit
nou heb ik 1 klein probleembje, in:
<input type='text' name='email' value='$email'/>
staat nu email (en niet meer bijv. david@hotmail.com) wat eerst wel zo was.

dit komt omdat daar de php ophoud maar als ik er php invoeg dan krijg ik weer een error van onverwachte else statement.

hoe los ik dit op? - ik ga nu ook nog wel ff er aan knutsellen


Ga er van uit dat je mijn code dan overgenomen hebt.

Ik hou er niet van om dikke lappen HTML te echo'en dan sluit ik mijn PHP en na de lap HTML zet ik mn PHP weer.

Ik had niet door dat je hier een variabele gebruikte dus je kan dan value="<?php echo $email ?>" neerzetten inplaatsvan value='$email'

Ik zou als ik jou was ook goed kijken naar het gebruik van je variableen in queries en echo's het is niet allemaal even netjes.
 
@supersnail,
zo kan toch ook? $opassword = strip_tags(md5($_POST['opassword']));
@grumbkow
ja idd soms is het wat mooier om php en html uit elkaar te houden

hier ben ik nu mee bezig:
PHP:
 <?php
    session_start();
    $email = $_SESSION['email'];
    
    // if mail exist
    if ($email)
    {
        // if pressed submit
        if ($_POST['submitnpassword'])
        {
            // check if filled in
            $opassword = md5($_POST['opassword']);
            $npassword = md5($_POST['npassword']);
            $repeatnpassword = md5($_POST['repeatnpassword']);
            // connect to datbase and check if password is rite
            $connect = mysql_connect("localhost","-","-") or die("no connection");
            mysql_select_db("-") or die("no db");
            $queryget = mysql_query("SELECT password FROM users WHERE email='$email'") or die("Something went wrong");
            $row = mysql_fetch_assoc("$gueryget");
            $opassworddb = $row['password'];
			echo "test <br />$opassworddb <br />";
			echo "really old: $opassword check old: $opassworddb new password $npassword check new password $repeatnpassword";
            if($opassword==$opassworddb)
            {
                // check if npassword and repeatnpassword are the same
                if($npassword==$repeatnpassword)
                {
                    echo "test";
                }
                else
                {
                    die ("new password didn't match");  
                }
            }
            else
            {
                die("old password filled in wrog!");            
            }
        }
        else
        {
?><?php echo "
            <form action='-' method='POST'>
                <table>
                    <tr>
                    <td>
                    Email:
                    </td>
                    <td>
                    <input type='text' name='email' value='$email'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    Password:
                    </td>
                    <td>
                    <input type='password' name='password' maxlength='30'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    Repeat password:
                    </td>
                    <td>
                    <input type='password' name='repeatpassword' maxlength='30'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    First name:
                    </td>
                    <td>
                    <input type='text' name='firstname' maxlength='30'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    Last name:
                    </td>
                    <td>
                    <input type='text' name='lastname' maxlength='30'/>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    Sex:
                    </td>
                    <td>
                    <SELECT NAME='sex'>
                    <OPTION> male
                    <OPTION> female
                    </SELECT>
                    </td>
                    </tr>
                    <tr>
                    <td>
                    age:
                    </td>
                    <td>
                    <SELECT NAME='age'>
                        <OPTION> 1</OPTION>
                        <OPTION> 2</OPTION>
                        <OPTION> 3</OPTION>
                        <OPTION> 4</OPTION>
                        <OPTION> 5</OPTION>
                        <OPTION> 6</OPTION>
                        <OPTION> 7</OPTION>
                        <OPTION> 8</OPTION>
                        <OPTION> 9</OPTION>
                        <OPTION> 10</OPTION>
                        <OPTION> 11</OPTION>
                        <OPTION> 12</OPTION>
                        <OPTION> 13</OPTION>
                        <OPTION> 14</OPTION>
                        <OPTION> 15</OPTION>
                        <OPTION> 16</OPTION>
                        <OPTION> 17</OPTION>
                        <OPTION> 18</OPTION>
                        <OPTION> 19</OPTION>
                        <OPTION> 20</OPTION>
                    </SELECT>
                    </td>
                    </tr>
                </table>
                <input type='submit' name='submitall' value='update'>
                </form>
                <br />
                <form action='membereddit2.php' method='POST'>
                <table>
                    <tr>
                        <td>
                          Old password:
                        </td>
                    <td>
                    <input type='password' name='opassword'/>
                    </td>
                    </tr>
                        <td>
                         New password:
                        </td>
                    <td>
                    <input type='password' name='npassword'/>
                    </td>
                    </tr>
                        <td>
                          Repeat new password:
                        </td>
                        <td>
                           <input type='password' name='repeatnpassword'/>
                        </td>
                    </tr>
                </table>
                <input type='submit' name='submitnpassword' value='changepassword'>
            </form>
			"; ?>
<?php
        }
    }
    else
    {
        die("You must be logged in!");
    }
?>

ik snap dat de fout in dit gedeelte zit want als ik echo "$opassworddb" komt er gewoon helemaal niks, ik heb mijn code wel vaak nagekeken maar niks werkt.
ik lijk nu wel noob die steeds maar dingen vraagt maar ik snap er wel wat van, alleen komen er nou allemaal bugs voorbij
maargoed dit is het gedeelte waar de fout in moet zitten:
PHP:
$queryget = mysql_query("SELECT password FROM users WHERE email='$email'") or die("Something went wrong");
            $row = mysql_fetch_assoc("$gueryget");
            $opassworddb = $row['password'];
			echo "test <br />$opassworddb <br />";
			echo "really old: $opassword check old: $opassworddb new password $npassword check new password $repeatnpassword";
            if($opassword==$opassworddb)
            {
                // check if npassword and repeatnpassword are the same
                if($npassword==$repeatnpassword)
                {
                    echo "test";
                }
                else
                {
                    die ("new password didn't match");  
                }
 
Laatst bewerkt:
@supersnail,


ik snap dat de fout in dit gedeelte zit want als ik echo "$opassworddb" komt er gewoon helemaal niks, ik heb mijn code wel vaak nagekeken maar niks werkt.
ik lijk nu wel noob die steeds maar dingen vraagt maar ik snap er wel wat van, alleen komen er nou allemaal bugs voorbij
maargoed dit is het gedeelte waar de fout in moet zitten:
PHP:
$queryget = mysql_query("SELECT password FROM users WHERE email='$email'") or die("Something went wrong");
            $row = mysql_fetch_assoc("$gueryget");
            $opassworddb = $row['password'];
			echo "test <br />$opassworddb <br />";
			echo "really old: $opassword check old: $opassworddb new password $npassword check new password $repeatnpassword";
            if($opassword==$opassworddb)
            {
                // check if npassword and repeatnpassword are the same
                if($npassword==$repeatnpassword)
                {
                    echo "test";
                }
                else
                {
                    die ("new password didn't match");  
                }
Misschien een stomme vraag, maar krijg je wel data uit de datbase op zich?
Echo de query eens en voer die in in je database en kijk eens wat ie returned
 
nee inderdaad, bij deze test zit de fout nog een stapje hoger.
als ik dit doe zegt hij:
test: Resource id #4
terwijl het id van dat account 7 is
PHP:
$connect = mysql_connect("localhost","-","-") or die("no connection");
            mysql_select_db("-") or die("no db");
            $queryget = mysql_query("SELECT password FROM users WHERE email='$email'") or die("Something went wrong");
			echo "test: $queryget";
            $row = mysql_fetch_assoc("$gueryget");
            $opassworddb = $row['password'];
			echo "test <br />$opassworddb <br />";
			echo "really old: $opassword check old: $opassworddb new password $npassword check new password $repeatnpassword";
            if($opassword==$opassworddb)
            {
                // check if npassword and repeatnpassword are the same
                if($npassword==$repeatnpassword)
                {
                    echo "test";
                }
                else
                {
                    die ("new password didn't match");  
                }
            }
            else
            {
                die("old password filled in wrog!");            
            }
 
@supersnail,
zo kan toch ook? $opassword = strip_tags(md5($_POST['opassword']));

De passwords zijn het probleem niet, die worden "ge-md5t" en kunnen dus geen "enge" tekens bevatten. Het risico zit hem in $email, ik weet niet precies waar die vandaan komt (ik zie hem in $_SESSION staan, maar ook in het formulier), maar als de gebruiker die kan invoeren kan dat een SQL-injectie opleveren.


Voor wat betreft je probleem op regel 5 heb je een typefout gemaakt:
PHP:
$row = mysql_fetch_assoc("$gueryget");
moet zijn
PHP:
$row = mysql_fetch_assoc("$queryget");
 
ja aan die email kan ik nog wel werken, en dankje dat je guery zag (query),
maar nog steeds geeft hij niks terug uit database.
link naar bestanden zoals ze nu zijn
misschien kun je daar wat meer mee en ik ga zelf ook nog wel wat proberen.

het is zoiezo gek want als ik echo "$email" doe dan geeft hij het juiste email adress door.
weer meer getest, het zit hem in:
PHP:
$queryget = mysql_query("SELECT email FROM users WHERE email='$email'") or die("Something went wrong");
			echo "test: $queryget";
            $row = mysql_fetch_assoc("$queryget");
            $opassworddb = $row['password'];
			echo "test <br />$opassworddb <br />";
			echo "really old: $opassword check old: $opassworddb new password $npassword check new password $repeatnpassword";
            if($opassword==$opassworddb)
want bijv email werkt ook niet maar alles boven dit stukje code werkt goed.
 
Laatst bewerkt:
Laat de aanhalingstekens rond "$queryget" eens weg. Die horen daar niet:
PHP:
$row = mysql_fetch_assoc($queryget);
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan