0

プログラミング経験はありますが、PHPは初めてです。このチュートリアルで行っていた例に問題があります。私はそれを何百万回も見たり、ググったりしました。コードが機能しない理由がわかりません。

目的は、基本的に、レコードの追加とレコードの削除のボタンを使用して、php から sql への挿入と削除をテストすることです。レコードの追加ボタンは完全に機能しますが、削除はページをリロードする以外には何もしません。コードはこちら...

<?php // sqltest.php

require_once 'login.php';

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());

mysql_select_db($db_database, $db_server)
     or die("Unable to select database: " . mysql_error());

if (isset($_POST['author'])   &&
    isset($_POST['title'])    &&
    isset($_POST['type'])     &&
    isset($_POST['year'])      &&
    isset($_POST['isbn']))
{
    $author = get_post('author');
    $title = get_post('title');
    $type = get_post('type');
    $year = get_post('year');
    $isbn = get_post('isbn');

    if (isset($_POST['delete']) && $isbn != "")
    {
        echo "worked!!!!!!!!!!!!!!"; 
        $query = "DELETE FROM classics WHERE isbn='$isbn'";
        $result = mysql_query($query) or die(mysql_error());
        if(mysql_affected_rows($result) > 0) echo 'user deleted';

        //if (!mysql_query($query, $db_server))
        //echo "DELETE failed: $query" . mysql_error();
    }
    else
    {
        echo "nooooooooooooooooooo";
        $query = "INSERT INTO classics VALUES" .
        "('$author', '$title', '$type', '$year', '$isbn')";
        if (!mysql_query($query, $db_server)) 
        {
            echo "INSERT failed: $query" . mysql_error();
        }
    }
}

echo <<<_END
<form action="sqltest.php" method="post"><pre>
Author <input type="text" name="author" />
Title  <input type="text" name="title" />
Type   <input type="text" name="type" />
Year   <input type="text" name="year" />
ISBN   <input type="text" name="isbn" />
<input type='submit' value='ADD RECORD' />
</pre></form>
_END;



$query = "SELECT * FROM classics";

$result = mysql_query($query);

if (!$result) die ("Database access failed: " . mysql_error());

$rows = mysql_num_rows($result);

for ($j = 0 ; $j < $rows ; ++$j)
{
        $row = mysql_fetch_row($result);

echo <<<_END
<pre>
Author $row[0]
Title $row[1]
Type $row[2]
Year $row[3]
ISBN $row[4]
<form action="sqltest.php" method="post">
<input type="hidden" name="delete" value="yes" />
<input type="hidden" name='isbn' value="$row[4]" />
<input type='submit' value='DELETE RECORD' />
</form>
</pre>
_END;
}

mysql_close($db_server);

function get_post($var)
{
    return mysql_real_escape_string($_POST[$var]);
}

?>

私はこれを何度も見直しましたが、なぜこれが機能しないのかまだわかりません。このボタンが機能しないのは for ループですか? echo "worked!!!"; が表示されることに注意してください。そして、else echo "noooooooo"; ボタンがテストされているかどうかをテストするためのものでしたが、何も印刷されません。ボタンコード自体で何かを見逃したのでしょうか?また、エラーは表示されず、エディター (および私自身) は構文エラーを見逃していました (その場合)。

削除ボタンのコードは、DB を閉じる前の最後にあります。

事前にご協力いただきありがとうございます。

4

3 に答える 3

2

あなたの問題はあなたの最初のifブロックです。

投稿された変数の存在を確認していますauthor title type year isbn。一方、削除コードでは、送信される変数はdeleteisbn. したがって、最初のifブロックは完全に欠落しています (削除コードを含む)。

if最初をに変更する必要がありますif(isset($_POST)) { // a form has been posted。その後、動作するはずです。

それを行う別の方法:

if(isset($_POST['delete']) && isset($_POST['isbn']) && !empty($_POST['isbn'])){
    //delete code here
}

if(isset($_POST['author']) && isset($_POST['title']) && isset....){
    // insert code here
}

編集: 書き直されたコード:

<?php // sqltest.php

// I don't know what's in here, so I've left it
require_once 'login.php';

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());

mysql_select_db($db_database, $db_server)
     or die("Unable to select database: " . mysql_error());

if (isset($_POST))
{

    if (isset($_POST['delete']) && !empty($_POST['isbn']))
    {
        echo "Deleting"; 
        $query = "DELETE FROM classics WHERE isbn='".mysql_real_escape_string($_POST['isbn'])."'";
        $result = mysql_query($query) or die(mysql_error());
        if(mysql_affected_rows($result) > 0) echo 'user deleted';
    }
    else
    {
        echo "Inserting";
        $query = "INSERT INTO classics VALUES ('".mysql_real_escape_string($_POST['author'])."', '".mysql_real_escape_string($_POST['title'])."', '".mysql_real_escape_string($_POST['type'])."', '".mysql_real_escape_string($_POST['year'])."', '".mysql_real_escape_string($_POST['isbn'])."')";
        if (!mysql_query($query)) 
        {
            echo "INSERT failed: $query" . mysql_error();
        }
    }
}

// you don't need echo's here... just html
?>

<form action="sqltest.php" method="post">
    <pre>
        Author <input type="text" name="author" />
        Title  <input type="text" name="title" />
        Type   <input type="text" name="type" />
        Year   <input type="text" name="year" />
        ISBN   <input type="text" name="isbn" />
        <input type='submit' value='ADD RECORD' />
    </pre>
</form>

<?php

$query = "SELECT * FROM classics";

$result = mysql_query($query);

if (!$result) die ("Database access failed: " . mysql_error());

// a better way to do this:
while($row = mysql_fetch_array($result)){
?>

<pre>
    Author <?php echo $row[0]; ?>
    Title <?php echo $row[1]; ?>
    Type <?php echo $row[2]; ?>
    Year <?php echo $row[3]; ?>
    ISBN <?php echo $row[4]; ?>
    <form action="sqltest.php" method="post">
        <input type="hidden" name="delete" value="yes" />
        <input type="hidden" name='isbn' value="<?php echo $row[4]; ?>" />
        <input type='submit' value='DELETE RECORD' />
    </form>
</pre>

<?php
}

mysql_close($db_server);

?>
于 2012-07-01T01:03:24.707 に答える
-2

という名前のフォーム フィールドがないdeleteため、削除コード パスを取得することはできません。

送信ボタンの値を使用して何をすべきかを決定しようとしていると思いますか? その場合、name送信ボタンにも属性がありません。それがないと、フォームで値を送信できません。あなたはおそらく欲しい:

<input type="submit" name="submit" value="DELETE RECORD" />

そして持っている

if (isset($_POST['submit']) && ($_POST['submit'] == 'DELETE RECORD')) {
   ...
}
于 2012-07-01T01:01:43.370 に答える