• User Attivo

    streghetta fai una prova:
    al posto di or die ("Non riesco ad inserire i dati nel DB!!!:<br><b>$sql")
    metti or die(mysql_error())

    così ti dice che errore è e ti da qualche suggerimento e magari incollalo qui!

    ciao


  • Super User

    @streghetta said:

    Non riesco ad inserire i dati nel DB!!!:
    INSERT INTO 'identita' (cognome, nome, indirizzo, citta, cap, prov, regione, ntel, email)
    VALUES ('Cesaroni', 'Cesare', 'Via Giulio Cesare', 'Palermo', '90100','Pa', 'sicilia', '1313134564', 'Cesare_Cesaroni @gigio.it')

    non conosco php ma con la sintassi SQL me la cavo un po' meglio:
    ipotesi:

    1. il nome della tabella identita non dovrebbe essere tra apici singoli, prova a toglierli o mettere delle quadre [identita]
    2. non è che alcuni dei campi del DB sono definiti come numerici ? (ad. es...il CAP e il Telefono)...tu gli butti dentro delle stringhe e forse si arrabbia...
    3. controlla la lunghezza massima dei campi del DB magari alcune stringhe (es. email sono troppo lunghe)

  • User

    ciao a tutti!:yuppi:
    Oggi sono al settimo cielo!!! Forse vi sembrerà un'esagerazione ma è così.
    PROBLEMA RISOLTO!!:ola:
    Grazie di cuore a tutti. Credetemi ragazzi siete stati fantastici.
    Non solo mi avete incoraggiato e vi siete messi a disposizione per aiutarmi,
    ma soprattutto mi avete sempre dato i consigli giusti.

    citazione di fdalesio:
    streghetta fai una prova:
    al posto di or die ("Non riesco ad inserire i dati nel DB!!!:<br><b>$sql")
    metti or die(mysql_error())

    così ti dice che errore è e ti da qualche suggerimento e magari incollalo qui!

    l'errore era il seguente:
    Errore di sintassi nella query SQL vicino a ''identita' ( 'cognome', 'nome', 'indirizzo', 'citta', 'cap', 'prov', 'regione',' linea 1

    e grazie anche a ciò che mi ha consigliato autodafe

    citazione:
    non conosco php ma con la sintassi SQL me la cavo un po' meglio:
    ipotesi:

    1. il nome della tabella identita non dovrebbe essere tra apici singoli, prova a toglierli o mettere delle quadre [identita]
    2. non è che alcuni dei campi del DB sono definiti come numerici ? (ad. es...il CAP e il Telefono)...tu gli butti dentro delle stringhe e forse si arrabbia...
    3. controlla la lunghezza massima dei campi del DB magari alcune stringhe (es. email sono troppo lunghe)

    Effettivamente avevo 3 campi numerici (id, ntel, cap) due dei quali ho modificato per utilizzare le stringhe e ho tolto (dopo vari tentativi fra parentesi e virgolette) gli apici singoli che avevo aggiunto nei miei tentativi anche in $tabella.
    e FINALMENTE FUNZIONA!!
    Qui vi riporto il programma corretto chissà possa essere utile a qualcun altro ma soprattutto per darvi la soddisfazione che per me il vostro aiuto è stato importante

    <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title> Inserimento anagrafica </title>
    <!-- Versione 0.1 -->
    </head>
    <body bgcolor="#FFFFFF">
    <? include ("routine/config.php");
    $cognome = $_POST["cognome"];
    $nome = $_POST["nome"];
    $indirizzo = $_POST["indirizzo"];
    $cap = $_POST["cap"];
    $citta = $_POST["citta"];
    $prov = $_POST["prov"];
    $regione = $_POST["regione"];
    $ntel = $_POST["ntel"];
    $email = $_POST["email"];

    $db = mysql_connect($sqlhostname, $login, $password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri di configurazione");
    mysql_select_db($base, $db)
    or die ("Errore nella selezione del database. Verificare i parametri di configurazione");

    $sql = "INSERT INTO $tabella( cognome, nome, indirizzo, citta, cap, prov, regione, ntel, email) VALUES ('$cognome', '$nome', '$indirizzo', '$citta', '$cap', '$prov', '$regione', '$ntel', '$email')";
    $query = mysql_query ($sql) or die(mysql_error());

    echo "<b>Hai inserito i seguenti dati:</b><br>";
    echo "Cognome/Nome : <b>$cognome $nome</b><br>";
    echo "Residente in : <b>$indirizzo</b><br>";
    echo "Città e cap : <b>$citta e $cap</b><br>";
    echo "Numero telefonico ed e-mail : <b>$ntel e $email</b><br>";
    ?>
    Naturalmente è da sistemare graficamente.
    Ho ancora tantissimo da fare es eliminare i campi vuoti.
    E ho già una domanda.
    Successivamente devo inserire in tabella delle immagini credo di dover usare il campo blob per cui se per i campi numerici non si possono usare le stringhe la stessa cosa vale per i blob?
    Un bacione a tutti by streghetta:36:


  • Super User

    contento che tu abbia risolto...

    per le immagini in mySql purtroppo non saprei...
    ma come alternativa potresti memorizare in un campo testuale del DB la URL dell'immagine anzichè caricare l'immagine stessa nel DB...


  • User

    Per le immagini forse è meglio salvarle su una cartella con diritti di scrittura e nel database memorizzare solo il percorso al file (o il nome, se il percorso rimane lo stesso per tutti i file). In questo modo alleggerisci il carico che il dbms deve sopportare e recuperi tutte le informazioni in poco tempo.

    Ciao!


  • User

    Ciao ragazzi!;)
    Per ora sto cercando di risolvere il problema dei campi vuoti.
    Ho letto i vostri messaggi e onestamente non ho capito bene.
    Citazione Nasozor:
    Per le immagini forse è meglio salvarle su una cartella con diritti di scrittura e nel database memorizzare solo il percorso al file (o il nome, se il percorso rimane lo stesso per tutti i file). In questo modo alleggerisci il carico che il dbms deve sopportare e recuperi tutte le informazioni in poco tempo.

    Mi vergogno a dirlo....cos'è una cartella con diritti di scrittura? come si imposta e utilizza?


  • User

    @streghetta said:

    Ciao ragazzi!;)
    Per ora sto cercando di risolvere il problema dei campi vuoti.
    Ho letto i vostri messaggi e onestamente non ho capito bene.
    Citazione Nasozor:
    Per le immagini forse è meglio salvarle su una cartella con diritti di scrittura e nel database memorizzare solo il percorso al file (o il nome, se il percorso rimane lo stesso per tutti i file). In questo modo alleggerisci il carico che il dbms deve sopportare e recuperi tutte le informazioni in poco tempo.

    Mi vergogno a dirlo....cos'è una cartella con diritti di scrittura? come si imposta e utilizza?

    Qui si apre un mondo, cerco di sintetizzare il più possibile. Se hai un server tuo (ovvero sul tuo pc hai installato apache/php/mysql) e sei su windows, tutte le cartelle hanno diritti di scrittura, quindi no problem. Basta che usi le funzioni php che ti servono (fopen, fwrite, move_uploaded_file, ecc...) nel modo corretto e sei a posto. Se il tuo server è linux, allora devi creare una cartella e dare chmod 660 (o 777 per andare sul sicuro, anche se non è il massimo) e chown utente:utente (dove "utente" è il proprietario del sito). Se il server non è tuo, dovresti fare delle prove per vedere se hai una cartella che accetta di scrivere file tramite php (basta che esegui la chiamata fopen("prova.txt", "w+"), che cerca di aprire il file e se non lo trova lo crea. Se non crea il file allora devi chiedere al tuo host di abilitarti una cartella in lettura/scrittura (dovrebbero farlo senza troppi problemi).

    Spero di essermi spiegato, ma l'unica è che tu faccia delle prove con la funzione fopen per vedere se funziona.

    Ciao!


  • User

    CIAO A TUTTI!!!!
    Ho letto il messaggio di Nasozor ho capito che usando easyphp posso utilizzare senza troppi problemi le cartelle con diritti di scrittura, ma per il resto non ho capito molto come usarle con i form.
    Io per intanto ho dato un'occhiata a qualche libro e anche su internet...
    Per Blob (a differenza dei campi numerici) posso utilizzare le variabili e funziona benissimo ma il mio problema ora e nella convalida di tutto. Lasciando da parte per il momento la convalida delle altre informazioni (ho provato vari script ma non funzionano) ho per intanto trovato come convalidare un'immagine (non è una mia creazione) ma non le due immagini di cui ho bisogno.
    questo è il programma che ho trovato e che vorrei includere nel mio form:

    tabella img:

    $sql = 'CREATE TABLE immagini ('
    . ' id int(11) NOT NULL auto_increment,'
    . ' nome varchar(50) NOT NULL default "",'
    . ' size varchar(25) NOT NULL default "",'
    . ' type varchar(25) NOT NULL default "",'
    . ' immagine blob NOT NULL,'
    . ' PRIMARY KEY (id)'. ' )';

    Upload.php (Upload dei file in MySQL):

    <?function upload(){ $result = false;
    $immagine = '';
    $size = 0;
    $type = '';
    $nome = '';
    $max_size = 300000;
    $result = @is_uploaded_file($_FILES['file']['tmp_name']);
    if (!$result) { echo "Impossibile eseguire l'upload."; return false; }else{
    $size = $_FILES['file']; if ($size > $max_size) { echo "Il file è troppo grande."; return false; }
    $type = $_FILES['file']['type'];
    $nome = $_FILES['file']['name'];
    $immagine = @file_get_contents($_FILES['file']['tmp_name']);
    $immagine = addslashes ($immagine);
    @include 'config.php';
    $sql = "INSERT INTO immagini (nome, size, type, immagine) VALUE('$nome','$size','$type','$immagine')";
    $result == @mysql_query ($sql) or die (mysql_error()); return true;}}?>

    config.php
    <?$host = 'localhost'; $username = 'user'; $password = 'password'; $db = 'img';
    $conn = @mysql_connect($host,$username,$password) or die (mysql_error());
    $sel = @mysql_select_db($db) or die (mysql_error());?>

    <?@include 'upload.php';
    if (isset($_FILES['file'])){ upload();} echo "<h3>Upload</h3>
    <form enctype="multipart/form-data"
    action="".$_SERVER['PHP_SELF']."" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="300000" />
    <input type="file" name="file" size="40" />
    <input type="submit" value="Invia" /></form><br /><a href="link.php">Elenco</a>";?>

    (se provo ad aggiungere il form di un'altra immagine ne salva solo una, naturalmente ho cercato di modificare anche il file upload.php senza successo)

    per creare e visualizzare un'elenco:
    link.php:

    <?@include 'config.php';
    $sql = "SELECT id, nome FROM immagini ORDER BY id DESC";
    $result = @mysql_query($sql) or die (mysql_error ());
    while ($row = @mysql_fetch_array($result)){ $id = $row['id'];
    $nome = $row['nome']; echo "<a href="show.php?id=".$id."">".$nome."</a><br />";}?>

    show.php:

    <?if (isset($_GET['id'])){$id = @intval($_GET['id']); @include 'config.php';
    $sql = "SELECT id,type,immagine FROM immagini WHERE id='$id'";
    $result = @mysql_query($sql) or die(mysql_error ());
    $row = @mysql_fetch_array($result);
    $id_img = $row['id'];
    $type = $row['type'];
    $img = $row['immagine'];
    if (!$id_img) { echo "Id sconosciuto"; }else{@header ("Content-type: ".$type);
    echo $img;}}else{echo "Impossibile soddisfare la richiesta.";}?>

    Per la soddisfazione della richiesta di visualizzazione occorre che venga
    specificato nell'Header dell'output il Content-type relativo alla tipologia di immagine
    che voglio mostrare; per fare un esempio, un'immagine gif sarà specificata da un
    Content-type sul modello del seguente: Content-type: image/gif
    altro problema visualizzo sempre:
    "Impossibile soddisfare la richiesta"
    Non riesco a capire come va impostato nell'header content-type
    potete aiutarmi?
    Lo so sono una frana:bho:

    NB come create il quadretto delle citazioni?


  • User

    E' un casino se vuoi fare così. Più o meno hai capito tutto, ma dovrei star qui 1 ora a scrivere per spiegarti più in dettaglio come fare e soprattutto come estrarre l'immagine dal db da un campo blob con l'header giusto... Come ti avevo consigliato, invece di memorizzare l'immagine nel campo di tipo blob (dispendiosa in termini di gestione del database), memorizza il path all'immagine nel db (basta un varchar(127)) e usa la funzione "move_uploaded_file" per salvare l'immagine nel path corretto. Trovi tantissime classi già pronte che fanno tutto ciò di cui hai bisogno...

    Scusa se non sono stato molto tecnico, ma sono a lavoro e tra 2 ore parto per la repubblica ceca quindi non avrò tempo per scriverti ulteriori dettagli.

    In caso ci si risente lunedì.

    Spero tu riesca a risolvere.

    Ciao!


  • User

    Innanzitutto grazie per la risposta
    Io in questi giorni proverò a risolvere ma mi sa che aspetto te! comunque anche in caso che risolvo ti faccio sapere.
    Ti auguro buon viaggio.
    Un abbraccio by streghetta
    ciao!!:ciauz: