Visualizzazione risultati 1 fino 18 di 18

Discussione: Porting da mysql a mysqli

  1. #1
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito Porting da mysql a mysqli

    Un saluto a tutta la community altervista,
    avrei una domanda riguardo il porting da mysql a mysqli, in sostanza qualche anno fa realizzai un piccolo gestionale scritto tutto in mysql. Adesso, essendo proprio alle strette, avrei necessità di migrare il codice del gestionale dal vecchio stile procedurale al nuovo stile sempre procedurale ma mysqli.

    Trattandosi di circa 50 file, volevo evitare di modificare a mano tutto il codice su GitHub ho trovato MySQLConverterTool, qualcuno di voi l'ho ha mai utilizzato e se no secondo voi esiste la possibilità di modificare gli script php senza mettere mano a tutti i file ?

    Ragazzi confido nel vostro supporto

  2. #2
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito

    Ragazzi,
    mi dareste una mano a sistemare questo codice per effettuare il porting da mysql a mysqli


    Questo il file della connessione che funziona bene:

    Codice PHP:
    <?php
    $mysqli 
    = new mysqli('localhost''utente''pass''miodatabase');
        if (
    $mysqli->connect_error) {
            die(
    'Errore di connessione (' $mysqli->connect_errno ') '
            
    $mysqli->connect_error);
        } else {
            echo 
    'Connesso. ' $mysqli->host_info "\n";
        }
    ?>
    questo è l'estratto del codice che invece dovrei trasformare da mysql a mysqli

    Codice PHP:
    function effettua_login()
    {
        
    // recupero il nome e la password inseriti dall'utente
        
    $username      trim($_POST['username']);
        
    $password         trim($_POST['password']);
        
        
    // verifico se devo eliminare gli slash inseriti automaticamente da PHP
        
    if(get_magic_quotes_gpc()) {
            
    $username          stripslashes($username);
            
    $password          stripslashes($password);
        }

        
    // verifico la presenza dei campi obbligatori
        
    if(!$username || !$password) {
            
    $messaggio urlencode("Non hai inserito il nome o la password");
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
            exit;
        }
        
    // effettuo l'escape dei caratteri speciali per inserirli all'interno della query
        
    $username         mysql_real_escape_string($username);
        
    $password     mysql_real_escape_string($password);    

        
    // preparo ed invio la query
        
    $query "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')";
        
    $result mysql_query($query);
        
        
    // controllo l'esito
        
    if (!$result) {
            die(
    "Errore nella query $query: " mysql_error());
        }

        
    $record mysql_fetch_array($result);

        if(!
    $record) {
            
    $messaggio urlencode('Nome utente o password errati');
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
            
        } else {
            
    session_start();
            
    $_SESSION['username'] = $record['username'];
            
    $messaggio urlencode('Login avvenuto con successo');
            
    header("location: home.php");
    }
    }
    ?> 
    Thanks

  3. #3
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    876

    Predefinito

    Nel primo messaggio dicevi che intendi utilizzare mysqli procedurale, ma nel secondo, durante la connessione, usi la sua "versione" ad oggetti.
    Quale delle due intendi utilizzare?

  4. #4
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito

    Ciao mzanella,
    nel ringraziarti per la risposta chiedo anche a te lumi, nel senso che mi piacerebbe utilizzare la versione che mi permetta di modificare i miei file più velocemente senza stravolgere tutto.

    Accetto pertanto consigli ... Io sarei orientato verso il procedurale

  5. #5
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    876

    Predefinito

    Se cerchi una migrazione il più indolore possibile, probabilmente dovresti usare l'interfaccia procedurale.

    In questo caso il codice per la connessione diventa:
    Codice PHP:
    <?php 
        $link 
    mysqli_connect('link''utente''password''miodatabase');

        if (!
    $link) {
            die(
    "Errore di connessione (" mysqli_connect_errno() . ") " mysqli_connect_error();
        } else {
            echo 
    "Connesso. " mysqli_get_host_info "\n";
        }
    }
    Mentre il codice da trasformare diventa:
    Codice PHP:
    function effettua_login() 
    {
        global 
    $link;  // Vedi la nota!

        // recupero il nome e la password inseriti dall'utente 
        
    $username      trim($_POST['username']); 
        
    $password         trim($_POST['password']); 
         
        
    // verifico se devo eliminare gli slash inseriti automaticamente da PHP 
        
    if(get_magic_quotes_gpc()) { 
            
    $username          stripslashes($username); 
            
    $password          stripslashes($password); 
        } 

        
    // verifico la presenza dei campi obbligatori 
        
    if(!$username || !$password) { 
            
    $messaggio urlencode("Non hai inserito il nome o la password"); 
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio"); 
            exit; 
        } 
        
    // effettuo l'escape dei caratteri speciali per inserirli all'interno della query 
        
    $username         mysqli_real_escape_string($username); 
        
    $password     mysqli_real_escape_string($password);     

        
    // preparo ed invio la query 
        
    $query "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')"
        
    $result mysqli_query($link$query); 
         
        
    // controllo l'esito 
        
    if (!$result) { 
            die(
    "Errore nella query $query: " mysqli_error($link)); 
        } 

        
    $record mysqli_fetch_array($result);
        
    mysqli_free_result($result);

        if(!
    $record) { 
            
    $messaggio urlencode('Nome utente o password errati'); 
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio"); 
             
        } else { 
            
    session_start(); 
            
    $_SESSION['username'] = $record['username']; 
            
    $messaggio urlencode('Login avvenuto con successo'); 
            
    header("location: home.php"); 


    ?> 
    Nota: a differenza di mysql_*, il parametro della connessione deve essere esplicito, quindi all'interno della funzione effettua_login (così come di tutte le altre in cui utilizzerai la connessione alla base di dati) hai bisogno di accedere alla variabile $link. Puoi dichiararla globale, passarla alla funzione, o accedervi in altri modi, a tua scelta.

    Per il resto si tratta di modificare mysql_some_function in mysqli_some_function, aggiungendo il parametro $link dove serve (fondamentalmente nelle interrogazioni e nei messaggi d'errore).

    Utilizzando mysqli hai anche a disposizione i prepared statement, che rendono il codice più robusto contro attacchi come MySQL Injection.

  6. #6
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito

    Allora, grazie ai tuoi suggerimenti ci sono quasi,
    ho creato la connessione solo che anzichè chiamare la variabile
    con il nome $link o usato $conndb.

    La connessione avviene correttamente, ma sembra che ci sia un errore nella query, che in mysql funziona perfettamente mentre
    in mysqli restituisce queto errore:

    Codice:
    Errore nella query SELECT * FROM utenti WHERE username = '' AND password = MD5(''):
    Codice PHP:
    <?php

        
    include('conngo2.php'); // Includes Login Script

    if($_POST) {
        
    effettua_login();
    } else {
        
    mostra_form();
    }

    function 
    mostra_form()
    {
        
    // mostro un eventuale messaggio
        
    if(isset($_GET['msg'])) {
            echo 
    '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
        }
        
    ?>

        <!DOCTYPE html>
    <html >
      
      <head>
        <meta charset="UTF-8">
        <title>Gestione Officina 1.0</title>
        <link rel="icon" href="favicon.ico">
        <link rel="stylesheet" href="css/style.css">
        <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
        <script src="js/index.js"></script>
      </head>

        <body>

        <div class="wrapper">
        <div class="container">
            <h1>Gestione Officina 1.0</h1>
            <form id="form_login" name = "form_login" "class="form" method="post" action="">
                <input type="text" placeholder="Username" name="username">
                <input type="password" placeholder="Password" name="password">
                <button type="submit" id="login-button">Accedi</button>
            </form>
        </div>
        
        <ul class="bg-bubbles">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
        
        </body>
    </html>

        <?
    }

    function 
    effettua_login()
    {
        
        global 
    $conndb;

        
    // recupero il nome e la password inseriti dall'utente
        
    $username      trim($_POST['username']);
        
    $password         trim($_POST['password']);
        
        
    // verifico se devo eliminare gli slash inseriti automaticamente da PHP
        
    if(get_magic_quotes_gpc()) {
            
    $username          stripslashes($username);
            
    $password          stripslashes($password);
        }

        
    // verifico la presenza dei campi obbligatori
        
    if(!$username || !$password) {
            
    $messaggio urlencode("Non hai inserito il nome o la password");
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
            exit;
        }
        
    // effettuo l'escape dei caratteri speciali per inserirli all'interno della query
        
    $username         mysqli_real_escape_string($username);
        
    $password         mysqli_real_escape_string($password);    

        
    // preparo ed invio la query
        
    $query "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')";
        
    $result mysqli_query($conndb$query);
        
        
    // controllo l'esito
        
    if (!$result) {
            die(
    "Errore nella query $query: " mysql_error($conndb));
        }

        
    $record mysqli_fetch_array($result);
        
    mysqli_free_result($result);

        if(!
    $record) {
            
    $messaggio urlencode('Nome utente o password errati');
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
            
        } else {
            
    session_start();
            
    $_SESSION['username'] = $record['username'];
            
    $messaggio urlencode('Login avvenuto con successo');
            
    header("location: home.php");
    }
    }
    ?>
    Grazie ancora
    Ultima modifica di areasviluppo23 : 06-04-2017 alle ore 13.42.16

  7. #7
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    876

    Predefinito

    Colpa mia , il parametro della connessione va passato anche a mysqli_real_escape_string, altrimenti restituisce una stringa vuota.

    Quindi occorre modificare
    Codice PHP:
        $username         mysqli_real_escape_string($username);
        
    $password         mysqli_real_escape_string($password); 
    in
    Codice PHP:
        $username         mysqli_real_escape_string($conndb$username);
        
    $password         mysqli_real_escape_string($conndb$password); 

  8. #8
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito

    Scusami tu per l'assillo, ma ancora non ci siamo,
    a quanto pare sembra che mysqli gestisca le query diversamente da mysql,
    ho letto ma non riesco ad implementare questo:

    http://php.net/manual/en/mysqli.query.php

    ho modificato la mia query cosi, ma niente

    Codice PHP:
        // preparo ed invio la query
        
    $query = ($conndb"SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')");
        
    $result mysqli_query($conndb$query);
        
    // print_r($conndb,$result); 

  9. #9
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    876

    Predefinito

    Riporta $query come era prima, che andava bene:
    Codice PHP:
        $query "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')"
    Il testo dell'interrogazione è una stringa normalissima, non ha bisogno di informazioni sulla connessione alla base di dati (che invece servono per l'esecuzione dell'interrogazione).

    Se, riportandolo in questo modo, ti dà ancora problemi vediamo il da farsi.

  10. #10
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito

    Questo l'errore

    Codice:
    Errore nella query SELECT * FROM utenti WHERE username = '' AND password = MD5(''):
    Codice PHP:
    <?php

    if($_POST) {
        
    effettua_login();
    } else {
        
    mostra_form();
    }

    function 
    mostra_form()
    {
        
    // mostro un eventuale messaggio
        
    if(isset($_GET['msg'])) {
            echo 
    '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
        }
        
    ?>

        <!DOCTYPE html>
    <html >
      
      <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="icon" href="favicon.ico">
        <link rel="stylesheet" href="css/style.css">
        <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
        <script src="js/index.js"></script>
      </head>

        <body>

        <div class="wrapper">
        <div class="container">
            <h1></h1>
            <form id="form_login" name = "form_login" "class="form" method="post" action="">
                <input type="text" placeholder="Username" name="username">
                <input type="password" placeholder="Password" name="password">
                <button type="submit" id="login-button">Accedi</button>
            </form>
        </div>
        
        <ul class="bg-bubbles">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
        
        </body>
    </html>

        <?
    }

    function 
    effettua_login()
    {
        
        include(
    'conngo2.php'); // Includes Login Script

        // recupero il nome e la password inseriti dall'utente
        
    $username      trim($_POST['username']);
        
    $password         trim($_POST['password']);
        
        
    // verifico se devo eliminare gli slash inseriti automaticamente da PHP
        
    if(get_magic_quotes_gpc()) {
            
    $username          stripslashes($username);
            
    $password          stripslashes($password);
        }

        
    // verifico la presenza dei campi obbligatori
        
    if(!$username || !$password) {
            
    $messaggio urlencode("Non hai inserito il nome o la password");
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
            exit;
        }
        
    // effettuo l'escape dei caratteri speciali per inserirli all'interno della query
        
    $username         mysqli_real_escape_string($conndb$username);
        
    $password     mysqli_real_escape_string($conndb$password);    

        
    // preparo ed invio la query
        
    $query "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')"
        
    $result mysqli_query($conndb$query);
        
    // print_r($conndb,$result);
        
        // controllo l'esito
        
    if (!$result) {
            die(
    "Errore nella query $query: " mysql_error($conndb));
        }

        
    $record mysqli_fetch_array($conndb,$result);
        
    mysqli_free_result($result);

        if(!
    $record) {
            
    $messaggio urlencode('Nome utente o password errati');
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
            
        } else {
            
    session_start();
            
    $_SESSION['username'] = $record['username'];
            
    $messaggio urlencode('Login avvenuto con successo');
            
    header("location: home.php");
    }
    }
    ?>

  11. #11
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    876

    Predefinito

    Ho provato il codice nel mio spazio, e non sembrano esserci problemi.
    Puoi provarlo anche tu all'indirizzo: http://mzanella.altervista.org/tests...-mysql-mysqli/.
    Edit: Per la precisione, funziona la costruzione della query non l'inserimento nel database, dato che non ho creato una tabella utenti, ma questo non è rilevante al momento.

    Forse c'è qualche errore nel codice che è sfuggito, ti riporto quello che ho provato io:

    conngo2.php:
    Codice PHP:
    <?php
    $conndb 
    mysqli_connect('localhost''mzanella'null'my_mzanella');

    if (!
    $conndb) { 
        die(
    "Errore di connessione (" mysqli_connect_errno() . ") " mysqli_connect_error());
    } else {
        echo 
    "Connesso. " mysqli_get_host_info($conndb) . "\n";
    }

    index.php:
    Codice PHP:
    <?php 
    if($_POST) { 
        
    effettua_login(); 
    } else { 
        
    mostra_form(); 



    function 
    mostra_form() 

        
    // mostro un eventuale messaggio 
        
    if(isset($_GET['msg'])) { 
            echo 
    '<b>'.htmlentities($_GET['msg']).'</b><br /><br />'
        } 
        
    ?> 

        <!DOCTYPE html> 
    <html > 
       
      <head> 
        <meta charset="UTF-8"> 
        <title></title> 
        <link rel="icon" href="favicon.ico"> 
        <link rel="stylesheet" href="css/style.css"> 
        <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script> 
        <script src="js/index.js"></script> 
      </head> 

        <body> 

        <div class="wrapper"> 
        <div class="container"> 
            <h1></h1> 
            <form id="form_login" name = "form_login" "class="form" method="post" action=""> 
                <input type="text" placeholder="Username" name="username"> 
                <input type="password" placeholder="Password" name="password"> 
                <button type="submit" id="login-button">Accedi</button> 
            </form> 
        </div> 
         
        <ul class="bg-bubbles"> 
            <li></li> 
            <li></li> 
            <li></li> 
            <li></li> 
            <li></li> 
            <li></li> 
            <li></li> 
            <li></li> 
            <li></li> 
            <li></li> 
        </ul> 
    </div> 
         
        </body> 
    </html> 

        <? 



    function 
    effettua_login() 

        include(
    'conngo2.php'); // Includes Login Script

        
        // recupero il nome e la password inseriti dall'utente
        
    $username      trim($_POST['username']);
        
    $password         trim($_POST['password']);
        
        
        
    // verifico se devo eliminare gli slash inseriti automaticamente da PHP
        
    if(get_magic_quotes_gpc()) {
            
    $username          stripslashes($username);
            
    $password          stripslashes($password);
        }
        
        
        
    // verifico la presenza dei campi obbligatori
        
    if(!$username || !$password) {
            
    $messaggio urlencode("Non hai inserito il nome o la password");
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
            exit;
        }
        
        
    // effettuo l'escape dei caratteri speciali per inserirli all'interno della query
        
    $username         mysqli_real_escape_string($conndb$username);
        
    $password     mysqli_real_escape_string($conndb$password);

        
    // preparo ed invio la query
        
    $query "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')";
        
    $result mysqli_query($conndb$query);
        
    // print_r($conndb,$result);
        
        // controllo l'esito
        
    if (!$result) {
            die(
    "Errore nella query $query: " mysqli_error($conndb));
        }

        
    $record mysqli_fetch_array($conndb,$result);
        
    mysqli_free_result($result);

        if(!
    $record) {
            
    $messaggio urlencode('Nome utente o password errati');
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
        } else {
            
    session_start();
            
    $_SESSION['username'] = $record['username'];
            
    $messaggio urlencode('Login avvenuto con successo');
            
    header("location: home.php");
        }
    }
    ?>
    Ultima modifica di mzanella : 07-04-2017 alle ore 10.45.45

  12. #12
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito

    Buongiorno mzanella,
    il problema a me nasce in fase di

    // preparo ed invio la query
    $query = "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')";
    $result = mysqli_query($conndb, $query);
    // print_r($conndb,$result);
    In sostanza, il problema a me nasce subito dopo aver inserito user e password nel modulo di login.
    A quanto pare, pur essendo presente nel db l'utente e la relativa password, mi fallisce l'interrogazione
    restituendomi

    Codice:
    Query: SELECT * FROM utenti WHERE username = '' AND password = MD5('')
    Errore:
    Assicuro che in mysql tutto funziona alla perfezione, è proprio il porting verso mysqli che mi sta facendo impazzire

  13. #13
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    876

    Predefinito

    Hai provato il codice nel mio spazio http://mzanella.altervista.org/tests...-mysql-mysqli/?

    Il problema nasce dal fatto che le variabili $username e $password sono entrambe vuote. Quasi certamente questo accade dopo la chiamata a mysqli_real_escape_string, il che lascia supporre che ci sia qualcosa che non va col parametro di connessione, $conndb.

    Prova a mostrare il codice aggiornato di conngo2.php e della pagina PHP.
    Ultima modifica di mzanella : 07-04-2017 alle ore 14.23.25

  14. #14
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Hai provato il codice nel mio spazio http://mzanella.altervista.org/tests...-mysql-mysqli/?

    Il problema nasce dal fatto che le variabili $username e $password sono entrambe vuote. Quasi certamente questo accade dopo la chiamata a mysqli_real_escape_string, il che lascia supporre che ci sia qualcosa che non va col parametro di connessione, $conndb.

    Prova a mostrare il codice aggiornato di conngo2.php e della pagina PHP.
    Ciao, ti confermo che ho provato il tuo codice e fin la ci arrivo anche con il mio, adesso che te lo posto magari riesci a verificarlo anche tu ...

    Codice PHP:

    <?php
    // Apriamo la connessione verso il database mysql
    $conndb mysqli_connect('localhost''utente''password''database');

    // Controlliamo l'esito della connessione
    if (!$conndb) {
        die(
    "Errore di connessione (" mysqli_connect_errno() . ") " mysqli_connect_error());
        exit();
    }

    // Chiudiamo la connessione
        
    mysqli_close($conndb);

    ?>
    Codice PHP:
    <?php

    //include('conngo2.php'); // Includes Login Script

    if($_POST) {
        
    effettua_login();
    } else {
        
    mostra_form();
    }

    function 
    mostra_form()
    {
        
    // mostro un eventuale messaggio
        
    if(isset($_GET['msg'])) {
            echo 
    '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
        }
        
    ?>

        <!DOCTYPE html>
    <html >
      
      <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="icon" href="favicon.ico">
        <link rel="stylesheet" href="css/style.css">
        <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
        <script src="js/index.js"></script>
      </head>

        <body>

        <div class="wrapper">
        <div class="container">
            <h1></h1>
            <form id="form_login" name = "form_login" "class="form" method="post" action="">
                <input type="text" placeholder="Username" name="username">
                <input type="password" placeholder="Password" name="password">
                <button type="submit" id="login-button">Accedi</button>
            </form>
        </div>
        
        <ul class="bg-bubbles">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
        
        </body>
    </html>

        <?php
    }

    function 
    effettua_login()
    {
        include(
    'conngo2.php'); // Includes Login Script

        // recupero il nome e la password inseriti dall'utente
        
    $username      trim($_POST['username']);
        
    $password         trim($_POST['password']);
        
        
    // verifico se devo eliminare gli slash inseriti automaticamente da PHP
        
    if(get_magic_quotes_gpc()) {
            
    $username          stripslashes($username);
            
    $password          stripslashes($password);
        }

        
    // verifico la presenza dei campi obbligatori
        
    if(!$username || !$password) {
            
    $messaggio urlencode("Non hai inserito il nome o la password");
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
            exit;
        }
        
    // effettuo l'escape dei caratteri speciali per inserirli all'interno della query
        
    $username         mysqli_real_escape_string($conndb$username);
        
    $password         mysqli_real_escape_string($conndb$password);

        
    // preparo ed invio la query
        
    $query "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')"
        
    $result mysqli_query($conndb,$query);
        
    // var_dump ($conndb,$result);
        // print_r($conndb,$result);
        
        // controllo l'esito
        
    if (!$result) {
            die(
    "Query:  " .$query" <br>Errore: " mysql_error($conndb));
        }

        
    $record mysqli_fetch_array($conndb,$result);
        
    mysqli_free_result($result);

        if(!
    $record) {
            
    $messaggio urlencode('Nome utente o password errati');
            
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
            
        } else {
            
    session_start();
            
    $_SESSION['username'] = $record['username'];
            
    $messaggio urlencode('Login avvenuto con successo');
            
    header("location: home.php");
    }
    }
    ?>
    A te per verifiche

  15. #15
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    876

    Predefinito

    Hai lasciato un mysql anziché mysqli qui:
    Codice PHP:
        // controllo l'esito 
        
    if (!$result) { 
            die(
    "Query:  " .$query" <br>Errore: " mysql_error($conndb)); 
        } 
    modificalo in mysqli_error($conndb), così da avere informazioni più precise sull'errore. Per il resto, almeno a occhio, sembra tutto ok.

  16. #16
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Hai lasciato un mysql anziché mysqli qui:
    Codice PHP:
        // controllo l'esito 
        
    if (!$result) { 
            die(
    "Query:  " .$query" <br>Errore: " mysql_error($conndb)); 
        } 
    modificalo in mysqli_error($conndb), così da avere informazioni più precise sull'errore. Per il resto, almeno a occhio, sembra tutto ok.
    Niente da fare

  17. #17
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    876

    Predefinito

    Sì, ma che messaggio d'errore restituisce ora?

  18. #18
    areasviluppo23 non è connesso Utente AlterBlog
    Data registrazione
    04-04-2017
    Messaggi
    10

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Sì, ma che messaggio d'errore restituisce ora?
    Codice:
    // preparo ed invio la query
    	$query = "SELECT * FROM utenti WHERE username = '$username' AND password = MD5('$password')";
    	$result = mysqli_query($conndb,$query);
    	var_dump ($result);
    il var_dump risulta corretto:

    Codice:
    object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(3) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }
    nonostante "dovrebbe" funzionare, io continuo imperterrito a ricevere errore

    Codice:
    Query: SELECT * FROM utenti WHERE username = '' AND password = MD5('')
    Errore:

    Secondo me, ma chiedo lumi, l'errore potrebbe risiedere in questa parte del codice:

    Codice:
    // effettuo l'escape dei caratteri speciali per inserirli all'interno della query
    	$username     	= mysqli_real_escape_string($conndb, $username);
    	$password 	= mysqli_real_escape_string($conndb, $password);

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •