- Home
- Categorie
- Coding e Sistemistica
- Coding
- query per film actor
-
Ciao Alex, cerco di aiutarti anche se sono dal telefono e mi rimane veramente difficile scrivere una corretta SQL, però il concetto te lo posso illustrare.
Per estrarre gli attori di un dato film, devi necessariamente effettuare un query su di essi e non sul film da estrarre e lo puoi fare eseguendo un INNER JOIN.
In pratica, la tua query è errata dal punto di vista delle estrazioni, non proprio nel metodo.
Ovvero.
Select actor.name as name, actor.photo as photo, film.movie_title as movie_title, film.year as year FROM film_actor INNER JOIN actor on film_actor.actor_id = actor.actor_id INNER JOIN film on film.film_id = film_actor.film_id where actor_film.film_ id = $film_idMi spiace che sono in giro e non riesco ad aiutarti al meglio.
Prova e fammi sapere.
-
Ciao Ultima,
a quale codice ti riferisci?
a film.php o cinema.php?
perche' come lo strutturato adesso funziona come volevo io
certo ci sono ancora molte cose da fare,
oltre a quello citato sopra (non posso inserire il link al post perche' non sono Premium), ma e' quello prima del vostro interventoe questi (dove apriro' altri thread)
- trovare il metodo per inserire le foto agli attori e i film
- avere la possibilita' di aggiungere, cancellare, modificare dalla pagina php
- inserire film scegliendo un attore collegato o viceversa
ecc...
-
Io creerei un unico file, film.php che viene richiesto quando passi la variabile film_id. In questo modo, con una sola query ottieni sia il film richiesto, che la lista degli attori partecipanti in elenco con annessi parametri aggiuntivi.
Poi, per il caricamento delle immagini, quindi delle photo, cerca su PHP.net la variabile globale $_files e la funzione move_uploaded_file()
Ci sono esempi pratici, che con un po'di ingegno, riesci tranquillamente ad adattare alle tue esigenze.
Per le altre cose, il discorso è più ampio perché entrano in gioco altri tipi di fattori, sia di HTML, php e SQL, ma niente di trascendentale.
Potresti provare a cercare su Google qualcosa tipo: creare un mini CMS in PHP. Almeno per apprenderne i concetti base. Ma a mio avviso, dovresti cercare per prima cosa sullo sperimentare porzioni di codice, per apprenderne la logica. Poi quando hai una buona conoscenza di base, ti lanci nella costruzione di un qualcosa di tuo.
-
Ultima ciao,
Ricreare tutto da zero e' un'impresa per me, ci ho messo mesi per arrivare a questo risultato, sono piu' professionale con il mio mestiere che scrivere php
come e' scritto il codice adesso sembra funzionare, mancano ancora alcune cose da aggiustare, ma non so come fare,se mi aiuti su come visualizzare i **credited nella pagina cinema.php **ho risolto la fase query
poi apro altre discussioni per gli altri aiuti
-
@Ultima said:
Io ti ringrazio per la partecipazione che hai nel forum, ma oggettivamente parlando (non soggettivamente), quegli esempi non spiegano nulla, ma forse dei concetti dove fare copia e incolla per chi, già conosce le strutture di PDO e può prenderne spunto per riscriverle, perchè a livello codice, sono bucate e prive di controlli.
Se conosci PDO, sai benissimo che esistono una serie ben definita di istruzioni che vanno passate alle variabili e che fanno parte della classe stessa, che li, non vengono neanche menzionate compromettendo di molto la stabilità e sicurezza delle connessioni al database.
Questo intendevo. O si fanno degli esempi concreti e ben definiti oppure è preferibile non aggiungere altre nozioni a metà a delle persone che magari cercano aiuto su tutt'altro argomento, che ricordo essere una query SQL.Ma infatti quelle risorse servono soprattutto a prendere spunto, se uno vuole la pappa bella e pronta è un altro discorso.
Io ho semplicemente fatto notare che bisognerebbe cambiare approccio e non copiare e incollare il primo codice che si trova in rete, seguendo cattive pratiche.
Nell'esempio del sito PHP The Right Way c'è tutto quello che serve per connettersi ed eseguire query in maniera sicura, comprese le query parametriche.
istruzioni che vanno passate alle variabili e che fanno parte della classe stessa, che li, non vengono neanche menzionate compromettendo di molto la stabilità e sicurezza delle connessioni al database
Cosa intendi? I parametri PDO::MYSQL_ATTR_INIT_COMMAND oppure PDO::ATTR_EMULATE_PREPARES ad esempio?
-
Noto con dispiacere che nessuno ha voglia di aiutarmi, pazienza, funziona cosi anche nella vita di tutti i giorni :(, purtroppo.
L'altruismo non esiste piu'.
-
forse ho trovato la soluzione, la query e' questa
[PHP]
require_once("connetti.php");
$film_id = $_GET["id"];
$query = mysql_query ("SELECT credited, note FROM film_actor Where actor_id = {$film_id}");while($row=mysql_fetch_array($query)){
[/PHP]
il problema e che la devo inserire dentro quest'altra, se no i campi sono sballati, ho provato cosi, ma viene generato un errore :bho:
[PHP]
<?php$con = mysqli_connect("localhost","root","","xxx");
$id = $_GET['id'];
$id = mysqli_real_escape_string($con,$id); $query = mysqli_query($con, "SELECT film.* FROM film
JOIN film_actor ON film_actor.film_id = film.film_id
WHERE film_actor.actor_id = " . intval($_GET['id']));
while($row=mysqli_fetch_array($query)){$film_id = $_GET["id"];
$query_2 = mysql_query ("SELECT credited, notes FROM film_actor Where actor_id = {$film_id}");while($row=mysql_fetch_array($query_2)){
?><tr class="we">
<td><?php echo "<a href="film.php?id=" . $row['film_id'] . "">" . $row['movie_title'] . "</a>";?></td>
<td><?php echo $row['year']; ?></td>
<td><?php echo $row['distributor']; ?></td>
<td><?php echo $row['credited']; ?></td>
<td><i><?php echo $row['notes'] ?></i></td><?php
}
}
?>[/PHP]
-
Che errore ti stampa?
Se lo posti, magari si trova la soluzione
-
Ciao Ultima,
l'errore e' questo
**Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in **W:\domains\localhost\Cinema_2019\cinema.phpon line **408 **Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in **W:\domains\localhost\Cinema_2019\cinema.phpon line **408************
**linea 408
**
[PHP]while($row=mysql_fetch_array($query_2)){
[/PHP]
-
Il tuo errore è molto semplice.
Tu generi una variabile al primo while chiamata $row, ove al suo interno la sovrascrivi nel secondo ciclo while chiamandola sempre $row.
Ma soprattutto, a cosa ti serve la prima query se all'interno della seconda query non utilizzi nessun parametro?
A parte questo, prova intanto a modificare il nome della seconda variabile $row, magari usando semplicemente $row2. Se hai ancora errori, riporta l'errore.
-
Torno a spiegare
Il database è in mysql cosi formato
Database struttura: 3 tabelle
actor: <------Table
actor_id
photo
namefilm: <------Table
film_id
movie_title
yearfilm_actor: <------Table
actor_id
film_id
credited
notesnella pagina film.php io visualizzo la scheda film e gli attori (non vedo la foto, ma questo lo risolveremo dopo)
quello importante sono gli attori, la query mi restituisce il** nome**, credited e notes
questo e' il codice
film.php
[PHP]<?phprequire_once("connetti.php");
$film_id = $_GET["id"];
$query = mysql_query ("SELECT * FROM film_actor as fa JOIN actor as a ON a.actor_id = fa.actor_id JOIN film as f ON f.film_id = fa.film_id WHERE fa.film_id = {$film_id}");while($row=mysql_fetch_array($query)){
?>
<div class="castbox"><p><img class="headshot" src="<?php echo $row ['nome'] ?>"><br><?php echo "<a href="cinema.php?id=" . $row['actor_id'] . "">" . $row['nome'] . "</a>";?></a><br><i><?php echo $row['credited'] ?></i><br><pre><?php echo $row['notes'] ?></pre><br> <br> <br></div>
<?php
}
?><?php[/PHP]
nella pagina **cinema.php **visualizzo la scheda attore (anche la foto) con tutti i dati e la lista dei suoi film, tramite DataTables (per il filtraggio e la ricerca istantanea)
****cinema.php <------------------**query1
**
[PHP]<?php$con = mysqli_connect("localhost","root","","xxx");
$id = $_GET['id'];
$id = mysqli_real_escape_string($con,$id); $query = mysqli_query($con, "SELECT film.* FROM film
JOIN film_actor ON film_actor.film_id = film.film_id
WHERE film_actor.actor_id = " . intval($_GET['id']));
while($row=mysqli_fetch_array($query)){
?><tr class="we">
<td><?php echo "<a href="film.php?id=" . $row['film_id'] . "">" . $row['movie_title'] . "</a>";?></td>
<td><?php echo $row['year']; ?></td>
<td><?php echo $row['distributor']; ?></td>
<td><i><?php echo $row['notes'] ?></i></td>
<td><?php echo $row['credited']; ?></td><?php
}
?>
[/PHP]dove sta il problema? non visualizzo credited e notes nella lista film,
questa e' la tabella ripropostafilm_actor: <------Table
actor_id
film_id
credited
notesquesta sembra funzionare ma la devo inserire il codice nella stessa query query1, se no i dati non vengono visualizzati in DataTables
[PHP]$film_id = $_GET["id"];
$query = mysql_query ("SELECT credited FROM film_actor Where actor_id = {$film_id}");while($row=mysql_fetch_array($query)){ [/PHP]
-
Forse non mi sono spiegato.
Tu hai due variabili row ricorsive. Quando assegni il primo while a row se utilizzi la stessa variabile row nel secondo while che ti ricordo essere nel primo, il primo row che generi lo distruggi e di conseguenza tronchi il ciclo while primario mandando in confusione tutto. E questo è il primo errore.
Il secondo è che le due query, non parlano tra loro. Nonostante siano una dentro l'altra.
Altro errore. Le JOIN non sono corrette, anche se ti funzionano, la sintassi è errata.
Il tuo è un solo errore di logica, non di scrittura, perché il codice per quanto obsoleto in parte è corretto. Ma devi sistemare la logica, ottimizzare l'algoritmo di estrazione.
Ti do una dritta. Le query, testale con un phpmyadmin. Quando funzionano, allora estrai i dati con PHP.
Esegui sempre dei test, prima di scrivere del codice. (Debug)
-
Ritorniamo al punto di partenza :(, lo scritto anche a Giorgio nel suo canale youtube, nel suo intervento di oggi,
se io ero capace di fare quello che stai scrivendo allora non era necessario chiedere il vostro aiuto, purtroppo io e il php siamo ancora conoscenti, al 5%,
sono un autodidatta e la mia passione e' imparare qulcosa, ma a volte trovo degli ostacoli che non riesco a superare, :bho:
tra l'altro io svolgo un lavoro che e' il contrario del vostro, il mio e' manuale, e quello si lo faccio professionalmente.
-
Nessuna risposta, nessun aiuto concreto, solo concetti virtuali, bisogna avere una laurea in informatica per poter dialogare, se sei un principiante sei perduto.
Mi rassegno questo forum e' una vera delusione, come tutti gli altri in Italia.
Cerchero' le mie risposte in altre fonti su canali esteri del mio paese.
-
Ciao Alex, questo è un forum dove l'intento degli utenti è cercare di aiutare le persone a crescere in quello che stanno facendo. Io ti ho largamente detto come e cosa fare, ma evidentemente o non mi faccio capire o oppure cerchi di avere qualcosa di già bello che funzionante.
La programmazione non funziona in questo modo. E no, non bisogna avere una laurea in informatica, ma bisogna studiare e comprendere a fondo le basi della programmazione.
Te lo riscrivo, io ti ho dato errori e soluzioni, se poi non sei in grado di implementarli, allora siamo su un altro livello di conoscenza. E dire che questo forum è una delusione è una cavolata immensa, perchè questo thread che hai aperto ha già una miriade di risposte di utenti che hanno cercato di aiutarti, ma non puoi pretendere che le persone si fermino a prepararti la pappa.
Io non so quanti anni hai, ma di certo hai bisogno di studiare le fondamenta della programmazione, iniziando dalle basi, non da codice rubato da internet per poter cercare di fare qualcosa di tuo, se poi non lo sai adattare.
Mi spiace che la pensi in questo modo, ma ti dirò di più, se hai la pazienza di cercare all'interno del forum, troverai problemi analoghi ai tuoi. Fermo restando, che ti ho detto dov'è l'errore 3 volte.
A presto.
-
film.php
[PHP]
<?php
/*- Come ti avevo già ampiamente scritto, la query è errata nel metodo e nella sintassi
*/
require_once("connetti.php");
$film_id = $_GET["id"];
//$query = mysql_query ("SELECT * FROM film_actor as fa JOIN actor as a ON a.actor_id = fa.actor_id JOIN film as f ON f.film_id = fa.film_id WHERE fa.film_id = {$film_id}");
$query = "SELECT
film_actor.actor_id as actor_id,
film_actor.film_id as film_id,
film_actor.credited as credited
film_actor.notes as notes,
actor.actor_id as actor_ID,
actor.photo as photo,
actor.name as name,
film.film_id as film_ID,
film.movie_title as movie_title,
film.year as year
FROM film_actor INNER JOIN actor ON film_actor.actor_id = actor.actor_id INNER JOIN film ON film_actor.film_id = film.film_id WHERE film_actor.film_id = " . $film_id;$result = mysql_query( $query );
while( $row = mysql_fetch_object( $result ) ) : ?>
<div class="castbox">
<p><img class="headshot" src="<?php echo $row->photo; ?>"><br>
<a href="cinema.php?actor_id=<?php echo $row->actor_ID; ?>"><?php echo $row->name; ?></a>
</a><br>
<i>
<?php echo $row->credited; ?>
</i><br><pre><?php echo $row->notes; ?></pre><br> <br> <br>
</div><?php endwhile; ?>
[/PHP]cinema.php
[PHP]
<?php
/*- Questa invece è completamente errata. Come ti ho già scritto, utilizzi per ben due volte la stessa tipologia di variabile, andando a sovrascrivere la precedente, e te non fai altro che ripetere una sintassi errata presa dalla query dei film, a dimostrazione, di come ho scritto prima, che non stai minimamente applicando metodo, ma stai semplicemente appoggiando dati e porzioni di codice.
- Oltretutto, sopra usi mysql, qui usi mysqli ( o una o l'altra)
*/
require_once("connetti.php");
$actor_id = $_GET['actor_id'];
// funzione inutile. $id è un numero non una stringa
//$id = mysqli_real_escape_string($con,$id);
// query completamente errata
//$query = mysqli_query($con, "SELECT film.* FROM film
//JOIN film_actor ON film_actor.film_id = film.film_id
//WHERE film_actor.actor_id = " . intval($_GET['id']));
$query = "SELECT
film_actor.actor_id as actor_id,
film_actor.film_id as film_id,
film_actor.credited as credited
film_actor.notes as notes,
film.film_id as film_ID,
film.movie_title as movie_title,
film.year as year
FROM film_actor INNER JOIN film ON film_actor.film_id = film.film_id WHERE film_actor.actor_id = " . $actor_id;$result = mysql_query( $query );
while( $row = mysql_fetch_object( $result ) ) : ?>
<tr class="we"> <td><a href="film.php?id=<?php echo $row->film_id; ?>"><?php echo $row->movie_title; ?></a> </td> <td><?php echo $row->year; ?>; ?></td> <?php // distributor adesso da dove salta fuori? ?> <!--<td><?php //echo $row['distributor']; ?></td>--> <td><i><?php echo $row->notes; ?></i></td> <td><?php echo $row->credited; ?></td> <?php // tr di chiusura mancante!!!!! ?> </tr>
<?php endwhile; ?>
[/PHP]
- Come ti avevo già ampiamente scritto, la query è errata nel metodo e nella sintassi
-
Ciao Ultima,
la query non e' mia, io non sapevo da dove cominciare, me la fornito andreagotta, confidando che era giusta
Io lavoro nelle costruzioni, costruisco e ristrutturo case, ho 51 anni e non penso che a questa eta' possa pensare di imparare programmazione,
quello che so' lo imparato da solo o suggerito da altri, come ho detto, io il php non lo conosco ( conosco l'xml e xslt), e ' un paio di mesi che lo sto' studiando,la mia richiesta erano semplicemente delle query, cosa che non capisco fino in fondo, non voglio la "pappa pronta" come ormai leggo nel 99% dei forum (ma ormai e' moda),
anche perche' io ho creato il database, le pagine ,il motore di ricerca interno, e il caricamento delle foto, ma semplicemente un aiuto.Io penso che i forum devono fornire conoscenza a chi e' ignorante della materia, non fornire dubbi, e come aprire un libro e trovarlo incompleto.
Se chiedi a Giorgio Tave ti dira' da dove provengo, e dove abito adesso,
spero che mi aiutere a risolvere i miei prossimi quesiti, che sono ormai pochi
grazie per l'aiuto
-
Incredibile, ancora errore
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in W:\domains\localhost\Cinema_2019\film.php on line 180
**film.php <-------------- line 180
**[PHP]
while( $row = mysql_fetch_object( $result ) ) : ?>
[/PHP]cinema.php <-------------- line 418
**Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in **W:\domains\localhost\Cinema_2019\cinema.php on line **418
[PHP]while( $row = mysql_fetch_object( $result ) ) : ?> [/PHP]
******:bho:
-
Aggiungi questa, prima del ciclo while
[PHP]
if (!$result)
die("mySQL error: ". mysql_error());
[/PHP]Adesso riesegui il processo e vediamo che errore esce.
PS.
Concettualmente qualcuno adesso (me) sta facendo il tuo lavoro, anche se questo è un tuo divertimento. Ecco, questo è ciò che il Forum non deve fare.
Te lo scrivo in maniera chiara, perchè la tua lamentela mi ha particolarmente colpito.
"Il Forum è un luogo dove ci si scambia conoscenza, non un luogo dove si cerca un lavoro svolto a gratis". E' una alinea sottile che forse, non hai appreso, dimostrato da da quello che leggo e quello che scrivi e lamentandoti nonostante "io" ed altri, ti stiamo dando una mano. Poi, puoi avere anche 100 anni, il discorso non cambia.
-
Ultima non sei obbligato ad aiutarmi, io non obbligo nessuno, se tu non sei disponibile lasciamo perdere,
al mio paese si aiuta senza rinfacciare,
tu dici che il forum e' un luogo dove si scambia conoscenza, ma io questa conoscenza non c'e lo,
per te e' facile, tu conosci il codice e ci metti poco, io da ignorante in materia forse un mese, un anno o mai,
se io ti dico, vammi a costruire una casa, tu lo sai fare? ne dubito, quindi chiedi consiglio a me e io ti spiego come fare e che materiali usare,
lo stesso e' il codice.va beh..comunque l'errore e' questo
[PHP]mySQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'film_actor.notes as notes, actor.actor_id as actor_ID, actor.photo as photo,' at line 5[/PHP]