perfetto adesso funziona, mi ha restituito dei risultati
adesso come procediamo?
perfetto adesso funziona, mi ha restituito dei risultati
adesso come procediamo?
Il prossimo passo è realizzare il file HTML col JavaScript necessario per interrogare il sistema (tramite AJAX) e mostrare i risultati.
Direi di usare jQuery per le chiamate e Handlebars per mostrare i dati. Più tardi preparo una bozza .
Però servirebbe un esempio di JSON. Prova a copiare qui il risultato di una delle ricerche, l'output di search.php.
Ultima modifica di mzanella : 30-11-2020 alle ore 16.44.01
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.
ok, grazie tante di cuore
e raro trovare di questi tempi gente che ti aiutano, specialmente con un principiante come me,
tu sei un'eccezione (insieme a darbula e GraphOGLRisorse)
ecco gli l'output di actor_id e actor_id e studio
cinema/members/search.php?fq[0][0][actor.actor_id]=54
cinema/members/search.php?fq[0][0][actor.actor_id]=54&fq[1][0][studio]=Universal
li ho messi sul mio cloud perche' e' un po' lunghetto
https://yadi.sk/d/qIyM0dQbfYio9Q
Ultima modifica di blackskyisback : 30-11-2020 alle ore 17.04.31
Questo è un punto di partenza:
Ci sono diverse cose da dire.Codice PHP:
<?php
$tags = ['Universal', 'X', 'Y', 'Z'];
$actors = [
[
'id' => 1,
'name' => 'Anna Abbott'
],
[
'id' => 2,
'name' => 'Bett Birningham'
],
[
'id' => 3,
'name' => 'Charlotte Cheen'
]
];
?>
<html>
<head>
<title>Search page</title>
<style>
form {
width: 1024px;
max-width: 80%;
margin: auto;
}
label {
display: block;
}
fieldset {
margin: 1em auto 0.5em auto;
}
#result-container {
width: 1024px;
max-width: 80%;
margin: auto;
}
#result-container h2 {
margin-bottom: 0;
}
#result-container small {
color: #666;
font-style: italic;
}
article {
border: 1px solid #666;
padding: 1em;
border-radius: 1em;
margin-bottom: 0.5em;
}
.synopsis {
font-size: 0.9em;
}
</style>
</head>
<body>
<form id="search-form">
<label>
Cerca film con questo attore:
<select name="actor">
<option value="any">Nessun filtro</option>
<?php foreach ($actors as $actor): ?>
<option value="<?php echo $actor['id']; ?>"><?php echo $actor['name']; ?></option>
<?php endforeach; ?>
</select>
</label>
<fieldset>
<legend>Cerca film con almeno uno dei seguenti tag</legend>
<?php foreach ($tags as $tag): ?>
<label>
<input name="tag" type="checkbox" value="<?php echo $tag; ?>"> <?php echo $tag; ?>
</label>
<?php endforeach; ?>
</fieldset>
</form>
<div id="result-container">
</div>
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
<script id="search-results-template" type="text/x-handlebars-template">
<h2>Risultati ricerca</h2>
<small>{{header.result_count}} risultati in {{header.time}} ms</small>
{{#each results}}
<article>
id: {{film_id}}<br>
title: {{movie_title}}<br>
genre: {{genre}}<br>
<div class="synopsis">{{{synopsis}}}</div>
</article>
{{else}}
<p>Nessun risultato</p>
{{/each}}
</script>
<script>
var result_container = $('#result-container');
var source = document.getElementById("search-results-template").innerHTML;
var template = Handlebars.compile(source);
function display_results(data) {
result_container.html(template(data));
}
$('#search-form').change(function () {
var data = $(this).serializeArray();
var filters = [];
for (var i in data) {
var name = data[i].name;
var value = data[i].value;
if (name === 'actor' && value !== 'any') {
filters.push('fq[0][][actor.actor_id]=' + value);
}
else if (name === 'tag') {
filters.push('fq[1][][studio]=' + value);
filters.push('fq[1][][distributor]=' + value);
}
}
var url = 'search.php?' + filters.join('&');
$.get(url, display_results);
});
</script>
</html>
All'inizio del file c'è uno script PHP che genera un vettore di tag e uno di attori. Questa parte va sostituita con un'interrogazione al database che legge entrambe le informazioni. Concretamente si tratta di eseguire un paio di query simili a
(per studio e distributor servirà poi un minimo di postprocessing in PHP, analogo a quanto visto qualche messaggio fa).Codice:SELECT id, nome FROM actor; SELECT studio, distributor FROM film;
Poi comincia la parte HTML. Ho utilizzato un minimo di CSS giusto per rendere la pagina presentabile, puoi cambiarlo a piacimento.
La parte del form usa i vettori $tags e $actors per far comparire una select con gli attori su cui filtrare (oppure "nessun filtro", di default) e la lista dei tag selezionabili. Anche qui nulla di speciale, puoi eventualmente modificarlo, prestando attenzione ai nomi dei campi che dovranno poi corrispondere a quelli usati nel resto del codice (JavaScript).
Vengono quindi inserite due librerie JavaScript: jQuery per le chiamate AJAX, e Handlebars per mostrare i risultati.
C'è poi uno script Handlebars:
si tratta di un template, al suo interno ci va l'HTML che verrà applicato a ogni film presente tra i risultati della ricerca. La sintassi è abbastanza semplice, tutto quello che compare tra doppie parentesi graffe viene preso dal JSON, per esempio {{movie_title}} viene rimpiazzato dal valore del campo movie_title del JSON restituito dalla ricerca. Per gli altri dettagli puoi dare un'occhiata alla documentazione di Handlebars.Codice:<script id="search-results-template" type="text/x-handlebars-template">...</script>
Infine c'è la parte JavaScript: ci sono un paio di istruzioni di Handlebars necessarie per inizializzarlo, poi la parte più interessante in $('#search-form').change(function () {...}: questo event listener legge le informazioni inserite nel form ogni volta che clicchi/modifichi qualcosa, le usa per costruire un URL e si serve di quest'ultimo per interrogare la pagina search.php. Il risultato ottenuto (che è un JSON) viene passato a Handlebars (tramite la funzione di callback display_results), il quale provvederà a mostrare i risultati.
Nulla di tutto questo è testato, per il solito motivo che non ho il database su cui fare le prove
Non scordarti di alemoppo: il più delle volte, se non risponde, è solo perché darbula, GraphOGLRisorse e io lo battiamo sul tempo .e raro trovare di questi tempi gente che ti aiutano, specialmente con un principiante come me,
tu sei un'eccezione (insieme a darbula e GraphOGLRisorse)
Ultima modifica di mzanella : 30-11-2020 alle ore 19.04.33
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.
No no, è una pagina separata che puoi chiamare come vuoi.questo devo inserirlo in search.php a quanto ho capito, in alto, o mi sbaglio?
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.
hai ragione, adesso ho notato questo
var url = 'search.php?' + filters.join('&');
non mi e' chiaro questo pezzo
se io volessi inserire questa query ? dove va' dato che vedo id e name (che sarebbe nome)Codice PHP:
<?php
$tags = ['Universal', 'X', 'Y', 'Z'];
$actors = [
[
'id' => 1,
'name' => 'Anna Abbott'
],
[
'id' => 2,
'name' => 'Bett Birningham'
],
[
'id' => 3,
'name' => 'Charlotte Cheen'
]
];
?>
Codice PHP:
<?php
require_once("connetti.php");
$query = mysql_query ("SELECT * FROM actor ");
$row = mysql_fetch_array ($query);
?>
Dovresti sostituire
conCodice PHP:
$actors = [
[
'id' => 1,
'name' => 'Anna Abbott'
],
[
'id' => 2,
'name' => 'Bett Birningham'
],
[
'id' => 3,
'name' => 'Charlotte Cheen'
]
];
Codice PHP:
$query = 'SELECT id, nome FROM actor';
$result = mysql_query($query);
if ($result === false) {
die('Cannot execute query: ' . mysql_error());
}
$actors = [];
while ($row = mysql_fetch_assoch($result)) {
$actors[] = [
'id' => $row['id'],
'name' => $row['nome']
];
}
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.
dunque, ho fatto cosi
Codice PHP:
<?php
require_once("connetti.php");
?>stranamente mi visualizza un erroreCodice PHP:
<?php
$tags = ['Universal', 'X', 'Y', 'Z'];
$query = 'SELECT actor_id, nome FROM actor';
$result = mysql_query($query);
if ($result === false) {
die('Cannot execute query: ' . mysql_error());
}
$actors = [];
while ($row = mysql_fetch_assoch($result)) {
$actors[] = [
'id' => $row['actor_id'],
'name' => $row['nome']
];
}
?>
line 17Codice PHP:
Fatal error: Call to undefined function mysql_fetch_assoch() in E:\OpenServer\domains\cinema\members\search_form.php on line 17
Codice PHP:
while ($row = mysql_fetch_assoch($result)) {
trovato l'errore, era questo
sostituito conCodice PHP:
mysql_fetch_assoch
rimane questa parte di codiceCodice PHP:
mysql_fetch_assoc
grazie e' pocoCodice PHP:
$tags = ['Universal', 'X', 'Y', 'Z'];
Ultima modifica di blackskyisback : 30-11-2020 alle ore 20.56.30
Mea culpa, si scrive mysql_fetch_assoc senza h.
I pezzi mi pare siano disseminati nei messaggi precedenti. Mettendo insieme al precedente viene fuori qualcosa come:rimane questa parte di codice
Codice PHP:
<?php
require_once "connetti.php";
// Reads tags
$query = 'SELECT distributor, studio FROM film';
$result = mysql_query($query);
if ($result === false) {
die('Cannot execute query: ' . mysql_error());
}
$tags = [];
while ($row = mysql_fetch_assoc($result)) {
$tags = array_merge(
$tags,
array_filter(array_map('trim', explode(',', $row['studio']))),
array_filter(array_map('trim', explode(',', $row['distributor'])))
);
}
$tags = array_unique($tags);
// Reads actors
$query = 'SELECT actor_id, nome FROM actor';
$result = mysql_query($query);
if ($result === false) {
die('Cannot execute query: ' . mysql_error());
}
$actors = [];
while ($row = mysql_fetch_assoc($result)) {
$actors[] = [
'id' => $row['actor_id'],
'name' => $row['nome']
];
}
?>
Ultima modifica di mzanella : 01-12-2020 alle ore 17.25.30
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.
funziona
volevo chiederti come mai non hai utilizzato DataTables, forse era piu' efficace per filtrare la lista attori
una ricerca simile a quella su Google in cui inserisci una lettera e viene filtrato subito
comunque GRAZIE di cuore, sei stato fantastico e diponibile
ci sarebbe un'altra questione sul filtraggio dell'eta' ma penso che e' meglio aprire una nuova discussione
Figurati, è stato un piacere
Una cosa non esclude l'altra . Il meccanismo base di ricerca per attore ora c'è, si tratta di selezionarne l'id da una select. Se al posto della select preferisci un sistema più elaborato in JavaScript (magari con una ricerca integrata sul nome) puoi sempre aggiungerlo.volevo chiederti come mai non hai utilizzato DataTables, forse era piu' efficace per filtrare la lista attori
I suggerimenti che do più spesso:
- Le funzioni mysql_* non fanno più parte di PHP. Usa PDO o MySQLi.
- Il supporto a PHP 5.x è cessato l'1 gennaio 2019, e con esso le funzioni mysql_*. Che ti piaccia o no.
- Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
- Indenta correttamente il codice e usa nomi significativi per gli identificatori.
ok, capito , si ora con le basi penso di riuscire anche con datatables
adesso apro una discussione sul filtro dell'eta'
Salve,
sto usando il plugin wordpress popular posts e vorrei escludere un tag dalla visualizzazione: il widget mi chiede di inserire l'ID del tag preceduto dal segno -, ho provato ad inserire sia il nome visalizzato sia lo slug ma posso solamente inserire dei numeri; ho provato quindi ad aprire il tag che mi interessa (articoli-tag) ma non trovo un numero di riferimento. Dove trovo il numero dell'ID del tag che mi interessa?
Grazie
Salve,
l'ID lo rileva accedendo a Articoli->Tag. Portando il mouse sul tag in esame, vedrà in basso a sinistra il relativo url all'interno del quale leggerà, ad esempio, taxonomy=post_tag&tag_ID=9. L'id è il numero che visualizza dopo ID=. Nel mio esempio l'id è 9.
Saluti
Funziona!!! Grazie
Salve,
è possibile rimandare il collegamento di un tag o una categoria ad una pagina specifica (creata da me)invece delle pagine tag e categorie create automaticamente dall'host?
Grazie
è possibile rimandare il collegamento di un tag o una categoria ad una pagina specifica (creata da me)invece delle pagine tag e categorie create automaticamente dall'host?
Grazie
Salve,
direi di no, perché tag e categorie sono attributi a cui si associano determinate/i pagine o articoli.
Non mi è chiaro, però, ciò che vorrebbe realizzare.
Da tener presente che in una pagina o articolo si possono comunque inserire link che puntano a determinati contenuti (pagine o articoli).
Saluti