0

シンプルなバグ追跡ツールを構築しています。新しいプロジェクトを作成できます。プロジェクトを作成するときに、フォームに入力する必要があります。そのフォームは project.class.php (このコード) に投稿されます。

$name        = $_POST['name'];
$descr       = $_POST['description'];   
$leader      = $_POST['leader'];    
$email       = $_POST['email'];

$sql="INSERT INTO projects (name, description, leader, email, registration_date)
VALUES ('$name', '$descr', '$leader', '$email', NOW())";

$result = mysql_real_escape_string($sql);
$result = mysql_query($sql); 

if($result){
header('Location: ../projectpage.php?id='.mysql_insert_id());
}
else {
echo "There is something wrong. Try again later.";
}

mysql_close();

(まだSQLインジェクションの証明ではなく、完全にはほど遠い...)

最終的に、MySQL データベースに保存されている ID にリンクされている一意のプロジェクト ページにリダイレクトされます。そのプロジェクトの名前をページに表示したいのですが、常にデータベース内の最初のプロジェクトの名前が表示されます。

(ここでは、MySQL データベースからデータを選択します。)

$query = 'SELECT CONCAT(name) 
AS name FROM projects';

$result = mysql_real_escape_string($query);
$result = mysql_query ($query);

(ここでは私のページにプロジェクトの名前を表示していますが、これは常に MySQL データベースの最初のプロジェクトの名前です)

    <?php 
    if ($row = mysql_fetch_array ($result))
        echo '<h5>' . $row['name'] . '</h5>'; 
    ?>  

適切なプロジェクトの名前を表示するにはどうすればよいですか? IDに紐付いてるやつ?WHERE .... を使用できますか?

4

3 に答える 3

0

はい、取得するプロジェクトを指定するには、WHERE を使用する必要があります。また、プロジェクトを 1 つだけ取得する場合に CONCAT 関数を使用する理由もわかりません。

その他の重要なことは、パラメーターをクエリ文字列に入れる前に、パラメーターに対して mysql_real_escape_string() 関数を使用する必要があることです。また、受け取る特定の種類のデータに対して適切な関数を使用します。

したがって、プロジェクトを取得するためのステートメントは次のようになります。

SELECT name FROM projects WHERE id = ' . intval($_GET['id'])

また、mysql_fetch_assoc() 関数を使用する前に、結果にレコードがあるかどうかを確認します。

if(mysql_num_rows($result) > 0)
{
  $project = mysql_fetch_assoc($result);
  /* $project['name'] */
}
于 2013-08-03T13:38:26.630 に答える
0

これを試して

// first get the id, if from the url use $_GET['id']
$id = "2";  
$query = "SELECT `name` FROM `projects` WHERE `id`='".intval($id). "'";
$result = mysql_query(mysql_real_escape_string($query));

use mysql_fetch_row、ここでは各レコードをループする必要はなく、単一の行を返すだけです

// if you want to fetch single record from db
// then use mysql_fetch_row()
$row = mysql_fetch_row($result);
if($row) {
    echo '<h5>'.$row[0].'</h5>';
}

$row[0]選択クエリで言及された最初のフィールドを示します。name

于 2013-08-03T13:41:43.113 に答える
-1

助けになるかもしれません:

現在、クエリ文字列パラメーターを割り当てていますprojectpage.php?id=

ページにアクセスすると、SQL は次のようにクエリ文字列パラメーターを取得してフィルター処理する必要があります。

$query = 'SELECT CONCAT(name) AS name FROM projects WHERE projectid ='. $_GET["id"];

$result = mysql_real_escape_string($query);
$result = mysql_query ($query);

また、安全のために、結果を割り当てた直後に mysql_insert_id() を移動することもできます。

$result = mysql_query($sql);
$insertId = mysql_insert_id();

次に、それをクエリ文字列に割り当てるときに、パラメーターと

header('Location: ../projectpage.php?id='.$insertId);
于 2013-08-03T13:28:37.643 に答える