[risolto] Modo migliore per collegare sito esterno al database

  • Creatore Discussione Creatore Discussione Gioweb
  • Data di inizio Data di inizio

Gioweb

Nuovo Utente
2 Apr 2014
21
0
0
Ciao a tutti, ho un sito realizzato da me in asp/php (un po misto :)) che si appoggia su db mysql. Ho la necessità di far leggere una tabella di questo db in sola lettura ad un sito esterno. In pratica il sito esterno deve legere delle anagrafiche e mostrarle in più punti come sito esterno e app per smartfone. Cosa mi conviene fare per permettere questo passaggio in tutta sicurezza? Ringrazio per eventuali interventi!
 
Personalmente non fornirei mai un accesso esterno ad un db mysql per un altra applicazione e ti consiglierei pertanto di pensare alla realizzazione di un sistema di webservices così chem strutturando delle apposite API, permetti alle applicazioni esterne di usufruire dei contenuti che decidi di mettere a disposizione e in totale controllo (se ad esempio decidi di costruire delle regole di autenticazione e permettere solo a determinati client di usufruire della risorsa).
 
Grazie, in parole povere mi consigli di distribuire i dati tramite una pagina (ad esempio php) che pesca dalla tabella del db esattamente i dati che voglio che siano visibili? In passato avevo utilizzato lo script sotto che restituiva i dati per uno storelocator. Così può essere efficace e sicuro?

PHP:
<?php
require("phpsqlajax_XXXXXXXXXXXXXXXXX.php");

function parseToXML($htmlStr) 
{ 
$xmlStr=str_replace('<','&lt;',$htmlStr); 
$xmlStr=str_replace('>','&gt;',$xmlStr); 
$xmlStr=str_replace('"','&quot;',$xmlStr); 
$xmlStr=str_replace('“','&quot;',$xmlStr); 
$xmlStr=str_replace('”','&quot;',$xmlStr); 
$xmlStr=str_replace("'",''',$xmlStr); 
$xmlStr=str_replace("’",''',$xmlStr);
$xmlStr=str_replace("&",'&amp;',$xmlStr);
$xmlStr=str_replace("°",'°',$xmlStr);
$xmlStr=str_replace("à",'à',$xmlStr); 
$xmlStr=str_replace("á",'á',$xmlStr); 
$xmlStr=str_replace("ò",'ò',$xmlStr);
$xmlStr=str_replace("ó",'ó',$xmlStr); 
$xmlStr=str_replace("è",'è',$xmlStr); 
$xmlStr=str_replace("é",'é	',$xmlStr); 
$xmlStr=str_replace("ì",'ì	',$xmlStr);
$xmlStr=str_replace("í",'í	',$xmlStr); 
$xmlStr=str_replace("ù",'ù	',$xmlStr);
$xmlStr=str_replace("ú",'ù	',$xmlStr); 
$xmlStr=str_replace("À",'À',$xmlStr); 
$xmlStr=str_replace("Á",'Á',$xmlStr); 
$xmlStr=str_replace("È",'È',$xmlStr); 
$xmlStr=str_replace("É",'É',$xmlStr); 
$xmlStr=str_replace("Ì",'Ì',$xmlStr); 
$xmlStr=str_replace("Í",'Í',$xmlStr); 
$xmlStr=str_replace("Ò",'Ò',$xmlStr); 
$xmlStr=str_replace("Ó",'Ó',$xmlStr); 
$xmlStr=str_replace("Ù",'Ù',$xmlStr); 
$xmlStr=str_replace("Ú",'Ú',$xmlStr);
$xmlStr=str_replace("«",'«',$xmlStr); 
$xmlStr=str_replace("»",'»',$xmlStr); 
$xmlStr=str_replace("¯",'¯',$xmlStr); 
$xmlStr=str_replace("®",'®',$xmlStr); 
$xmlStr=str_replace("©",'©',$xmlStr); 
$xmlStr=str_replace("…",'...',$xmlStr);
$xmlStr=str_replace("â",'â',$xmlStr);
$xmlStr=str_replace("Â",'Â',$xmlStr);
$xmlStr=str_replace("ê",'ê',$xmlStr);
$xmlStr=str_replace("î",'î',$xmlStr);
$xmlStr=str_replace("Î",'Î',$xmlStr);
$xmlStr=str_replace("ô",'ô',$xmlStr);
$xmlStr=str_replace("Ô",'Ô',$xmlStr);
$xmlStr=str_replace("û",'û',$xmlStr);
$xmlStr=str_replace("Û",'Û',$xmlStr);

return $xmlStr; 
} 

// Opens a connection to a MySQL server
$connection=mysql_connect ("mysql.XXXXXXXXXXXXXXX.it", $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_XXXXXXXXXXXXX WHERE 1";
$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}

// header("Content-type: application/json");

$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($code, 0, -2); // questo se vuoi eliminare l'ultima "," 

$code .= ']}'; 

print $code;
?>
 
Dal momento che il tuo script non usa connessioni esterne e non accetta parametri in input lato utente direi che sia più che affidabile.
A questo punto dipende da te se ti interessa fare in modo che i dati possono essere distribuiti solo ai client che imponi tu o meno (se i dati sono particolarmente critici o sensibili, la cosa migliore da fare sarebbe quella di farli passare cifrati per la rete).

Per il resto, secondo me ti converrebbe produrre un output json puro, che php integra in maniera nativa senza grossi problemi:

PHP:
#> la generazione dell'output del tuo codice diverrebbe così..
$code = array();

while ($row = @mysql_fetch_assoc($result)){  
  $code[] = $row;  
}

header("Content-type: application/json");
echo json_encode($code);



L'applicazione che invece ha bisogno dei dati potrebbe richiederli in questa maniera:
PHP:
<?php

$data = file_get_contents("url dello script di distribuzione");
$code = json_decode($data, true);

#> Da qui in poi $code è uguale a come è stato composto nell'altro script


ps: ho spostato la discussione in una sezione più appropriata a questo punto ;)
 
Ultima modifica:

Discussioni simili