Ik heb dit scriptje getypt wat natuurlijk nog niet werkt. Het is een script die nieuws naar de database stuurt. Ik wil graag weten hoe ik hier een goede foutafhandeling aan moet toevoegen.
Koen, mysql_query geeft bij een INSERT, UPDATE, DELETE en DROP altijd een true terug als de query geslaagd is of false terug als de query niet geslaagd is.
dus:
<?php
$submitsql = mysql_query('INSERT INTO news (naam, kort, lang, visible) VALUES ($name, $short, $long, 1'));
if(!$submit_sql)
// handel de fout af
?>
Dit deel van de code controleert toch of de request method post is EN hij controleert of de query fout is uitgevoerd?
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' AND !$submit_sql) {
echo 'Er is een fout opgetreden! Probeer het later nog eens!';
}
?>
Of heb ik het nu mis? Want ik zie dit: Er is een fout opgetreden! Probeer het later nog eens!
terwijl er niks is verzonden.
Heb je al wel de $submit_sql gevuld met een false of true? Is hij überhaupt geset?
't Lijkt mij dat je EERST je input wilt controleren voordat je wat submit/insert?
Dus je wilt eerst gaan fietsen, en dan pas de wielen monteren?
Dat werkt dus niet.
Alleen als er wat gepost wordt, ga je wat submitten. Dat kan dus niet in 1 controle, chronologisch gezien.
Nu kan je met namespaces en allerlei gare constructies wel wat maken, maar dat moet je gewoon niet doen.
<?php
// error reporting aan. Anders commentaar je deze weg?
error_reporting(E_ALL);
//error_reporting(0);
// start sessie
session_start();
// include de configuratie
include 'config.php';
// controleer een admin... niets van de gebruiker nodig?
// wat wil je hier nou? De enige admin selecteren? En dan?
$sql = "SELECT admin FROM users";
$res = mysql_query($sql);
$geenideewatikhiermeegadoen = mysql_fetch_assoc($res);
// formulier maken, met soort van __VARS__ in het formulier.
$formulier = '
<form method="post" action="">
<em>Titel</em>
<input type="text" name="naam" value="__NAAM__">
<em>Inleiding</em>
<textarea name="kort"rows="15" cols="50">__KORT__</textarea>
<em>Bericht</em>
<textarea name="lang" rows="25" cols="50">__LANG__</textarea>
<input type="submit" value="Publiceer">
</form>';
// controle van formulier
// kijk of er NOG NIET gepost is
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
// standaard-waarden dan maar...
$_POST['naam'] = 'Titel van het stuk';
$_POST['kort'] = 'Samenvatting, niet meer dan 200 tekens.';
$_POST['lang'] = 'Het lange bericht';
// gaat formulier tonen
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
else
{
// kijk of de benodigde gegevens er zijn
if(isset($_POST['naam'], $_POST['kort'], $_POST['lang']))
{
// schrijf de SQL netjes uit. Deze kan je makkelijk echoén als nodig
$sql = "INSERT INTO news
(
naam,
kort,
lang,
visible
)
VALUES
(
'" . mysql_real_escape_string($_POST['naam']) . "',
'" . mysql_real_escape_string($_POST['kort']) . "',
'" . mysql_real_escape_string($_POST['lang']) . "',
1
);
";
// echo $sql;
// voer de query uit, sla resultaat (true/false) op in $res
$res = mysql_query($sql);
// kijk of de query gelukt is
if($res === true)
{
// geef melding dat het opslaan gelukt is
$melding[] = '<p class="alert_ok">Opgeslagen</p>';
}
// query is niet gelukt
else
{
// geef melding van failure
$melding[] = '<p class="alert_fault">Niet opgeslagen</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
// niet alle waarden zijn binnen gekomen
else
{
// melding geven dat we wat missen
$melding[] = '<p class="alert_fault">Een van de gevraagde gegevens missen. Vul die alsnog in!</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
?>
<!DOCTYPE html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<?php
echo implode(PHP_EOL, $melding);
?>
</body>
</html>
Dus je wilt eerst gaan fietsen, en dan pas de wielen monteren?
Dat werkt dus niet.
Alleen als er wat gepost wordt, ga je wat submitten. Dat kan dus niet in 1 controle, chronologisch gezien.
Nu kan je met namespaces en allerlei gare constructies wel wat maken, maar dat moet je gewoon niet doen.
<?php
// error reporting aan. Anders commentaar je deze weg?
error_reporting(E_ALL);
//error_reporting(0);
// start sessie
session_start();
// include de configuratie
include 'config.php';
// controleer een admin... niets van de gebruiker nodig?
// wat wil je hier nou? De enige admin selecteren? En dan?
$sql = "SELECT admin FROM users";
$res = mysql_query($sql);
$geenideewatikhiermeegadoen = mysql_fetch_assoc($res);
// formulier maken, met soort van __VARS__ in het formulier.
$formulier = '
<form method="post" action="">
<em>Titel</em>
<input type="text" name="naam" value="__NAAM__">
<em>Inleiding</em>
<textarea name="kort"rows="15" cols="50">__KORT__</textarea>
<em>Bericht</em>
<textarea name="lang" rows="25" cols="50">__LANG__</textarea>
<input type="submit" value="Publiceer">
</form>';
// controle van formulier
// kijk of er NOG NIET gepost is
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
// standaard-waarden dan maar...
$_POST['naam'] = 'Titel van het stuk';
$_POST['kort'] = 'Samenvatting, niet meer dan 200 tekens.';
$_POST['lang'] = 'Het lange bericht';
// gaat formulier tonen
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
else
{
// kijk of de benodigde gegevens er zijn
if(isset($_POST['naam'], $_POST['kort'], $_POST['lang']))
{
// schrijf de SQL netjes uit. Deze kan je makkelijk echoén als nodig
$sql = "INSERT INTO news
(
naam,
kort,
lang,
visible
)
VALUES
(
'" . mysql_real_escape_string($_POST['naam']) . "',
'" . mysql_real_escape_string($_POST['kort']) . "',
'" . mysql_real_escape_string($_POST['lang']) . "',
1
);
";
// echo $sql;
// voer de query uit, sla resultaat (true/false) op in $res
$res = mysql_query($sql);
// kijk of de query gelukt is
if($res === true)
{
// geef melding dat het opslaan gelukt is
$melding[] = '<p class="alert_ok">Opgeslagen</p>';
}
// query is niet gelukt
else
{
// geef melding van failure
$melding[] = '<p class="alert_fault">Niet opgeslagen</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
// niet alle waarden zijn binnen gekomen
else
{
// melding geven dat we wat missen
$melding[] = '<p class="alert_fault">Een van de gevraagde gegevens missen. Vul die alsnog in!</p>';
// geef formulier weer
$melding[] = str_replace(array("__NAAM__", "__KORT__", "__LANG__"), array($_POST['naam'], $_POST['lang'], $_POST['kort']), $formulier);
}
}
?>
<!DOCTYPE html>
<head>
<title>PortalCMS | Nieuw nieuwsbericht</title>
</head>
<body>
<?php
echo implode(PHP_EOL, $melding);
?>
</body>
</html>
Heel erg bedankt! Nu werkt de code wel. Ik ben je vreselijk dankbaar, dankzij die commentaar regels snap ik alles! Dus: Dankjewel!