Problema inserimento immagine in tabella

Innanzitutto Buon Natale!

Ho creato un form di cui allego codice

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>DATI</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFCC33">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><form action="recepisci6.php" method="post" enctype="multipart/form-data" name="form1">
        <p> 
          <input name="nome" type="text" id="nome" size="50" >
          NOME</p>
        <p> 
          <input name="cognome" type="text" id="cognome" size="50">
          COGNOME</p>
        <p> 
          <input name="via" type="text" id="via" size="70">
          VIA</p>
        <p> 
          <input name="citta" type="text" id="citta" size="70">
          CITTA'</p>
        <p>
          <input name="foto" type="file" id="foto">
        </p>
        <p>&nbsp; </p>
        <p>
          <input type="submit" name="Submit" value="Invia">
        </p>
      </form></td>
  </tr>
</table>
</body>
</html>

nella versione precedente non avevo inserito il campo per l'inserimento della foto per verificare se i dati "nome cognome via e città" andavano a incrementare correttamente la mia tabella. La tabella veniva regolarmente incrementata.

Successivamente ho inserito nella mia tabella un ulteriore field che ho nominato "foto", in Type ho inserito "blob" e in null ho inserito "null" lasciando così com'era il check in Extra

La mia pagina php che deve recepire i dati del form è così strutturata

<?php
error_reporting(E_ALL);
$database = "miodatabase";
$connessione = mysql_connect('localhost', "*****_", "") or die ("Server non trovato");
mysql_select_db($database, $connessione);

$errore = "no"; 
$successo = "ok";
if(isset($_POST['nome'])){
$nome = $_POST['nome'];
} else{
$nome = "";
}
if(isset($_POST['cognome'])){
$cognome = $_POST['cognome'];
} else{
$cognome = "";
}
if(isset($_POST['via'])){
$via = $_POST['via'];
} else{
$via = "";
}
if(isset($_POST['citta'])){
$citta = $_POST['citta'];
} else{
$citta = "";
}
if(isset($_POST['foto'])){
$foto = $_POST['foto'];
} else{
$foto = "";
}
if($nome!="" && $cognome!="" && $via!="" && $citta!="" && $foto!=""){
$query = "INSERT INTO tab6 (nome, cognome, via, citta, foto) VALUES('$nome', '$cognome', '$via', '$citta', '$foto')"; 
}
if (!$connessione) {
print '&msg='.$errore;
exit;
} else {
mysql_query($query);
print '&msg='.$successo;
exit;
}

?>

Mentre prima il db veniva correttamente incrementato, ora dopo l'aggiunta del campo inserimento foto nessun dato viene aggiunto.

Mi viene dato il seguente messaggio di errore

Notice: Undefined variable: query in /home/*****/****/recepisci6.php on line 41 &msg=ok

la linea 41 è quella in grassetto

if($nome!="" && $cognome!="" && $via!="" && $citta!="" && $foto!=""){

$query = "INSERT INTO tab6 (nome, cognome, via, citta, foto) VALUES('$nome', '$cognome', '$via', '$citta', '$foto')";

}

if (!$connessione) {

print '&msg='.$errore;

exit;

} else {

mysql_query($query);

print '&msg='.$successo;

exit;

}

Dove ho sbagliato e come posso rimediare? :-[

inviato 10 anni fa
gibon
X 0 X

L'errore sta nel fatto che la stringa contenente la query viene creata solo se tutti i campi sono presenti:

if($nome!="" && $cognome!="" && $via! ....

Solo se questo IF è verificato allora viene creata la variabile $query. Nel caso invece l'IF non ha successo la variabile $query non viene definita però lo script procede con le successive istruzioni che prevedono l'esecuzione della query. Ovviamente se la variabile $query non è stata definita, l'istruzione:

mysql_query($query);

ti restituirà un errore! Come fa ad eseguire la query conservata nella variabile $query se tale variabile non è stata mai definita?

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

L'errore sta nel fatto che la stringa contenente la query viene creata solo se tutti i campi sono presenti:

if($nome!="" && $cognome!="" && $via! ....

Solo se questo IF è verificato allora viene creata la variabile $query. Nel caso invece l'IF non ha successo la variabile $query non viene definita però lo script procede con le successive istruzioni che prevedono l'esecuzione della query. Ovviamente se la variabile $query non è stata definita, l'istruzione:

mysql_query($query);

ti restituirà un errore! Come fa ad eseguire la query conservata nella variabile $query se tale variabile non è stata mai definita?

 :bye:

...ma in precedenza quando ancora non avevo inserito il campo "foto" , quello relativo all'inserimento in tabella di una immagine, l'incremento si verificava  regolarmente...da quando ho aggiunto questo ulteriore campo l'incremento non c'è  piu' ....io non so cosa devo fare  :-[

risposto 10 anni fa
gibon
X 0 X

Nel post precedente ti ho spiegato che lo script ha innanzitutto una "logica" sbagliata: se l'IF fallisce, invece di impedire completamente l'inserimento dei dati nella tabella, ci si limita a non costruire la query che poi comunque viene lanciata (ecco il perché dell'errore che ricevi).

Oltra a questo problema ce n'è un altro: hai usato l'array $_POST al posto dell'array $_FILES per recuperare l'immagine inviata con il form. Ti consiglio quindi di prendere spunto dallo script di upload presentato in questo articolo:

http://www.phpnews.it/content/view/213/80/

Ecco perché l'IF "non funziona": per vedere se l'utente ha inviato l'immagine hai usato la variabile $_POST['foto'] che ovviamente è sempre vuota.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Nel post precedente ti ho spiegato che lo script ha innanzitutto una "logica" sbagliata: se l'IF fallisce, invece di impedire completamente l'inserimento dei dati nella tabella, ci si limita a non costruire la query che poi comunque viene lanciata (ecco il perché dell'errore che ricevi).

Oltra a questo problema ce n'è un altro: hai usato l'array $_POST al posto dell'array $_FILES per recuperare l'immagine inviata con il form. Ti consiglio quindi di prendere spunto dallo script di upload presentato in questo articolo:

http://www.phpnews.it/content/view/213/80/

Ecco perché l'IF "non funziona": per vedere se l'utente ha inviato l'immagine hai usato la variabile $_POST['foto'] che ovviamente è sempre vuota.

 :bye:

L'articolo che hai postato l'avevo già seguito e realizzato anche se non completamente in quanto la pagina php che dovrebbe mostrarmi i file inseriti dal form mi dice

Clicca su uno dei seguenti file Nessun file presente nel database '; } ?>

anche se i files sono presenti.

Ho comunque sostituito l'array $_POST con l'array $_FILES e ora la tabella viene incrementata, ma dubito che la foto sia inserita in quanto nel campo blob mi dice [BLOB - 5 Bytes]  mentre la foto è di 33 KB  :-[

...pazienza! Sto imparando!  :-[

risposto 10 anni fa
gibon
X 0 X

Prima di effettuare la query verifica che il file sia stato correttamente inviato. Ad esempio:

if(!isset($_FILES['foto']) OR $_FILES['foto']['error'] != UPLOAD_ERR_OK) die ('Errore upload file');

Inoltre assicurati di recuperare correttamente il contenuto dell'immagine e di prepararlo per l'inserimento della query:

$nome_file_temporaneo = $_FILES['foto']['tmp_name'];

$foto = file_get_contents($nome_file_temporaneo);

$foto = addslashes($foto);

solo dopo queste istruzioni puoi preparare la stringa $query ed eseguirla con mysql_query()

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Prima di effettuare la query verifica che il file sia stato correttamente inviato. Ad esempio:

if(!isset($_FILES['foto']) OR $_FILES['foto']['error'] != UPLOAD_ERR_OK) die ('Errore upload file');

Inoltre assicurati di recuperare correttamente il contenuto dell'immagine e di prepararlo per l'inserimento della query:

$nome_file_temporaneo = $_FILES['foto']['tmp_name'];

$foto = file_get_contents($nome_file_temporaneo);

$foto = addslashes($foto);

solo dopo queste istruzioni puoi preparare la stringa $query ed eseguirla con mysql_query()

 :bye:

siiiiiiiiiiiiiiiiii...adesso funziona  :D :D

se può servire ad altri riporto il codice della pagina.php aggiornato

<?php
error_reporting(E_ALL);
$database = "miodatabase";
$connessione = mysql_connect('localhost', "blabla_", "") or die ("Server non trovato");
mysql_select_db($database, $connessione);

$errore = "no"; 
$successo = "ok";
if(isset($_POST['nome'])){
$nome = $_POST['nome'];
} else{
$nome = "";
}
if(isset($_POST['cognome'])){
$cognome = $_POST['cognome'];
} else{
$cognome = "";
}
if(isset($_POST['via'])){
$via = $_POST['via'];
} else{
$via = "";
}
if(isset($_POST['citta'])){
$citta = $_POST['citta'];
} else{
$citta = "";
}
if(isset($_FILES['foto'])){
$foto = $_FILES['foto'];
} else{
$foto = "";
}
if(!isset($_FILES['foto']) OR $_FILES['foto']['error'] != UPLOAD_ERR_OK) die ('Errore upload file');
$nome_file_temporaneo = $_FILES['foto']['tmp_name'];
$foto = file_get_contents($nome_file_temporaneo);
$foto = addslashes($foto);

if($nome!="" && $cognome!="" && $via!="" && $citta!="" && $foto!=""){
$query = "INSERT INTO tab6 (nome, cognome, via, citta, foto) VALUES('$nome', '$cognome', '$via', '$citta', '$foto')"; 
}
if (!$connessione) {
print '&msg='.$errore;
exit;
} else {
mysql_query($query);
print '&msg='.$successo;
exit;
}

?>

Grazie Gianni ;D

Ti chiedo un'ultima cosa! Le foto che io inserisco  nel mio db sono delle thumb e a ciascuna (cliccando sulla medesima) vorrei associare un link che mi indirizza ad una pagina specifica dove appaiono i dati della persona.

Come posso realizzare questa cosa?  :)

risposto 10 anni fa
gibon
X 0 X

Devi preparare una pagina dati_utente.php che mostra i dati dell'utente. In pratica si tratta di fare una SELECT nella tabella dei dati degli utenti e di mostrare i risultati.

Per capire di che utente si tratta la pagina avrà bisogno dell'ID dell'utente che potresti passagli via URL:

http:\\www.tuosito.it\dati_utente.php?id=123

Nello script dati_utente.php avrai così l'ID nella variabile $_GET['id']

Basta che quindi per ogni thumbnail tu inserisca un link di quel tipo contenente l'ID dell'utente in questione.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Devi preparare una pagina dati_utente.php che mostra i dati dell'utente. In pratica si tratta di fare una SELECT nella tabella dei dati degli utenti e di mostrare i risultati.

Per capire di che utente si tratta la pagina avrà bisogno dell'ID dell'utente che potresti passagli via URL:

http:\\www.tuosito.it\dati_utente.php?id=123

Nello script dati_utente.php avrai così l'ID nella variabile $_GET['id']

Basta che quindi per ogni thumbnail tu inserisca un link di quel tipo contenente l'ID dell'utente in questione.

 :bye:

Gianni

ma per associare un link alla thumbnail come devo fare? Il link deve essere inserito nella tabella?  :-[

risposto 10 anni fa
gibon
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda