簡體   English   中英

使用 mysqli 查詢結果的 PHP 重定向語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM