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?


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. ;)
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...

<?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):

<?php

new Footer;

?>


Daar had ik nog niet aan gedacht, dat ga ik eens proberen
<?//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:
<?
$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...)
Frank schreef op 25.01.2007 12:16
<?//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:
<?
$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!
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...

<?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):

<?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.
probeer dus de if-else lus te gebruiken
maar verwerk het formulier hierin, zo voorkom je dat hij op verkeerde momenten word weergeven ;)
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.
je kunt ook meerderen variabelen in je adresbalk dumpen dmv index.php?page=registreren&action=send bijvoorbeeld.

Reageren