Problema nella query select in php

di il
3 risposte

Problema nella query select in php

Buongiorno

Premetto di non essere molto brava, però sto provando a creare una pagina html con interrogazione di dati in un database.

Ho creato la pagina html che invia dati al database e attraverso una query rilascia il risultato desiderato.

Il mio database contiene tutte le parole di 6 lettere che sono presenti nel dizionario zanichelli.

La query di selezione permette di cercare le parole in base anche all'inserimento di una sola lettera che è presente nelle parole.

Mi spiego meglio, mettiamo caso che voglia trovare tutte le parole di 6 lettere che contengono la lettera a, e che non contengono la lettera o.

Fino ad un certo punto va tutto bene (il codice che ho inserito va bene), ma nel momento in cui inserisco il continuo delle condizioni (che tra l'altro sono identiche a quelle sopra, quindi ho fatto copia e incolla e modificato solo le variabili), il risultato mi dà solo connessione stabilita al database e nessun record trovato.

Quello che non capisco è perchè se inserisco "and" non funziona più, ma se inserisco "or" funziona (però ovviamente non soddisfa i miei criteri di ricerca)

Vi posto il codice della pagina html e php, spero riuscite ad aiutarmi.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//IT">

<html>

<head>

<title> esercizi database</title>

</head>

<body>

<h1> ricerca parole 6 lettere</h1>

<form ACTION="visualizzaparola.php" METHOD="post">



<table BORDER="0">

<tr>

<td>lettera iniziale: <input NAME= "uno" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      



<table BORDER="0">

<tr>

<td>lettera secondo posto: <input NAME= "due" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
            
      <table BORDER="0">

<tr>

<td>lettera terzo posto: <input NAME= "tre" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      
      <table BORDER="0">

<tr>

<td>lettera quarto posto: <input NAME= "quattro" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      <table BORDER="0">

<tr>

<td>lettera quinto posto: <input NAME= "cinque" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      <table BORDER="0">

<tr>

<td>lettera finale: <input NAME= "sei" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>

      
      <br>
      <br>
      
      <table BORDER="0">

<tr>

<td>lettere presenti: <input NAME= "sette" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      
      
      
      
      
      <table BORDER="0">

<tr>

<td>lettere presenti: <input NAME= "otto" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      
      
      
      
      
      
      <table BORDER="0">

<tr>

<td>lettere presenti: <input NAME= "nove" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      
      
      
      
      
      <table BORDER="0">

<tr>

<td>lettere presenti: <input NAME= "dieci" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      
      
      
      
      
      
      <table BORDER="0">

<tr>

<td>lettere presenti: <input NAME= "undici" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      
      
      
      
      
      
      <table BORDER="0">

<tr>

<td>lettere presenti: <input NAME= "dodici" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      
      

      <br>
      <br>
      
      
      <table BORDER="0">

<tr>
      
<td>lettere non presenti: <input NAME= "tredici" TYPE="TEXT" size="50" maxlength="50">

</td></tr>

</table>
      
      
      
      

      
      
      
      
      
<input TYPE="reset" value="Pulisci campi"> <input TYPE="submit" value="Invio dati">


      </form>
</body>

 </html>
<?php
require_once ("database.php");
$result='';
$uno=$_POST["uno"]; //passata da html
$due=$_POST["due"]; //passata da html
$tre=$_POST["tre"]; //passata da html
$quattro=$_POST["quattro"]; //passata da html
$cinque=$_POST["cinque"]; //passata da html
$sei=$_POST["sei"]; //passata da html
$sette=$_POST["sette"]; //passata da html
$otto=$_POST["otto"]; //passata da html
$nove=$_POST["nove"]; //passata da html
$dieci=$_POST["dieci"]; //passata da html
$undici=$_POST["undici"]; //passata da html
$dodici=$_POST["dodici"]; //passata da html
$tredici=$_POST["tredici"]; //passata da html


$sql = "SELECT * FROM wind WHERE P like '".$uno."_____' and P like '_".$due."____'and P like '__".$tre."___'and P like '___".$quattro."__'and P like '____".$cinque."_'and P like '_____".$sei."'and P like '%".$sette."%'and P like '%".$otto."%'and P like '%".$nove."%'and P like '%".$dieci."%'and P like '%".$undici."%'and P like '%".$dodici."%'and P not like '%".$tredici."%'";

$result = $connessione->query($sql);
      
      
      
      if ($result->num_rows > 0)  
{

echo "<h1> DATI TROVATI </h1>";

while ($row = $result->fetch_assoc()) {

$parola=$row["P"];


echo "<h2>" ."$parola". "</h2>";
      
      

}

}

else {

echo "nessun record trovato";

$connessione->close();

exit;

}
      
      
      




echo "<a href=paginaesempio.html>TORNA INDIETRO</a>";

?>

3 Risposte

  • Re: Problema nella query select in php

    Sono molto arrugginito con PHP, ma secondo me è sbagliata la query.

    Non ho capito bene che cosa vuoi fare: hai un db con le parole da 6 lettere. Vuoi cercare le parole, va bene:

    SELECT * FROM parole WHERE parola LIKE 'can%';

    ad esempio trova le parole che iniziano con ‘can’.

    Mi sfugge che cosa te ne fai delle lettere dalla 7 alla 12, e perché non ti piace la 13 (scaramanzia?).

    Se vuoi cercare tutte le parole con un certo pattern devi comporlo prima di entrare nella query:

    $uno='';
    $due='c';
    $pattern = "";
    if ($uno != '') {
    	$pattern .= $uno;
    } else {
    	$pattern .= '_';
    }
    if ($due != '') {
    	$pattern .= $due;
    } else {
    	$pattern .= '_';
    }
    ...
    print($pattern);
    ...

    Alla fine $pattern contiene la ricerca. L'esclusione la metti con NOT LIKE:

    $query = "SELECT parole.parola FROM parole WHERE parole.parola LIKE '".$pattern."' AND parole.parola NOT LIKE '%".$tredici."%';";
  • Re: Problema nella query select in php

    SELECT * FROM wind WHERE P like '_b____';

    Per trovare esattamente un carattere seguito da b e che contenga esattamente altri quattro caratteri. Significa un totale di sei caratteri per questo motivo non puoi usare and se superiore sei caratteri (nel tuo esempio trova contenenti sette caratteri %$sette%)

  • Re: Problema nella query select in php

    12/08/2023 - Hormus ha scritto:


    SELECT * FROM wind WHERE P like '_b____';

    Per trovare esattamente un carattere seguito da b e che contenga esattamente altri quattro caratteri. Significa un totale di sei caratteri per questo motivo non puoi usare and se superiore sei caratteri (nel tuo esempio trova contenenti sette caratteri %$sette%)

    Mi spiego meglio, "sette" "otto" ecc sono nomi che ho dato a caso alle variabili che vengono inserite dal form nella pagina html,   il mio intento è quello di trovare parole che contengono determinate lettere e che non ne contengano altre, ad  esempio inserisco che ho tre lettere, la 's' 'c' 'a',  e che  invece non ho la 'b' 't' 'e', e la query mi restituisce tutte le parole che soddisfano queste condizioni, ad esempio mi restituisce la parola "scuola" ecc.

    Il problema che ho riscontrato e che proprio non riesco a capire, è che mentre inserisco il resto delle condizioni, l'ultima è che non contiene la lettera che verrà inserita nella variabile "tredici" , all'improvviso non funziona più la query.

    Poi mi è capitato che dopo qualche giorno ci ho riprovato, e sono riuscita a inserire anche altre due variabili identiche all'ultima "tredici" (cambiando sempre il nome della variabile) e come per magia funziona, però poi se voglio continuare a mettere sempre la variabile uguale a "tredici" mi dà errore, quindi veramente non riesco a capire qual è il problema...

    Vorrei creare una form di ricerca simile a questa  https://www.parolecon.it/search.php?d=50

Devi accedere o registrarti per scrivere nel forum
3 risposte