關於XXX.php?id=,XXX.php中的變數id可用的條件是什嗎?解決辦法

來源:互聯網
上載者:User
關於XXX.php?id=,XXX.php中的變數id可用的條件是什嗎?
初學php,遇到很多問題,這個問題實在暫時沒想明白,希望大家幫看看。

include("conn.php");
if(!empty($_GET['id']))
{
$id=$_GET['id'];
$sql="select * from `user` where `id`='$id'";
$query=mysql_query($sql);
$result=mysql_fetch_array($query);
}
if(!empty($_POST['sub']))
{
//$id=$_GET['id'];
$title=$_POST['title'];
$content=$_POST['content'];
$id=$_POST['hid'];
$sql="update `user` set `title` = '$title', `content` = '$content' where id='$id limit 1'";
mysql_query($sql);
echo "";
}
?>




剛看了php100的視頻,講解關於微型部落格。其中實現部落格的編輯功能,在index.php中放入一個編輯的連結,如下:


|">編輯
">刪除|



問題是,為什麼當我在edit.php中的第二個if裡不能直接用這個id調用(如代碼中被注釋的一行,如果這樣,會報Undefined index id而且編輯不生效),而是要在表單裡再重新插入hidden?

------解決方案--------------------
">編輯
這個應該是列表頁面進入編輯頁面的url,使用 是用$_GET 擷取的,代碼沒錯。

然後進入到編輯頁面,修改內容後,你按submit提交。表單的method是$_POST。所以$_GET['id']當然沒有資料,因為要用$_POST擷取。但你加了hidden,並用$id=$_POST['hid'];擷取到了。

if(!empty($_POST['sub']))
{
//$id=$_GET['id'];
$title=$_POST['title'];
$content=$_POST['content'];
$id=$_POST['hid'];
$sql="update `user` set `title` = '$title', `content` = '$content' where id='$id limit 1'";
mysql_query($sql);
echo "";
}



代碼可以這樣最佳化:

include("conn.php");

if(isset($_POST['sub'])){ // 判斷是否提交表單
$title=$_POST['title'];
$content=$_POST['content'];
$id=$_POST['hid'];
$sql="update `user` set `title` = '$title', `content` = '$content' where id='$id limit 1'";
mysql_query($sql);
echo "";
exit();
}else{ // 不是提交表單,表示是從列表頁過來
$id=$_GET['id'];
$sql="select * from `user` where `id`='$id'";
$query=mysql_query($sql);
$result=mysql_fetch_array($query);
}
?>



------解決方案--------------------
edit.php 具有兩個不同的功能,在修改微博的過程中將執行兩次
第一次:edit.php?id=nnn
有 url 參數,程式走 if(!empty($_GET['id'])) 真 分支
完成查詢資料
並充填表單
第二次 表單提交 edit.php
沒有 url 參數,程式走 if(!empty($_POST['sub'])) 真 分支
完成資料修改後跳轉至目錄頁

由於兩個條件不會同時成立,所以 $id=$_GET['id'] 在第二個 if 中不可用

此程式有一個潛在的問題:
當直接瀏覽器訪問 edit.php 時,因為兩個條件都不成立。會在充填表單時發生錯誤,而暴露伺服器布局
如果忽略錯誤檢查,此時應為新微博輸入。但 edit.php 並無新增微博的處理代碼
而當做修改的話,又因缺少 id 造成修改失敗。還會給出'更新完成'的虛假資訊

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.