PHP运行整个代码,不会';不要等待输入

PHP运行整个代码,不会';不要等待输入,php,post,Php,Post,我对PHP有一个基本的问题。我想通过从表格中请求输入许多数据: do{ if (isset($_POST['x'])&&($_POST['y'])){ $x = $_POST['x']; $y = $_POST['y']; //núclero de processamento if ($x > 0 && $y > 0){

我对PHP有一个基本的问题。我想通过从表格中请求输入许多数据:

do{
        if (isset($_POST['x'])&&($_POST['y'])){
            $x = $_POST['x'];
            $y = $_POST['y'];
            //núclero de processamento
            if ($x > 0 && $y > 0){
                echo "$x    $y  primeiro quadrante";
            } elseif ($x > 0 && $y < 0){
                echo "$x    $y  segundo quadrante";
            } elseif ($x < 0 && $y < 0){
                echo "$x    $y  terceiro quadrante";
            } elseif ($x < 0 && $y > 0){
                echo "$x    $y  quarto quadrante";
            } 
        }
    } while($x && $y != 0);
do{
如果(设置($_POST['x'])和($_POST['y'])){
$x=$_POST['x'];
$y=$_POST['y'];
//núclero de processamento
如果($x>0&$y>0){
回声“$x$y primeiro象限”;
}其他($x>0&$y<0){
回显“$x$y segundo象限”;
}elseif($x<0&$y<0){
echo“$x$y terceiro象限”;
}elseif($x<0&$y>0){
回声“$x$y四分之一象限”;
} 
}
}而($x&&$y!=0);

在这种情况下,我必须使用一个循环,但这里的交易,我必须在表单上输入不确定的坐标,每当我输入0,它应该打破循环并处理数据打印出每个数据的结果。但它只处理一个表单,重新加载页面并永远循环。我遗漏了什么?

如果执行一个php脚本是一次性的,那么所有代码都将被执行,用户不会停止或进行交互。在您的情况下,您的循环永远不会停止,因为您希望在执行后更改值(这是不可能的)。如果您想用php在shell上创建一个交互式应用程序,这里是官方文档


希望对您有所帮助。

如果您想通过网站实现这一点,您需要一个表单,用户可以在其中输入值,然后用户必须在插入数据时提交此表单。现在您可以检查输入(例如,使用它进行工作,或者检查,如果插入了0)。现在,您可以显示结果数据和表单以输入下一个数据。如果您想在用户提交下一个表单时处理刚刚处理过的数据,您需要将这些值存储在服务器上(例如,数据库中)或网站内部(例如,使用隐藏的html字段)。

web和HTTP不以这种方式工作,您不能连续输入数据,等待一段时间,然后再输入更多数据。相反,它就像htis:

  • 当您在浏览器中单击“提交”时,浏览器将组装一个“包”或请求,并将其发送到表单指定的站点
  • 接收端的web服务器软件接收该请求。请求的一部分是应处理浏览器发送的表单数据的文件/代码的路径
  • 该代码现在由web服务器运行/加载。对于.php文件,web服务器会向php解释器寻求帮助
  • web服务器将请求附带的表单数据传递给PHP解释器。现在PHP代码运行,输出(echo、var_dump等)由web服务器收集
  • 然后,该输出将从web服务器发送回浏览器
  • 正如上面希望显示的,在这个过程中没有互动的时刻。对web服务器的请求由一个时间点组成。否则,您将在以后向服务器上的同一段代码发出新的/单独的/不同的请求。但是,代码不记得上次运行的任何信息(除非您专门添加代码将每个请求的信息保存在某个位置,但这是另一个球赛…)

    你在这里需要的互动性将是

    • 向网页添加JavaScript(输入数字时检查数字)
    • 重写PHP代码,使其从控制台运行(即本地,不涉及web服务器/浏览器)(循环,请求一对XY,然后输出象限)
    • 重写代码,使其支持接收不定数量的坐标对(请求中可能有两个数组,一个用于X坐标,一个用于Y坐标)

    将if语句置于循环之外

    if(isset($\u POST['x'])和&isset($\u POST['y'])){
    $x=$_POST['x'];
    $y=$_POST['y'];
    做{
    //núclero de processamento
    如果($x>0&$y>0){
    回声“$x$y primeiro象限”;
    }其他($x>0&$y<0){
    回显“$x$y segundo象限”;
    }elseif($x<0&$y<0){
    echo“$x$y terceiro象限”;
    }elseif($x<0&$y>0){
    回声“$x$y四分之一象限”;
    }  
    }而($x&&$y!=0);
    
    }
    为什么甚至需要循环?您的循环在每次迭代中对完全相同的值进行完全相同的检查。不知道这个循环还能做什么?@GabrielFreitas你是说你可以通过提交一次表单来发布多个坐标对吗?如果是这样,那么$\u POST['x']或$\u POST['y']到底包含什么?@gabriefreitas编辑它(我们说的是一个表单,对吗?不是多个?),删除那些不需要严格理解表单工作原理的部分?更挑剔的是,PHP不从表单“获取”数据,表单被发送到后端/PHP:)web不是这样工作的。浏览器向服务器/后端/PHP发送请求。如果您请求的特定文件(例如/index.php)需要一些数据来处理作业,那么您可以附加一些数据。但你不能不断地输入新数据。最初随请求一起发送的数据是所有数据,不能先发送(3,2)和(1,1),然后再输入(0,0)。多个坐标是可能的,但您必须一次发送所有坐标。我注意到,但在这种情况下,它如何从表单中检索无限数量的数据(不使用交互式shell)?您可以传递迭代的值,循环X次。这里不使用循环。