user68744: I made this minimal example in order to figure out how to get requests (or whatever they are called) to display in the serial monitor. However, none of the query parameters (in the URL) can be seen in the serial monitor at 115200 baud.
The files are below and here: https://github.com/adamelli/MinimalExamples/tree/main/22-1-25_query_parameters_submitButton
File structure
sketch (folder)

sketch.ino
data (folder)

index.html
selection.html



sketch.ino
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <SPIFFS.h>
#include <painlessMesh.h>

const char* ssid = "Wireless Controller";
const char* password = "12345678";

// User stub
void sendMessage() ; // Prototype so PlatformIO doesn't complain

Task taskSendMessage( TASK_SECOND * 1 , TASK_FOREVER, &sendMessage );

void sendMessage() {
  taskSendMessage.setInterval( random( TASK_SECOND * 1, TASK_SECOND * 5 ));
}

AsyncWebServer server(80);

void notFound(AsyncWebServerRequest *request) {
    request->send(404, "text/plain", "Not found");
}
IPAddress IP(192, 168, 1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

void setup()
{
  Serial.begin(115200);



  // Initialize SPIFFS
  if (!SPIFFS.begin(true))
  {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }



  WiFi.softAP(ssid, password);
  delay(500);
  WiFi.softAPConfig(IP, gateway, subnet);
  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);









// Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/index.html", String(), false );
  });

  // Index.HTML NAVIGATION BUTTIONS ************************************************

  server.on("/index.html", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/index.html", String(), false);
  });

  server.on("/selection.html", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/selection.html", String(), false );
  });









  server.on("/", HTTP_GET, [](AsyncWebServerRequest * request)
  {

    int paramsNr = request->params();
    Serial.println(paramsNr);

    for (int i = 0; i < paramsNr; i++)
    {
      AsyncWebParameter* p = request->getParam(i);
      Serial.print("Param name: ");
      Serial.println(p->name());
      
      Serial.print("Param value: ");
      Serial.println(p->value());
      
      Serial.println("------");
    }

    request->send(200, "text/plain", "message received");
  });






  server.begin();
}



void loop() {}

index.html
<!DOCTYPE html>
<html>
<body>

  <h1>Main Menu</h1>
  

<p><a href="/selection.html"><button class="button">Selection</button></a></p>

<p><a href="/notMinimal.html"><button class="button">Oblivion</button></a></p>


</body>
</html>

selection.html
<!DOCTYPE html>
<html>
<body> 
<!-- -->
<form action="/" method="get"> 



    <label for="size" style="font-size: 22px">Shape Size:</label>

    <select name="size" id="size" style="font-size: 22px;">
      <option value="1"> 1   </option>
      <option value="2"> 1/2 </option> 
        </select>


    <p><label for="speed" style="font-size: 22px">Speed:</label>
    
    <select name="speed" id="speed" style="font-size: 24px">
      <option value="1">          Slowest </option>
      <option value="2" selected> Regular </option>
    </select></p>




  <p><a href="/selection"><button class="submit" name="circle" value="3">Circle</button></a></p>
  
  <p><a href="/selection"><button class="submit" name="square" value="4">Square</button></a></p>



</form>

</body>
</html>

The data files must be uploaded via "Tools" → "ESP32 Sketch Data Upload".
How is the data (size and speed) viewable in the serial monitor? What needs to change?

user46852: You have two handlers for "/":
  server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/index.html", String(), false );
  });

and
server.on("/", HTTP_GET, [](AsyncWebServerRequest * request)
  {

    int paramsNr = request->params();
    Serial.println(paramsNr);

    for (int i = 0; i < paramsNr; i++)
    {
...

Only one will be called when you load the top level page. You'll need to combine them to both serve index.html and process the parameters being passed to it.

68744: <p>I made this minimal example in order to figure out how to get requests (or whatever they are called) to display in the serial monitor. However, none of the query parameters (in the URL) can be seen in the serial monitor at 115200 baud.</p>
<p>The files are below and here: <a href="https://github.com/adamelli/MinimalExamples/tree/main/22-1-25_query_parameters_submitButton" rel="nofollow noreferrer">https://github.com/adamelli/MinimalExamples/tree/main/22-1-25_query_parameters_submitButton</a></p>
<h1>File structure</h1>
<p>sketch (folder)</p>
<ul>
<li>sketch.ino</li>
<li>data (folder)
<ul>
<li>index.html</li>
<li>selection.html</li>
</ul>
</li>
</ul>
<h1>sketch.ino</h1>
<pre><code>#include &lt;WiFi.h&gt;
#include &lt;ESPAsyncWebServer.h&gt;
#include &lt;SPIFFS.h&gt;
#include &lt;painlessMesh.h&gt;

const char* ssid = &quot;Wireless Controller&quot;;
const char* password = &quot;12345678&quot;;

// User stub
void sendMessage() ; // Prototype so PlatformIO doesn't complain

Task taskSendMessage( TASK_SECOND * 1 , TASK_FOREVER, &amp;sendMessage );

void sendMessage() {
  taskSendMessage.setInterval( random( TASK_SECOND * 1, TASK_SECOND * 5 ));
}

AsyncWebServer server(80);

void notFound(AsyncWebServerRequest *request) {
    request-&gt;send(404, &quot;text/plain&quot;, &quot;Not found&quot;);
}
IPAddress IP(192, 168, 1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

void setup()
{
  Serial.begin(115200);



  // Initialize SPIFFS
  if (!SPIFFS.begin(true))
  {
    Serial.println(&quot;An Error has occurred while mounting SPIFFS&quot;);
    return;
  }



  WiFi.softAP(ssid, password);
  delay(500);
  WiFi.softAPConfig(IP, gateway, subnet);
  IPAddress IP = WiFi.softAPIP();
  Serial.print(&quot;AP IP address: &quot;);
  Serial.println(IP);









// Route for root / web page
  server.on(&quot;/&quot;, HTTP_GET, [](AsyncWebServerRequest * request) {
    request-&gt;send(SPIFFS, &quot;/index.html&quot;, String(), false );
  });

  // Index.HTML NAVIGATION BUTTIONS ************************************************

  server.on(&quot;/index.html&quot;, HTTP_GET, [](AsyncWebServerRequest * request) {
    request-&gt;send(SPIFFS, &quot;/index.html&quot;, String(), false);
  });

  server.on(&quot;/selection.html&quot;, HTTP_GET, [](AsyncWebServerRequest * request) {
    request-&gt;send(SPIFFS, &quot;/selection.html&quot;, String(), false );
  });









  server.on(&quot;/&quot;, HTTP_GET, [](AsyncWebServerRequest * request)
  {

    int paramsNr = request-&gt;params();
    Serial.println(paramsNr);

    for (int i = 0; i &lt; paramsNr; i++)
    {
      AsyncWebParameter* p = request-&gt;getParam(i);
      Serial.print(&quot;Param name: &quot;);
      Serial.println(p-&gt;name());
      
      Serial.print(&quot;Param value: &quot;);
      Serial.println(p-&gt;value());
      
      Serial.println(&quot;------&quot;);
    }

    request-&gt;send(200, &quot;text/plain&quot;, &quot;message received&quot;);
  });






  server.begin();
}



void loop() {}
</code></pre>
<h1>index.html</h1>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;body&gt;

  &lt;h1&gt;Main Menu&lt;/h1&gt;
  

&lt;p&gt;&lt;a href=&quot;/selection.html&quot;&gt;&lt;button class=&quot;button&quot;&gt;Selection&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/notMinimal.html&quot;&gt;&lt;button class=&quot;button&quot;&gt;Oblivion&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h1>selection.html</h1>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;body&gt; 
&lt;!-- --&gt;
&lt;form action=&quot;/&quot; method=&quot;get&quot;&gt; 



    &lt;label for=&quot;size&quot; style=&quot;font-size: 22px&quot;&gt;Shape Size:&lt;/label&gt;

    &lt;select name=&quot;size&quot; id=&quot;size&quot; style=&quot;font-size: 22px;&quot;&gt;
      &lt;option value=&quot;1&quot;&gt; 1   &lt;/option&gt;
      &lt;option value=&quot;2&quot;&gt; 1/2 &lt;/option&gt; 
        &lt;/select&gt;


    &lt;p&gt;&lt;label for=&quot;speed&quot; style=&quot;font-size: 22px&quot;&gt;Speed:&lt;/label&gt;
    
    &lt;select name=&quot;speed&quot; id=&quot;speed&quot; style=&quot;font-size: 24px&quot;&gt;
      &lt;option value=&quot;1&quot;&gt;          Slowest &lt;/option&gt;
      &lt;option value=&quot;2&quot; selected&gt; Regular &lt;/option&gt;
    &lt;/select&gt;&lt;/p&gt;




  &lt;p&gt;&lt;a href=&quot;/selection&quot;&gt;&lt;button class=&quot;submit&quot; name=&quot;circle&quot; value=&quot;3&quot;&gt;Circle&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;
  
  &lt;p&gt;&lt;a href=&quot;/selection&quot;&gt;&lt;button class=&quot;submit&quot; name=&quot;square&quot; value=&quot;4&quot;&gt;Square&lt;/button&gt;&lt;/a&gt;&lt;/p&gt;



&lt;/form&gt;

&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>The data files must be uploaded via &quot;Tools&quot; → &quot;ESP32 Sketch Data Upload&quot;.</p>
<p>How is the data (size and speed) viewable in the serial monitor? What needs to change?</p>
 46852: <p>You have two handlers for &quot;/&quot;:</p>
<pre><code>  server.on(&quot;/&quot;, HTTP_GET, [](AsyncWebServerRequest * request) {
    request-&gt;send(SPIFFS, &quot;/index.html&quot;, String(), false );
  });
</code></pre>
<p>and</p>
<pre><code>server.on(&quot;/&quot;, HTTP_GET, [](AsyncWebServerRequest * request)
  {

    int paramsNr = request-&gt;params();
    Serial.println(paramsNr);

    for (int i = 0; i &lt; paramsNr; i++)
    {
...
</code></pre>
<p>Only one will be called when you load the top level page. You'll need to combine them to both serve <code>index.html</code> and process the parameters being passed to it.</p>
