Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di xGioweb
    Registrato dal
    Oct 2007
    Messaggi
    114

    Un aiuto su questo codice php

    Ciao , devo generare un file che ha questa struttura:

    Codice PHP:
    var data = {"Store": [
    {
    "id"001"name""Ragione Sociale""address""Via...""lat"41.1227"lng"12.4605},
    {
    "id"002"name""Ragione Sociale""address""Via...""lat"41.1227"lng"12.4605},
    {
    "id"003"name""Ragione Sociale""address""Via...""lat"45.7227"lng"12.9605}
    ]} 
    dove l'ultimo record non ha la virgola finale
    è giusto quello che sto facendo?

    Codice PHP:
    // Start XML file, echo parent node
    echo 'var data = {"Store": [';

    // Iterate through the rows, printing XML nodes for each
    while ($row = @mysql_fetch_assoc($result)){
      
    // ADD TO XML DOCUMENT NODE
      
    echo '{"id": ' $row['id'] . ', ';
      echo 
    '"name": "' parseToXML($row['name']) . '", ';
      echo 
    '"address": "' parseToXML($row['address']) . '", ';
      echo 
    '"lat": ' $row['lat'] . ',';
      echo 
    '"lng": ' $row['lng'] . '}';
      echo 
    ',';
    }

    // End XML file
    echo ']}'

    Se può servire posto tutto il codice della pagina da cui sono partito che generava codice xml e che funziona.

    Codice PHP:
    <?php
    require("phpsqlajax_dbinfo.php");

    function 
    parseToXML($htmlStr

    $xmlStr=str_replace('<','&lt;',$htmlStr); 
    $xmlStr=str_replace('>','&gt;',$xmlStr); 
    $xmlStr=str_replace('"','&quot;',$xmlStr); 
    $xmlStr=str_replace("'",''',$xmlStr); 
    $xmlStr=str_replace("&",'&amp;',$xmlStr); 
    return 
    $xmlStr


    // Opens a connection to a MySQL server
    $connection=mysql_connect ("mysql.netsons.com"$username$password);
    if (!
    $connection) {
      die(
    'Not connected : ' mysql_error());
    }

    // Set the active MySQL database
    $db_selected mysql_select_db($database$connection);
    if (!
    $db_selected) {
      die (
    'Can\'t use db : ' mysql_error());
    }

    // Select all the rows in the markers table
    $query "SELECT * FROM markers WHERE 1";
    $result mysql_query($query);
    if (!
    $result) {
      die(
    'Invalid query: ' mysql_error());
    }

    // header("Content-type: text/xml");

    // Start XML file, echo parent node
    echo '<markers>';

    // Iterate through the rows, printing XML nodes for each
    while ($row = @mysql_fetch_assoc($result)){
      
    // ADD TO XML DOCUMENT NODE
      
    echo '<marker ';
      echo 
    'name="' parseToXML($row['name']) . '" ';
      echo 
    'address="' parseToXML($row['address']) . '" ';
      echo 
    'lat="' $row['lat'] . '" ';
      echo 
    'lng="' $row['lng'] . '" ';
      echo 
    'type="' $row['type'] . '" ';
      echo 
    '/>';
    }

    // End XML file
    echo '</markers>';

    ?>
    Ciao
    xGioweb

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ma perchè chiedi se è giusto? non puoi controllare se l'output è corretto? cmq sarebbe meglio non fare una catena di echo, ma inizializzare una variabile stringa a '' e aggiungere i contenuti:

    Codice PHP:
    $code '';
    $code .= 'var data = {"Store": [';

    while (
    $row = @mysql_fetch_assoc($result)){ 
      
    $code .= '{"id": ' $row['id'] . ', '
      
    $code .= '"name": "' parseToXML($row['name']) . '", '
      
    $code .= '"address": "' parseToXML($row['address']) . '", '
      
    $code .= '"lat": ' $row['lat'] . ','
      
    $code .= '"lng": ' $row['lng'] . '}'
      
    $code .= ','
    };
    $code susbtr($code0, -1); // questo se vuoi eliminare l'ultima ","

    $code .= ']}';

    print 
    $code

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,167
    nel codice che hai scritto la virgola te la mette sempre però...
    dovresti
    - sapere quante righe sono contenute nel recordset;
    - impostare una variabile che incrementi ad ogni scrittura del record;
    - verificare prima di scrivere la virgola se la variabile ha valore inferiore al numero di record totali, in caso positivo metti la virgola, altrimenti no.

    edit: ovviamente quella che dice eiyen è la cosa più giusta da fare, ma dato che hai sempre usato echo penso che ti serva così...

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    se il problema l'ultima virgola ho postato prima una possibile soluzione...

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    222
    Usare la funzione json_encode no?

  6. #6
    Utente di HTML.it L'avatar di xGioweb
    Registrato dal
    Oct 2007
    Messaggi
    114
    grazie a tutti e due!!

    Originariamente inviato da eiyen ma perchè chiedi se è giusto? non puoi controllare se l'output è corretto?
    si scusami quando ho fatto la prova l'output era vuoto ma perché sbagliavo io, avevo dimenticato di caricare il file di connessione al db...
    Adesso funziona, genera tutti i record ma con la virgola finale...

    Allora ho provato il tuo codice ma c'era un errore susbtr al posto di substr che ho corretto e adesso funge alla grande!!!!

    Originariamente inviato da Diego_vl
    Usare la funzione json_encode no?
    infatti la base dati originale è .json ho molto da studiare... puoi indirizzarmi su una guida specifica?
    Ciao
    xGioweb

  7. #7
    Utente di HTML.it L'avatar di xGioweb
    Registrato dal
    Oct 2007
    Messaggi
    114
    riapro la discussione in quanto mi sono ri-bloccato su un problema. In pratica la generazione di quel file, serve a dare i dati (markers) ad una mappa di google. Nell'esempio da dove sono partito il file da includere era questo: data.json

    Io, invece del file .json , ho cercato di includere come base dati il file .php di cui parlavamo sopra che adesso ha questo codice:

    Codice PHP:
    <?php
    require("phpsqlajax_dbinfo.php");

    function 
    parseToXML($htmlStr

    $xmlStr=str_replace('<','&lt;',$htmlStr); 
    $xmlStr=str_replace('>','&gt;',$xmlStr); 
    $xmlStr=str_replace('"','&quot;',$xmlStr); 
    $xmlStr=str_replace("'",''',$xmlStr); 
    $xmlStr=str_replace("&",'&amp;',$xmlStr); 
    return 
    $xmlStr


    // Opens a connection to a MySQL server
    $connection=mysql_connect ("mysql.netsons.com"$username$password);
    if (!
    $connection) {
      die(
    'Not connected : ' mysql_error());
    }

    // Set the active MySQL database
    $db_selected mysql_select_db($database$connection);
    if (!
    $db_selected) {
      die (
    'Can\'t use db : ' mysql_error());
    }

    // Select all the rows in the markers table
    $query "SELECT * FROM markers WHERE 1";
    $result mysql_query($query);
    if (!
    $result) {
      die(
    'Invalid query: ' mysql_error());
    }

    // header("Content-type: text/xml");

    $code '';
    $code .= 'var data = {"Store": ['

    while (
    $row = @mysql_fetch_assoc($result)){  
      
    $code .= '{"id":' $row['id'] . ', ';  
      
    //$code .= '"name":"' . parseToXML($row['name']) . '", ';  
      //$code .= '"address":"' . parseToXML($row['address']) . '", ';  
      
    $code .= '"lat":' $row['lat'] . ', ';  
      
    $code .= '"lng":' $row['lng'] . '}';  
      
    $code .= ', ';  
    }; 
    $code substr($code0, -2); // questo se vuoi eliminare l'ultima "," 

    $code .= ']}'

    print 
    $code;
    ?>
    ed effettivamente genera esattamente lo stesso output del file .json dell'esempio, solo che pur vedendosi l'output, includendo il file come base dati nello script di google, non carica i markers e con la funzione [ header("Content-type: text/xml"); ] mi da questo errore:

    codice:
    Errore interpretazione XML: errore di sintassi
    Indirizzo: http://www.xx.xx/storelocator/data.php
    Linea numero 1, colonna 1:
    var data = {"Store": [{"id":3928, "lat":41.9581607, "lng":12.8012214}, {"id":4460, "lat":4...
    ^
    ho fatto un gran casino... Si dovrebbe convertire questo script in json ? oppure c'è una soluzione diversa più semplice? Grazie ancora!!!

    lo script google è questo se può essere d'aiuto:

    codice:
    <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
        <script type="text/javascript" src="data.php"></script>
        <script type="text/javascript">
          var script = '<script type="text/javascript" src="markerclusterer';
          if (document.location.search.indexOf('compiled') !== -1) {
            script += '_compiled';
          }
          script += '.js"><' + '/script>';
          document.write(script);
        </script>
    
        <script type="text/javascript">
          function initialize() {
            var center = new google.maps.LatLng(42.26, 11.34);
    
            var map = new google.maps.Map(document.getElementById('map'), {
              zoom: 5,
              center: center,
              mapTypeId: google.maps.MapTypeId.ROADMAP
            });
    
            var markers = [];
    		for (var i = 0; i < data.Store.length ; i++) {
              var dataStore = data.Store[i];
              var latLng = new google.maps.LatLng(
    			dataStore.lat,
    			dataStore.lng);
              var marker = new google.maps.Marker({
                position: latLng
              });
              markers.push(marker);
            }
            var markerCluster = new MarkerClusterer(map, markers);
          }
          google.maps.event.addDomListener(window, 'load', initialize);
        </script>
    Ciao
    xGioweb

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    verifica che l'output testuale sia corretto, poi usa l'encoding giusto (che non è certo XML)... mi pare sia "Content-type: application/json"

  9. #9
    Utente di HTML.it L'avatar di xGioweb
    Registrato dal
    Oct 2007
    Messaggi
    114
    allora grande notizia lasciando tutto come ho descritto, mi sono accorto che nell'output il valore di Latitudine del quartultimo record era formalmente sbagliato!!!

    codice:
    {"id":3048, "lat":38.11375834551421, 1, "lng":14.2523234128952}
    in pratica c'era quel "1," in più che bloccava tutto rimosso dal database l'intoppo lo script ha funzionato!!

    ho usato anche header('Content-type: application/json'); e l'errore non c'è più ma quello che fermava il tutto era la coordinata errata.

    Adesso che ci penso google consigliava di impostare i campi delle coordinate:
    codice:
    CREATE TABLE `markers` (
      `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `name` VARCHAR( 60 ) NOT NULL ,
      `address` VARCHAR( 80 ) NOT NULL ,
      `lat` FLOAT( 10, 6 ) NOT NULL ,
      `lng` FLOAT( 10, 6 ) NOT NULL 
    ) ENGINE = MYISAM ;
    con un valore "FLOAT( 10, 6 )" mentre io ho utilizzato "varchar(20)" Se avessi usato Float quell'errore non sarebbe potuto verificarsi, giusto?

    Altri errori che bloccavano lo script erano le coordinate uguali su più record, e in molti casi io avevo molti record che non ero riuscito a geocodificare che avevano valore di lat e lng uguale a zero e quindi in fase di creazione della tabella VIEW ho indicato di escluere tali record:

    codice:
    WHERE latitudine <> '0' AND longitudine <> '0'
    Ca**o ci sono riuscito!!! Devo ringraziare un po di utenti qui nel forum!!! Spero un giorno di poter ricambiare in qualche modo l'aiuto che mi avete dato!!!!

    Ciao
    xGioweb

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 © 2019 vBulletin Solutions, Inc. All rights reserved.