2016-07-22 11 views
2

私のコードには間違いなく簡単に思えるかもしれないエラーがありますが、何時間も見てきましたが、まだ問題を特定できませんでした。

データベースレコードを編集するには、私が編集ページにレコードIDを渡すには次のリンクを使用します。

<a href="edit_short.php?id=<?php echo $short->id; ?>">Edit</a> 

...と、ここにedit_short.phpファイルです:

$title = ""; 
$short_text = ""; 
$id = 0; 

if (isset($_GET['id'])) { 
    $id=$_GET['id']; 
    $short = (object)Short::find_by_id($id); 

    $title = $short->title; //my problem is the scope of $title and $short_text 
    $short_text = $short->short_text; //is limited within this if statement 
} 
if (isset($_POST['edit_short_btn'])) { 
    echo $title."<br/>"; 
    echo $short_text."<br/>"; 
} 

この送信するフォームです:

<form method="POST" action="edit_short.php" id="post_form"> 
    <table> 
     <tr> 
     <td><input type="text" name="title" value="<?php echo $title; ?>" class="textField" placeholder="Title of short"></td> 
     </tr> 
     <tr> 
     <td><textarea name="short_text" id="short_text" placeholder="Short text"><?php echo $short_text; ?></textarea></td> 
     </tr> 
     <tr> 
     <td><input type="submit" name="edit_short_btn" value="Update short"></td> 
     </tr> 
    </table> 
    </form> 

送信されたIDが設定されていることを確認することができます$_GET['id']と私はedit_short.phpの$ idにその値を渡すことができますが、レコードを取得して$ titleと$ short_text変数を設定すると、if (isset($_POST['edit_short_btn']))ステートメントでアクセスできません。

がどのように私は$_GET['id']$_POST['edit_short_btn']はまだ設定されており、両方の任意の助けあなたのコードに基づいて

+0

申し訳ありません私の質問の始めに表示されたリンクをクリックして表示される表は、この 'id'とは何の関係もないので、隠された入力として' id'を渡すことによって何を意味するのかまだ分かりません。 –

+0

フォームは 'edit_short.php'ファイルにあり、更新されるべきレコードの以前の値を含むはずです。フォームは 'edit_short.php'に提出され、' id'は前のページからです(申し訳ありませんが、私はそれを含めませんでした) –

+0

今あなたの意見を見ています。おかげさまで、私は確認する必要はありません。それは動作します –

答えて

3

ため$title

$short_text感謝を表示することができることをチェックしますか、あなたは両方を持っていることは決してないだろう同じ場合には$_GETケースと$_POSTケースです。 $_GETケースをクリックすると(ページURLには?id=...クエリ文字列が含まれます)、フォームを送信した後には$_POSTケース(クエリ文字列なし)をクリックすると、ケースが表示されます。

2

GETはリンククリックでのみ送信されます。あなたのフォームはPOSTを送信していますので、必要なすべてのデータポイントをフォームに入れる必要があります。 hidden入力タイプを使用すると、フォームに非表示の値を含めることができます。だから、使用することができるはずです。

<form method="POST" action="edit_short.php" id="post_form"> 
    <input type="hidden" value="<?php echo intval($_GET['id']);?>" name="id" /> 
    <table> 
     <tr> 
     <td><input type="text" name="title" value="<?php echo $title; ?>" class="textField" placeholder="Title of short"></td> 
     </tr> 
     <tr> 
     <td><textarea name="short_text" id="short_text" placeholder="Short text"><?php echo $short_text; ?></textarea></td> 
     </tr> 
     <tr> 
     <td> 
</form> 

その後idを得るためにあなたの処理スクリプトに$_POST['id']を使用しています。 idは整数にすぎないため、intvalはXSS防止方法です。 XSSの注射を防ぐために、他のアプローチを参照してください(これはSQLインジェクションを停止することはありません、パラメータ化クエリは、まだ処理スクリプトで使用する必要があります):から得ているid` chris85、 `@

How to prevent XSS with HTML/PHP?
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

関連する問題