Italian [B4A] SD_SQL alcuni errori che non so spiegarmi

ivanomonti

Expert
Licensed User
Longtime User
Premesso che su b4j tutto funziona bene ma su android ho dovuto modificare alcuni frammenti di codice, ora che sono arrivato quasi alla fine del progetto per poi aggiustare gli errori ho questo problema su questo codice

invio la questione "Quando e stato costruito il duomo di bolgna e perchè?"

Query:
INSERT INTO `ms_gpt`.`tb01` (`ms_gpt_01_01`,`ms_gpt_01_02`, `ms_gpt_01_03`, `ms_gpt_01_04`, `ms_gpt_01_05`, `ms_gpt_01_06`, `ms_gpt_01_07`) VALUES ('ADMIN-3938-15691','127.0.0.1','FX359AT','[B]Quando e stato costruito il duomo di bolgna e perchè?[/B]','ASWER OFF','2023-04-01 01:52:00','false');


B4X:
private Sub QuestionGPT(question As String)
    
    DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss"
    Dim query As String
    Dim code1 As String = Rnd(1000,9999).As(String)
    Dim code2 As String = Rnd(10000,99999).As(String)
    
    query = "INSERT INTO `ms_gpt`.`tb01` (`ms_gpt_01_01`," & "`ms_gpt_01_02`, `ms_gpt_01_03`, `ms_gpt_01_04`, `ms_gpt_01_05`, `ms_gpt_01_06`, `ms_gpt_01_07`) VALUES ('ADMIN" & "-" & code1 & "-" & code2 & "','127.0.0.1','FX359AT','" & question.Replace("'","\'") & "','ASWER OFF','" & DateTime.Date(DateTime.Now) &    "','false');"
    
    Log(query)
    
    If MYSQL.IsInitialized = False Then
        MYSQL.Initialize(Me,"MYSQL", "com.mysql.jdbc.Driver", $"jdbc:mysql://${MyLocation}/${MyScheme}?useSSL=false"$,  MyUsername, MyPassword)
    End If
    
    MYSQL.ExecNonQuery(query) ' [B]qui mi va in crash!
    [/B]
    MYSQL.Close
    
End Sub

Error occurred on line: 47 (SD_SQL)


Non saprei che fare visto che le altre 2 funzioni non credo vadano con un INSERT, inoltre vorrei fare 2 query in una sola vale a dire INSER e poi SELECT una domanda che ancora non mi sono dato una risposta, qualcuno di voi l'ha?

Grazie 1000


2a139a06-c5e0-4e3d-9948-96ef03918c8a.jpg
 

LucaMs

Expert
Licensed User
Longtime User
1680314422121.png


Nota: 16 ore fa.

Comunque, penso che il Garante dovrà fare marcia indietro molto presto. Qualunque sito può chiedere agli utenti dei dati personali; basta che dichiari espressamente come vengano gestiti ed a quale fine.


P.S. E poi... le incongruenze! Alcuni siti ti chiedono di inviargli fotocopia di un documento di identità. Non sono nemmeno pochi; ad esempio quelli dei provider Internet o il sito della SISAL.
Bene, con quale diritto possono farlo? Un "normale" cittadino non può, legalmente, chiedere a te una fotocopia di un documento di identità, per quanto ne so; mi pare che solo le forze dell'ordine o autorità giuridiche possano farlo!

Boh.

P.P.S.
1680316452445.png


Notare che ha commesso un errore grammaticale 😁 (errore molto comune, purtroppo anche in TV e quindi si diffonde).
Ha scritto:
"... a meno che non ci siano circostanze specifiche in cui il documento d'identità E' obbligatorio"
Invece avrebbe dovuto scrivere, correttamente:
"... a meno che non ci siano circostanze specifiche in cui il documento d'identità SIA obbligatorio"
 
Last edited:

ivanomonti

Expert
Licensed User
Longtime User
Siamo in Italia quando si deve parare il culo e tutto nella normalità, ho bisogno di trovare la soluzione al mio problema, hai qualche suggerimento!
 

Sagenut

Expert
Licensed User
Longtime User
`) VALUES ('ADMIN" & "-" &
Quí forse deve essere
B4X:
`) VALUES ('ADMIN' & "-" &
Controlla bene ADMIN che apre con ' e chiude con "
Ma io capisco zero di sta roba e potrei aver detto una vaccata
 

ivanomonti

Expert
Licensed User
Longtime User
Quí forse deve essere
B4X:
`) VALUES ('ADMIN' & "-" &
Controlla bene ADMIN che apre con ' e chiude con "
Ma io capisco zero di sta roba e potrei aver detto una vaccata
la query mi sembra buona visto che mysql diretto la prende senza errori

INSERT INTO `ms_gpt`.`tb01` (`ms_gpt_01_01`,`ms_gpt_01_02`, `ms_gpt_01_03`, `ms_gpt_01_04`, `ms_gpt_01_05`, `ms_gpt_01_06`, `ms_gpt_01_07`) VALUES ('ADMIN-1945-92277','127.0.0.1','FX359AT','Quando e stato costruito il duomo di Milano','ASWER OFF','2023-04-01 11:55:44','false');
 

udg

Expert
Licensed User
Longtime User
Io utilizzerei le Smart String Literals.
'ADMIN" & "-" & code1 & "-" & code2 & "'
Diventerebbe
$"'ADMIN-${code1}-${code2}'"$

Chiaramente l'idea è utilizzare questa impostazione per l'intera query.
 

Sagenut

Expert
Licensed User
Longtime User
la query mi sembra buona visto che mysql diretto la prende senza errori

INSERT INTO `ms_gpt`.`tb01` (`ms_gpt_01_01`,`ms_gpt_01_02`, `ms_gpt_01_03`, `ms_gpt_01_04`, `ms_gpt_01_05`, `ms_gpt_01_06`, `ms_gpt_01_07`) VALUES ('ADMIN-1945-92277','127.0.0.1','FX359AT','Quando e stato costruito il duomo di Milano','ASWER OFF','2023-04-01 11:55:44','false');
Tu stai guardando la query che hai postato singolarmente.
Guarda nel secondo blocco di codice che hai postato dove hai
B4X:
query = "INSERT INTO `ms_gpt`.`tb01` (`ms_gpt_01_01`," & "`ms_gpt_01_02`, `ms_gpt_01_03`, `ms_gpt_01_04`, `ms_gpt_01_05`, `ms_gpt_01_06`, `ms_gpt_01_07`) VALUES ('ADMIN" & "-" & code1 & "-" & code2 & "','127.0.0.1','FX359AT','" & question.Replace("'","\'") & "','ASWER OFF','" & DateTime.Date(DateTime.Now) &    "','false');"
dove forse c'è anche un " & " di troppo subito nel secondo valore.
query = "INSERT INTO `ms_gpt`.`tb01` (`ms_gpt_01_01`," & "`ms_gpt_01_02`, `ms_gpt_01_03`, `ms_gpt_01_04`, `ms_gpt_01_05
 

ivanomonti

Expert
Licensed User
Longtime User
Tu stai guardando la query che hai postato singolarmente.
Guarda nel secondo blocco di codice che hai postato dove hai
B4X:
query = "INSERT INTO `ms_gpt`.`tb01` (`ms_gpt_01_01`," & "`ms_gpt_01_02`, `ms_gpt_01_03`, `ms_gpt_01_04`, `ms_gpt_01_05`, `ms_gpt_01_06`, `ms_gpt_01_07`) VALUES ('ADMIN" & "-" & code1 & "-" & code2 & "','127.0.0.1','FX359AT','" & question.Replace("'","\'") & "','ASWER OFF','" & DateTime.Date(DateTime.Now) &    "','false');"
dove forse c'è anche un " & " di troppo subito nel secondo valore.
Grazie dopo guardo meglio anche se un & di troppo darebbe errore di compilazione, la query finale e comunque derivata da quel frammento di codice e con copia incolla su mysql mi da query ok.

appena rientro ti dico
 

ivanomonti

Expert
Licensed User
Longtime User
nulla non risolvo, credo sia un problema di permessi o non so, la query è perfetta e gira con b4j e non con b4a, IL PROBLEMA E QUI SD_ResultSet

MANIFEST:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="31"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)
AddPermission("android.permission.INTERNET")
AddPermission("android.permission.ACCESS_NETWORK_STATE")
'End of default text.
SetApplicationAttribute(android:theme, "@style/LightTheme")
CreateResource(values, colors.xml,
<resources>
    <color name="actionbar">#ff039be5</color>
    <color name="statusbar">#ff006db3</color>
    <color name="textColorPrimary">#ffffffff</color>
    <color name="navigationBar">#ff006db3</color>
</resources>
)
CreateResource(values-v20, theme.xml,
<resources>
    <style name="LightTheme" parent="@android:style/Theme.Material.Light">
         <item name="android:colorPrimary">@color/actionbar</item>
         <item name="android:colorPrimaryDark">@color/statusbar</item>
         <item name="android:textColorPrimary">@color/textColorPrimary</item>
         <item name="android:navigationBarColor">@color/navigationBar</item>
    </style>
</resources>
)
CreateResource(values-v14, theme.xml,
<resources>
    <style name="LightTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/CustomActionBarStyle</item>
    </style>
    <style name="CustomActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
        <item name="android:background">@color/actionbar</item>
    </style>
</resources>
)

insert:
private Sub QuestionGPT(question As String)
    
    Dim mysql As SDMYSQL
    mysql.Initialize
    
    DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss"
    Dim query As String
    Dim code1 As String = Rnd(1000,9999).As(String)
    Dim code2 As String = Rnd(10000,99999).As(String)
    
    query = "INSERT INTO `ms_gpt`.`tb01` (`ms_gpt_01_01`,`ms_gpt_01_02`, `ms_gpt_01_03`, `ms_gpt_01_04`, `ms_gpt_01_05`, `ms_gpt_01_06`, `ms_gpt_01_07`) VALUES ('ADMIN" & "-" & code1 & "-" & code2 & "','127.0.0.1','FX359AT','" & question.Replace("'","\'") & "','ASWER OFF','" & DateTime.Date(DateTime.Now) &    "','false');"
    
    query = query.ToLowerCase.Trim
    
    Log(query)

    mysql.ExecNonQuery(query)
    mysql.Close

End Sub


Dim query As String
query = "SELECT * FROM ms_gpt.tb01 where ms_gpt_01_07='true' order by ms_gpt_01_06 desc;"

select:
Sub LoadRecordTrueMysql(query As String) As Boolean
   
    Try
    Dim mysql As SDMYSQL
    mysql.Initialize
   
    CustomListView_record_Aswar_true.Clear
   
    Dim rs As SD_ResultSet
    mysql.ExecQueryResutSet(query,rs)
   
    Dim ls As List
    ls.Initialize
   
    For i=0 To rs.ColumnCount-1
        ls.Add(rs.GetColumnName(i))
    Next
   
    Do While rs.NextRow

'        Log(rs.GetString2(0))
'        Log(rs.GetString2(1))
'        Log(rs.GetString2(2))
'        Log(rs.GetString2(3))
'        Log(rs.GetString2(4))
'        Log(rs.GetString2(5))
       
        Dim bitmaps As List = Array("pexels-photo-446811.jpeg", "pexels-photo-571195.jpeg","pexels-photo-736212.jpeg", "pexels-photo-592798.jpeg")
        Dim Question As String = rs.GetString2(3)
        Dim aswer As String = rs.GetString2(4)
       
        CustomListView_record_Aswar_true.Add(CreateItem(CustomListView_record_Aswar_true.AsView.Width,Question,bitmaps.Get(Rnd(0,3)),aswer), "")
       
    Loop
   
    rs.Close
    mysql.Close
   
    Catch
        mysql.Close
        Log(LastException)
        Return False
    End Try
   
    Return True
   
End Sub
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Al limite... chiedi il sorgente (PHP) a ChatGPT 😊
Cosa fare di "utile" alle 6 di mattina? Vedere come avrebbe risposto Perplexity 😁

Immagine parziale (ovviamente non tutto entra in una sola schermata PC):
1680408860506.png



Copio e incollo tutto il sorgente che ha generato:
B4X:
<?php
// Connessione al database
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

$conn = new mysqli($servername, $username, $password, $dbname);

// Controllo della connessione
if ($conn->connect_error) {
  die("Connessione fallita: " . $conn->connect_error);
}

// Preparazione della query di inserimento
$stmt = $conn->prepare("INSERT INTO myTable (name, address) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $address);

// Controllo dei dati inseriti
if (isset($_POST['name']) && isset($_POST['address'])) {
  $name = htmlspecialchars($_POST['name']);
  $address = htmlspecialchars($_POST['address']);

  // Esecuzione della query di inserimento
  if ($stmt->execute()) {
    echo "Record inserito con successo";
  } else {
    echo "Errore nell'inserimento del record: " . $stmt->error;
  }
}

// Chiusura della connessione
$stmt->close();
$conn->close();
?>
ed il suo commento:
In questo esempio, si utilizza l'estensione MySQLi per connettersi al database MySQL. Si prepara una query di inserimento utilizzando il metodo prepare() e si controllano i dati inseriti dall'utente utilizzando la funzione htmlspecialchars() per evitare attacchi di tipo XSS. Si esegue la query di inserimento utilizzando il metodo execute() e si controlla se l'operazione è andata a buon fine. Infine, si chiude la connessione al database.


NOTA: non ho nemmeno "letto" il sorgente, figuriamoci provato!
 
Last edited:

ivanomonti

Expert
Licensed User
Longtime User
Cosa fare di "utile" alle 6 di mattina? Vedere come avrebbe risposto Perplexity 😁

Immagine parziale (ovviamente non tutto entra in una sola schermata PC):
View attachment 140855


Copio e incollo tutto il sorgente che ha generato:
B4X:
<?php
// Connessione al database
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

$conn = new mysqli($servername, $username, $password, $dbname);

// Controllo della connessione
if ($conn->connect_error) {
  die("Connessione fallita: " . $conn->connect_error);
}

// Preparazione della query di inserimento
$stmt = $conn->prepare("INSERT INTO myTable (name, address) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $address);

// Controllo dei dati inseriti
if (isset($_POST['name']) && isset($_POST['address'])) {
  $name = htmlspecialchars($_POST['name']);
  $address = htmlspecialchars($_POST['address']);

  // Esecuzione della query di inserimento
  if ($stmt->execute()) {
    echo "Record inserito con successo";
  } else {
    echo "Errore nell'inserimento del record: " . $stmt->error;
  }
}

// Chiusura della connessione
$stmt->close();
$conn->close();
?>
ed il suo commento:
In questo esempio, si utilizza l'estensione MySQLi per connettersi al database MySQL. Si prepara una query di inserimento utilizzando il metodo prepare() e si controllano i dati inseriti dall'utente utilizzando la funzione htmlspecialchars() per evitare attacchi di tipo XSS. Si esegue la query di inserimento utilizzando il metodo execute() e si controlla se l'operazione è andata a buon fine. Infine, si chiude la connessione al database.


NOTA: non ho nemmeno "letto" il sorgente, figuriamoci provato!
Si ritorno al Php perché è meglio delle librerie dirette
 

ivanomonti

Expert
Licensed User
Longtime User
` = accento è ciò che mi da mysql
' = singola apice che metto all'interno della query
" = doppie apice che serve per scrivere e chiudere una stringa su b4j+b4a+b4i

credo sia corretto ma posso sicuramente sbagliarmi, quindi l'errore sta nel trasferimento sulla classe b4A a MySql?
 

ivanomonti

Expert
Licensed User
Longtime User
@LucaMs nel insert come passo i paramentri alla pagina php?

mi ricordi per favore, grazie
 

ivanomonti

Expert
Licensed User
Longtime User
So' diventato esageratamente pigro, ergo uso gli strumenti moderni 😊

https://www.perplexity.ai/search/7324142d-7df1-47b7-b3e6-2d2be607cbc5?s=c
ho comunque un problema :)


invio dati alla pagina:
Private Sub Button1_Click
    Dim http As HttpJob
    http.Initialize("insert",Me)
    http.Download2("http://miasmart.it/apiwebmiasmart/to01_insert.php?", Array As String("101","127.0.0.1","ET359ET","QUESTION","ASWER","2023-04-03 17:02:08","false"))
End Sub


php file:
<?php
$servername = "localhost";
$username = "xxxxxxxxxxxxxxxxxx";
$password = "xxxxxxxxxxxxxxxxxxxxxx";
$dbname = "xxxxxxxxxxxxxxxxxxxxx";


$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
  die("Connessione fallita: " . $conn->connect_error);
}

$stmt = $conn->prepare("INSERT INTO tb01(ms_gpt_01_01, ms_gpt_01_02, ms_gpt_01_03, ms_gpt_01_04, ms_gpt_01_05, ms_gpt_01_06, ms_gpt_01_07) VALUES (?,?,?,?,?,?,?)");

$stmt->bind_param($ms_gpt_01_01, $ms_gpt_01_02, $ms_gpt_01_03, $ms_gpt_01_04, $ms_gpt_01_05, $ms_gpt_01_06, $ms_gpt_01_07);

if (isset($_POST['ms_gpt_01_01']) && isset($_POST['ms_gpt_01_02']) && isset($_POST['ms_gpt_01_03']) && isset($_POST['ms_gpt_01_04']) && isset($_POST['ms_gpt_01_05']) && isset($_POST['ms_gpt_01_06']) && isset($_POST['ms_gpt_01_07'])) {
  $ms_gpt_01_01 = htmlspecialchars($_POST['ms_gpt_01_01']);
  $ms_gpt_01_02 = htmlspecialchars($_POST['ms_gpt_01_02']);
  $ms_gpt_01_03 = htmlspecialchars($_POST['ms_gpt_01_03']);
  $ms_gpt_01_04 = htmlspecialchars($_POST['ms_gpt_01_04']);
  $ms_gpt_01_05 = htmlspecialchars($_POST['ms_gpt_01_05']);
  $ms_gpt_01_06 = htmlspecialchars($_POST['ms_gpt_01_06']);
  $ms_gpt_01_07 = htmlspecialchars($_POST['ms_gpt_01_07']);

  if ($stmt->execute()) {
    echo "Record inserito con successo";
  } else {
    echo "Errore nell'inserimento del record: " . $stmt->error;
  }
}

$stmt->close();
$conn->close();
?>

Error:
Waiting for debugger to connect...
Program started.
Call B4XPages.GetManager.LogEvents = True to enable logging B4XPages events.
Invalid link: http://miasmart.it/apiwebmiasmart/to01_insert.php?
Error occurred on line: 246 (HttpJob)
java.lang.ArrayIndexOutOfBoundsException: Index 7 out of bounds for length 7
    at b4j.example.httpjob._escapelink(httpjob.java:347)
    at b4j.example.httpjob._download2(httpjob.java:108)
    at b4j.example.b4xmainpage._button1_click(b4xmainpage.java:73)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:629)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:234)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:167)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:111)
    at anywheresoftware.b4a.shell.ShellBA.raiseEvent2(ShellBA.java:100)
    at anywheresoftware.b4a.BA$1.run(BA.java:236)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:834)
 

ivanomonti

Expert
Licensed User
Longtime User
il problema e nel manifest che ora sto cercando di risolvere. Grazie
 

LucaMs

Expert
Licensed User
Longtime User
il problema e nel manifest che ora sto cercando di risolvere. Grazie
Non dovrebbe essere là.

Error occurred on line: 246 (HttpJob) java.lang.ArrayIndexOutOfBoundsException: Index 7 out of bounds for length 7
Sembra ci sia un array di 7 elementi ma venga utilizzato 7 come indice, mentre gli array hanno base 0, per cui l'indice massimo deve avere valore 6.
Però mi sfugge!
 

LucaMs

Expert
Licensed User
Longtime User
Prova a cambiare questa:
$stmt->bind_param($ms_gpt_01_01, $ms_gpt_01_02, $ms_gpt_01_03, $ms_gpt_01_04, $ms_gpt_01_05, $ms_gpt_01_06, $ms_gpt_01_07);
in:
B4X:
$stmt->bind_param('sssssss', $ms_gpt_01_01, $ms_gpt_01_02, $ms_gpt_01_03, $ms_gpt_01_04, $ms_gpt_01_05, $ms_gpt_01_06, $ms_gpt_01_07);

Spiegazione.

Il primo parametro (comando bind_param), 'sssssss', indica il tipo degli altri.

"s"Corrisponde a variabili associate al tipo di dato stringa.
"i"Corrisponde a variabili associate al tipo di dato numeri interi.
"d"Corrisponde a variabili associate al tipo di dato numeri double.
"b"Corrisponde a variabili associate al tipo di dato BLOB, formato binario.
 
Last edited:
Top