2011-02-03 19 views
3

ウェブサイトのリンクをクリックするとMySQLのフィールド(+1)を更新する簡単なコードで助けが必要です。これは、コメントデータベースの「レポート」ボタン用です。PHP/MySQL>リンクがクリックされたときにフィールドを更新

コメントが何回報告されたかを見ることができます。スクリプトが新しいページをリダイレクトまたはロードせず、メッセージまたはJSアラートをエコーすることが重要です。

ありがとうございました。

+1

あなたはAJAXを探していると思います。 – Konerak

+0

+1ようこそ。あなたの質問をよりよく説明すると、正確な回答が得られます:)また、あなたの質問を再度編集し、答えの下のコメントを使って対話する人と対話することができます:) – Sarfraz

+0

まだ何か試しましたか?あなたができること、実際のコード(誰かがあなたのためにやっている人)、または何の一般的な概要を探していますか? –

答えて

3
$sql = "update `table` set `increment` = `increment` + 1 where `link` = '".$link."'"; 

これは単なるクエリです。リクエストを処理するにはjquery ajaxを調べるべきです

some.phpでは、投稿を読む方法が必要です。あなたはjQueryのポストのデータパラメータである、あなたのAJAX要求に行IDを送信すると仮定すると、

<?php 
if(isset($_POST['clicked_row'])) 
{ 
    $sql = "UPDATE $row_to_update SET increment = increment + 1 WHERE id = '".$_POST['clicked_row']."'"; 
    mysql_query($sql); 
} 
?> 

、あなたのHTMLはそうjqueryのコールがいくつかに送信するどのような行を知っている<a href="javascript:increment(row_id);">Add click</a>ようなものにする必要があります。 ph

+0

これは本当にこのサイトへの参加を防ぐ素晴らしい方法です。どのような理由からマイナス矢印をクリックしますか?彼は簡単に言った。彼の質問に基づいて、「行=行+1」と答えてデータベーステーブルのカウントを増やすことができないので、答えが有効であるとは思われませんでした。そうでなければ、何? jQueryステートメントとphpとmysqlのポストスクリプト全体テーブル名は提供されていないので、汎用性を持たなければなりません。なぜ、この質問のすべての答えがドッキングされていないのですか?真剣に、人々。 –

+0

あなたの答えをありがとう。私はクエリを行うことができますが、リンクがクリックされたときにどのように実行するのですか? – Tom

+0

@Kai Qing - あなたが下票を取ったなら、それは世界の終わりではありません。私はあなたを投票していないし、そのままではないだろうが、物事の壮大な計画では、それは洗濯で出てくるだろう。 :) –

1

これは実際には単純ではありません。

あなたはここになります。 http://www.tizag.com/ajaxTutorial/ajax-mysql-database.php

あなたのSQLは次のようになります。

$.post('yourScript.php', {commentID: yourCommentId}); 

2番目の引数は要求データである:AJAX要求を送信するために

"UPDATE post SET flagcount = flagcount + 1 WHERE postID = {$myPostID}" 
+0

彼はAJAX操作、すなわちjQuery Mootoolsなどを処理するためにライブラリを使うことができると言及する価値があるかもしれません – Serge

+0

実際これは本当に簡単です。あなたのリンクはかなりいいですが、少し古くなっています。 – Konerak

+0

はい、jQueryとMooToolsも便利です。 – polyhedron

0

使用jQuery。あなたのニーズに合わせてそれを変更してください。あなたがJavaScript関数を実行したい場合は要求が完了した後:

$.post('yourScript.php', {commentID: yourCommentId}, function(data) { 

}); 
1

はいあなたは、データベース内の答えをアップグレードし、あなたのPHPスクリプトの一部にPOSTリクエストを作るAJAXを探す必要があります。 jqueryのような何か?

$('a').click(function(event) { 
    $.ajax({ 
     type: "POST", 
     url: "some.php", // page where insertion to database should have made 
     data: "name=John", 
     success: function(msg){ 
     alert("Counter updated"); 
     } 
    }); 
}); 
0

フォームを使用できますか?その後、

<form method="post" action="report.php"> 
    <input type="hidden" name="report"> 
    <input type="submit" name="submit" value="report"> 
</form> 

そしてreport.phpファイルにクエリを持っていますか?

+0

はい、それは 'report.php'にリダイレクトされ、フォームがあったページにリダイレクトする必要があります。 jQueryと '$ .ajax'を見てください。 – Andrew

+0

ハム、それについて考える:私はちょっと新しいページにリダイレクトするアイデアが好きだ。テキストボックスがあるので、ユーザーは報告した理由を投稿することができると思う。 – Tom

+0

jqueryプルアップボックスにテキストフィールドがあります。 $( '#your_form')。toggle();を使用します。クリックして表示と非表示を切り替えると、var message = $( '#text_area')でメッセージとフィールドIDを取得できます。 var id = $( '#field_id')。val();これらの変数をjqueryデータパラメータに追加します。これはあなたのテキスト領域が "text_area"というIDを持ち、増分するフィールドが "field_id"の隠れた入力IDを持っていると仮定します。 –

2

あなたができることの概要。私はいくつかの仮定を行い、POSTの代わりにURLメソッドを使用してGETを選択しました。 POSTを使用したい場合は、好みに合わせて編集してください。

別のメモ - 誰にフラグを設定した人に従うことができるように、フラグテーブルが必要な場合があります。

これは、あなたが尋ねたことをどのように行うことができるかを示すためのものです。私はコードをテストしていないので、バイヤーは注意してください。これは単なる出発点に過ぎない。

view.php

あなたは、エンドユーザーがフラグスクリプトを有効にするときにクリックすることリンクを持っているところです。あなたのマークアップのどこかに、あなたのようなものがあります...その後、view.phpコンテンツ内、あなたがこのような場合にはjQueryの非同期JavaScriptの要求($アヤックスを()しようとクリックイベントコードを持つことになり、$に.getや$ .post可能性があり

<a class="flag" href="flag.php?comment=100">Flag</a> 

、またはMooToolsやPrototypeのような別のライブラリ)。

この例では、データ引数にJSON形式のテキストが返され、サーバーが応答した内容を確認するために評価されます(成功?失敗?部分的成功?ログインが必要かどうか)。 http://json.org/を参照してください。

<script type="text/javascript"> 

$(document).ready(function(){ 
    $('a.flag').click(function(event){ 
     $.ajax({ 
      type: "GET", 
      url: $(this).attr('href'), 
      data: dataString, 
      dataType: "json", 
      success: function (data) { 
       if (data.error == -1) { 
        // Not logged in, redirect to login page. 
        window.location = 'login.php'; 
       } else if (data.flagged == 1 && data.count != -1) { 
        // Success! With a count too. 
        alert('Comment flagged ('+data.count+' times flagged).'); 
       } else { 
        switch(data.error) { 
         case 1: 
          alert('Comment not found'); 
         break; 
         case 2: 
          alert('Comment not flagged due to an update error.'); 
         break; 
         case 3: 
          alert('Comment flagged but count not returned.'); 
         break; 
         default: 
          alert('There was a general error flagging the comment.'); 
         break; 
        } 
       } 
      }, 
      error: function(){ 
       alert('Comment not flagged; general send error.'); 
      } 
     }); 

     // Call these to prevent the a tag from redirecting 
     // the browser to the a-tags href url. 
     event.preventDefault(); 
     return false; 
    }); 
}); 

</script> 

flag.php

flag.phpはもちろんのPHPを使用して、あなたはMySQLのクエリを実行することができ、その後、いくつかのJSON形式のテキストで応答サーバーページです。ページによって返されたコンテンツ(テキストは)のようなものになります。コメントはフラグが立てられたこと(ブラウザで)これはあなたの呼び出し元のページに示すことになる

{"flagged":1,"count":15,"error":0} 

を、フラグが付けられている15回(悪い、悪いコメント) 、エラーがないことを確認してください。

これは重要です。これは、HTMLと等価ではないです。このタイプのテキストはデータであり、$ .ajax()関数への応答としてJavascriptオブジェクトに解析されます。だから、それの周りにHTMLを置かないでください。なぜなら、それはあなたがするべきものではないからです。例はhttp://www.json.org/example.htmlを参照してください。

<?php 

// Need to output JSON headers and try to prevent caching. 
session_cache_limiter('nocache'); 
header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

// Our JSON array to return 
// - flagged would be 1 = success, 0 = failure 
// - count would return the # flags, with -1 no return # 
// - error code, see comments for description 
$json = array('flagged'=>0,'count'=>-1,'error'=>0); 

// Your logged in check code goes here 
// you don't want non-logged in people doing this 

// Here, however you test to find out if someone is logged in, 
// check and return a -1 error to redirect the login.  
if (!$logged_in) { 
    // error -1 = not logged in, redirect browser 
    $json['error'] = -1; 
    exit(echo(json_encode($json))); 
} 

// Your mysql connection code goes here 

$comment = mysql_real_escape_string($_GET['comment']); 

if (empty($comment) || !is_numeric($comment)) { 
    // error 1 = comment id not found 
    $json['error'] = 1; 
} else { 
    $result = mysql_query(" 
UPDATE comments 
SET flags = flags+1 
WHERE commentID = $comment 
"); 
    if (!$result) { 
     $json['flagged'] = 0; 
     // error 2 = update error 
     $json['error'] = 2; 
    } else { 
     $json['flagged'] = 1; 
     $count = mysql_query(" 
SELECT flags 
FROM comments 
WHERE commentID = $comment 
LIMIT 0, 1 
"); 
     if ($count) { 
      $query = mysql_fetch_assoc($count); 
      $json['count'] = $query['count']; 
     } else { 
      // error 3 = updated but did not get count 
      $json['error'] = 3; 
     } 
    } 
} 

echo json_encode($json); 

?> 
+0

これは実際に受け入れられる答えとしてマークする必要があります。完全で正しい。非常に役立ちます。 –

+0

ありがとうございました。このタイプの質問は問題になる可能性がありますが、より詳細で詳細な回答が必要ですが、(一般的に)早期回答が頻繁に投票されます。それでトレードオフです:簡潔または部分的な答えを与え、いくつかの票を得るか、長く、詳細で、時間がかかる回答と誰もそれを見ないリスク、またはポスターが質問を放棄します。私は時間があったので(私がいる冬の天候に直面しているので、私は仕事の代わりに家にいます)、私は先に進み、これを運動として行いました。もっとうまくいっていたのはそれをテストしていただろうが、今はサーバーの設定がない。 –

+0

@Kai Qing - あなたの答えに時間を費やしてそれを試しても、必ずしも投票とポイントで終わるとは限りません。だから、1回の投票で形状が崩れると、StackOverflowで長く続くことはありません。 :) –

関連する問題