3

XAMPPを使用して、windows7でこのphpチュートリアルに従っています。
これは、ユーザー エントリを mysql に保存し、db からエントリを表示するゲスト ブック チュートリアルです。フォームにデータを入力して送信すると、ブラウザにこのエラーメッセージが表示されます

アクセス禁止! 要求されたオブジェクトにアクセスする権限がありません。読み取り保護されているか、サーバーから読み取れません。これがサーバー エラーであると思われる場合は、ウェブマスターに連絡してください。 エラー 403 localhost Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7

更新しました

guestbok.php

DBコードに接続

<?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());
?>

変数の初期化

<?php
// initiate some vars

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

投稿リクエストの処理

// 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>";
    */
}
?>

ゲストブック一覧

<?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\">";
}}

?>

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();
?>
4

2 に答える 2

1

2番目の質問への回答、クエリ結果を変数に割り当てておらず、mysql_affected_rows空でもあります。

$gb_query =     "insert into guestbook
        values(0, '$name', '$email', '$comment', '$date')";

$sql = mysql_query($gb_query);
$res = mysql_affected_rows($sql);
于 2012-10-10T12:30:44.763 に答える
1

このエラーは、Xampp 構成がディレクトリをブロックしていることが原因のようです。開発マシンを使用していて、セキュリティを気にしない場合は、xampp の apache/conf ディレクトリで httpd.conf というファイルを探してください。

これに似たディレクティブがそこにあります

<Directory />
    Options FollowSymLinks
    AllowOverride none
    Order deny,allow
    Allow from none
    Deny from all
</Directory>

これに置き換えます

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Deny from none
</Directory>

これにより、ルート ドライブ上のすべてのファイルが Web サーバーからアクセスできるようになります。これは、開発マシンでは問題ありません (ただし、この点について議論する人もいます)。

于 2012-10-11T09:30:50.383 に答える