3

私はPHPに非常に慣れていません。ユーザーが引用を入力できるようにしたいページがあり、その情報は、データベースに対してクエリを実行し、フォームで情報を返し、ユーザーが任意のフィールドを更新できるようにするphpスクリプトに渡されます。その形で返されます。

私には3つの問題があります:

1)データが返されるとき、はフィールドの最初の単語のみを返します。多くのフィールドには複数の単語が含まれています。

2)ユーザーがフィールドのデータを変更しても、データベースは更新されません。

3)データ入力のようにフォームフィールドを表示する方法がわからないようです。

ユーザーが必要に応じて確認および更新するためにデータをクエリして返すコードは次のとおりです。

<?php  


mysql_connect("***************", "*********", "****") or die(mysql_error()); 
mysql_select_db("***********") or die(mysql_error()); 

$searchterm= $_POST['searchterm'];

$query = "SELECT Citation, Category, Overview, Facts, Decision, Keywords, Link     FROM     cases WHERE citation = '$searchterm'";

$result  = mysql_query($query);

while ($row = mysql_fetch_assoc($result))
{
    echo "<form action=".$_SERVER['PHP_SELF']." method=post>" .
         "Case Citation: <input type=text name=Citation value={$row['Citation'] }><br>" .
     "Category: <input type=text name=Category value={$row['Category'] }><br>" . 
     "Overview: <input type=text name=Overview value={$row['Overview'] }><br>" . 
     "Case Facts: <input type=text name=Facts value={$row['Facts'] }><br>" . 
     "Decision: <input type=text name=decision value={$row['Decision'] }><br>" . 
     "Keywords: <input type=text name=Keywords value={$row['Keywords'] }><br>" . 
     "Weblink: <input type=text name=Link value={$row['Link'] }><br>" . 
     "<input type=submit name=submit value=Update>" .
     "</form>";
} 

//when they click submit
if (isset($_POST['submit'])) { 

$Citation=$_POST['Citation'];
$Category=$_POST['Category'];
$Overview=$_POST['Overview'];
$Facts=$_POST['Facts'];
$Decision=$_POST['Decision'];
$Keywords=$_POST['Keywords'];
$Link=$_POST['Link'];

$update = "UPDATE IGNORE cases SET citation='$citation', category='$category', overview='$overview', facts='$facts', decision='$decision', keywords='$keywords', link='$link' WHERE citation = '%$searchterm%'";
$add = mysql_query($update);

} 
  ?>

データを追加するために使用するフォームは次のとおりです。

<form action="process.php" method="post"> 
Case Citation: <input type="text" name="citation" size=128><br> 
Category: <input type="text" name = "category" size=56><br> 
Overview: <textarea class="textarea" cols="96" row="8" name = "overview"> </textarea><br> 
Case Facts:  <textarea class="textarea" cols="96" row="8" name = "facts"></textarea><br>
Decision:  <input type="text" name = "decision" size=56><br>
Keywords: <textarea class="textarea" cols="96" row="8" name = "keywords"></textarea><br>
Web Link: <input type="text" name = "link" size=128><br>
<input type="submit" value="Submit"> 
</form> 

そして、これは情報をデータベースに保存するコードです。

<? 
  $citation=$_POST['citation']; 
  $category=$_POST['category']; 
  $overview=$_POST['overview']; 
  $facts=$_POST['facts']; 
  $decision=$_POST['decision']; 
  $keywords=$_POST['keywords']; 
  $link=$_POST['link']; 
  mysql_connect("*************", "************", "*********") or die(mysql_error()); 
  mysql_select_db("************") or die(mysql_error()); 
  mysql_query("INSERT INTO `cases` VALUES ('$citation', '$category', '$overview', '$facts', '$decision', '$keywords', '$link')"); 
  Print "Your information has been successfully added to the database.  Add case page will automatically reload."; 

?> 
4

2 に答える 2

0

最初の (そしておそらく残りの...) 問題は、フォームの作成方法によって引き起こされます。

echo "<form action=".$_SERVER['PHP_SELF']." method=post>" .
     "Case Citation: <input type=text name=Citation value={$row['Citation'] }><br>" .
 "Category: <input type=text name=Category value={$row['Category'] }><br>" . 
 "Overview: <input type=text name=Overview value={$row['Overview'] }><br>" . 
 "Case Facts: <input type=text name=Facts value={$row['Facts'] }><br>" . 
 "Decision: <input type=text name=decision value={$row['Decision'] }><br>" . 
 "Keywords: <input type=text name=Keywords value={$row['Keywords'] }><br>" . 
 "Weblink: <input type=text name=Link value={$row['Link'] }><br>" . 
 "<input type=submit name=submit value=Update>" .
 "</form>";

すべての属性の値は引用符で囲まれていないことに注意してください。したがって、html では入力の 1 つが次のようになります。

Decision: <input type=text name=decision value=this is some text from that field><br>

これは有効な html ではありません。

すべての値を引用符で囲み、html で使用するためにそれらを準備 / エスケープする必要があります。

 'Decision: <input type=text name=decision value="' . htmlspecialchars($row['Decision']) . '"><br>' . 
 etc.

それとは別に、SQL インジェクションの問題があり、PDO (または mysqli) に切り替えて、変数がバインドされた準備済みステートメントを解決する必要があります。

SQL インジェクションの問題は、危険にさらされるだけでなく、値の 1 つにたとえば'文字が含まれている場合、SQL を簡単に無効にすることに注意してください。

于 2013-01-22T18:05:21.433 に答える
0

while ループで、value={$row['Citation'] } を確認します。

データベースのフィールド名の最初の文字は大文字ですか?

データベースのフィールド名をもう一度確認してください。

于 2013-01-23T11:56:36.380 に答える