Italian Mysql su Aruba

Discussion in 'Italian Forum' started by micro, Jan 30, 2016.

  1. micro

    micro Well-Known Member Licensed User

    Salve ragazzi
    ho appena abilitato 1Gb di spazio DB MySql su Aruba.
    Vorrei iniziare a fare qualche prova di scrittura sui db da remoto con una applicazione in b4j.
    Qualcuno ha già approcciato un esempio di codice per sue esigenze?
    Giusto per spianarmi la strada.
    Grazie
     
  2. sirjo66

    sirjo66 Well-Known Member Licensed User

    Credo che se il DB è su Aruba, l'unico modo per poter accedervi è dal server, per cui dovresti farti delle pagine in PHP per leggere/scrivere sul database

    Sergio
     
  3. LucaMs

    LucaMs Expert Licensed User

    Sì, per fare ciò che vuoi tu ti serve un VPS (magari sempre su Aruba).
     
  4. giannimaione

    giannimaione Well-Known Member Licensed User

    oppure degli script in ASP (con una sintassi molto vicina a b4x)
     
  5. micro

    micro Well-Known Member Licensed User

    Grazie per i reply, per VPS non credo Aruba ne metta a disposizione (forse sbaglio).
    Da quello che ho letto sicuramente si potrà accedere solo in php o ASP (Il DB è su Aruba).
    Qualcosa come esempio di partenza lo riesco a trovare?
    Avevo creato una pagina php tempo fà quando feci una prova con uniserver (mysql, Apache, php) e Basic4ppc ma
    ho perso tutto, era un index.php che avevo modficato diverse volete leggendo consigli di qua e di la ma solo a livello di prova.
     
  6. moster67

    moster67 Expert Licensed User

  7. micro

    micro Well-Known Member Licensed User

    Grazie monster67 ma spendere quei soldi per delle prove non mi sembra il caso contro i 7 € annui per avere un DB mysql.
    Meglio vedere come fare in php...
     
  8. sirjo66

    sirjo66 Well-Known Member Licensed User

    Ti passo pari pari quello che uso io nei miei programmi, è una procedura in PHP che funziona con MySQL, e che prevede la gestione del SELECT, UPDATE, DELETE, INSERT e altri.
    Ovviamente se hai necessità la puoi adattare alle tue esigenze, per domande sono qui.
    E' anche prevista la gestione di una password che devi impostare sia su questo file PHP (alla riga n. 13) sia sul tuo programma in B4A (o B4J non ha importanza) in modo da gestire una comunicazione sicura tra client e server.

    File EXECUTE.PHP:
    Code:
    <?php

    // esegue un comando 
    SQL (SELECT - UPDATE - DELETE - INSERT o altri)

    $
    sql = '';
    if (isset($_GET['sql'])) $sql = $_GET['sql'];

    $chk = 
    '';
    if (isset($_GET['chk'])) $chk = $_GET['chk'];

    include(
    'config.php');

    $md5 = md5(
    "password".$sql);

    if ($md5 != strtolower($chk)) {
       echo 
    "E\nErrore parametro chk\nParametro chk non corretto\n"; // 4 righe
       
    return;
    }

    //avvio connessione al database
    $db = @mysql_connect($mysql_host,$mysql_user,$mysql_password);
    if (!$db) {
       echo "E\nErrore connessione al database\n".mysql_error()."\n"; // 4 righe
       return;
    }

    mysql_select_db($mysql_database);
    mysql_query("SET CHARACTER SET utf8");

    $rs = mysql_query($sql);

    if ($rs === false) {
       echo "E\nErrore query\n".mysql_error()."\n".$sql;
       mysql_close($db);
       return;
    }

    // estraggo il comando base
    $cmd = strtoupper($sql);
    $vn = strpos($cmd, " ");
    if ($vn !== false) $cmd = substr($cmd, 0, $vn);

    switch ($cmd) {
    case "SELECT":
       $nrs = mysql_num_rows($rs); // record count
       for ($i = 0; $i < $nrs; $i++) { $lst[] = mysql_fetch_assoc($rs); } // porto i risultati sull'array $lst
       echo json_encode($lst);
       break;
    case "UPDATE":
       echo "K\n".mysql_affected_rows();
       break;
    case "DELETE":
       echo "K\n";
       break;
    case "INSERT":
       echo "K\n".mysql_insert_id();
       break;
    default:
       echo "K\n";
    }

    @mysql_free_result($rs);
    mysql_close($db);

    ?>
    Per chiamare la routine puoi fare (ad esempio) così:
    Code:
    Dim query As String
       query = 
    "Select ......... " ' qui ci scrivi la tua query

       
    Dim MD5 As String = MD5calc("password" & query) ' la password deve essere la stessa del file PHP
       Dim su As StringUtils
       query = su.EncodeUrl(query,
    "UTF8")
       
    HttpJob.Download("http://www.ilnomedelserver.it/execute.php?chk=" & MD5 & "&sql=" & query)
    Nel caso di una SELECT il sistema risponderà con il recordset in formato JSON, e vedi che è andato tutto bene perchè il primo carattere della stringa ricevuta è un "{", mentre se il primo carattere ricevuto è una "E" (che vuol dire errore), riceverai una stringa (divisa sempre in 4 righe) con la descrizione dell'errore.

    Nel caso di un UPDATE, se tutto è ok, riceverai una stringa di 2 righe, la prima sarà "K" e la seconda riga ti dice quanti record ha modificato, se invece c'è stato un errore riceverai la solita stringa composta da 4 righe con la descrizione dell'errore.

    Nel caso di un INSERT, se tutto è ok, riceverai una stringa di 2 righe, la prima sarà "K" e la seconda riga ti dà un eventuale ID del record inserito (se è previsto la generazione dell'ID), se invece c'è stato un errore riceverai la solita stringa composta da 4 righe con la descrizione dell'errore.

    Spero che questa cosa ti sia utile

    Per qualsiasi domanda chiedi pure

    Sergio

    Edit: per iniziare a fare un po' di prove puoi temporaneamente disabilitare il test del checksum MD5, basta che nel file PHP cancelli le seguenti righe:
    Code:
    if ($md5 != strtolower($chk)) {
          echo 
    "E\nErrore parametro chk\nParametro chk non corretto\n"; // 4 righe
         
    return;
    }
    e nel tuo codice fai a meno di calcolare l'MD5 e non lo invii come parametro
     
    Last edited: Jan 30, 2016
    MARCO CORRIAS, MICATAM and LucaMs like this.
  9. micro

    micro Well-Known Member Licensed User

    Grazie Sergio
    il tempo di preparare l'attrezzatura e fare delle prove.....
    Ti faccio sapere se è ok.

    Perdonami Sergio, qui
    Code:
    $sql = '';
    metto il nome del database?
     
  10. sirjo66

    sirjo66 Well-Known Member Licensed User

    No.
    Tutti i parametri per accedere al database sono dentro il file config.php che come vedi viene letto all'inizio della procedura e che contiene le variabili necessarie alla connessione, eccoti un esempio di un file config.php:
    Code:
    <?php
      $mysql_host = 
    "localhost";
      $mysql_database = 
    "database_name";
      $mysql_user = 
    "username";
      $mysql_password = 
    "password";
    ?>
     
  11. micro

    micro Well-Known Member Licensed User

    Ok, avviate le prime prove.
    questa la query che dovrebbe essere giusta ma mi ritorna l'errore dicendo che la sintassi della query non è corretta
    Code:
    query = "INSERT INTO Varie (Id, CodiceFiscale, Nome, Cognome, Via, Attivita, Anni, Data, Ora) VALUES (Null, 'XXXXXXXXXXXXXXXX', 'PALLINO', 'PINCO', 'CORSO ITALIA', 'IMPRENDITORE', '27', '30/01/2016', '19:22:14');"
    In JobDone mi ritorna con successo la connessione ma in GetString trovo l'errore.
    Ho messo gli apici anche a null ma nulla, sempre lo stesso errore.
     
  12. sirjo66

    sirjo66 Well-Known Member Licensed User

    Sicuramente hai un problema con il formato della data, prova con
    '2016-01-30'
    oppure con
    '01-30-2016'

    purtroppo in questo momento non sono davanti al PC e non posso provare, comunque sono sicuro che MySQL non vuole la data in formato dd/MM/yyyy come hai fatto tu

    togli anche il punto e virgola finale che non serve a nulla

    inoltre io non inserirei il campo ID nella query, perchè da quello che ho capito viene poi gestito e incrementato direttamente da MySQL, giusto ??
    Togli ID e anche il null dalla query
     
  13. micro

    micro Well-Known Member Licensed User

    la data è come campo di tipo 'Text' così come l'ora, quindi non è quello il problema.
    provo a togliere il ; e il campo Id e ti faccio sapere.
    Grazie per la disponibilità.

    ....nulla.
    Fato subito la prova senza ; e/o Id ma stesso tipo di errore.
    Eppure non ne vedo errori di formattazione query (o forse vedo male).
     
    Last edited: Jan 31, 2016
  14. micro

    micro Well-Known Member Licensed User

    Sono andato direttamente dal pannello di phpMyAdmin e provato con il tool a disposizione ad inserire questa stringa SQL (ho visto come la generava direttamente da lì)
    Code:
    INSERT INTO `Varie` (`Id`, `CodiceFiscale`, `Nome`, `Cognome`, `Via`, `Attivita`, `Anni`, `Data`, `Ora`) VALUES (Null'XXXXXXXXXXXXXXXX', 'PALLINO', 'PINCO', 'CORSO ITALIA', 'IMPRENDITORE', '27', '30/01/2016', '19:22:14')
    e l'ha inserita senza errori.

    Se la invio con il programma di prova in B4J mi ritorna sempre lo stesso errore di errata formattazione.
     
  15. LucaMs

    LucaMs Expert Licensed User

    prova a passare una stringa vuota per l'ID, anziché il Null
     
  16. micro

    micro Well-Known Member Licensed User

    Gia fatto Luca.
    Ma ripeto se la stessa stringa la invio dal pannello di MyphpAdmin, un tool disponibile di aruba, il record viene inserito.

    Questo è l'errore che mi ritorna da execute.php
    Code:
    E
    Errore query
    You have an error 
    in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'XXXXXXXXXXXXXXXX\', \'PALLINO\', \'PINCO\', \'CORSO ITALIA' at line 1
    INSERT INTO `Varie` (`Id`, `CodiceFiscale`, `Nome`, `Cognome`, `Via`, `Attivita`, `Anni`, `Data`, `Ora`) VALUES (Null, \'XXXXXXXXXXXXXXXX\', \'PALLINO\', \'PINCO\', \'CORSO ITALIA\', \'IMPRENDITORE\', \'27\', \'30/01/2016\', \'19:22:14\')
    La cosa strana è perchè dove dice 'at line 1' si ferma alla colonna Via e non mi mostra il seguito.
     
  17. LucaMs

    LucaMs Expert Licensed User

    Non conosco la strana sintassi di PHP (usato molto poco, ma con molti copia e incolla :p).

    Ma quelle barre \'xxxx...\' ?

    Non dovresti passare: VALUES (Null, "xxx", "PALLINO",...
    ?


    P.S. sto rileggendo; quella stringa è un parametro dell'URL.
     
  18. LucaMs

    LucaMs Expert Licensed User

    probabilmente HttpJob.Download adatta la query? Cioè, tu devi scriverla con la sintassi normale di B4X e viene adattata?
    Prova (e fammi sapere :))



    P.S.
     
  19. micro

    micro Well-Known Member Licensed User

    Io non vorrei fosse un problema del php
    rivedendolo ho trovato un = di troppo ma non è questo il problema.
    Code:
    $rs = mysql_query($sql);
    if ($rs === false) {
       echo 
    "E\nErrore query\n".mysql_error()."\n".$sql;
       mysql_close($db);
       
    return;
    }
    Questa è comunque la parte che fallisce, $rs ritorna sempre false.

    Ora faccio la prova che mi dici Luca.
    Ciao

    P.S.
    Mi ritorna l'errore di query empty
    ho provato sia con
    Code:
    job.Download2("http://www.xxxxxxxxx.it/execute.php?"Array As String("chk=", MD5, "&sql=", query))
    che con
    Code:
    job.Download2("http://www.xxxxxxxxx.it/execute.php?"Array As String("chk", MD5, "&sql", query))
    ma l'errore è lo stesso.
     
    Last edited: Jan 31, 2016
  20. sirjo66

    sirjo66 Well-Known Member Licensed User

    Il problema sono proprio le barre, non dovrebbero essere inviate !!

    Ci sono quindi due soluzioni
    1) trovi il sistema che le barre non vengano inviate
    2) modifichi EXECUTE.PHP in modo che tolga le barre cioè dopo la riga
    include('config.php');
    aggiungi la riga:
    $sql = stripslashes($sql);

    Sergio
     
    LucaMs likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice