ホームページ  >  記事  >  バックエンド開発  >  XXX.php?id=について、XXX.phpの変数idが利用できる条件は何ですか?解決

XXX.php?id=について、XXX.phpの変数idが利用できる条件は何ですか?解決

WBOY
WBOYオリジナル
2016-06-13 12:03:581804ブラウズ

XXX.php?id=について、XXX.phpの変数idが利用できる条件は何ですか?
私は PHP を初めて使用するので、現時点ではこの問題がよくわかりません。

<br /><?php <br />	include("conn.php");	<br />	if(!empty($_GET['id']))<br />	{<br />		$id=$_GET['id'];<br />		$sql="select * from `user` where `id`='$id'";<br />		$query=mysql_query($sql);<br />		$result=mysql_fetch_array($query);<br />	}	<br />	if(!empty($_POST['sub']))<br />	{<br />		//$id=$_GET['id'];<br />		$title=$_POST['title'];<br />		$content=$_POST['content'];<br />		$id=$_POST['hid'];<br />		$sql="update `user` set `title` = '$title', `content` = '$content' where id='$id limit 1'";<br />		mysql_query($sql);<br />		echo "<script> alert('更新完成'); location.href='index.php'</script>";<br />	}<br />?><br /><form action="edit.php" method="post"><br /><input type="hidden" name="hid" value="<?php echo $result['id'] ?>"><br><br />标题<input type="text" name="title" value="<?php echo $result['title'] ?>"><br><br />内容<textarea rows="5" cols="50" name="content"><?php echo $result['content'] ?></textarea><br><br /><input type="submit" name="sub" value="提交"><br /></form><br /><br />


マイクロブログについて説明している php100 のビデオを見ました。ブログの編集機能を実装するには、次のように、index.php に編集リンクを配置します:
<br /><h2><?php echo $result['title']; ?><br />				|<a href = "edit.php?id=<?php echo $result['id'];?>">编辑</a> <br />				<a href = "delete.php?id=<?php echo $result['id'];?>">删除</a>|</h2><br />

問題は、edit.php にある場合、2 番目のリンクを直接使用できないのはなぜでしょうか。 ? この ID を呼び出すとき (コード内のコメント行など、その場合、未定義のインデックス ID が報告され、編集は有効になりません)、フォームに非表示を再挿入する必要がありますか?

-----解決策---------
3521de9dad2bb8c0a1af31a89d78ce39">Edit5db79b134e9f6b82c0b36e0489ee08ed
これはリスト ページから編集ページへの URL である必要があります。 は $_GET を使用して取得されており、コードは正しいです。

内容を変更したら、送信を押します。フォームのメソッドは$_POSTです。 $_GET['id'] には $_POST を使用して取得する必要があるため、当然データはありません。ただし、hidden を追加し、$id=$_POST['hid']; を使用して取得しました。
<br /> if(!empty($_POST['sub']))<br />    {<br />        //$id=$_GET['id'];<br />        $title=$_POST['title'];<br />        $content=$_POST['content'];<br />        $id=$_POST['hid'];<br />        $sql="update `user` set `title` = '$title', `content` = '$content' where id='$id limit 1'";<br />        mysql_query($sql);<br />        echo "<script> alert('更新完成'); location.href='index.php'</script>";<br />    }<br />



コードは次のように最適化できます:
<br />include("conn.php");   <br /><br />if(isset($_POST['sub'])){ // 判斷是否提交表單<br />    $title=$_POST['title'];<br />    $content=$_POST['content'];<br />    $id=$_POST['hid'];<br />    $sql="update `user` set `title` = '$title', `content` = '$content' where id='$id limit 1'";<br />    mysql_query($sql);<br />    echo "<script> alert('更新完成'); location.href='index.php'</script>";<br />    exit();<br />}else{ // 不是提交表單,表示是從列表頁過來<br />    $id=$_GET['id'];<br />    $sql="select * from `user` where `id`='$id'";<br />    $query=mysql_query($sql);<br />    $result=mysql_fetch_array($query);<br />}<br />?><br /><br /><form action="edit.php" method="post"><br /><input type="hidden" name="hid" value="<?php echo $result['id'] ?>"><br><br />标题<input type="text" name="title" value="<?php echo $result['title'] ?>"><br><br />内容<textarea rows="5" cols="50" name="content"><?php echo $result['content'] ?></textarea><br><br /><input type="submit" name="sub" value="提交"><br /></form><br />

-----解決策-------- -- ----------
edit.php には 2 つの異なる関数があり、Weibo を変更するプロセス中に 2 回実行されます
初回: edit.php?id= nnn
には url パラメータがあり、プログラムは if(!empty($_GET['id'])) true 分岐
クエリ データを完了します
フォームに記入します
2 番目のフォームを送信しますtime edit.php
url パラメータはありません。プログラムは if(!empty($_POST['sub'])) true 分岐
データの変更が完了したら、ディレクトリ ページにジャンプします

2 つの条件が同時に true になることはないため、

このプログラムには潜在的な問題があります:
Whenブラウザから edit.php に直接アクセスする場合、次の 2 つの理由により、どの条件も当てはまりません。フォームに入力するとエラーが発生し、サーバー レイアウトが表示されます
エラー チェックが無視される場合、これは新しい Weibo 入力になるはずです。ただし、edit.php には新しい Weibo 処理コード
が含まれておらず、これを変更すると ID がないため変更に失敗します。また、「アップデート完了」という誤った情報も提供します