- Home
- Categorie
- Coding e Sistemistica
- PHP
- Query in codice
-
@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?
-
-
entrambi
comunque accedi al tuo php.ini e vedi cosa corrisponde a queste voci:
error_reporting
display_errors
display_startup_errors
log_errors
ignore_repeated_errors
html_errors
-
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
display_errors = On
display_startup_errors = On
log_errors = On
ignore_repeated_errors = Off
html_errors = OnUso:
Notepad++
opensource e molto flessibile con i plugin, mi colora il codice e mi segnala errorihttps://notepad-plus-plus.org/
**Open Server Panel:
**per il server, dalla Russia,
molto potente e configurabile, posso gestire domini, aliases, crono, e-mail,moduli, encoding ecc..Bootstrap
per la grafica
-
prova a cambiare error_reporting (è sufficente un ';', non lo cancellare)
metti questo:
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICTprova a postare l'intero codice usando questo: pastebin.com
Come si usa pastebin.com- Copia il contenuto del tuo file, (seleziona tutti, copia)
- Vai su www.pastebin.com
- Incolla il codice nella finestra di pastebin
- Assicurati di eseguire il rilevato di PHP (clic su [PHP]])
- Ti darà un nuovo URL, Copia l'URL
- Incolla l'URL nella tua domanda
-
open server:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Gestione e registrazione degli errori;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; error_reporting è un campo bit. O ogni numero in alto per ottenere l'errore desiderato
; livello di segnalazione
; E_ALL - Tutti gli errori e gli avvisi (non include E_STRICT)
; E_ERROR - errori di runtime fatali
; E_WARNING - avvisi di runtime (errori non fatali)
; E_PARSE - errori di analisi in fase di compilazione
; E_NOTICE - avvisi di runtime (si tratta di avvisi che spesso risultano
; da un bug nel codice, ma è possibile che lo fosse
; intenzionale (ad esempio, utilizzando una variabile non inizializzata e
; basandosi sul fatto che viene automaticamente inizializzato su un
; stringa vuota)
; E_STRICT: avvisi di runtime, consentono a PHP di suggerire modifiche
; al tuo codice che garantirà la migliore interoperabilità
; e inoltra la compatibilità del tuo codice
; E_CORE_ERROR - errori irreversibili che si verificano durante l'avvio iniziale di PHP
; E_CORE_WARNING - avvisi (errori non fatali) che si verificano durante i PHP
; avvio iniziale
; E_COMPILE_ERROR - errori fatali durante la compilazione
; E_COMPILE_WARNING - avvisi in fase di compilazione (errori non fatali)
; E_USER_ERROR - messaggio di errore generato dall'utente
; E_USER_WARNING - messaggio di avviso generato dall'utente
; E_USER_NOTICE - messaggio di avviso generato dall'utente
;
; Esempi:
;
; - Mostra tutti gli errori, ad eccezione di avvisi e avvertenze sugli standard di codifica
;
; error_reporting = E_ALL & ~ E_NOTICE & ~ E_STRICT
;
; - Mostra tutti gli errori, ad eccezione degli avvisi
;
; error_reporting = E_ALL & ~ E_NOTICE
;
; - Mostra solo errori
;
; error_reporting = E_COMPILE_ERROR | E_ERROR | E_CORE_ERROR
;
; - Mostra tutti gli errori
;
error_reporting = E_ALL[upd = 1405174634] [/ upd]
Или же используй функцию error_reporting ()