[PHP] Query con variabile

PietroDeRosa

Nuovo Utente
19 Mar 2018
20
0
1
35
Buonasera a tutti,

oggi scrivo per un problema che sto avendo con una pagina contenente, al suo interno, una query dove è presente una parte relativa alla "data" che viene settata a mezzo form dall'operatore.

Il problema è che quando si carica per la prima volta la pagina e quindi la variabile non è settata, la pagina va in loop (carica sempre) e mi restituire un errore (più che errore, una Notice).

Vorrei sapere se fosse possibile modificare il codice in modo che alla prima esecuzione la data sia settata su Oggi e dove la stessa variabile cambia a seconda della data indicata dal form.

Non so se sono riuscito a spiegarmi bene, nel caso riformulo :)

Vi riporto di seguito le parti di codice interessate e ringrazio anticipatamente chi se ne interesserà.

PHP:
<?php
//recupero quello che hanno scritto
$testo = $_POST['testo'];
$dataok = $_POST['dataok'];
?>

PHP:
 <div class="form-body">
<div class="form-group has-success">
<label class="control-label">Inserisci il codice articolo</label>
<input type="text" class="form-control" id="inputSuccess" name="testo" placeholder="Codice">
 <input type="date" class="form-control" id="inputSuccess" name="dataok"> </div>
<div class="form-actions">
<button type="button" class="btn default">Cancella</button>
<button class="btn red">Invia</button>
</div></form></div>

PHP:
//recupero quello che hanno scritto
$testo = $_POST['testo'];
$dataok = $_POST['dataok'];
//$timestampa = date('Ymd', $timestampa);
$datahq = date_format(date_create($dataok), "Ymd");
//if ($datahq == unset) { date_create($timestampa);
$datahq2= date_format(date_create($datahq), "d-m-Y");
//query mysql

$sql_cerca = "SELECT case WHERE ART LIKE '%".$testo."%'  and DATA<= '".$datahq."' ";

PHP:
$trovati = $conn->query($sql_cerca);
if($trovati-> num_rows > 0)
echo "<center><tr><td>" .$row["xxx"]. "</td>" . "<td>" . $row["xxx"]. "</td>" . "<td> " . $row["xxx"]. "</td>" . "<td>" . $row["xxx"]. "</td>" . "<td> " . $row["xxx"]. "</td>";}

Questa la notice che viene mostrata
Notice: Undefined index: dataok in \secure\page7.php on line 22
Notice: Undefined index: dataok in \secure\page7.php on line 23

dove alle seguenti linee ho questo codice
PHP:
//recupero quello che hanno scritto
$testo = $_POST['testo'];
$dataok = $_POST['dataok'];
 
Il problema è che quando si carica per la prima volta la pagina e quindi la variabile non è settata
ho capito che,
non sono valorizzate sia la data che il testo,
assumendo che DATA<= di oggi, quindi saranno estratte tutte le date

senza fare ragionamenti sulle date,
potresti togliere le clausole "where" dalla query in modo da non avere problemi anche dal testo

attento che nella query hai omesso il FROM ....

in ogni caso il codice,
PHP:
if ( empty($_POST) )
{
    $sql_cerca = "SELECT case FROM ....";
}
else
{
    //recupero quello che hanno scritto
    $testo = $_POST['testo'];
    $dataok = $_POST['dataok'];

    //$timestampa = date('Ymd', $timestampa);
    $datahq = date_format(date_create($dataok), "Ymd");
    //if ($datahq == unset) { date_create($timestampa);
    $datahq2= date_format(date_create($datahq), "d-m-Y");
    //query mysql

    $sql_cerca = "SELECT case FROM ... WHERE ART LIKE '%".$testo."%' and DATA<= '".$datahq."' ";
}

ps
attento anche alla condizione di data valorizzata e testo vuoto, avresti like NULL
ed al contempo testo valorizzato e data vuota,

ti converrebbe aggiungere le clausole where solo quando esistono i dati in ingresso
 
Ultima modifica:
ho capito che,
non sono valorizzate sia la data che il testo,
assumendo che DATA<= di oggi, quindi saranno estratte tutte le date

senza fare ragionamenti sulle date,
potresti togliere le clausole "where" dalla query in modo da non avere problemi anche dal testo

attento che nella query hai omesso il FROM ....

in ogni caso il codice,
PHP:
if ( empty($_POST) )
{
    $sql_cerca = "SELECT case FROM ....";
}
else
{
    //recupero quello che hanno scritto
    $testo = $_POST['testo'];
    $dataok = $_POST['dataok'];

    //$timestampa = date('Ymd', $timestampa);
    $datahq = date_format(date_create($dataok), "Ymd");
    //if ($datahq == unset) { date_create($timestampa);
    $datahq2= date_format(date_create($datahq), "d-m-Y");
    //query mysql

    $sql_cerca = "SELECT case FROM ... WHERE ART LIKE '%".$testo."%' and DATA<= '".$datahq."' ";
}

ps
attento anche alla condizione di data valorizzata e testo vuoto, avresti like NULL
ed al contempo testo valorizzato e data vuota,

ti converrebbe aggiungere le clausole where solo quando esistono i dati in ingresso

Ciao Marino e grazie per la risposta.

Sono riuscito a risolvere, adesso funziona correttamente ed ottengo il risultato desiderato.

P.S. La query che avevo riportato era solo di esempio, per questo mancava il From :D

Grazie ancora ed alla prossima!
 

Discussioni simili