[PHP] Problema search form

mistigress

Nuovo Utente
4 Gen 2019
3
0
0
Salve a tutti e buon 2019.

Ho un problema che spero possiate aiutarmi a risolvere, vi spiego il tutto in modo più possibile chiaro..

La mia necessità è avere un form di ricerca in cui poter inserire un'email e selezionare un value di una select option. Tali dati devono essere inviati via post al submit del form, in modo che sia eseguita una query di ricerca al database ( già popolato ) e che mi dia come output il risultato della query in medesimo file .php in cui c'è appunto la query.

Di seguito i due file creati:
1) file "conn.php" che instaura la connessione al database
2) file "search.php" in cui c'è il form e la query

file conn.php

PHP:
<?php
$host = "localhost";
$userName = "demo";
$password = "demo";
$dbName = "list_pec";

// Create database connection
$conn = new mysqli($host, $userName, $password, $dbName);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>


La connessione al database avviene correttamente. Il database è cosi creato e popolato:

Ho il db con nome list_pec e 4 tabelle con nome pec_1 , pec_2, pec_3 e pec_4 in queste ci sono differenti row tra cui: firstname, lastname, id_client, id_2client, email . In tali row ( per ogni tabella ) ci sono dati inseriti e corretti che appunto ho necessità di estrapolare ( email, id_client e id_2client ) dal database tramite il form di ricerca.

Di seguito il file search.php


PHP:
<?
error_reporting(E_ALL);
ini_set('display_errors', '1');
include("conn.php");

$search_output = "";
if (isset($_POST["submit"])){
   if($_POST['option']== "a"){
    $sqlcommand="SELECT email, id_client, id_2client FROM pec_1 WHERE email = 'email'";
    }

    else if ($_POST['option'] == "b"){
    $sqlcommand="SELECT email, id_client, id_2client FROM pec_2 WHERE email = 'email'";
    }

    else if ($_POST['option'] == "c"){
    $sqlcommand="SELECT email, id_client, id_2client FROM pec_3 WHERE email = 'email'";
    }

         else if ($_POST['option'] == "d"){
    $sqlcommand="SELECT email, id_client, id_2client FROM pec_4 WHERE email = 'email'";
    }



$query = mysqli_query($conn,$sqlcommand) or die (mysqli_error($conn));
$search_output .="<hr />query result: ";
if ($row = mysqli_fetch_array($query)){
   $email = $row ["email"];
   $pec = $row ["id_client"];
   $sdi = $row ["id_2client"];
   $search_output .= "<hr/><p> $email - $id_client - $id_2client</p>";


} else{
   $search_output= "<hr /> No Result";

}
}
?>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

<title>Search id_client and id_2client</title>
</head>
<body>
   <section>
       <div class="container">
           <div class="row my-5">
               <h1>Search id_client and id_2client</h1>
           </div>
<form name="ricerca-pec" method="post" action="<?php echo $_SERVER ['PHP_SELF']; ?>">
  <div class="form-group">
   <label for="exampleFormControlInput1">Inserisci l'email del cliente</label>
   <input type="email" class="form-control" id="exampleFormControlInput1" placeholder="youremail@email.com" name="email">
  </div>
  <div class="form-group">
   <label for="exampleFormControlSelect1">Select Option</label>
   <select class="form-control" id="exampleFormControlSelect1" name="option">
     <option value="a">A</option>
     <option value="b">B</option>
     <option value="c">C</option>
     <option value="d">D</option>
   </select>
  </div>
  <input class="btn btn-primary" type="submit" name="submit"></input>
</form>

</div>
</section>

<section>
<div class="container">
<div class="row">
<p><?php echo $search_output; ?></p>
</div>
</div>
</section>


<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQx"</script>
</body>
</html>


Tutto funziona, o meglio, la query funzionerebbe ma sembra che non trovi nulla con la causale WHERE email = 'email' , come se non gli arrivasse tale dato con la richiesta post dal form. Infatti per prova ho modificato la query


PHP:
$sqlcommand="SELECT email, id_client, id_2client FROM pec_1 WHERE email = 'email'";

in

PHP:
 $sqlcommand="SELECT email, id_client, id_2client FROM pec_1 WHERE email = 'email@email.com'";

in cui email@email.com è presente nella tabella pec_1 e ricevo dal form corretti risultati.

Vi chiedo cortesemente aiuto che sto impazzendo :(.

Grazie a tutti.
 
Praticamente il problema sta sicuramente nella non inizializzazione delle variabili $email, e $option, perciò ho provato a riscrivere la parte del file search.php in tale modo inizializzandole e poi inserendo $email nella query, per semplicità ho lasciato solo una query e una option nella select form...:

PHP:
<?
error_reporting(E_ALL);
ini_set('display_errors', '1');
include("conn.php");

$search_output = "";
$email = " ";
$option = " ";


if (isset($_POST["submit"])){
   if($_POST['option']== "a"){
    $sqlcommand="SELECT email, id_client, id_2client FROM pec_1 WHERE email = '$email";
    }

    echo    $sqlcommand="SELECT email, id_client, id_2client FROM pec_1 WHERE email = '$email";

$query = mysqli_query($conn,$sqlcommand) or die (mysqli_error($conn));
$search_output .="<hr />query result: ";
if ($row = mysqli_fetch_array($query)){
   $email = $row ["email"];
   $pec = $row ["id_client"];
   $sdi = $row ["id_2client"];
   $search_output .= "<hr/><p> $email - $id_client - $id_2client</p>";


} else{
   $search_output= "<hr /> No Result";

}
}
?>

aggiungendo anche un echo che mi stampa la query eseguita ( come se ce ne fosse bisogno ), effettivamente non viene presa la variabile $email dalla richiesta POST a seguito del submit della form, questo poichè la query risultante è

PHP:
SELECT email, id_client, id_2client FROM pec _1 WHERE email = ''

datemi una mano :(
 
Risolto...

come un' imbxxxxx non ho giustamente messo le variabili dopo il ciclo if, perciò ho riscritto

PHP:
$search_output = "";
$email = " ";
$option = " ";


if (isset($_POST["submit"])){
$email = $_POST["email"];
$option = $_POST["option"];
.
.
.
.

e lavora tutto correttamente, anche con il multioption da select. Ora vorrei ampliare tale codice inserendo degli input form per quei campi che non sono presenti nel database, pertanto le richieste sarebbero:

1) Eseguo la ricerca tramite il form e mi si stampano a video i dati email, id_client, id_2client ( attualmente funziona)
2) Se dopo il submit ci sono i dati id_client e id_2client ( o uno dei due mancanti ), dovrà uscirmi una input label con accanto bottone di "invio", per poter caricare da frontend il nuovo dato nel database.

Se comunque ( a livello di efficienza e sicurezza ) c'è qualche suggerimento da parte della community per poter migliorare l'attuale codice, ben venga.
 

Discussioni simili