2
votes

PHP exécute tout le code et n'attend pas l'entrée

J'ai un problème de base avec PHP. Je souhaite saisir de nombreuses données en demandant à un formulaire:

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);

Dans ce cas, je dois utiliser une boucle, mais voici l'affaire, je dois saisir des coordonnées indéfinies sur le formulaire et chaque fois que je entrez un 0, cela devrait rompre la boucle et traiter les données en imprimant les résultats pour chaque donnée. MAIS il traite un seul formulaire, recharge la page et boucle pour toujours. Que me manque-t-il?


16 commentaires

Pourquoi une boucle est-elle même nécessaire?


Votre boucle effectue exactement les mêmes vérifications sur les mêmes valeurs exactes à chaque itération. Vous ne savez pas ce que vous attendez de cette boucle?


@GabrielFreitas Voulez-vous dire que vous pouvez publier plusieurs paires de coordonnées en soumettant le formulaire une fois? Si tel est le cas, que contient exactement $ _POST ['x'] ou $ _POST ['y']?


@Ingus car il vous demande de saisir un nombre indéfini de coordonnées


@ TorbjörnStabo je veux qu'il stocke des données indéfinies sans envoyer le formulaire, cela ne doit se produire que si l'une des coordonnées est 0


De plus, isset ($ _ POST ['x']) && ($ _ POST ['y']) et la connexion similaire en même temps semble étrange. Je suppose que vous voulez isset ($ _ POST ['x']) && isset ($ _ POST ['y'])


@GabrielFreitas Je comprends ce que vous voulez, mais ma question porte sur le format des données entrantes (en $ _POST). Sont des tableaux $ _POST ['x'] et $ _POST ['y'] si vous envoyez plusieurs coordonnées, ou quoi? Comme indiqué ci-dessus, si vous n'envoyez pas plusieurs paires de coordonnées, mais plusieurs demandes avec une paire chacune, la boucle n'a aucun but. Pouvez-vous afficher le code HTML de votre formulaire? Je vous recommande vraiment d'installer un débogueur PHP, afin que vous puissiez voir le contenu des variables. Inestimable dans des cas comme celui-ci.


@ TorbjörnStabo voici l'exercice: écrivez un code à lire et un nombre indéfini de coordonnées XY. Pour chaque coordonnée, notez à quel quadrant il appartient Le code doit s'arrêter si l'une des coordonnées est 0 ie: 2 3 = "premier" -1 -2 = "troisième" 4 -3 = "deuxième" ... 0 2 stop


@GabrielFreitas Ok. Mais comment avez-vous essayé de le résoudre? Vous soumettez les coordonnées XY en utilisant un formulaire, non? Quel est le code HTML de ce formulaire?


@ TorbjörnStabo J'utilise Netbeans pour cela, comment puis-je publier un code ici? Il a trop de caractères


@ TorbjörnStabo le HTML a 2 formes numériques d'entrée, le PHP utilise POST pour les récupérer. J'essaie également de les saisir sur un tableau indéfini.


@GabrielFreitas Modifiez-le (nous parlons d'un formulaire, non? Pas de plusieurs?), Supprimez les parties qui ne sont pas strictement nécessaires pour comprendre le fonctionnement de votre formulaire? Et pour être pointilleux, PHP ne " récupère " pas les données des formulaires, les formulaires sont envoyés au backend / PHP :)


@ TorbjörnStabo Je n'ai pas compris. Quelles parties? Je suis nouveau sur PHP. Dans d'autres langages comme C par exemple, tout ce que vous avez à faire est de déclarer 2 variables et de les entrer dans une boucle avec une sorte de commande "read".


Le Web ne fonctionne pas comme ça. Votre navigateur envoie une requête au serveur / backend / PHP. Si le fichier particulier que vous demandez (par exemple /index.php) nécessite des données pour effectuer son travail, vous attachez des données. Mais vous ne pouvez pas continuer à saisir de nouvelles données en continu . Les données que vous avez envoyées initialement avec la demande sont tout ce qu'il y a, vous ne pouvez pas envoyer d'abord (3,2) et (1,1), puis entrer (0,0) plus tard. Plusieurs coordonnées sont possibles, mais vous devez toutes les envoyer en même temps.


@ TorbjörnStabo c'est exactement ce que j'essayais de faire haha, en pensant comme n'importe quel langage compilé. Comment puis-je le faire alors?


Vous devriez commencer par lire quelques notions de base sur HTTP. Vous devrez envoyer toutes les nouvelles données qui sont entrées au serveur dans une nouvelle demande. Si vous avez encore besoin des données «précédentes» pour pouvoir effectuer tout ce que le côté serveur est censé faire - vous devez soit renvoyer ces données également, soit les stocker côté serveur la première fois qu'elles sont envoyées - par exemple dans la session utilisateur.


4 Réponses :


1
votes

Si vous exécutez un script php est une fois, tout le code va être exécuté, il n'y a pas d'arrêt ou d'interaction pour l'utilisateur. Dans votre cas, votre boucle ne s'arrête jamais car vous souhaitez changer la valeur une fois qu'elle a été exécutée (ce n'est pas possible). Si vous souhaitez créer une application interactive sur le shell avec php voici la documentation officielle http://php.net/manual/en/features.commandline.interactive.php .

j'espère que cela vous aidera.


2 commentaires

J'ai remarqué cela, mais dans ce cas, comment peut-il récupérer un nombre indéfini de données à partir d'un formulaire (sans utiliser de shell interactif)?


vous pouvez passer une valeur d'itérations, boucle X fois.



0
votes

Si vous voulez accomplir cela en utilisant un site Web, vous avez besoin d'un formulaire dans lequel l'utilisateur peut saisir les valeurs, puis l'utilisateur doit soumettre ce formulaire, lorsque les données sont insérées. Vous pouvez maintenant vérifier l'entrée (par exemple, faites votre travail avec ou vérifiez si 0 a été inséré). Vous pouvez maintenant afficher les données résultantes et le formulaire pour saisir les données suivantes. Si vous souhaitez travailler avec les données avec lesquelles vous venez de travailler lorsque l'utilisateur soumet le formulaire suivant, vous devez soit stocker ces valeurs sur votre serveur (par exemple dans une base de données) ou à l'intérieur du site Web (par exemple en utilisant un champ html caché). < / p>


0 commentaires

1
votes

Le Web et HTTP ne fonctionnent pas de cette façon, vous ne pouvez pas saisir de données en continu, attendre un certain temps, puis en saisir d'autres. Au lieu de cela, c'est comme htis:

  1. Lorsque vous cliquez sur Soumettre dans votre navigateur, le navigateur assemble un "package" ou une demande et l'envoie au site spécifié par le formulaire.
  2. Le logiciel serveur Web du côté récepteur reçoit cette demande. Une partie de la demande est le chemin du fichier / code qui doit traiter les données de formulaire envoyées par votre navigateur.
  3. Ce code est maintenant exécuté / chargé par le serveur Web. Dans le cas d'un fichier .php, le serveur Web demande l'aide d'un interpréteur PHP.
  4. Le serveur Web transmet les données du formulaire fournies avec votre requête à l'interpréteur PHP. Maintenant, le code PHP est exécuté et la sortie (echo, var_dump, etc.) est collectée par le serveur Web.
  5. Cette sortie est ensuite renvoyée à votre navigateur à partir du serveur Web.

Comme nous l'espérons, il n'y a pas de moment d'interactivité dans ce processus. Une demande adressée à un serveur Web se compose d'un point dans le temps. Sinon, vous faites une nouvelle demande / séparée / différente plus tard, au même morceau de code sur le serveur. Mais le code ne se souvient de rien de la dernière exécution (sauf si vous ajoutez spécifiquement du code pour enregistrer des informations sur chaque requête quelque part, mais c'est un autre jeu de balle ..).

L'interactivité dont vous avez besoin ici serait l'une des

  • ajout de JavaScript à la page Web (vérification des chiffres au fur et à mesure de leur saisie)
  • réécriture du code PHP pour qu'il s'exécute à partir de la console (c'est-à-dire localement, aucun serveur / navigateur Web impliqué) (Une boucle, demandez une paire de XY puis sortez le quadrant)
  • réécrire le code pour qu'il prenne en charge la réception d'un nombre indéfini de paires de coordonnées (probablement deux tableaux dans la requête, un pour les coordonnées X et un pour les coordonnées Y)

0 commentaires

1
votes

Mettez votre instruction if en dehors de la boucle

if (isset($_POST['x']) && isset($_POST['y'])){
    $x = $_POST['x'];
    $y = $_POST['y'];
    do{ 
            
        //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);
 }


1 commentaires

Aucune utilisation de la boucle ici.