1

私はphpとmysqlが初めてなので、これはとても簡単だと思います!

クリックされたボタンに応じて、特定のエントリを増やしたいと思います。私が抱えている問題は、どのエントリをphp経由でインクリメントするかをmysqlに伝える方法がわからないことです。

while ループを使用してテーブルを表示し、各行の最後に name = $row[id] value = $row[likes] のボタンを追加しています。名前が単なる単語の場合は問題ありませんが、それが含まれる行に応じて異なる必要があります(自動インクリメントの行IDを使用していますが、表示されませんが存在します) .

私の .html:

$host="xxx";
$username="xxx";
$password="xxx";
$db_name="xxx";
$tbl_name="blog";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$result = mysql_query("SELECT * FROM $tbl_name ORDER BY id DESC");

echo "<table id='blog'>
<tr>
<th>Update</th>
<th>Likes</th>
</tr>";

while($row = mysql_fetch_array($result)) {
    echo "<tr>";
    echo "<td id='entry'>" . $row['entry'] . "</td>";
    echo "<td id='like'>" . "<form action ='likes.php' method ='post'>" . "<input type='submit' name='$row[id]' value='$row[likes]' />" . "</form>" . "</td>";              
    echo "</tr>"; }
echo "</table>";
mysql_close($con);
?>

私の.php:

<?php
$con = mysql_connect("xxx","xxx","xxx");
if (!$con) {
    die('Could not connect: ' . mysql_error()); }

mysql_select_db("xxx", $con);

if(mysql_query("UPDATE blog SET likes = likes +1 WHERE id = '$_POST[$id]'")) {
    header('location:blog.php'); }
else {
    echo "Error: " . mysql_error(); }
mysql_close($con);
?> 

私がしたいのは、HTMLドキュメントの 'input name = $row[id]' を WHERE id = $_POST[id] にリンクして、ボタンのクリックでいいね数を増やすことだけです。

前もって感謝します!!

4

1 に答える 1

1

フォーム内の非表示の入力を使用して、どのエントリをインクリメントするかを PHP 側に伝えます。

echo "<td id='like'><form action ='likes.php' method ='post'><input type='hidden' name='id' value='" . (int)$row['id'] . "' /><input type='submit' name='submit' value='" . (int)$row['likes'] . "' /></form></td>";

クエリ行は次のようになります。

if(mysql_query("UPDATE blog SET likes = likes +1 WHERE id = '" . (int)$_POST['id'] . "'")) {

ID を としてキャストしたことに注意してください(int)。これにより、クエリでの SQL インジェクションが防止され、出力時の XSS が防止されます。

送信ボタンはデータの転送に信頼性がありません。これは、状況によっては、すべてのブラウザーが実際に送信ボタンを POST/GET 変数として送信するとは限らないためです。

私が気付いたもう1つのことは、次のようにする$row[likes]必要があるこの構文の使用です。

$row['likes']

引用符を含めない場合、PHP は最初likesに定数として扱い、定義されていない場合は文字列としてフォールバックします。

于 2012-12-06T16:05:40.853 に答える