Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Differenza tra stringhe generate staticamente e dinamicamente?

    Ragazzi, è possibile che due stringhe assolutamente identiche all'occhio umano (una generata dinamicamente come concatenazione di alcune entry di un database e l'altra statica che è un copia-incolla della prima in un echo) siano diverse in qualche modo?
    Sto facendo un progetto in Android (da consegnare stasera ) che dovrebbe comunicare con un server PHP. Tale server riceve la richiesta, cerca nel DB e restituisce una stringa composta da valori separati da virgole. Il programma android si comporta in modo stranissimo:
    http://youtu.be/qsIhe3vdEiY
    In pratica, nonostante la stringa generata sia assolutamente IDENTICA, se è generata come concatenazione di elementi del database in java ottengo NULL, altrimenti ottengo la stringa come la vedete nel browser, e poi provvedo a separarla nei suoi vari pezzi ed inserirla in un array.
    ASSURDO.

    Codice PHP:
    Codice PHP:
    include "dbconn.inc";   //Connessione database

    if(!isset ($_REQUEST[rich])){
        echo 
    "Nessuna richiesta ricevuta.";
        exit();
    }

    $richiesta $_REQUEST[rich];   //ID richiesta
    $username $_REQUEST[user];
    $password $_REQUEST[pass];
    $loginverificato=false;

    //Verifichiamo che username e password coincidano
    $sql="select * from utenti where username = '$username' and password = '$password'";
    $res=mysql_query($sql,$ConnessioneDB);
    while (
    $records=mysql_fetch_assoc($res)) {
        
    $loginverificato=true;
    };

    if((
    $richiesta==1)||($loginverificato)){    //Se l'utente è già registrato e risulta presente nel DB oppure si deve ancora iscrivere, esegue il codice
        
    switch ($richiesta){
        case 
    1registrazione($ConnessioneDB$username$password$_REQUEST[nome]);
            break;
        case 
    2: echo "LoginOk";
            break;
        case 
    3creditoresiduo($ConnessioneDB$username);
            break;
        case 
    4//echo "-bird,dog/d,c at,cow,sheep";
            //echo "-60,riparazione lavandino,2012/2/21,pluto,+30,ripetizioni grammatica,2012/2/22,pluto";
            //echo estrattoconto($ConnessioneDB, $username, $_GET[mode]);
           
    echo "-60,riparazione lavandino,2012/2/21,pluto,+30,ripetizioni grammatica,2012/2/22,pluto";
            break;
        case 
    5:
            break;
        default :
            break;
        }
    } else {    
    //Se invece nome utente e password non coincidono, ritorna errore
        
    echo "LoginError";
    }









    /******************************* FUNZIONI ****************************/
    function registrazione($ConnessioneDB$username$password$nome){
        
    $sql "INSERT INTO `bancadeltempo`.`utenti` (`username`, `password`, `nomecognome`) VALUES ('$username', '$password', '$nome');";
        
    mysql_query($sql,$ConnessioneDB) or die( "RegError");
        echo 
    "RegOk";
    }

    function 
    ricerca(){

    }

    function 
    creditoresiduo($ConnessioneDB$username){
        
    $sql="select credito from portafoglio where username = '$username'";
        
    $res=mysql_query($sql,$ConnessioneDB);
        while (
    $records=mysql_fetch_assoc($res)) {
        echo 
    $records[credito];
        };
    }

    //function estrattoconto($ConnessioneDB, $username, $mode){
    //    if($mode=="1") $sql="select * from ultimeoperazioni where usernamebeneficiario = '$username' limit 0 , 10";
    //    if($mode=="2") $sql="select * from ultimeoperazioni where usernamepagante = '$username' limit 0 , 10";
    //    if($mode=="0") $sql="select * from ultimeoperazioni where usernamepagante = '$username' or usernamebeneficiario = '$username' limit 0 , 10"; //Tira fuori gli ultimi 10 valori
    //    $res=mysql_query($sql,$ConnessioneDB);
    //    while ($records=mysql_fetch_assoc($res)) $output[]=$records; //Recupera i record
    //    print(json_encode($output));    //Creiamone una stringa json
    //    mysql_close();
    //}

    function estrattoconto($ConnessioneDB$username$mode){
        if(
    $mode=="1"$sql="select * from ultimeoperazioni where usernamebeneficiario = '$username' limit 0 , 10";
        if(
    $mode=="2"$sql="select * from ultimeoperazioni where usernamepagante = '$username' limit 0 , 10";
        if(
    $mode=="0"$sql="select * from ultimeoperazioni where usernamepagante = '$username' or usernamebeneficiario = '$username' limit 0 , 10"//Tira fuori gli ultimi 10 valori
        
    $res=mysql_query($sql,$ConnessioneDB);
        
    $i=0;
        
    $return="";
        while (
    $records=mysql_fetch_assoc($res)){
            if(
    $i!=0$return $return.",";
            
    $i++;
            if(
    $records[usernamepagante]==$username) {
                
    $return $return."-";   //Mettiamo il segno per far capire se è un'entrata o un'uscita
                
    $utente $records[usernamebeneficiario]; //L'utente in questo caso è chi ha ricevuto il pagamento
            
    }
            else {
                
    $return $return."+";
                
    $utente $records[usernamepagante]; //Vice versa di sopra
            
    }
            
    $credito $records[credito];
            
    $causale $records[causale];
            
    $anno $records[anno];
            
    $mese $records[mese];
            
    $giorno $records[giorno];
            
    $return $return.$credito.",".$causale.",".$anno."/".$mese."/".$giorno.",".$utente;
        }
        
    mysql_close();
        return 
    $return;
    }

    function 
    pagamento(){

    }


    ?> 
    Codice JAVA nell'app su Android:
    Codice PHP:
    private static String executeHttpRequest(String data) {    //Si preoccupa della trasmissione e ricezione di dati dal server
            
    String result "";
            try {
                
    //URL url = new URL(SERVER_URL);
                
    URL url = new URL("http://192.168.1.136/BancaDelTempoServer/server.php");
                
    URLConnection connection url.openConnection();
         
                
    // Impostazioni varie (I/O, Non usa cache, tipo)
                
    connection.setDoInput(true);
                
    connection.setDoOutput(true);
                
    connection.setUseCaches(false);
                
    connection.setRequestProperty("Content-Type""application/x-www-form-urlencoded");
         
                
    // Invia query POST
                
    DataOutputStream dataOut = new DataOutputStream(connection.getOutputStream());
                
    dataOut.writeBytes(data);
                
    dataOut.flush();
                
    dataOut.close();
         
                
    // Recupera risposta server
                
    DataInputStream dataIn = new DataInputStream(connection.getInputStream());
                
    String inputLine;
                while ((
    inputLine dataIn.readLine()) != null) {
                    
    result += inputLine;  // <-- PUNTO 2 (vedi spiegazione sotto)
                
    }
                
    dataIn.close();
            } catch (
    IOException e) {
                
                
    e.printStackTrace();    //Logga l'errore
                
    result null;    //Restituisce null <-- PUNTO 1 (vedi sotto)
            
    }
         
            return 
    result;
        } 
    Dal debugger vedo che ritorna null non a causa di un'eccezione (come si vede al punto 1) ma proprio nel punto 2, ovvero quando legge il risultato del web server.

    Avete qualche idea?
    Occhio per occhio... sessantaquacchio.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    il codice è un po' lungo... ti posso dire che la risposta alla domanda in cima è "sì": per una verifica rapida fai un dump dei dati che confronti stampando non le stringhe, ma i codici dei singoli caratteri, cioè se confronti le stringhe $A e $B anzichè stamparle a video, stampa per ciascuna un elenco dei codici (ascii probabilmente o cmq il set che usi) e così noterai subito dove sono le differenze

  3. #3
    Originariamente inviato da eiyen
    il codice è un po' lungo... ti posso dire che la risposta alla domanda in cima è "sì": per una verifica rapida fai un dump dei dati che confronti stampando non le stringhe, ma i codici dei singoli caratteri, cioè se confronti le stringhe $A e $B anzichè stamparle a video, stampa per ciascuna un elenco dei codici (ascii probabilmente o cmq il set che usi) e così noterai subito dove sono le differenze
    Buona idea! Che funzione useresti per farlo? Ci vorrebbe qualcosa come il charAt di Java, ma in PHP che io sappia c'è solo substr, che però restituisce una stringa e non un int (giusto?)...
    Occhio per occhio... sessantaquacchio.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Usa ord facendo un ciclo per tutti i caratteri.

  5. #5
    Grande, grazie 1000! Provo subito!
    Occhio per occhio... sessantaquacchio.

  6. #6
    Ogni carattere ha lo stesso codice di quello nella stessa posizione dell'altra stringa
    Ed ora?
    Occhio per occhio... sessantaquacchio.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    stampa anche a video il confronto $A==$B (dovrebbe essere true)... probabilmente non è questo il problema...

  8. #8
    Sì, mi stampa sempre 1 (che in PHP è uguale a true, no?).
    Occhio per occhio... sessantaquacchio.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Io non ho controllato il tuo codice, ma allora il problema è un altro... vai a ritroso fino a dove tutto funziona e posta solo le righe problematiche, allora...

  10. #10
    Non ci sono righe problematiche... apparentemente tutto funziona come dovrebbe (ho fatto debug con netbeans dalla parte di PHP e con Eclipse dalla parte di Java). Solo che il pacchetto, se è stato generato da variabili riempite con roba proveniente dal database, risulta vuoto.
    Bisognerebbe riuscire a capire che cavolo succede al pacchetto durante il tragitto...
    Occhio per occhio... sessantaquacchio.

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