1

PHP のスキルを伸ばしたかったので、tutorialzine のチュートリアルを読みました。チュートリアルに示されている指示を理解しています。しかし、それを拡張することになると、接続が不足しているようです。私の主な目標は、タグがクリックされたときに選択したメモを単純に削除することでした。ただし、メモに割り当てられた ID を選択して削除機能に渡す方法がわかりません。

ソース: http://tutorialzine.com/2010/01/sticky-notes-ajax-php-jquery/

助けてくれてありがとう。

<?php
error_reporting(E_ALL^E_NOTICE);
require 'connect.php';
mysql_query("DELETE FROM notes WHERE id>3 AND dt<SUBTIME(NOW(),'0 1:0:0')");
$query = mysql_query("SELECT * FROM notes ORDER BY id DESC");

$notes = '';
$left='';
$top='';
$zindex='';

while($row=mysql_fetch_assoc($query)){
    list($left,$top,$zindex) = explode('x',$row['xyz']);
    $notes.= '
        <div class="note '.$row['color'].'" style="left:'.$left.'px;top:'.$top.'px;z-index:'.$zindex.'">
            '.htmlspecialchars($row['text']).'
            <div class="author">'.htmlspecialchars($row['name']).'</div>
            <span class="data">'.$row['id'].'</span>
            <a id="remove_note" href="javascript:;" onclick="deleteNote('<? echo $row['id']; ?>');">&nbsp;</a>
        </div>';
}
function deleteNote(id){
    $sql="DELETE FROM notes WHERE id='$rows['id']'";
    $result=mysql_query($sql) or die("Error when tryin to delete note.");
}
?>

アップデート:

私はこれと、Andrew と sachleen の両方が提供した答えをいじっています。また、SQL インジェクションの問題全体について言及したので、AJAX の代替案に取り組む計画はありません。しかし、id を remove.php ファイルに渡す際にまだ問題があります。$notes が DB から情報を作成する方法に関係があると思います。

これを言うのは、次のようになるからです: Parse error: syntax error, unexpected T_STRING in /home/avonamyd/public_html/projects_php/sticky_notes/demo.php on line 24

それは、sachleen のコードをそのままインクルードした場合のみです。しかし、一重引用符を考慮して更新すると、次のコードになります。ID が存在し、remove.php ファイルに渡されますが、まだエラーが発生します。これは、私が自分のコードまたはあなたが提供したものを使用するときです。

        $notes.= '
        <div class="note '.$row['color'].'" style="left:'.$left.'px;top:'.$top.'px;z-index:'.$zindex.'">
            '.htmlspecialchars($row['text']).'
            <div class="author">'.htmlspecialchars($row['name']).'</div>
            <span class="data">'.$row['id'].'</span>
            <a id="remove_note" target="_blank" href="remove.php?id='.$row['id'].'">&nbsp;</a>
        </div>';

以下は、現在 remove.php ファイルにあるものです。

<?php
include 'connect.php';
$_GET['id'];
function deleteNote($id){
    $sql="DELETE FROM notes WHERE id='$id'";
}
    $result=mysql_query($sql) or die("Error when tryin to delete note.");

?>

アップデート

remove.php 全体に追加のエコー行を追加しましたが、これが私が考えているものです。

<?php
include 'connect.php';
$_GET['id'];
echo  $id; --doesnt show
function deleteNote($id){
    echo "hello"; --doesnt show
    $sql="SELECT FROM notes WHERE id='$id'";
}
echo  'hello2'; --shows
$result=mysql_query($sql) or die("Error when tryin to delete note.");

?>

更新: このプロジェクトの皆さんの助けに感謝します。いじくり回した後、頭の中でクリックする概念を最終的に得ました。このコードに出くわした他の人のために、以下の機能コードを投稿します。=D Thx みんな!

デモ.php

    error_reporting(E_ALL^E_NOTICE);
require 'connect.php';
mysql_query("DELETE FROM notes WHERE id>3 AND dt<SUBTIME(NOW(),'0 1:0:0')");
$query = mysql_query("SELECT * FROM notes ORDER BY id DESC");

$notes = '';
$left='';
$top='';
$zindex='';

while($row=mysql_fetch_assoc($query)){
    list($left,$top,$zindex) = explode('x',$row['xyz']);
    $id = $row['id'];
    $notes.= '
        <div class="note '.$row['color'].'" style="left:'.$left.'px;top:'.$top.'px;z-index:'.$zindex.'">
            '.htmlspecialchars($row['text']).'
            <div class="author">'.htmlspecialchars($row['name']).'</div>
            <span class="data">'.$row['id'].'</span>
            <a id="remove_note" target="_blank" href="remove.php?id='.$row['id'].'">&nbsp;</a>
        </div>';
}

remove.php

<?php
include 'connect.php';
$id = intval($_GET['id']);
$sql="DELETE FROM notes WHERE id=$id";
$result = mysql_query($sql) or die("Unable to delete database entry.");

?>

4

3 に答える 3

3

JavaScript と PHP を混在させようとしているようです。PHP 関数であるため、リンクがクリックされたときに deleteNote() 関数を呼び出すことはできません。PHP スクリプトを呼び出してメモを削除するには、いくつかの方法があります。

次のようなものを使用します。

<?php
// ...
$id_to_delete = $_GET['id'];
if( isset($id_to_delete) ) {
    $sql="DELETE FROM notes WHERE id='$id_to_delete'";
    $result=mysql_query($sql) or die("Error when tryin to delete note.");
}
$query = mysql_query("SELECT * FROM notes ORDER BY id DESC");

//...

while($row=mysql_fetch_assoc($query)){
   //...
   echo '<a id="remove_note" href="CURRENT_SCRIPT_URL?id=' . $id_to_delete . '">X</a>';
   //...
}
?>

または、渡したデータに基づいてデータベースから行を削除する 2 つ目のスクリプトを作成し、ajax を使用して (ajax 機能には jQuery を使用することをお勧めします)、削除するアイテムの ID でそのスクリプトを呼び出すことができます。

誰でも GET パラメーターを使用してスクリプトを呼び出し、データベースからレコードを削除する (さらに悪い場合は、SQL インジェクション攻撃を実行する) 可能性があることに注意してください。 !

于 2012-07-03T04:20:04.287 に答える
3

onclickPHP 関数を使用することはできません。JavaScript と PHP を混在させています。私はこれを行います:

<a id="remove_note" href="remove.php?id=<?php echo $row['id']; ?>">Remove</a>

次にremove.php、ID を使用して取得し、それをクエリ$_GET['id']に渡します。DELETE

于 2012-07-03T04:12:04.807 に答える
1

2つのオプションがあります。

1)<a href="another_php_script.php?delete=true">(または同様の)を作成してから、削除スクリプトを実行します。(その後、ヘッダーを元の同じページに戻します)。

これは、onClick php関数を実行できないため、他のページにリダイレクトする必要があるためです。

2)onclick関数を使用してAJAXスクリプトを呼び出し、リダイレクトせずに、現在のページからPHPスクリプトの削除を実行できます。

オプション1は簡単なオプションであり、オプション2は学ぶのに適したオプションです。

于 2012-07-03T04:59:47.937 に答える