Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 25-02-10, 03:10   #1 (permalink)
User Newbie
 
L'avatar di d4ve
 
Data di registrazione: Nov 2009
Messaggi: 9
Upload file nel database con user id

Salve a tutti!
Sono nuovo qui...
Complimenti, vi seguo spesso e siete stati più volte utilissimi.

Ho uno script php che mi effettua l'upload di file nel database mysql:


Codice PHP:
<?php
// se Ã¨ stato inviato il file...
if(isset($_POST['invia']))
{
    
// se ci sono stati problemi nell'upload del file
    
if(!isset($_FILES['file_inviato']) OR $_FILES['file_inviato']['error'] != UPLOAD_ERR_OK)
    
mostra_form("errore nell'invio del file. Riprova");

    
// connessione e selezione del database
    
$mysqli = new mysqli('localhost''root''pwd''test');

    
// recupero alcune informazioni sul file inviato
    
$nome_file_temporaneo $_FILES['file_inviato']['tmp_name'];
    
$nome_file_vero $_FILES['file_inviato']['name'];
    
$tipo_file $_FILES['file_inviato']['type'];


    
// preparo la query per inserire i dati nel DB
    
$stmt $mysqli->prepare("INSERT INTO tabella_files VALUES (NULL, ?, ?, ?)");

    
// collego i parametri della query alle variabili PHP
    
$stmt->bind_param('ssb'$nome_file_vero$tipo_file$dati_file);

    
// apro il file in lettura
    
$fp fopen($nome_file_temporaneo,"rb");
    while (
$dati_file fread($fp,1024))
    {
        
$stmt->send_long_data(2$dati_file);
    }

    if (
$stmt->execute())
    {
        
$messaggio "Memorizzazione del file <b>$nome_file_vero</b> nel database eseguita correttamente.";
    }
    else
    {
        
$messaggio "Errore nella memorizzazione del file <b>$nome_file_vero</b>";
    }

    
// mostro nuovamente il form ed un messaggio di successo
    
mostra_form("Memorizzazione del file <b>$nome_file_vero</b> nel database eseguita correttamente.");
}
else
{
    
mostra_form();
}

/**
* Mostra il form per l'upload del file
*
*/
function mostra_form($messaggio '')
{
    echo <<<END
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Carica file nel database</title>
</head>
<body>
    <p>$messaggio<br>Seleziona un file da memorizzare nel database: </p>
    <form name="form1" enctype="multipart/form-data" method="post" action="">
        <p>
            <input type="file" name="file_inviato">
        </p>
        <p>
            <input type="submit" name="invia" value="Invia file">
        </p>
    </form>
</body>
</html>
END;
exit();
}
?>

e questa tabella nel database:


Codice:
id_file int(11) NOT NULL auto_increment, 
   nome_file varchar(255) default NULL, 
   tipo_file varchar(128) default NULL, 
   dati_file longblob, 
   PRIMARY KEY (`id_file`)


Vorrei inserire un campo di testo insieme all'upload del file, dove posso scrivere i nomi utente tra quelli registrati nel mio sito.
O meglio ancora, vedere gli utenti registrati, e spuntare quelli che hanno il permesso di vedere il file.
In questo modo, ogni volta che effettuo l'upload di un file, posso scegliere a chi permettere di vederlo nella propria pagina privata.


In teoria c'è, ma in pratica? E' fattibile?
Cosa dovrei aggiungere al codice e alla tabella? :/

Grazie infinite!
d4ve non in linea   Rispondi citando
Vecchio 26-02-10, 23:10   #2 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Ciao d4ve.

Ad upload effettuato potresti far aprire una pagina con la lista iscritti con accanto delle checkbox a cui associ l'id dell'utente.
Selezionati gli utenti che possono vedere il file al submit popoli un'altra tabella dove fai un'associazione id_file - id_utente.

Per sapere chi può vedere quel file basterà controllare che l'id utente sia presente tra i listati per quell'id_file.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 27-02-10, 18:05   #3 (permalink)
User Newbie
 
L'avatar di d4ve
 
Data di registrazione: Nov 2009
Messaggi: 9
Ti ringrazio per la spiegazione, ma è molto più complicato di quanto pensassi (per me).

La butto lì... che qualcuno sappia, non esiste uno script simile già preconfezionato da poter adattare?
d4ve non in linea   Rispondi citando
Vecchio 02-03-10, 20:44   #4 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Troppo compilato non dovrebbe essere.

Se creassi le checkbox così:
Codice PHP:
// estrai id e name dalla tabella utenti e poi cicli il risultato

echo $row['name']." - <input type=\"checkbox\" name=\"id_utente[]\" value=\"".$row['id_utente']."\" />"
Facendo il submit recuperi $_POST['id_utente'], che sarà un array contenente gli id_utente checkati....ti basta fare un insert con l'id_file che hai ed il contenuto dell'array.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 04-03-10, 19:39   #5 (permalink)
User Newbie
 
L'avatar di d4ve
 
Data di registrazione: Nov 2009
Messaggi: 9
OK, ci ho provato.


Codice PHP:
<?php 

// connessione e selezione del database
mysql_connect('localhost''root''pwd')
or die(
'Connessione non riuscita: ' mysql_error());

if(!
mysql_select_db('nomedb'))
die(
'Selezione database fallita!');

echo  
" <form method=\"post\" action=\"recuperocheckbox.php\"> ";


//seleziona la tabella e visualizza gli username in ordine alfabetico

$query "SELECT * FROM qls3_users ORDER BY username";
$result mysql_query($query);


//prendi tutto il contenuto
while($r=mysql_fetch_array($result))
{   
     
   
$username=$r["username"];
   
$id=$r["id"];
 


// estrai il risultato


echo  " <input type=\"checkbox\" name=\"username[]\" value=\"$id\" /> $username " ;



}

echo 
" <input type=\"submit\" value=\"invia form\" />
        </form>"
;

?>

Così può andare?


E ora come associo l'username al file che ho uppato?

Un altro aiutino?

Ultima modifica di d4ve : 04-03-10 20:38.
d4ve non in linea   Rispondi citando
Vecchio 05-03-10, 23:13   #6 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Hai una tabella dove associ path del file a id del file?

Se no...creala.

A upload effettuato recuperi l'id del file tramite la funzione mysql_insert_id(); il risultato è l'id dell'ultimo inserimento effettuato.
Metti il valore dell'id in un campo hidden e quando fai il submit del form ti recuperi sia l'array degli id utente che l'id del file.
Poi cicli l'array ed inserisci l'associazione id_utente - id_file.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 08-03-10, 19:35   #7 (permalink)
User Newbie
 
L'avatar di d4ve
 
Data di registrazione: Nov 2009
Messaggi: 9
L'associazione dovrebbe esserci già nella tabella del mio primo post, no?


Nel database, l'id del file è nella colonna id_file. Per recuperare l'ultimo, basta che uso:

Codice PHP:
$ultimo_id=mysql_insert_id(); 

poi nel campo hidden lo recupero:


Codice PHP:
<input type="hidden\" name=\"ultimofile\" value=\"$ultimo_id\"> 

giusto?


ma nel submit non so come si recuperano entrambi i valori...



Anche perchè, ho usato alcune istruzioni in mySQLi (che mi hanno consigliato) nella parte dell'upload.

Nella scelta dell'utente invece ho usato le istruzioni in mySQL.

Siccome non sono espertissimo in materia (ma mi ritengo uno smanettone nato), dici che mi conviene integrarle in un'unica pagina? è fattibile o vanno in conflitto? Perchè vorrei evitare un redirect, visto che l'upload me lo fa tutto in background senza caricamenti della pagina.



Ti devo una cassa di birra per la pazienza (non scherzo eh)!
d4ve non in linea   Rispondi citando
Vecchio 08-03-10, 22:50   #8 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Quote:
d4ve Visualizza il messaggio
L'associazione dovrebbe esserci già nella tabella del mio primo post, no?
Si hai ragione.


Quote:
Nel database, l'id del file è nella colonna id_file. Per recuperare l'ultimo, basta che uso:

Codice PHP:
$ultimo_id=mysql_insert_id(); 
Si, devi richiamare la funzione dopo l'inserimento nella tabella.
Quote:
poi nel campo hidden lo recupero:


Codice PHP:
<input type="hidden\" name=\"ultimofile\" value=\"$ultimo_id\"> 
giusto?
Ok.

Quote:
ma nel submit non so come si recuperano entrambi i valori...
Codice PHP:
$id_file=$_POST['ultimofile']; //contiene l'id del file
$id_user=$_POST['id_utente']; //contiene un array degli id user selezionati 
Quote:
Siccome non sono espertissimo in materia (ma mi ritengo uno smanettone nato), dici che mi conviene integrarle in un'unica pagina? è fattibile o vanno in conflitto? Perchè vorrei evitare un redirect, visto che l'upload me lo fa tutto in background senza caricamenti della pagina.
Come preferisci. Personalmente utilizzerei una pagina a se stante o una funzione ad hoc.


Quote:
Ti devo una cassa di birra per la pazienza (non scherzo eh)!
La birra non si rifiuta mai.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 09-03-10, 17:55   #9 (permalink)
User Newbie
 
L'avatar di d4ve
 
Data di registrazione: Nov 2009
Messaggi: 9
"Piccolo" problema però...

Devo passare i valori dalla pagina di upload a quella di selezione degli utenti, giusto?

Ma come?

Se inserisco "member_select.php" nell'action dell'upload, effettua il redirect alla pagina di selezione, ma non mi memorizza l'immagine nel database. Cosa sbaglio?
d4ve non in linea   Rispondi citando
Vecchio 09-03-10, 20:37   #10 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Non hai bisogno di passare nulla alla pagina di selezione degli utenti.
L'id_file lo recuperi tramite la funzione e gli utenti tramite una SELECT...come vedi non hai bisogno di passare valori.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 10-03-10, 17:05   #11 (permalink)
User Newbie
 
L'avatar di d4ve
 
Data di registrazione: Nov 2009
Messaggi: 9
Aaah, ottimo!

Quindi mi basta mettere un link sotto il form di upload che mi rimandi alla pagina di selezione dell'utente?


...ricapitolando:

Nella pagine di selezione utente, oltre alle checkbox, inserisco la funzione per recuperare l'ultimo id inserito nel database.

Poi, l'action mi porta alla pagina "recuperocheckbox.php".

E quest'ultima conterrà:

Codice PHP:
$id_file=$_POST['ultimofile']; //contiene l'id del file
$id_user=$_POST['username']; //contiene un array degli id user selezionati 

Ho provato a ciclare l'array ma se ci aggiungo un echo non mi restituisce gli id degli utenti, per cui sbaglio sicuramente. Un aiuto?

E soprattutto, ad associare l'id del file all'id dell'utente? come si fa?

Tieni conto che i file e gli utenti sono in due tabelle separate per tenere più ordinato il database, sì possono ugualmente collegare tra loro?


Grazie ancora Samyorn!
d4ve non in linea   Rispondi citando
Vecchio 10-03-10, 20:26   #12 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Prova a vedere l'HTML della pagina con le checkbox, dovrebbero essere:

<input type="checkbox" name="username[]" value="1" />

nel value ovviamente troverai tutti gli id utente.

Per fare l'associazione crei una nuova tabella con due campi: id_file - id_user

Ciclando l'array inserirai tutti gli id_user contenuti in esso e l'id_file sarà uguale per tutti.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 12-03-10, 19:11   #13 (permalink)
User Newbie
 
L'avatar di d4ve
 
Data di registrazione: Nov 2009
Messaggi: 9
Ok, ci ho provato!

La tabella che mi associa l'user ai file l'ho creata...

...e se ho capito bene, il resto dovrebbe essere più o meno così, correggimi se sbaglio (non l'ho ancora testato):


Codice PHP:
$id_file=$_POST['ultimofile']; //contiene l'id del file
$id_user=$_POST['username']; //contiene un array degli id user selezionati  



$query_file="INSERT INTO associazione_utenti_file (id_file) VALUES ('$id_file')";

if (!
mysql_query($query_file,$connessione))
  {
  die(
'Errore! ' mysql_error());
  }



for (
$i 1$i <= sizeof($id_user); $i++) {
  
$query_user "INSERT INTO associazione_utenti_file (id_user) VALUES ('$id_user[$i]')  ";
  
$result mysql_query($query_user$connessione) or die("Errore...");
  echo 
"I dati inseriti sono <br> - ID FILE: ".$id_file."<br>ID USER: ".$id_user



Può andare?
Pardon, lo so che ho delle enormi lacune!
d4ve non in linea   Rispondi citando
Vecchio 12-03-10, 21:32   #14 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Quote:
d4ve Visualizza il messaggio
Ok, ci ho provato!


Quote:
correggimi se sbaglio (non l'ho ancora testato):
Si, così non va bene, eseguendo così gli insert otterrai un record con il solo id_file e tanti record con il solo id_user.
Pensa alla tabella di un database come ad un file excel (scusa l'esempio banale, ma rende l'idea):
- le colonne (campi) sono: Nome - Cognome
- le righe (record) sono il contenuto: Mario - Rossi

Per inserire il primo nominativo scriverai nella riga 1 -colonna 1 "Mario" e nella cella accanto (riga 1 - colonna 2) "Rossi".
Ogni volta che fai un INSERT tu crei un record (una riga nell'esempio del file excel), quindi devi valorizzare contemporaneamente sia il campo Nome che il campo Cognome:

Codice PHP:
//metti ovviamente il require del file di connessione
$id_file=$_POST['ultimofile']; //contiene l'id del file
$id_user=$_POST['username']; //contiene un array degli id user selezionati 

for ($i 0$i <= sizeof($id_user); $i++) {
  
$query_user "INSERT INTO associazione_utenti_file (id_file,id_user) VALUES ('$id_file','".$id_user[$i]."')";
  
$result mysql_query($query_user$connessione) or die ("Errore...");
  echo 
"I dati inseriti sono <br> - ID FILE: ".$id_file."<br>ID USER: ".$id_user


Altra cosa da considerare è che gli array numerici partono sempre da 0 e non da 1.
Quote:
Pardon, lo so che ho delle enormi lacune!
Pian piano vedrai che ti verrà tutto più semplice, smanettare serve a molto... moltissimo.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Rispondi


Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 15:22.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.