Alleen php stoppen EXIT()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Djimmy

Djimmy

25/01/2007 09:01:00
Quote Anchor link
Hallo,

Ik heb een probleempje, ik heb een script, dat controleerd op alle gegevens zijn ingevuld, is dat niet zo, dan stopt die het script en geeft die een melding.

if (!$user) {
echo "<h2>Fout</h2>U heeft geen user ingevuld.
</P><a href=index.php?pagina=register> Opnieuw registreren</a>";
exit;}

Nu heb ik het probleem dat dit allemaal perfect werkt, maar als ik het intergreer in de website, dan stopt die het script bij exit() maar dan laat die dus ook de opmaak eronder weg. (De balk die onderaan zit).

Iemand die hier een idee voor heeft?
 
PHP hulp

PHP hulp

19/05/2024 10:34:06
 
Terence Hersbach

Terence Hersbach

25/01/2007 09:08:00
Quote Anchor link
Probeer het zo te doen (zonder exit):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if(!$user) //controlepunt
{
    //foutmelding
}
elseif(!$email) //controlepunt
{
    //foutmelding
}
else //als alles goed gaat
{
    //query uitvoeren
}
?>
 
Djimmy

Djimmy

25/01/2007 09:28:00
Quote Anchor link
Dit had ik al geprobeerd, en werkt ook wel.
Alleen dan heb je het probleem dat die de foutmelding geeft, en ook meteen het formulier om een nieuwe user aan te maken eronder opent.

Tevens heb je nou het probleem dat die een leeg record in de database zet, omdat die een foutmelding geeft dat je het niet hebt ingevuld, maar wel verder gaat met het script, en het gewoon in de database zet.
Gewijzigd op 01/01/1970 01:00:00 door Djimmy
 
- SanThe -

- SanThe -

25/01/2007 09:41:00
Quote Anchor link
Er staat bij Terence duidelijk

else //als alles goed gaat
{
//query uitvoeren
}
 
Djimmy

Djimmy

25/01/2007 09:52:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
    <?php
    include("db_connect.php");
    if (!empty($_POST)){
       $user = $_POST["user"];
       $wachtwoord = $_POST["wachtwoord"];
       $email = $_POST["email"];
       if (!$user) {
       echo "<h2>Fout</h2>U heeft geen username ingevuld.
       </P><a href=index.php?pagina=register> Opnieuw registreren</a>"
;
       }

       elseif (!$email) {
       echo "<h2>Fout</h2>U heeft geen email ingevuld. </P>
       <a href=index.php?pagina=register> Opnieuw registreren</a>\n"
;
       }

       elseif (!$wachtwoord) {
       echo "<h2>Fout</h2>U heeft geen wachtwoord ingevuld. </P>
       <a href=index.php?pagina=register> Opnieuw registreren</a>\n"
;
       ;}

       $query = "SELECT * from users WHERE user='$user';";
       $result = mysql_query($query) or die ("FOUT: " . mysql_error());
       if (mysql_num_rows($result) > 0) {
          //user al aanwezig in database, foutmelding tonen
          $tekst = "<h2>Fout</h2>Deze user (<b>$user</b>) bestaat al.\n <br>
          <a href=index.php?pagina=register> Opnieuw registreren</a>\n"
;
          die($tekst);
       }
else{
             //OK, Query opbouwen
             $query="INSERT INTO users (user, wachtwoord, email)";
             $query .="VALUES ('$user' , '$wachtwoord' , '$email');";
             $result =  mysql_query($query) or die ("FOUT: "
             . mysql_error());
             $tekst = "<h2>Bedankt voor de aanmelding</h2> <b>$user</B> kan zich nu aanmelden op de
             LAB Database."
;
             die ($tekst);
       }
    }

?>


  <h2>Registreren</h2>
  Hier kunt u een nieuwe user aanmaken die in de LAB Database toegang heeft. Vul aub alle velden in.
  <form name="registreren" method="post" action="index.php?pagina=register">
  Username: (Maximaal 25 tekens) <BR> <input name="user" type="text" size="30" maxlength="25"><br>
  E-mailadres: (Maximaal 40 tekens) <BR> <input name="email" type="text" size="30" maxlength="40"><BR>
  Wachtwoord: (Maximaal 15 tekens) <BR> <input name="wachtwoord" type="password" size="15" maxlength="15"><BR>
  </P>
  <input type="submit" name="submit" value="Registreren" class="loginput">
  <input name="reset" type="reset" value="Leegmaken" class="loginput">
  </form>


Dit is wat ik nu heb, en dan geeft die bv. wel een fout dat ik geen username heb ingevuld, maar daarna schrijft die het wel gewoon weg..
En waar het om begon, bij die melding laat die nog steeds de onderkant van me pagina weg.
Gewijzigd op 01/01/1970 01:00:00 door Djimmy
 
Jurgen assaasas

Jurgen assaasas

25/01/2007 10:07:00
Quote Anchor link
Hij moet het formulier dus weergeven als alles goed is? of moet hij het juist niet weergeven als het formulier is ingevuld?
 
Djimmy

Djimmy

25/01/2007 10:11:00
Quote Anchor link
Je gaat naar index.php?pagina=registreren (dus registreren.php). Dan krijg je een formulier te zien, je vult hier gegevens in, klikt op versturen.

Nu gaat het php stuk kijken:
-of alles is ingevuld
-of de user al bestaat in de database

Klopt alles, dan schrijft die het weg in de database. (Dit werkt nog perfect)

Klopt het niet, dan geeft die een echo met dat ze het opnieuw moeten proberen. En dan krijg je een link naar de pagina om te registreren (dus dit zie je nog niet meteen). Dit doet het ook nog, nu is alleen het probleem dat die exit(). Dus de pagina stopt, en het onderste deel van de pagina word niet geladen, dus ziet het er niet mooi uit.

Dit heb ik nu:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php include("inc_logged_in.php")?>
<HTML>
<HEAD>
 <TITLE>Registreren</TITLE>
</HEAD>
<BODY>
    <?php
    include("db_connect.php");
    if (!empty($_POST)){
       //variabelen maken
       $user = $_POST["user"];
       $wachtwoord = $_POST["wachtwoord"];
       $email = $_POST["email"];
       //controleren of alles is ingevuld
       if (!$user) {
       echo "<h2>Fout</h2>U heeft geen username ingevuld.
       </P><a href=index.php?pagina=register> Opnieuw registreren</a>"
;
       exit;}
       if (!$email) {
       echo "<h2>Fout</h2>U heeft geen email ingevuld. </P>
       <a href=index.php?pagina=register> Opnieuw registreren</a>\n"
;
       exit;}
       if (!$wachtwoord) {
       echo "<h2>Fout</h2>U heeft geen wachtwoord ingevuld. </P>
       <a href=index.php?pagina=register> Opnieuw registreren</a>\n"
;
       exit;}
       //controleren of de user al bestaat
       $query = "SELECT * from users WHERE user='$user';";
       $result = mysql_query($query) or die ("FOUT: " . mysql_error());
       if (mysql_num_rows($result) > 0) {
          //user al aanwezig in database, foutmelding tonen
          $tekst = "<h2>Fout</h2>Deze user (<b>$user</b>) bestaat al.\n <br>
          <a href=index.php?pagina=register> Opnieuw registreren</a>\n"
;
          die($tekst);
       }
else{
             //OK, Query opbouwen
             $query="INSERT INTO users (user, wachtwoord, email)";
             $query .="VALUES ('$user' , '$wachtwoord' , '$email');";
             $result =  mysql_query($query) or die ("FOUT: "
             . mysql_error());
             $tekst = "<h2>Bedankt voor de aanmelding</h2> <b>$user</B> kan zich nu aanmelden op de
             LAB Database."
;
             die ($tekst);
       }
    }

  ?>


  <h2>Registreren</h2>
  Hier kunt u een nieuwe user aanmaken die in de LAB Database toegang heeft. Vul aub alle velden in.
  <form name="registreren" method="post" action="index.php?pagina=register">
  Username: (Maximaal 25 tekens) <BR> <input name="user" type="text" size="30" maxlength="25"><br>
  E-mailadres: (Maximaal 40 tekens) <BR> <input name="email" type="text" size="30" maxlength="40"><BR>
  Wachtwoord: (Maximaal 15 tekens) <BR> <input name="wachtwoord" type="password" size="15" maxlength="15"><BR>
  </P>
  <input type="submit" name="submit" value="Registreren" class="loginput">
  <input name="reset" type="reset" value="Leegmaken" class="loginput">
  </form>
</BODY>
</HTML>


Ik zit eraan te denken om dit met javascript op te gaan lossen, hier heb ik alleen geen ervaring mee.
Gewijzigd op 01/01/1970 01:00:00 door Djimmy
 
Jurgen assaasas

Jurgen assaasas

25/01/2007 10:18:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php


if(!isset($_GET['action']){

echo 'form';

}


if(isset($_GET['action']) AND $_GET['action'] == "send"){

echo 'controleren op velden';
}


if(empty($_POST['veld']){

echo '<a href="form.php'>er is iets niet goed ingevuld, klik hier om terug te gaan</a>
}

?>



Zoiets?

btw je moet exit() eignelijk niet voor zoiets gebruiken. Exit is handig als je bijv. op een inlogpagina fout inlogt oid.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Djimmy

Djimmy

25/01/2007 10:54:00
Quote Anchor link
Jurgen schreef op 25.01.2007 10:18:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php


if(!isset($_GET['action']){

echo 'form';

}


if(isset($_GET['action']) AND $_GET['action'] == "send"){

echo 'controleren op velden';
}


if(empty($_POST['veld']){

echo '<a href="form.php'>er is iets niet goed ingevuld, klik hier om terug te gaan</a>
}

?>



Zoiets?

btw je moet exit() eignelijk niet voor zoiets gebruiken. Exit is handig als je bijv. op een inlogpagina fout inlogt oid.


Wat bedoel je met 'ACTION'?
 
Rudie dirkx

rudie dirkx

25/01/2007 11:29:00
Quote Anchor link
Je kan ook een lege class maken die als destructor je footer include ;)
Dus altijd als je pagina stopt wordt nog ff snel je footer geinclude. Zonder dat je er iets voor hoeft te doen...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

class Footer
{
  function
__destruct()
  {

    // require_ONCE of include_ONCE omdat als ie al een keer geinclude is hoeft ie niet he...
    require_once("footer.php");
  }
}


?>


En dan in elke pagina bovenaan (of in je config pagina ofzo):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

new Footer;

?>
 
Jurgen assaasas

Jurgen assaasas

25/01/2007 11:45:00
Quote Anchor link
Djimmy schreef op 25.01.2007 10:54:
Jurgen schreef op 25.01.2007 10:18:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php


if(!isset($_GET['action']){

echo 'form';

}


if(isset($_GET['action']) AND $_GET['action'] == "send"){

echo 'controleren op velden';
}


if(empty($_POST['veld']){

echo '<a href="form.php'>er is iets niet goed ingevuld, klik hier om terug te gaan</a>
}

?>



Zoiets?

btw je moet exit() eignelijk niet voor zoiets gebruiken. Exit is handig als je bijv. op een inlogpagina fout inlogt oid.


Wat bedoel je met 'ACTION'?


action is het variabel dat in de adresbalk komt: register.php?action=send
 
Djimmy

Djimmy

25/01/2007 11:58:00
Quote Anchor link
Quote:

Wat bedoel je met 'ACTION'?


action is het variabel dat in de adresbalk komt: register.php?action=send[/quote]

Maar ik heb al index.php?pagina=register
Dus lijkt me niet dat dat werkt, dan krijg je index.php?pagina=register?action=send gaat die niet pikken denk ik. ;)
 
Djimmy

Djimmy

25/01/2007 11:59:00
Quote Anchor link
cervetti schreef op 25.01.2007 11:29:
Je kan ook een lege class maken die als destructor je footer include ;)
Dus altijd als je pagina stopt wordt nog ff snel je footer geinclude. Zonder dat je er iets voor hoeft te doen...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

class Footer
{
  function
__destruct()
  {

    // require_ONCE of include_ONCE omdat als ie al een keer geinclude is hoeft ie niet he...
    require_once("footer.php");
  }
}


?>


En dan in elke pagina bovenaan (of in je config pagina ofzo):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

new Footer;

?>


Daar had ik nog niet aan gedacht, dat ga ik eens proberen
 
Frank -

Frank -

25/01/2007 12:16:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?//controleren of de user al bestaat
       $query = "SELECT * from users WHERE user='$user';";
       $result = mysql_query($query) or die ("FOUT: " . mysql_error());
       if (mysql_num_rows($result) > 0) {
          //user al aanwezig in database, foutmelding tonen
          $tekst = "<h2>Fout</h2>Deze user (<b>$user</b>) bestaat al.\n <br>
          <a href=index.php?pagina=register> Opnieuw registreren</a>\n";
          die($tekst);
       }else{
             //OK, Query opbouwen
             $query="INSERT INTO users (user, wachtwoord, email)";
             $query .="VALUES ('$user' , '$wachtwoord' , '$email');";
             $result =  mysql_query($query) or die ("FOUT: "
             . mysql_error());
             $tekst = "<h2>Bedankt voor de aanmelding</h2> <b>$user</B> kan zich nu aanmelden op de
             LAB Database.";
             die ($tekst);
       }?>
Waarom eerst een SELECT-query uitvoeren en daarna pas de INSERT-query? Die SELECT is zinloos omdat het resultaat niet te vertrouwen is (op hetzelde moment kan iemand al weer een INSERT uitvoeren) en de database kan met de INSERT uitstekend zelf controleren of een user al in de database staat. Je krijgt dan keurig een foutmelding, 1062, die je in je script kunt opvangen.

Kortom, maar de kolom 'user' UNIQUE, gooi de SELECT-query e.d. weg en voeg even een stukje foutafhandeling toe.

En met foutafhandeling bedoel ik iets anders dan die(), die functie hoort niet thuis in een goed script. Hier een eenvoudig voorbeeldje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$query
= "INSERT .....";
$result = mysql_query($query);
if($result){
  echo 'query gelukt';
  // rest van je script wanneer de boel goed is gegaan
}
elseif(!$result && mysql_errno() == 1062){
  echo 'waarde van de kolom met UNIQUE bestaat al';
}

else {
  echo 'Query mislukt: '.mysql_error(); // niet netjes, kan nog beter
}
?>

(niet getest...)
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Djimmy

Djimmy

25/01/2007 12:52:00
Quote Anchor link
Frank schreef op 25.01.2007 12:16:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?//controleren of de user al bestaat
       $query = "SELECT * from users WHERE user='$user';";
       $result = mysql_query($query) or die ("FOUT: " . mysql_error());
       if (mysql_num_rows($result) > 0) {
          //user al aanwezig in database, foutmelding tonen
          $tekst = "<h2>Fout</h2>Deze user (<b>$user</b>) bestaat al.\n <br>
          <a href=index.php?pagina=register> Opnieuw registreren</a>\n";
          die($tekst);
       }else{
             //OK, Query opbouwen
             $query="INSERT INTO users (user, wachtwoord, email)";
             $query .="VALUES ('$user' , '$wachtwoord' , '$email');";
             $result =  mysql_query($query) or die ("FOUT: "
             . mysql_error());
             $tekst = "<h2>Bedankt voor de aanmelding</h2> <b>$user</B> kan zich nu aanmelden op de
             LAB Database.";
             die ($tekst);
       }?>
Waarom eerst een SELECT-query uitvoeren en daarna pas de INSERT-query? Die SELECT is zinloos omdat het resultaat niet te vertrouwen is (op hetzelde moment kan iemand al weer een INSERT uitvoeren) en de database kan met de INSERT uitstekend zelf controleren of een user al in de database staat. Je krijgt dan keurig een foutmelding, 1062, die je in je script kunt opvangen.

Kortom, maar de kolom 'user' UNIQUE, gooi de SELECT-query e.d. weg en voeg even een stukje foutafhandeling toe.

En met foutafhandeling bedoel ik iets anders dan die(), die functie hoort niet thuis in een goed script. Hier een eenvoudig voorbeeldje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$query
= "INSERT .....";
$result = mysql_query($query);
if($result){
  echo 'query gelukt';
  // rest van je script wanneer de boel goed is gegaan
}
elseif(!$result && mysql_errno() == 1062){
  echo 'waarde van de kolom met UNIQUE bestaat al';
}

else {
  echo 'Query mislukt: '.mysql_error(); // niet netjes, kan nog beter
}
?>

(niet getest...)


Je hebt gelijk, hier had ik nog niet aan gedacht.

Bedankt voor de feedback!
 
Djimmy

Djimmy

25/01/2007 13:57:00
Quote Anchor link
cervetti schreef op 25.01.2007 11:29:
Je kan ook een lege class maken die als destructor je footer include ;)
Dus altijd als je pagina stopt wordt nog ff snel je footer geinclude. Zonder dat je er iets voor hoeft te doen...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

class Footer
{
  function
__destruct()
  {

    // require_ONCE of include_ONCE omdat als ie al een keer geinclude is hoeft ie niet he...
    require_once("footer.php");
  }
}


?>


En dan in elke pagina bovenaan (of in je config pagina ofzo):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

new Footer;

?>


Dit heb ik nu geprobeerd, maar het werk niet met een footer, dan is heel me layout verneukt.

Het probleem in nu dus nog steeds, dat die door een exit(). Stopt met het uitvoeren van de pagina, en dus de onderster stuk van me pagina niet laad.
Gewijzigd op 01/01/1970 01:00:00 door Djimmy
 
Djimmy

Djimmy

25/01/2007 14:16:00
Quote Anchor link
Hier gaat het dus om, je komt op deze registratiepagina:
http://img204.imageshack.us/img204/5074/regsmall9sm.jpg

Wanneer je dan iets doet, gebeurd er dit:
http://img225.imageshack.us/img225/5492/foutreg7nq.jpg

Let op de balk onderin die weg gaat, dat is het probleem!
 
Leroy Boerefijn

Leroy Boerefijn

25/01/2007 14:54:00
Quote Anchor link
probeer dus de if-else lus te gebruiken
maar verwerk het formulier hierin, zo voorkom je dat hij op verkeerde momenten word weergeven ;)
 
Djimmy

Djimmy

25/01/2007 15:05:00
Quote Anchor link
Dat heb ik geprobeerd, maar omdat het om 2 dingen gaat, het controleren van alle velden, en het controleren of die al bestaat in de database, krijg ik het niet goed.

En dan stopt het script niet, en dan gaat die door met het invoeren in de database ookal staat er een veld niet ingevuld.
Gewijzigd op 01/01/1970 01:00:00 door Djimmy
 
Jurgen assaasas

Jurgen assaasas

25/01/2007 15:44:00
Quote Anchor link
je kunt ook meerderen variabelen in je adresbalk dumpen dmv index.php?page=registreren&action=send bijvoorbeeld.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.