Alle fouten en waarschuwingen tonen
UPDATE 2:
Ik heb nu het volgende uit het .php bestand verwijderd:
<?php error_reporting( E_ALL ); ?>
Ik heb display_erros in php.ini als volgt ingesteld:
display_errors = On
Foutrapportage is als volgt ingesteld in php.ini
:
error_reporting = E_ALL | E_STRICT
Na het herstarten van Apache, krijg ik nog steeds geen fouten/waarschuwingen.
UPDATE 1:
Ik heb error_reporting in php.ini
veranderd van:
error_reporting = E_ALL & ~E_DEPRECATED
naar
error_reporting = E_ALL | E_STRICT
Waarna ik Apache herstartte, bijv.
/etc/init.d/apache2 restart
Maar de pagina geeft nog steeds geen fouten/waarschuwingen van welke aard dan ook.
ORIGINELE VRAAG:
Het volgende script genereert een waarschuwing omdat de $err in het if statement staat. Waarom wordt deze waarschuwing niet weergegeven op de PHP pagina in een web browser?
Ik moet naar de Apache logs kijken om de waarschuwing te zien. Ook, als ik opzettelijk de "insert into" verander in "delete into", geeft het geen fout weer op de PHP pagina. Waarom worden de fouten niet weergegeven op de eigenlijke PHP pagina?
<?php
error_reporting(E_ALL);
?>
<html>
<head>
<title></title>
<link rel="icon" type="image/png" href="favicon.ico">
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$err = array();
if (empty( $_POST['display_name']))
$err[] = "display name field is required";
if (empty( $_POST['email']))
$err[] = "email field is required";
if (empty( $_POST['password']))
$err[] = "password field is required";
if (!$err) {
try {
$DBH = new PDO("mysql:host=localhost;dbname=database1", "user", "pass");
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DBH->prepare("delete into table1 (display_name, email, password) values ( :display_name, :email, :password )");
$STH->bindParam(':display_name', $_POST['display_name'], PDO::PARAM_STR, 100);
$STH->bindParam(':email', $_POST['email'], PDO::PARAM_STR, 100);
$STH->bindParam(':password', $_POST['password'], PDO::PARAM_STR, 100);
$STH->execute();
$STH = $DBH->prepare("delete into table2 ( username, status, users_id ) values ( :username, :status, :users_id )");
$strStatus = 1;
$STH->bindParam(':username', $_POST['display_name'], PDO::PARAM_STR, 100);
$STH->bindParam(':status', $strStatus, PDO::PARAM_INT, 1);
$STH->bindParam(':users_id', $_POST['referer'], PDO::PARAM_INT, 1);
$STH->execute();
$DBH = null;
}
catch (PDOException $e) {
echo $e->getMessage();
}
header("Location: " . $_SERVER['PHP_SELF']);
exit;
}
else {
foreach ($_POST as $key => $val) {
$form[$key] = htmlspecialchars($val);
}
}
}
else {
$form['display_name'] = $form['email'] = $form['password'] = '';
}
?>
</head>
<body>
<?php foreach($err as $line) { ?>
<div style="error"><?php echo $line; ?></div>
<?php } ?>
<h1>Register</h1>
<form method="post">
Referers id:<br/>
<input type="text" name="referer" /><br/><br/>
Name:<br/>
<input type="text" name="display_name" value="<?php echo $form['display_name']; ?>" /><br/><br/>
Email:<br/>
<input type="text" name="email" value="<?php echo $form['email']; ?>" /><br/><br/>
Password:<br/>
<input type="text" name="password" value="<?php echo $form['password']; ?>" /><br/><br/>
<input type="submit" value="register" />
</form>
</body>
</html>
Weergave fouten kunnen worden uitgezet in de
php.ini
of uw Apache configuratie bestand.U kunt het aanzetten in het script:
U zou dezelfde berichten moeten zien in het PHP foutenlogboek.
Rechtstreeks uit het php.ini bestand:
Voor pure ontwikkeling ga ik voor:
Vergeet ook niet om display_errors aan te zetten
Herstart daarna uw server voor Apache op Ubuntu:
Stel deze in op
php.ini
:Gebruik op uw PHP pagina een geschikt filter voor foutrapportage.
Filers kunnen worden gemaakt volgens de vereisten.