- Home
- Categorie
- Coding e Sistemistica
- PHP
- Query in codice
-
Query in codice
Salve,
ho trovato questo codice per caricare le immagini, funziona bene, sposta le foto in una e controlla se il file e' stato caricato precedentamente.
Il problema e che e' senza la query per inserire i dati nel database,ho creato questa ma...non so la posizione esatta del codice dove inserirla:bho:
questa e' la query
[PHP]$sql = "INSERT INTO images (file, size) VALUES ('$filename', '$filenamesize')";[/PHP]
grazie per eventuale aiuto
questo e' il codice
[PHP]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<meta name="robots" content="index,follow" />
<link rel="stylesheet" type="text/css" href="styles.css" />
</head><body>
<form action="" enctype="multipart/form-data" method="post">
<input id="file" name="file" type="file" />
<input id="Submit" name="submit" type="submit" value="Submit" />
</form><?php
// Upload and Rename File
if (isset($_POST['submit']))
{
$filename = $_FILES["file"]["name"];
$file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
$file_ext = substr($filename, strripos($filename, '.')); // get file name
$filesize = $_FILES["file"];
$allowed_file_types = array('.doc','.docx','.rtf','.png','.jpg');if (in_array($file_ext,$allowed_file_types) && ($filesize < 2000000)) { // Rename file $newfilename = md5($file_basename) . $file_ext; if (file_exists("upload/" . $newfilename)) { // file already exists error echo "<br>" . "<b>" . "Attenzione! - Hai già caricato questo file." . "</b>"; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename); echo "<br>" . "<b>" . "il file è stato caricato con successo."; } } elseif (empty($file_basename)) { // file selection error echo "<br>" . "<b>" . "Seleziona un file da caricare." . "</b>"; } elseif ($filesize > 2000000) { // file size error echo "<br>" . "<b>" . "Il file che stai tentando di caricare è troppo grande." . "</b>"; } else { // file type error echo "<br>" . "<b>" . "Solo questi tipi di file sono consentiti per il caricamento: " . "</b>" . implode(', ',$allowed_file_types); unlink($_FILES["file"]["tmp_name"]); }
}
?>
</body>
</html>[/PHP]
-
[PHP]
else
{
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);
// QUI INSERISCI LA TUA QUERY
echo "<br>" . "<b>" . "il file è stato caricato con successo.";
}
[/PHP]
-
perfetto funziona grazie flaviors200
ho tolto md5 perche' me lo rinominava, questo pero' un codice per testare il funzionamento (test su un'altra tabella del database)
adesso quello che vorrei fare e integrarlo nella pagina actor e da li caricare le foto,
l'id lo prelevo con questo
[PHP]
require_once("connetti.php");$actor_id = $_GET["id"];
//......id prlevato tramite get: $id=_GET['id'];
$query = mysql_query("SELECT * FROM actor WHERE actor_id=" . (int)$actor_id) or die ("Error in query: " . mysql_error());
$row = mysql_fetch_array ($query);[/PHP]
ci sono problemi pero',
quando carico il file con il form rimane il messagio sullo schermo
**il file è stato caricato con successo.
**e se ricarico la pagina mi ricarica il file (o tenta, dato che controlla se esiste)
poi, integrare l'id nel codice?
altro problema, le foto risiedono in questa cartella
image_upload/actor/uploads
per le gallery inviduali avrei pensato a questo
image_upload/actor/uploads/Lind Blair/ ---------> creazione della cartella attore prelevato dal campo nome dell'attore
il risultato dovrebbe essere questo
image_upload/actor/uploads/Lind Blair/linda_blair_01.jpg
image_upload/actor/uploads/Lind Blair/linda_blair_02.jpgquindi si dovrebbe prelevare il nome attore e creare la cartella, e poi inserirlo nella query
come si ottiene questo?
questa e la struttura gallery
actor_id_fk e relazionato con actor_id in un'altra tabella
-
non capisco ho creato un nuovo campo info nel database, ma non lo inserisce
[PHP]Info: <input id="info" name="info" type="text" /">[/PHP]
[PHP]
$filename = $_FILES["file"]["name"];
$file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
$file_ext = substr($filename, strripos($filename, '.')); // get file name
$filesize = $_FILES["file"];
$allowed_file_types = array('.doc','.docx','.rtf','.png','.jpg');
$info = $_FILES["info"];
[/PHP][PHP]
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);// QUI INSERISCI LA TUA QUERY $sql = "INSERT INTO images (file, size, info) VALUES ('$newfilename', '$filesize', '$info')"; // execute query mysqli_query($db, $sql);
[/PHP]
-
@Alex_2019 said:
non capisco ho creato un nuovo campo info nel database, ma non lo inserisce
$_POST["info"] al posti di $_FILES["info"]
Per quanto riguarda il discorso cartelle, in un'altra discussione ti era già stato suggerito di non utilizzare i nomi degli attori per nominare le cartelle, bensì l'id dell'attore.
Ad esempio anziché
image_upload/actor/uploads/Lind Blair/linda_blair_01.jpg
potrebbe essere
image_upload/actor/uploads/335/nome-immagine.jpg
Ad ogni modo, se proprio vuoi usare il nome dell'attore/attrice come nome per la sottocartella, dovresti prima ottenere uno slug partendo dalla stringa di partenza.
Dai un'occhiata a questo https://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string
Ad esempio
Linda Blair diventa linda-blair
Gérard Depardieu diventa gerard-depardieu
-
$_POST["info"] al posti di $_FILES["info"]
la soluzione semplice era davanti ai miei occhi
per lo slug do una occhiata domani, con calma
resto il problema di come creare la cartella gallery per ogni attore
suggerimenti sul codice o altro :bho:
grazie flaviors200 per i tuoi consigli
ho aggiustato il codice, perche' mi sono accorto che se ricaricavo la pagina mi usciva il messaggio che il file era doppio la query veniva egualmente eseguita
da cosi
[PHP]
else
{
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);
// QUI INSERISCI LA TUA QUERY
echo "<br>" . "<b>" . "il file è stato caricato con successo.";
}
[/PHP]a cosi
[PHP]
else
{// QUI INSERISCI LA TUA QUERY $sql = "INSERT INTO images (file, size, info) VALUES ('$newfilename', '$filesize', '$info')"; // execute query mysqli_query($db, $sql); move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);
[/PHP]
-
Per creare le cartelle puoi usare la funzione mkdir() di PHP
[PHP]
<?php
mkdir("/path/nome-cartella", 0755);
[/PHP]Ricordati di indicare il path (percorso) relativo alla cartella.
Sul discorso nome cartelle puoi anche utilizzare lo slug, ma devi salvartelo nel database, altrimenti non riesci ad associare l'attore alla sua specifica cartella.
Come vedi è una soluzione più complessa e non esente da problemi. Che succede infatti nel caso di attori omonimi (ammesso che ce ne siano)? Avranno la stessa cartella!
Senza dimenticare che devi aggiungerlo per ciascun attore già inserito. Ergo usa l'id attore
-
Ciao flaviors200,
per la questione director risolvo dopo, adesso sono cominciati i problemi,
fino ad ora ho usato una tabella test, adesso ho apportato modifiche al codice per caricare le foto direttamente dalla scheda attore,
ottengo l'id, la foto viene spostata nella cartella ma la query non viene effettuata (credo sia sbagliata)
la struttura del database e cosi
tabella actor
collegata con
tabella galleryactor_id (actor)
actor_id_fk (gallery)
tramite la relazione
questo e' il codice modificato, non capisco :bho:
uploadfoto.php
[PHP]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<meta name="robots" content="index,follow" />
<link rel="stylesheet" type="text/css" href="styles.css" />
</head><body>
<?php
// Create database connection
require_once("connetti.php");$actor_id = $_GET["id"];
//......id prelevato tramite get: $id=_GET['id'];
$query = mysql_query("SELECT * FROM actor WHERE actor_id=" . (int)$actor_id) or die ("Error in query: " . mysql_error());
$row = mysql_fetch_array ($query);?>
<form action="<?php echo $_SERVER['PHP_SELF'] . '?id=' . $actor_id; ?>" enctype="multipart/form-data" method="post">
<input id="file" name="file" type="file" />
Inserisci la descrizione: <input type="text" name="info" size="50" maxlength="100"><p>
<input type="reset" value="Reset" class="button-reset"/>
<input id="Submit" name="submit" type="submit" value="Submit" />
</form><?php
// Upload and Rename File
if (isset($_POST['submit']))
{
$filename = $_FILES["file"]["name"];
$file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
$file_ext = substr($filename, strripos($filename, '.')); // get file name
$filesize = $_FILES["file"];
$allowed_file_types = array('.doc','.docx','.rtf','.png','.jpg');
$info = $_POST["info"];if (in_array($file_ext,$allowed_file_types) && ($filesize < 2000000)) { // Rename file // $newfilename = md5($file_basename) . $file_ext; con md5 viene rinominato il file $newfilename = ($file_basename) . $file_ext; if (file_exists("upload/" . $newfilename)) { // file already exists error echo "<br>" . "<font color='red'>" . "<b>" . "Attenzione! - Hai già caricato questo file." . "</font>" . "</b>"; } else { // QUI INSERISCI LA TUA QUERY fix by Alex inserire il codice prima di move_upload se no se si ricarica la pagina // inserisce il record nel database ancora $query = mysql_query ("INSERT INTO gallery=file='".$_FILES['file']."', size='".$_FILES."', info='".$_POST['info']."' WHERE actor_id_fk=". $actor_id) ; // execute query move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename); echo "<br>" . "<font color='green'>" . "<b>" . "il file" . " " .$newfilename . " " ."è stato caricato con successo. " ."</font>"; } } elseif (empty($file_basename)) { // file selection error echo "<br>" . "<b>" . "Seleziona un file da caricare." . "</b>"; } elseif ($filesize > 2000000) { // file size error echo "<br>" . "<b>" . "Il file che stai tentando di caricare è troppo grande." . "</b>"; } else { // file type error echo "<br>" . "<b>" . "Solo questi tipi di file sono consentiti per il caricamento: " . "</b>" . implode(', ',$allowed_file_types); unlink($_FILES["file"]["tmp_name"]); }
}
print_r($_GET)
?>
<?php echo "INSERT INTO gallery=file='".$_FILES['file']."', size='".$_FILES."', info='".$_POST['info']."' WHERE id=". $actor_id ?>
</body>
</html>
[/PHP]
-
non riesco a capire perche' non funziona[PHP]
$query = mysql_query ("INSERT INTO gallery
file='".$_FILES['file']."',
size='".$_FILES."',
info='".$_POST['info']."'
WHERE actor_id_fk=". $actor_id) ;
[/PHP]
-
Ciao Alex,
scusa ma fai veramente tanta confusione
Perché invece di buttarti alla cieca non cominci a studiare un pò le basi del linguaggio
Ho capito che non è la tua professione e lo fai solo per puro hobby, ma imparando quantomeno i concetti basi di PHP eviti di fare esclusivamente copia e incolla e di impantanarti in sciocchezze che risolveresti in poco tempo.
Nel codice che hai postato hai definito questa variabile
[PHP]
$filesize = $_FILES["file"];
[/PHP]ma poi nella query scrivi questo
[PHP]
size='".$_FILES."'
[/PHP]che è sbagliato. Il codice corretto è
[PHP]
size='".$_FILES["file"]."'
[/PHP]oppure, dato che $_FILES["file"] lo hai già salvato nella variabile $filesize, puoi scrivere direttamente
[PHP]
size='".$filesize."'
[/PHP]e così anche per gli altri campi.
Considera che $_FILES è un array associativo, ossia un contenitore di variabili a cui puoi accedere tramite indici di tipo stringa e che contiene le informazioni sui file caricati tramite un form.
Quindi, se ad esempio hai caricato il file tramite questo campo
[HTML]
<input id="file" name="file" type="file" />
[/HTML]lato PHP potrai accedere alle informazioni di quel file tramite $_FILES['file']. Se nel <input> mettevi name="miofile", lato PHP avresti dovuto usare $_FILES['miofile'].
Andando a vedere la documentazione di PHP https://www.php.net/manual/en/features.file-upload.post-method.php si scopre che puoi accedere alle seguenti informazioni
[PHP]
$_FILES['file']['name']
$_FILES['file']['type']
$_FILES['file']
$_FILES['file']['tmp_name']
$_FILES['file']['error']
[/PHP]Devi quindi indicare sempre due indici, il primo rappresenta il name del tag HTML <input> da cui hai caricato il file e il secondo l'informazione a cui vuoi accedere (name, type, size, etc...).
Se ti interessa ho pubblicato di recente un sito di nome Guida PHP, che raccoglie una serie di guide e tutorial sul PHP per principianti e non. Se ti va dacci un occhio
-
Ciao Flavio,
e si, mi riesce meglio il mio lavoro,ma il php e' diventato una fissa , ho ancora molto da imparare, sono un principante,
dunque ho cambiato la query, risultato zero, non funziona
[PHP]
$query = mysql_query ("INSERT INTO gallery
file='".$_FILES["file"]["name"]."',
size='".$_FILES["file"]."',
info='".$_POST['info']."'
WHERE actor_id_fk=". $actor_id) ;[/PHP]
graze per l'info del tuo sito
-
qualcosa mi sfugge, non riesco a capire
dopo l'esecuzione della query ricevo questo
Attenzione! Dati non inseriti!
**il file Blair, Linda (I)#[7].jpg è stato caricato con successo. **Array ( [id] => 54 ) INSERT INTO gallery=file='Array', size='', info='imdb' WHERE id=54
provato con altra query semplficata, non funziona :bho:
[PHP]
$query = mysql_query ("INSERT INTO gallery
name='".$filename."',
size='".$filesize."',
info='".$info."'
WHERE actor_id_fk=". $actor_id) ;[/PHP]
ho rinominato un campo nel database, da file a name per non confondermi
-
hai provato:
'INSERT INTO `gallery`(name, size, info).... VALUES("'.$filename.'","'.$filesize.'","'.$info.'")....
-
oppure
'INSERT INTO `gallery`(name, size, info).... VALUES('.$filename.','.$filesize.','.$info.')....
-
Ciao chiabgigi,
ho provato ma non funziona, penso che l'errore sia qui
**Array ( [id] => 54 ) INSERT INTO gallery=file='Array', size='', info='imdb' WHERE id=54
WHERE id=54**
dovrebbe essere **
WHERE actor_id_fk=54**
-
Quando qualcosa non funziona, posta pure l'errore. Non quello dell'applicazione (Es. dati non inseriti) ma quello che ti segnala l'interprete PHP (Es. PHP Fatal error: o PHP Warning).
Magari quando finisci quest'applicazione, prova a passare a MySQLi o meglio ancora a PDO per gestire le operazioni su database
Le funzioni native mysql_* sono morte e sepolte da tempo.
-
ciao Alex
quindi per facilitare il tuo lavoro e in nostro 'aiuto' dovresti anche pubblicare il motivo del malfunzionamento.
Una cosa tipo.....
https://drive.google.com/file/d/1uhUrxoW8EY685SHK-oBotQJ_S2u6DN90/view?usp=sharing
-
Ciao,
non visualizzo nessen errore, semplicemente la query non viene eseguita, ma le foto vengono spostate nella cartella preimpostata,
quando ho incominciato il mio progetto sono partito con il MySQL, passare a MySQLi significa controllare e modificare tutto il codice, un'impresa per me,
ripeto non sono un programmatore , il mio lavoro e tutta'altro (li sono professionale) solo hobby e voglia d'imparare, questo progetto non sara' mai messo online, solo per uso personale, quindi non mi pongo il problema sulla sicurezza, login ecc..
Forse in futuro quando saro' abbastanza bravo provero' con il MySQLi e il PDO.Ciao, leggi sopra
ps: mi dovro' rassegnare e inserire i dati da phpmyadmin
-
@Alex
per favore mi dici quali programmi stai usando?
-