Negli scacchi la strategia di aprire un secondo fronte nelle operazioni di attacco, quando abbiamo un vantaggio acquisito magari su lato opposto ma non basta per vincere la partita, è una soluzione spesso ok per portare a casa il punto. Quando si inizia con CI Framework non si hanno tutte le risposte e quindi l’unica filosofia che si può perseguire è quella di scomporre i problemi in problemi più piccoli e anche di studiare gli esempi perché far funzionare tutto e subito non è alla portata del NEWBIE!


Quando un problema come nel mio caso attende una risposta trascendente sull’operatore LIKE in MVC che al momento non arriva, tutto quello che si può fare é non perdere l’allenamento con CI e cimentarsi comunque a percorsi indiretti CHE APPARENTEMENTE PORTANO LONTANO DA UNA SOLUZIONE. Ad esempio vediamo come realizzare nel procedurale una soluzione come un search engine che al momento traslato su CI non mi funziona. Un motore di ricerca interno per il mio western Movie è indispensabile ma al momento deve mancarmi qualche info tecnica su come mettere in moto la dinamica di funzionamento. Almeno avere le idee chiare nel prcedurale! Immaginiamo quindi di volere tirare su un search engine che cerca solo info legate alle birre, come fare? Abbiamo la nostra pagina statica come index o piattaforma di lancio o di ricerca dopodiché nel body inseriamo:

<form action="result.php" method="get"> 
<img src="images/logo.png" />
<input type="text" name="user_query" size="80" placeholder="write something to search beer"/> 
<input type="submit" name="search" value="Search Beer Now">
</form>

analizziamo bene i punti critici che sono dopo l’apertura e la conseguente chiusura del tag FORM: action=”result.php” e method=”get” presenti nel form che si preoccupano rispettivamente di inviare i dati compilati dall’ utente a una pagina che farà il lavoro sporco e la specificazione del metodo GET preferito per comodità ma non per specifiche di sicurezza a POST. Il nome del campo testo è molto importante: name=”user_query” così come é molto importante il pulsante identificato come search . Questo FORM spediscei dati alla pagina di elaborazione result.php che recupererà i dati in transito sulla URL con il metodo GET per inserirli in una Query che filtrerà i dati nel database grazie alla clausola WHERE e all’operatore LIKE che fa uso dei caratteri Jolly (%) per supportare alcuni criteri di ricerca. Vediamo quindi come si recuperano intanto i dati:

if(isset($_GET['search'])){
$get_value = $_GET['user_query'];
if($get_value==''){
echo "<center><b>Please go back, and write something in the search box!</b></center>";
exit();
}

Alla riga uno si chiede se l’utente ha spedito qualcosa come dati, se il pacchetto dati ‘search’ è pieno (ISSET) allora setta una variabile di nome get_value che ha come valore la cattura del dato del campo testo! Dopodiché ci sarà una condizione IF – ELSE che dice: se il valore di get_value é vuoto avvisa che devi cercare qualcosa di diverso in wikibeer (nella stringa campo testo) altrimenti procedi con una situazione di TRUE e il codice si sviluppa in questo modo:

$result_query = "select * from tuonometabella where keywords like '%$get_value%'";
$run_result = mysqli_query($conn, $result_query);
if(mysqli_num_rows($run_result)<1){
echo "<center><b>Oops! sorry, nothing was found in the database!</b></center>";
exit();
}

Qui l’interpretazione della stele di Roseta dice che: seleziona tutti i record presenti nella tabella con il nome da te scelto dove il campo keywords ha come valore (grazie all’ operatore LIKE) la stringa digitata dall’ utente, dopodichè questa query in relazione ai parametri di connessione avrà una situazione di tabella vuota e di tabella piena, quindi devo gestire i messaggi all’ utente con un IF-ELSE dove sopra si evince solo la prima istruzione condizionale del FALSE che riporta un messaggio di database VUOTO all’ utente, che continua sotto con la condizione TRUE caratterizzata dal ciclo WHILE che fa tutto il lavoro di scorrimento dei dati:

while($row_result=mysqli_fetch_array($run_result)){
$title=$row_result['title'];
$link=$row_result['link'];
$link1=$row_result['link1'];
$tipo=$row_result['tipo'];
$alcol=$row_result['alcol'];
$desc=$row_result['desc'];
$history=$row_result['history'];
$image=$row_result['image'];
	
echo "<div class='results'>
	
<h2>$site_title</h2>
<img src='images/$image' width='88' height='100' style='float:left;padding-right:4px;margin-right:4px;'/>
<a href='$link' target='_blank'>$link</a>&nbsp;&nbsp;<a href='$link1' target='_blank'>$link1</a>
<p align='justify'>$tipo - $alcol - $desc</p> 
<p align='justify'>$history</p> 
</div>";

}
}

Quindi con due sole pagine, una di spedizione di dati e l’altra di ricezione abbiamo una INTERA APPLICAZIONE FUNZIONANTE! Certo a livello grafico il tutto lascia molto a desiderare, per cui stiamo seriamente pensando a fini didattici di migliorare il restyling della nostra applicazione, soprattutto in termini responsivi, che sarà oggetto del nostro prossimo articolo!

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...