Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di Max Della Pena
    Registrato dal
    Jan 2014
    residenza
    Udine
    Messaggi
    333

    PHP upload dati da file excel, problemi con apostrofo

    Utilizzo questo script per caricare i dati da un file CVS sul mio DB.

    Codice PHP:
    <?php
    include ("../../data.inc.php");
    $db mysql_connect($mysqlhost,$mysqluser,$mysqlpassword);
    if (
    $db==FALSE)
    die (
    "ERRORE CONNESSIONE");
    mysql_select_db($mysqldb,$db);
    ini_set('auto_detect_line_endings'1); 
    $row 1;
    $handle fopen("file.csv","r");
    while ((
    $data fgetcsv($handle3000";")) !== FALSE) {
       
    $num count($data);
       echo 
    "<p> $num campi sulla linea $row: <br /></p>\n";
       
    $row++;
      
    $query="INSERT INTO miatabella (a, b, c, d, e, f, g, h, i, l ) VALUES  ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]')";
    echo 
    $query;
    mysql_query($query);
    }
    fclose($handle);
    ?>
    Il primo problema è quando in una riga del file ci sono apostrofi e accenti, la riga non viene caricata nel DB.

    Il secondo problema è un campo data che nel file è 31-12-2021 e quindi dovrei trasformarlo in 2022-12-31 durante l'esecuzione dello script.

    Qualcuno può darmi una mano?

    Grazie.
    Mi chiedo, caro Alberto, se questo antifascismo rabbioso che viene sfogato nelle piazze oggi a fascismo finito, non sia in fondo un’arma di distrazione che la classe dominante usa su studenti e lavoratori per vincolare il dissenso.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    E' perché nella query i values sono inseriti tra singoli apici, quindi l'apice della stringa ti tronca la query rendendola non valida.

    Prima di eseguirla dovresti passarla alla funzione mysql_real_escape_string().

    Se il tutto gira su un server su cui non hai il controllo delle versioni di PHP, ti consiglio di convertire tutto almeno per mysqli_ (con la i finale), perché le funzioni mysql_ sono state abbandonate ed al prossimo eventuale aggiornamento del derver potrebbero non funzionare più.

  3. #3
    Utente di HTML.it L'avatar di Max Della Pena
    Registrato dal
    Jan 2014
    residenza
    Udine
    Messaggi
    333
    E' una funzione che posso inserire nel mio script?

    E per le date mi puoi dare una mano?

    Grazie.
    Mi chiedo, caro Alberto, se questo antifascismo rabbioso che viene sfogato nelle piazze oggi a fascismo finito, non sia in fondo un’arma di distrazione che la classe dominante usa su studenti e lavoratori per vincolare il dissenso.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Sì, puoi inserirla, sulla pagina della documentazione trovi degli esempi su come usarla
    https://www.php.net/manual/en/functi...ape-string.php

    In pratica devi passargli i dati da inserire nella query e che potrebbero generarti problemi.
    Io la userei su tutte le stringhe per sicurezza, valori numerici non dovrebbero dare problemi.

  5. #5
    Utente di HTML.it L'avatar di Max Della Pena
    Registrato dal
    Jan 2014
    residenza
    Udine
    Messaggi
    333
    Non ne esco, ho modificato aggiungendo il controllo sui campi prima di passarli alla query, non mi carica i dati.


    Codice PHP:
     <?php
    include ("../../data.inc.php");
    $db mysql_connect($mysqlhost,$mysqluser,$mysqlpassword);
    if (
    $db==FALSE)
    die (
    "ERRORE CONNESSIONE");
    mysql_select_db($mysqldb,$db);
    ini_set('auto_detect_line_endings'1); 
    $row 1;
    $handle fopen("file.csv","r");
    while ((
    $data1 fgetcsv($handle3000";")) !== FALSE) {
       
    $num count($data1);
       echo 
    "<p> $num campi sulla linea $row: <br /></p>\n";
       
    $row++;
       
    $data mysql_real_escape_string($data1);
      
    $query="INSERT INTO miatabella (a, b, c, d, e, f, g, h, i, l ) VALUES  ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]')";
    echo 
    $query;
    mysql_query($query);
    }
    fclose($handle);
    ?>
    Mi chiedo, caro Alberto, se questo antifascismo rabbioso che viene sfogato nelle piazze oggi a fascismo finito, non sia in fondo un’arma di distrazione che la classe dominante usa su studenti e lavoratori per vincolare il dissenso.

  6. #6
    vedo che ti fai stampare $query prima di eseguirla: puoi farne partecipi anche noi?

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    $data1 è un array, non puoi passare un array alla funzione mysql_real_escape_string(), come dice il nome fa l'escape delle stringhe, non degli array.
    Si può capire anche leggendo la firma della funzione:

    mysql_real_escape_string(string $unescaped_string, resource $link_identifier = NULL): string

    il parametro da passare deve essere una stringa.
    Quindi:
    Codice PHP:
    while (($data fgetcsv($handle3000";")) !== FALSE)
    {
        
    $num count($data);
        echo 
    "<p> $num campi sulla linea $row: <br /></p>\n";
        
    $row++;

        
    $query "INSERT INTO miatabella (a, b, c, d, e, f, g, h, i, l ) VALUES  
                 ('" 
    mysql_real_escape_string($data[0]) . "',
                  '" 
    mysql_real_escape_string($data[1]) . "',
                  '" 
    mysql_real_escape_string($data[2]) . "',
                  '" 
    mysql_real_escape_string($data[3]) . "',
                  '" 
    mysql_real_escape_string($data[4]) . "',
                  '" 
    mysql_real_escape_string($data[5]) . "',
                  '" 
    mysql_real_escape_string($data[6]) . "',
                  '" 
    mysql_real_escape_string($data[7]) . "',
                  '" 
    mysql_real_escape_string($data[8]) . "',
                  '" 
    mysql_real_escape_string($data[9]) . "')";
        
        
    mysql_query($query);


  8. #8
    Utente di HTML.it L'avatar di Max Della Pena
    Registrato dal
    Jan 2014
    residenza
    Udine
    Messaggi
    333
    Grazie, verifico se funzia la prox settimana.
    Mi chiedo, caro Alberto, se questo antifascismo rabbioso che viene sfogato nelle piazze oggi a fascismo finito, non sia in fondo un’arma di distrazione che la classe dominante usa su studenti e lavoratori per vincolare il dissenso.

  9. #9
    Utente di HTML.it L'avatar di Max Della Pena
    Registrato dal
    Jan 2014
    residenza
    Udine
    Messaggi
    333
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    E' perché nella query i values sono inseriti tra singoli apici, quindi l'apice della stringa ti tronca la query rendendola non valida.

    Prima di eseguirla dovresti passarla alla funzione mysql_real_escape_string().

    Se il tutto gira su un server su cui non hai il controllo delle versioni di PHP, ti consiglio di convertire tutto almeno per mysqli_ (con la i finale), perché le funzioni mysql_ sono state abbandonate ed al prossimo eventuale aggiornamento del derver potrebbero non funzionare più.
    Altri caratteri, tipo " è é à ò ù / () ? ! £ % & ^ eccetera potrebbero creare problemi con l'inserimento da file csv?
    Mi chiedo, caro Alberto, se questo antifascismo rabbioso che viene sfogato nelle piazze oggi a fascismo finito, non sia in fondo un’arma di distrazione che la classe dominante usa su studenti e lavoratori per vincolare il dissenso.

  10. #10
    l'apostrofo dà sicuramente fastidio. in un comando SQL del tipo

    codice:
    INSERT INTO Libri (Titolo) VALUES ('L'Apocalisse');
    capisci come il carattere ' possa generare errore, perché per il parser il comando sarà

    codice:
    INSERT INTO Libri (Titolo) VALUES ('L'


    per gli altri caratteri non saprei, andrebbero fatte delle prove

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.