[英]PHP redirect syntax utilizing results of mysqli query
我有一個包含六個記錄的數據庫表,這些記錄是六個不同閃亮服務器的網址。 有一個程序可以實時填充每個服務器是否可用。 我寫了一個查詢,返回第一個可用服務器的 url。 我已經測試了腳本並確定選擇過程有效。 我現在想使用“header”函數執行到可用服務器的重定向,但我很難確定正確的語法。 URL 的格式為“muscle.mysite.com:3535nameScan”。 這是我目前所擁有的。
$q = "SELECT url FROM ShinyServers WHERE Availability = '1' LIMIT 0, 1 ";
$r = mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
//printf ("%s\n", $row["url"]);
$url= printf ("%s\n", $row["url"]);
header ("Location: $url"); //redirect to muscle*
mysqli_close($dbc);
exit(); //before or after mysqli_close? I think after.
當我執行時,我在地址欄中看到 mysite.com/40 並得到 404。
我試過這個:
header ("Location: $row"); //redirect to muscle*
當我執行時,我在地址欄中得到“mysite.com/array”,然后我得到了我的 404 頁面。我嘗試了很多變體,但我自己已經徹底糊塗了。
我希望你能看到我在做什么。 我已經支持什么是有效的
$q = "SELECT url FROM ShinyServers WHERE Availability = '1' LIMIT 0, 1 ";
$r = mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
printf ("%s\n", $row["url"]);
mysqli_close($dbc);
我得到了第一個可用的 url,我可以看到結果打印為muscle.mysite.com:3535nameScan
。 現在,我需要將結果捕獲為可以在 UPDATE 查詢和標頭函數中使用的變量。 我一直在尋找答案,但我還沒有找到。 我認為不同的 fetch 命令將是答案,但我找不到適用於我想做的事情的命令。
我相信我正朝着正確的方向前進,我使用建議使用“sprintf”。 但是,我仍然無法“更新”表格。 這就是我現在所處的位置。
error_reporting(E_ALL);
$q = "SELECT url FROM ShinyServers WHERE Availability = '1' LIMIT 0, 1 "; //make query
$r = mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
//printf ("%s\n", $row["url"]);
$url= sprintf ("%s\n", $row["url"]); //assign results to a variable?
echo "$url";
$qu = "UPDATE ShinyServers SET Availability = 0 WHERE url = $url LIMIT 1";
$ru = mysqli_query($dbc, $qu);
if (mysqli_affected_rows ($dbc) ==1){
echo '<p> The status has been updated</p>';
}else{
echo '<p class="error"> The status could not be updated</p>';
}
我從 'echo "$url";' 得到預期的結果但我收到錯誤消息“無法更新狀態”。 我已經在這里呆了這么久,恐怕我忽略了一些東西。 是代碼有問題還是數據庫表有問題? 我查看了由其他人創建的 DB 表,我注意到它沒有唯一的列。
在 prodigitalson 和 Dan08 的幫助下,我有了一個有效的腳本。 如下
錯誤報告(E_ALL);
$q = "SELECT url FROM ShinyServers WHERE Availability = '1' LIMIT 0, 1 "; //進行查詢
$r = mysqli_query($dbc, $q); $row = mysqli_fetch_array($r, MYSQLI_ASSOC);
//printf("%s\\n", $row["url"]);
$url= sprintf ("%s", $row["url"]); //將結果賦值給變量
//echo "$url";
$qu = "UPDATE ShinyServers SET Availability = 0 WHERE url = '$url' LIMIT 1";
$ru = mysqli_query($dbc, $qu);
if (mysqli_affected_rows ($dbc) ==1){ echo '
狀態已更新
';}else{ echo ' 狀態無法更新
';}
mysqli_close($dbc);
標頭(“位置:http://$url”);
出口();
我的數據庫表已更新並被重定向(我知道我不需要條件語句)。 我還了解到“標題”函數必須在 mysqli_close 之后。 我在php手冊中發現了這一點。 稍微調整一下,然后我的任務是將這個腳本結合到一個注冊腳本和一個登錄腳本中。 哎呀……再次感謝。
這是我的最終腳本,它完美運行
<?php
//selecting available server and update status
include_once '../DB/test1DB.php'; //connect to DB
error_reporting(E_ALL);
$q = "SELECT url FROM ShinyServers WHERE Availability = '0' LIMIT 0, 1 "; //make query
$r = mysqli_query($dbc, $q);
$row = mysqli_fetch_array($r, MYSQLI_ASSOC);
$url = sprintf("%s", $row["url"]); //assign results to a variable
$qu = "UPDATE ShinyServers SET Availability = 1 WHERE url = '$url' LIMIT 1";
mysqli_close($dbc);
header("Location: http://$url");
exit();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.