inserire più frasi in un record

  • Creatore Discussione Creatore Discussione nim
  • Data di inizio Data di inizio

nim

Utente Attivo
11 Ott 2011
96
0
0
salve a tutti...
premetto che so da poco usare e lavorare con i database e mi è venuto un dubbio..
se volessi dare agli utenti la possibilità di creare una playlist potrei far scegliere da un elenco di canzoni alcune preferite e cliccando su un pulsante di fianco al nome della canzone quest'ultimo verrebbe salvato in una tabella dove stanno i campi "utente" e "canzoni_scelte"..però le canzoni saranno certamente più di una quindi come faccio a fare in modo che ad un utente nel campo "canzoni_scelte" vengano associate più canzoni?
cioè è possibile che in un record stiano più di un titolo di canzone?non credo...e allora come farei se volessi fare ciò che ho indicato sopra?
 
ciao
ti conviene creare una tabella "canzoni_scelte".
immagino che ogni utente abbia il suo id (id_u), così pure la canzone (id_c).
come minimo tale tabella dovrà avere
id int(xy) autoincrement primary key
id_u int(xy)
id_c int(xy)
quando l'utente sceglie la canzone/i inserisci nella tabella, l'unica cosa è verificare se esiste o no un record con l'id_u e l'id_c scelto (cioè l'utente pinco ha gia scelto in precedenza la canzone pallo)
 
un secondo .. cosa significano quegli (x,y)? cioè non ho capito come risolvere..
 
ciao
quegli xy indicano un numero, cioè quanto deve essere grande l'intero
es. se
int(3) al massimo puoi mettere da 0 a 999,
poi "come risolvere" intendi come fare lo script?
 
no no per lo script mi arrangio...almeno provo..è che non riesco a capire come faccio a mettere nello stesso record il nome di più canzoni..
poi anche se in futuro le dovessi estrarre come bisognerebbe fare per farlo magari con un criterio (per es. l'ultima canzone inserita nella playlist)?Perchè ripeto che il campo per un utente è sempre lo stesso..cioè canzoni_scelte nell'esempio
 
ciao
no non devi mettere più canzoni in un record, come fai a definire quanti campi ci vogliono se l'utente pinco sceglie 2 canzoni mentre l'utente pallo ne sceglie 27?

secondo me dovresti organizzarti (schematicamente) in questo modo
tabella utenti
id_u int(6) autoincrement prymarikey
username varchar(25) notnul
password varchar(25) notnul
#e eventuali altri campi che ti possono servire (tel, email....)

tabella canzoni
id_c int(9) autoincrement primarykey
titolo varchar(50) notnull
#e altri campi se ti servono (autore, data uscita,casa discografica...)

tabella canzoni_scelte
id int(12) autoincrement primarykey
id_u int(6) notnull
id_c int(9) notnull

oppure potrebbe essere canzoni_scelte
id int(12) autoincrement primarykey
username varchar(25) notnul
titolo varchar(50) notnull

non so come pensi di fare il form in cui l'utente sceglie ma potrebbe essere così (a parte ai tag form e pulsante di submit)

PHP:
<?php
//dati di connessione
//ecc.....
$q=mysql_query("SELECT * FROM canzoni ORDER BY titolo");
while ($riga=mysql_fetch_array($q)){
echo $row['titolo']."<input type=\"checkbox\" name=\"canzone[]\" value=\"".$row['id_c']."\"><br>";//oppure due volte $row['titolo']
}
?>
poi nella pag in cui inserirai nel db

PHP:
<?php
//....
$id_utente=$_SESSION['id_utente'];//dal log per accedere al form di scelta
$scelte=$_POST['canzone'];
//avendo messo il nome nel checkbox canzone[] $scelte diventa un array col numero di canzoni scelte
//verifichi che sia stata fatta almeno una scelta
//se si
foreach($scelte as $valore){
	$q_verifica=mysql_query("SELECT * FROM canzoni_scelte WHERE id_u='$id_utente' AND id_c='$valore'");
	$esiste=mysql_num_rows($q_verifica);
	if($esiste == 0){// se zero l'utente non aveva mai fatto quella scelta
		$ins=mysql_query("INSERT INTO canzoni_scelte(id_u, id_c) VALUES('$id_utente', '$valore')");
	}
}
//...
?>
evidente che puoi usare, se preferisci, al posto dell'id_u o dell'id_c l'username e il titolo

spero di essermi spiegato bene, altrimenti sono qui
 
sì ho capito...a quanto pare serviva proprio l'esempio...
GRAZIE
 
ciao
mi è venuto in mente che se l'utente pinco sceglie piu volte la canzone pallo potresti aggiungere un campo alla tabella canzoni scelte

tabella canzoni_scelte
id int(12) autoincrement primarykey
id_u int(6) notnull
id_c int(9) notnull
volte int(6) default 0

e modificare la parte di insert in quasto modo

PHP:
<?php 
//.... 
$id_utente=$_SESSION['id_utente'];//dal log per accedere al form di scelta 
$scelte=$_POST['canzone']; 
//avendo messo il nome nel checkbox canzone[] $scelte diventa un array col numero di canzoni scelte 
//verifichi che sia stata fatta almeno una scelta 
//se si 
foreach($scelte as $valore){ 
    $q_verifica=mysql_query("SELECT * FROM canzoni_scelte WHERE id_u='$id_utente' AND id_c='$valore'"); 
    $esiste=mysql_num_rows($q_verifica); 
    if($esiste == 0){// se zero l'utente non aveva mai fatto quella scelta 
        $ins=mysql_query("INSERT INTO canzoni_scelte(id_u, id_c, volte) VALUES('$id_utente', '$valore', 1)"); 
    }else{//l'utente pinco haveva gia scelto pallo
		$upp=mysql_query("UPDATE canzoni_scelte SET volte=volte+1 WHERE id_u='$id_utente' AND id_c='$valore'"); 
	}
} 
//... 
?>
così puoi sapere quante volte pinco ha scelto pallo
 
sì è vero , grazie mille...con tutti questi esempi sto sul serio imparando e capendo bene! Grazie!
 

Discussioni simili