[英]insert query doesn't work sometime for some users with session variables
[英]sql query works sometime, and at other times doesn't
我在管理面板中設置了啟用/禁用按鈕
http://brettadamsga.com/development/madisonweddings/admin/clients.php
這些按鈕有時可以工作,而在其他時候卻不能,我不知道是什么原因引起的。 有任何想法嗎?
創建客戶列表
<?php
dbcon();
$navQuery = 'SELECT * FROM mw_clients WHERE status = 1';
$li = mysql_query($navQuery);
while($row = mysql_fetch_array($li){
echo "<tr><td><a href=\"index.php?loc=" . $row['clientSlug'] . "\">" . $row['name'] . "</a></td><td align=\"center\"><a style=\"text-decoration: none;\" href=\"changeStatus.php?type=2&id=" . $row['id'] . "&status=0\">✕</a></td></tr>";
}
?>
changeStatus.php
<?php
require ('../common.php');
$type=$_GET["type"];
$id=$_GET["id"];
$status=$_GET["status"];
if ($status == 0 && $type == 1)
{
dbcon();
$query = "UPDATE mw_cats SET status=0 WHERE id=" . $id . "";
if (mysql_query($query))
{
echo mysql_error();
mysql_close();
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: categories.php');
} else {
echo '<p>Could not change status</p>';
}
}
if ($status == 1 && $type == 1)
{
dbcon();
$query = "UPDATE mw_cats SET status=1 WHERE id=" . $id . "";
if (mysql_query($query))
{
echo mysql_error();
mysql_close();
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: categories.php');
} else {
echo '<p>Could not change status</p>';
}
}
if ($status == 0 && $type == 2)
{
dbcon();
$query = "UPDATE mw_clients SET status=0 WHERE id=" . $id . "";
if (mysql_query($query))
{
echo mysql_error();
mysql_close();
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: clients.php');
} else {
echo '<p>Could not change status</p>';
}
}
if ($status == 1 && $type == 2)
{
dbcon();
$query = "UPDATE mw_clients SET status=1 WHERE id=" . $id . "";
if (mysql_query($query))
{
echo mysql_error();
mysql_close();
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: clients.php');
} else {
echo '<p>Could not change status</p>';
}
}
?>
我發現當mysql_query
返回true(成功)時卻回顯mysql_error
卻失敗卻不是,這是不尋常的。
當mysql_query
返回false時,嘗試將mysql_error
移至if語句的第二部分。
編輯:
根據您的評論,這里還有一些建議。
在代碼中放入一些疑難解答語句。 如果沒有調試器或單步執行代碼的方式,那么一些回聲語句對於確定正在發生的事情將是非常寶貴的。 例如,在第一個if
語句之前,添加:
echo 'Status: ' . $status . '<br />';
echo 'Type: ' . $type . '<br />';
或更好:
var_dump($_GET);
找出通過$ _GET數組傳遞的信息。
假設一切正常,接下來確保您的連接成功:
dbcon() or die(mysql_error());
(您可能必須編輯dbcon()方法,以便抓住錯誤的機會是在實際嘗試連接時,您的dbcon()方法必須在失敗時返回布爾值false才能工作or die
。正確地。)
接下來,確保您要構造查詢。 另一個echo語句可以幫助:
echo 'Query: ' . $query . '<br />';
每次該查詢看起來正確嗎? 如果是這樣,請嘗試在您選擇的mysql管理器( Workbench , Sqlyog等)中按原樣執行查詢。 通過這種方式,您可以確定數據庫是在生成錯誤還是花費了異常長的時間來執行查詢。
如果一切似乎仍然正常,那么您應該在表中進行一些挖掘,以查看所更改的數據是否確實在更改。 也許存在權限問題或某些問題(盡管應該顯示在mysql_error
。
SELECT id, status FROM mw_cats WHERE id = x;
希望這些建議之一對您有所幫助!
您可以通過將整個代碼替換為來刪除所有重復項:
require ('../common.php');
$type = $_GET["type"];
$id = $_GET["id"];
$status = $_GET["status"];
dbcon();
$table = "mw_clients";
if ($type == "1") {
$table = "mw_cats";
}
$query = "UPDATE ".$table." SET status=".mysql_real_escape_string($status)." WHERE id=" . mysql_real_escape_string($id) . "";
if (mysql_query($query))
{
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: clients.php');
} else {
echo '<p>Could not change status '. mysql_error() .'</p>';
}
還添加了mysql_real_escape_string()來提高安全性(任何人都可以在瀏覽器中調用此腳本,然后對數據庫執行操作),並檢查$type
作為string
而不是number
。
我不知道為什么它會失敗-但是現在您已經進行了一些實際的錯誤檢查(移動mysql_error()
),因此應該更容易調試
這是由您的永久重定向引起的。 它們被瀏覽器緩存,因此,下次訪問時,它們將直接轉到重定向的頁面,而不是運行腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.