Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
利用mysqli查询结果的PHP重定向语法_Php_Mysqli - Fatal编程技术网

利用mysqli查询结果的PHP重定向语法

利用mysqli查询结果的PHP重定向语法,php,mysqli,Php,Mysqli,我有一个包含六条记录的数据库表,它们是六个不同服务器的URL。有一个程序可以实时填充每个服务器是否可用。我编写了一个查询,返回第一个可用服务器的url。我已经测试了脚本并确定选择过程有效。现在我想使用“header”函数重定向到可用的服务器,我很难确定正确的语法。URL的格式是“muscle.mysite.com:3535nameScan”。这是我目前拥有的 $q = "SELECT url FROM ShinyServers WHERE Availability = '1' LIMIT 0,

我有一个包含六条记录的数据库表,它们是六个不同服务器的URL。有一个程序可以实时填充每个服务器是否可用。我编写了一个查询,返回第一个可用服务器的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
。现在,我需要将结果捕获为一个变量,我可以在更新查询和标题函数中使用。我一直在搜索答案,但还没有找到答案。我认为另一个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>';

}
错误报告(E_ALL);
$q=“从ShinyServer中选择url,其中可用性='1'限制0,1”;//进行查询
$r=mysqli_查询($dbc,$q);
$row=mysqli\u fetch\u数组($r,mysqli\u ASSOC);
//printf(“%s\n”,$row[“url”]);
$url=sprintf(“%s\n”,“$row[“url”]);//是否将结果分配给变量?
回显“$url”;
$qu=“UPDATE ShinyServers SET Availability=0,其中url=$url LIMIT 1”;
$ru=mysqli_查询($dbc,$qu);
if(mysqli_受影响的_行($dbc)==1){
回显“状态已更新”

; }否则{ echo'

状态无法更新; }

我从“echo”$url”;“中获得了预期的结果,但收到了错误消息“状态无法更新”。“我在这方面做了这么久,恐怕我忽略了什么。代码是否有问题,或者DB表是否有问题?我查看了由其他人创建的DB表,发现它没有唯一的列

在prodigitalson和Dan08的帮助下,我有了一个有效的脚本。详情如下:

错误报告(E_全部)

$q=“从ShinyServer中选择url,其中可用性='1'限制为0,1”//询问

$r=mysqli_查询($dbc,$q); $row=mysqli\u fetch\u数组($r,mysqli\u ASSOC)

//printf(“%s\n”,$row[“url”])

$url=sprintf(“%s”,$row[“url”])//将结果分配给变量

//回显“$url”

$qu=“UPDATE ShinyServers SET Availability=0,其中url='$url'限制1”

$ru=mysqli_查询($dbc,$qu)

if(mysqli_受影响的_行($dbc)==1){ 回显“状态已更新”

}否则{ echo“状态无法更新”

}

mysqli_close($dbc)

标题(“位置:http://$url”)

退出()


我的DB表被更新,我被重定向(我知道我不需要条件语句)。我还了解到,“header”函数必须在mysqli_关闭之后。我在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();

停止使用
@
来抑制错误您的问题之一是将输出发送到浏览器(这将导致
标题
失败),并返回输出字符串的长度,因此
$url
不包含您认为它的功能。这是一个很好的反馈。我不确定它是否会起作用,但我现在正在尝试不同的事情。我从标题开始(“位置:$row”)//重定向到muscle*是的,您需要返回格式化字符串的
sprintf
,而不是像
print
/
echo
那样输出字符串的
printf
。。。您也不必担心在这里关闭
mysqli
,因为它应该在PHP关闭时关闭;然后在我的查询中使用变量$url,如下所示:mysqli_query($dbc,“updateshinyservers SET Availability=0,其中url=”。mysqli_real_escape_string($url)。“'LIMIT 1”);它不起作用。我得到了“printf”,但表格没有更新。