[PHP] $_REQUEST e $_POST

Francesco Iacomino

Nuovo Utente
6 Mar 2018
14
1
3
Buongiorno a tutti, stavo facendo un pò di pratica con il php ed ho avuto un problema con il seguente esercizio:

PHP:
<html>
<head></head>
<body>
<form action="Esercizio.php?step=1" method="POST">
  <label>Inserisci le tue passioni</label><br>
  <?php
    for($i=0; $i<10; $i++){
    echo  "<input type='text' name='giochi{$i}' placeholder='Inserisci i tuoi giochi'";
        if(isset($_POST['step'])){
          $giochi=$_POST["giochi{$i}"];
          echo "value='$giochi'";
           }
          echo "><br>";
    }
   ?>

  <input type="submit" value="Invia" name="invia"><input type="reset">
</form>
</body>
<html>

In pratica, nella form, ho inserito in action ho inserito la query string seguito da step=1, in modo da caricare sulla stessa pagina il continuo dell'esercizio.
Però, nonostante il method sia il POST, se uso $_POST la condizione if viene saltata, mentre se uso $_REQUEST va tutto a buon fine.
Come mai? Grazie

Inviato dal mio SM-G935F utilizzando Tapatalk
 
Ultima modifica di un moderatore:
Buongiorno a tutti, stavo facendo un pò di pratica con il php ed ho avuto un problema con il seguente esercizio:

PHP:
<html>
<head></head>
<body>
<form action="Esercizio.php?step=1" method="POST">
  <label>Inserisci le tue passioni</label><br>
  <?php
    for($i=0; $i<10; $i++){
    echo  "<input type='text' name='giochi{$i}' placeholder='Inserisci i tuoi giochi'";
        if(isset($_POST['step'])){
          $giochi=$_POST["giochi{$i}"];
          echo "value='$giochi'";
           }
          echo "><br>";
    }
   ?>

  <input type="submit" value="Invia" name="invia"><input type="reset">
</form>
</body>
<html>

In pratica, nella form, ho inserito in action ho inserito la query string seguito da step=1, in modo da caricare sulla stessa pagina il continuo dell'esercizio.
Però, nonostante il method sia il POST, se uso $_POST la condizione if viene saltata, mentre se uso $_REQUEST va tutto a buon fine.
Come mai? Grazie

Inviato dal mio SM-G935F utilizzando Tapatalk

La variabile 'step' non la passi POST, ma GET in querystring della url, quindi vi correggere il codice in qualcosa del tipo:

PHP:
//...
  //...
    //...
        if(isset($_GET['step']) && $_GET['step'] == 1){
          $giochi=$_POST["giochi{$i}"];
          echo "value='$giochi'";
           }
    //...
  //...
//...

Nella if la seconda parte del controllo ( && $_GET['step'] == 1 ) è solo una ulteriore precauzione, o magari può tornarti utile in seguito per azioni diverse
 
La variabile 'step' non la passi POST, ma GET in querystring della url, quindi vi correggere il codice in qualcosa del tipo:

PHP:
//...
  //...
    //...
        if(isset($_GET['step']) && $_GET['step'] == 1){
          $giochi=$_POST["giochi{$i}"];
          echo "value='$giochi'";
           }
    //...
  //...
//...

Nella if la seconda parte del controllo ( && $_GET['step'] == 1 ) è solo una ulteriore precauzione, o magari può tornarti utile in seguito per azioni diverse
Grazie del suggerimento... In internet leggevo che era possibile usare il metodo post se in input gli attributi type erano di tipo "hidden". Tu sapresti dirmi come funziona? Geazie

Inviato dal mio SM-G935F utilizzando Tapatalk
 
di seguito, una soluzione più semplice senza la gestione del contatore,

il contatore andrebbe aggiornato con l'inserimento di ogni "gioco"
ma poi andrebbe gestito anche in caso di cancellazione di un "input" già inserito
insomma qualcosa da gestire con javascript

ho inserito anche il codice per visualizzare il contenuto di array, puoi vedere subito il risultato di GET, POST e REQUEST facendo delle prove (se ti interessa)

trovi anche lo "step" hidden (anche se non usato)
PHP:
<?php
require_once 'myUtils/show_vars.php';
echo "<h3>GET</h3>".show_var($_GET)."<br /><br />";
echo "<h3>POST</h3>".show_var($_POST)."<br /><br />";
echo "<h3>REQUEST</h3>".show_var($_REQUEST)."<br /><br />";
?>
<html>
<head></head>
<body>
<form action="_test.php?step=10" method="POST">
  <label>Inserisci le tue passioni</label><br />
  <?php
    $step = ( isset($_POST['step']) ? $_POST['step'] : 0 ); 

    for($i=0; $i<10; $i++)
    {
      $giochi = ( isset($_POST['giochi'][$i]) ? $_POST['giochi'][$i] : "" );

      echo "<input type='text' name='giochi[$i]' placeholder='Inserisci i tuoi giochi' value='".$giochi."' />";
      echo "<br /><br />";
    }
  ?>
  <input type="hidden" name="step" value="0" />
  <input type="submit" value="Invia" name="invia"><input type="reset" />
</form>
</body>
<html>


qui lo script da includere
https://forum.mrw.it/threads/show_var-e-log_var.50370/
 
Grazie del suggerimento... In internet leggevo che era possibile usare il metodo post se in input gli attributi type erano di tipo "hidden". Tu sapresti dirmi come funziona? Geazie

Inviato dal mio SM-G935F utilizzando Tapatalk

i campi input di tipo hidden sono visti esattamente come gli altri, nessuna differenza per php (o qualsiasi altro linguaggio server side), l'unica differenza è che nel rendering dell'html non vengono visualizzati
 
di seguito, una soluzione più semplice senza la gestione del contatore,

il contatore andrebbe aggiornato con l'inserimento di ogni "gioco"
ma poi andrebbe gestito anche in caso di cancellazione di un "input" già inserito
insomma qualcosa da gestire con javascript

ho inserito anche il codice per visualizzare il contenuto di array, puoi vedere subito il risultato di GET, POST e REQUEST facendo delle prove (se ti interessa)

trovi anche lo "step" hidden (anche se non usato)
PHP:
<?php
require_once 'myUtils/show_vars.php';
echo "<h3>GET</h3>".show_var($_GET)."<br /><br />";
echo "<h3>POST</h3>".show_var($_POST)."<br /><br />";
echo "<h3>REQUEST</h3>".show_var($_REQUEST)."<br /><br />";
?>
<html>
<head></head>
<body>
<form action="_test.php?step=10" method="POST">
  <label>Inserisci le tue passioni</label><br />
  <?php
    $step = ( isset($_POST['step']) ? $_POST['step'] : 0 ); 

    for($i=0; $i<10; $i++)
    {
      $giochi = ( isset($_POST['giochi'][$i]) ? $_POST['giochi'][$i] : "" );

      echo "<input type='text' name='giochi[$i]' placeholder='Inserisci i tuoi giochi' value='".$giochi."' />";
      echo "<br /><br />";
    }
  ?>
  <input type="hidden" name="step" value="0" />
  <input type="submit" value="Invia" name="invia"><input type="reset" />
</form>
</body>
<html>


qui lo script da includere
https://forum.mrw.it/threads/show_var-e-log_var.50370/
Scusa il ritardo... Lo devo studiare bene il tuo suggerimento. Essendo poco esperto faccio fatica a capirlo subito. Grazie mille

Inviato dal mio SM-G935F utilizzando Tapatalk
 

Discussioni simili