erreur php sur localhost: Accès interdit! erreur 403

Je suis cette php tutoriel sur windows7 en utilisant XAMPP.
C'est un livre d'or tutoriel qui enregistre les entrées utilisateur dans mysql & affiche les entrées de db.
quand je rentre des données dans le formulaire & de le soumettre, le navigateur affiche cette erreur msg

Accès interdit!
Vous n'avez pas la permission d'accéder à l'objet demandé. Il est lire soit protégé ou non lisible par le serveur.
Si vous pensez que c'est une erreur du serveur, veuillez contacter le webmaster.

Erreur 403
localhost
Apache/2.4.3 (Win32) OpenSSL/1.0.1 c PHP/5.4.7

Mis à JOUR

guestbok.php

Connecter à la DB Code

<?php
$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbDatabase = "myDB";

//Connect to DB

$li = new mysqli('localhost', 'root', '', 'myDB') or 
      die("Could not connect". mysqli_connect_error());
//mysql_select_db($dbDatabase, $li) or 
      die ("could not select DB". mysql_error());
?>

Variables d'initialisation

<?php
//initiate some vars

$gb_str = "";   
//$gb_str is the string we'll append entries to
$pgeTitle = "View and Sign Guestbook";

Post traitement de la demande

//If form is submitted, then insert into DB
if (!empty($_POST["submit"])) {
    $name = $_POST["frmName"];
    $email = $_POST["frmEmail"];
    $comment = $_POST["frmComment"];
    $date = Date("Y-m-d h:i:s");

    $gb_query =     "insert into guestbook
            values(0, '$name', '$email', '$comment', '$date')";
    //Performs the $sql query on the server to insert the values
    if ($li->query($gb_query) === TRUE) {
        echo 'users entry saved successfully';
    }
    else {
        echo 'Error: '. $li->error;
    }
    /*
    $sql = mysql_query($gb_query);
    $res = mysql_affected_rows($sql);

    //See if insert was successful or not
    if($res > 0) {
        $ret_str="Your guestbook entry was successfully added.";
    } else {
        $ret_str = "Your guestbook entry was NOT successfully added.";
    }

    //Append success/failure message
    $gb_str .= "<span class=\"ret\">$ret_str</span><BR>";
    */
}
?>

Livre d'or de la liste

<?php

$get_query = "select gbName, gbEmail, gbComment, 
              DATE_FORMAT(gbDateAdded, '%m-%d-%y %H:%i') gbDateAdded
              from guestbook";

$result = $li->query($get_query);
$gb_str .= "<hr size=\"1\">";

if ($result->num_rows > 0) {
    //output data of each row from $result
    while($row = $result->fetch_assoc()) {
    $name = $row["gbName"];
    $email = $row["gbEmail"];
    $comment = $row["gbComment"];
    $date = $row["gbDateAdded"];

    if(!empty($name)) {
        //If name exists and email exists, link name to email
        if(!empty($email)) {
            $name="by <a href=\"mailto:$email\">$name</a>";
        }
    //If name does exist and email exists, link email to email     
    } else if (!empty($email)) {
        $name = "by <a href=\"mailto:$email\">$email</a>";
    } else {
        $name = "";
    }

    //Append to string we'll print later on
    $gb_str .= "<br>$comment<p class=\"small\">
                posted on $date $name<hr size=\"1\">";
}}

?>

La Page HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML>
<HEAD>
<TITLE>Guestbook</TITLE>
<SCRIPT language="javascript">
<!--
/* This function is pulled from a generic validation file from
some other site (probably developer.netscape.com) and strips out
characters you don't want */
function stripCharsInBag (s, bag) {
var i;
var returnString = "";
//Search through string's characters one by one.
//If character is not in bag, append to returnString.
for (i = 0; i < s.length; i++)
{   
//Check that current character isn't whitespace.
var c = s.charAt(i);
if (bag.indexOf(c) == -1) returnString += c;
}
return returnString;
}
//This function just makes sure the comment field is not empty
function valForm(frm) {
badChars = "<[]>{}";
if(frm.frmComment.value == "") {
alert("Please fill in your comments for the guestbook.");
return false;
} else {
frm.frmComment.value = stripCharsInBag(frm.frmComment.value, badChars);
//These values may be empty, but strip chars in case they're not
frm.frmName.value = stripCharsInBag(frm.frmName.value, badChars);
frm.frmEmail.value = stripCharsInBag(frm.frmEmail.value, badChars);
return true;
}
}
-->
</SCRIPT>
</HEAD>
<BODY bgcolor="#FFFFFF">
<?php echo $gb_str; ?>
<form name="gb" action="<? echo $PHP_SELF;?>" method="post">
<table cellpadding="3" cellspacing="0" border="0">
<tr>
<td class="tdhead" valign="top" align="right">Name</td>
<td valign="top">
<input type="text" name="frmName" value="" size="30" 
maxlength="50">
</td>
</tr>
<tr>
<td class="tdhead" valign="top" align="right">Email</td>
<td valign="top">
<input type="text" name="frmEmail" value="" size="30" 
maxlength="100">
</td>
</tr>
<tr>
<td class="tdhead" valign="top" align="right">Comment</td>
<td valign="top">
<textarea name="frmComment" rows="5" cols="30"></textarea>
</td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submit" value="submit" 
onClick="return valForm(document.gb)">
<input type="reset" name="reset" value="reset">
</td>
</tr>
</table>
</form>
</BODY>
</HTML>
<?php
//Close MySQL Connection
$li->close();
?>
1. NE PAS UTILISER le mysql_xxx() fonctions. Ils sont considérés comme obsolète et l'insécurité de l'. Le manuel PHP recommande fortement de commutation pour le mysqli_xx() des fonctions ou des la librairie PDO.
2. N'UTILISEZ PAS le "style court balises PHP": c'est à dire <?. Vous devriez toujours utiliser le plus de style des balises PHP: <?php. La version courte est considérée comme obsolète et n'est pas pris en charge par du PHP installations. Il peut être obsolète et/ou supprimés à partir de PHP entièrement dans l'avenir.
3. NE PAS UTILISER $HTTP_POST_VARS. C'est obsolète en PHP, et a été pendant une longue période de temps. Vous devez utiliser $_POST à la place.
4. Vous n'êtes pas échapper à la saisie de données dans votre requête SQL. Cela vous laisse grande ouverte à une injection SQL hack. C'est extrêmement précaire.
Dans l'ensemble, je recommande fortement d'arrêter avec ce tutoriel, et d'aller trouver un plus up-to-date de tutoriel qui n'enseigne pas une mauvaise pratique. Je voudrais suggérer quelques articles ici: phpmaster.com

OriginalL'auteur enterprize | 2012-10-10