2012-09-17 32 views
1

更新:在$ _GET變量的某些伴隨驗證中必須存在小的語法錯誤。我仔細地重寫了一切,腳本現在可以工作。謝謝你們!php&mysql查詢 - 無法返回我需要從MySQL中獲得的變量

我花了超過5個小時試圖找出我的代碼有什麼問題。

第一頁:數據庫查詢從數據庫中檢索一些vimeo視頻,並用動態獲取視頻的id(vimeo 8位數id)的「編輯」鏈接呈現其中的每一個視頻。要做到這一點,我只是調用下面的函數:

function edit_portfolio_videos() { 
global $connection; 
$query = "SELECT * FROM portfolio_videos ORDER BY video_id ASC"; 
$portfolio_videos_set = mysql_query($query, $connection); 
confirm_query($portfolio_videos_set); 
while ($portfolio_video = mysql_fetch_array($portfolio_videos_set)) { 
    echo "<iframe src=\"http://player.vimeo.com/video/"; 
    echo $portfolio_video['video_code']; 
    echo "?title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff\" width=\"400\" height=\"230\" frameborder=\"0\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe><br />"; 
    echo "<a href=\"edit_portfolio_video.php?videocode={$portfolio_video['video_code']}\">Edit this Video</a>"; 
    } 
} 

第2頁:這是每個視頻都會被管理員編輯的頁面。示例URL可能類似於「http://www.my_website.com/edit_portfolio_video.php?videocode=34956540」。在這個頁面上,我用下面的函數來得到前一頁的劇本數組:

function get_selected_video_by_id($video_code) { 
global $connection; 
$query = "SELECT * FROM portfolio_videos "; 
$query .= "WHERE video_code = '$video_code' "; 
$query .= "LIMIT 1"; 
$videos_set = mysql_query($query, $connection); 
confirm_query($videos_set); 
if ($video = mysql_fetch_array($videos_set)) { 
    return $video; 
} else { $video = NULL; } 

}

然後......

$selected_video = get_selected_video_by_id($_GET['videocode']); 

爲了把每樣在編輯的形式與所選擇的視頻數據:

<form action="edit_portfolio_video.php?videoid=<?php echo $selected_video['video_code']; ?>" method="post"> 
      <input type="text" name="video_title" value="<?php echo $selected_video['video_title']; ?>" /> 
      </p> 
      <p>Video Code (vimeo):<br /> 
      <input type="text" name="video_code" value="<?php echo $selected_video['video_code']; ?>" /> 
      </p> 
      <p>Video Description:<br/> 
      <textarea name="video_description" rows="5" cols="70"><?php echo $selected_video['video_description']; ?></textarea>  
      </p> 
      <p> 
      <input type="submit" name="submit" value="Save Video" />  
      </p> 
</form> 

但形式的領域沒有得到填充,一這似乎是我試圖獲得的$ video變量的問題(從get_selected_video_by_id函數返回)。視頻代碼在數據庫中以「INT」(長度:11)存儲,並作爲字符串打印在第2頁的URL中。我試圖用很多方式編寫函數的查詢,但是我無法使它工作。

我很感激這方面的一些幫助,謝謝大家。

注:confirm_query函數做這個簡單的工作:

function confirm_query($result_set) { 
if (!$result_set) { 
    die("Database query failed: " . mysql_error()); 
} 

}

+0

您確認$視頻不爲空嗎? (你確定get_selected_video_by_id實際上會返回一個視頻嗎?) –

+0

我剛剛添加了confirm_query()函數定義。 – Mario

+3

請不要使用'mysql_ *'函數來編寫新的代碼。他們不再維護,社區已經開始[棄用程序](http://goo.gl/KJveJ)。請參閱* [紅盒子](http://goo.gl/GPmFd)*?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/3gqF9)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/vFWnC)。 –

回答

0

我認爲你應該改爲嘗試一下本作的get_selected_video_by_id SQL查詢。

$query = "SELECT * FROM portfolio_videos WHERE video_code = ".$video_code; 

當然要注意參數中的SQL注入,而且,正如某人已經建議的那樣,請考慮使用PDO或MySQLi。

+0

我試過了,但是我得到了以下錯誤:「數據庫查詢失敗:您的SQL語法中有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以獲取正確的語法,以便在'LIMIT 1'附近使用1" 。 – Mario

+0

糟糕。你的video_code不是唯一的嗎?然後擺脫查詢的LIMIT 1部分。 $ query =「SELECT * FROM portfolio_videos WHERE video_code =」。$ video_code; – Cogicero

+0

video_code不是唯一的。我試過了你的建議,但是我得到這個錯誤:「數據庫查詢失敗:你的SQL語法有錯誤;查看與你的MySQL服務器版本相對應的手冊,在第一行使用正確的語法。 – Mario

0

您的表單看起來很奇怪: 您正在使用POST模式傳遞GET值(edit_portfolio_video.php?videoid = ... etc ...)。 但這不應該是問題。

在這一行:

$selected_video = get_selected_video_by_id($_GET['videocode']);

你確定你正在傳遞的GET參數是videocode?或者它是videoid?

+0

啊哈!我甚至沒有在表單中看到POST/GET的東西。 OP中的代碼太多錯誤。 – Cogicero

+0

是的,我通過video_code,而不是video_id。我應該重命名這個函數,因爲我最初通過使用它的數據庫ID將選定視頻的代碼傳遞到URL中。 – Mario