Passaggio da mysql a mysqli

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno a tutti.
A seguito dell'aggiornamento del sito, dell'hosting, versione php, sono "costretto" a aggiornare tutte le procedure scritte da mysql a mysqli.
Nessun problema relativamente al classico file config.php per la connessione al db, mentre non capisco come mai non funzioni la pagina successiva...
Struttura: pagina di login per inserimento user e pwd; passaggio dei due dati alla pagina verify.php che controlla che le due informazioni siano presenti nel db.
Se tutto è corretto vengo indirizzato alla pagina partenza.php altrimenti ritorno alla pagina di login.
Semplice... ma non riesco a far funzionare correttamente la pagina verify.php.
Di seguito i codici:
- Index.php:
PHP:
<?php include('connect2.php'); ?>
<!DOCTYPE html>
<html>
<head>
 
    <title>Collegati per amministrare il sito </title>
 
    <!--Pannello di gestione creato da Mel Riccardo-->
    <link href="admin.css" rel="stylesheet" type="text/css" />
 
<link href="backoffice.css" rel="stylesheet" type="text/css">
</head>
<body>
 
    <form id="login" action="verify.php" method="post">
        <fieldset id="inputs">
            <input id="username" name="username" type="text" placeholder="Username" autocomplete="off" autofocus required>
            <input id="password" name="password" type="password" placeholder="Password" autocomplete="off" required>
        </fieldset>
        <fieldset id="actions">
            <input type="submit" id="submit" value="Collegati">
            <a href="../index.html" id="back" class="h7b">Ritorna al sito</a>
        </fieldset>
    </form>
 
</body>
</html>
- verify.php:
PHP:
<?php session_start();

include 'connect.php';


$username = $_POST['username'];



//sha1 cifra la password anche qui in questo modo corrisponde con quella del db
$password = sha1($_POST['password']);



$query = ("SELECT * FROM utentibo WHERE userName = '$username' AND password = '$password'");

$preso = $mysqli->query($query);



$record = $result->fetch_array($preso);

/*Prelevo l'identificativo dell'utente */
$cod=$record['userName'];
$unico = $record['unico'];

 
/* Effettuo il controllo */
if ($cod == "") {$trovato = 0 ;}
else{ $trovato = 1; }


 
/* Username e password corrette */
if($trovato === 1) {
 
 /*Registro la sessione*/
  $_SESSION['autorizzato'];
 
  $_SESSION["autorizzato"] = sha1($cod + $unico);
 
  /*Registro il nome dell'utente*/
  $_SESSION['cod'] = $cod;
 
 /*Redirect alla pagina riservata*/
   echo '<script language=javascript>document.location.href="partenza.php"</script>';
 
} else {
 
/*Username e password errati, redirect alla pagina di login*/
 echo '<script language=javascript>document.location.href="index.php"</script>';
 
}

?>

Sicuramente sarà una sciocchezza, ma mi occorre capire bene cosa ho sbagliato, visto che poi le pagine coinvolte nel cambiamento sono circa un centinaio...

Grazie per l'aiuto
 
Si, avevo fatto un file connect2 per provare, poi visto che funziona (su index non da errori) ho cambiato il file connect.php, per non cambiare il link su tutte le pagine.
 
Ma in index non hai nessuna query...

Posta il codice che hai in connect.php
 
Eccolo:
PHP:
<?php

// Creo la connessione

$conn = new mysqli('***(server)***','**(user)***','***(password)***','kf2idahk_teatro7_com_catering');
  if ($conn->connect_error) {
    die('Errore di connessione (' . $conn->connect_errno . ')' . $conn->connect_error);
  }else{
    $conn->set_charset("utf8");
}


?>
 
Comunque per sicurezza, visto che abbiamo cambiato anche il piano di hosting, sto domandando al provider (Register) che i dati relativi al server, utente e password siano corretti. Non vorrei che tutto fosse dovuto al fatto che sto indicando un server sbagliato...
Grazie di avermi fatto venire il dubbio, intanto!
A presto
 
Modifica così
PHP:
<?php

// Creo la connessione

$mysqli = new mysqli('***(server)***','**(user)***','***(password)***','kf2idahk_teatro7_com_catering');
  if ($mysqli->connect_error) {
    die('Errore di connessione (' . $conn->connect_errno . ')' . $conn->connect_error);
  }else{
    $mysqli->set_charset("utf8");
}


?>

cambia il $conn con $mysqli dato che poi nei file è quello che richiami (altrimenti cambi le query es. $preso = $conn->query($query); )
 
Ok, chiaro il primo concetto.
Ho cambiato nel file connect.php la variabile $conn con $mysqli.
Ricevo il messaggio:
"la pagina non funziona. teatro7.com non è in grado di gestire la richiesta. http error 500"...
Attendo per sicurezza la conferma dei dati server, user e password del db dal provider, almeno parto da dati certi, poi ci risentiamo.
Intanto grazie
 
Eccomi qui...
I dati per la connessione erano esatti, quindi, basandomi su quanto ho trovato sul vostro sito relativamente alle connessioni mysqli e relative interazioni con i db, ho riscritto le porzioni di codice relative sia al file connect.php che allae successive query contenute in verify.php.
E ora funziona.
Una domanda: immagino che se utilizzo una connessione ad oggetti (si dice così?) nel file connect.php non posso mantenere poi le query procedurali, vero?
A occhio, dovrò cambiare tutti i 100 e passa file...
Mi confermate?
Grazie, visto che la traccia (cambiare il nome della variabile di connessione da $conn a $mysqli mi ha dato lo spunto giusto per capire almeno una delle cose che erano sbagliate...
A presto (visto che dovendo aggiornare tutto, con script anche piuttosto complessi) magari avrò ancora bisogno di qualche suggerimento...
Se serve, potrò postare i codici funzionanti. Ditemi voi.
 
Mi riallaccio a questa discussione in quanto ho un problema simile nel passaggio da mysql a mysqli.
Gestendo un sito immobiliare, avevo sviluppato tante funzioni ad hoc ed inserite in un file display.php tramite la funzione function che vengono poi richiamate dalle varie pagine.
In questa fase la maggior parte delle pagine dove non richiedono la include del file display.php tutte le query mi funzionano, mentre nelle pagine dove richiamo la funzione non viene visualizzato nulla. Sicuramente è un errore mio e quindi chiedevo un piccolo aiuto. Non sono proprio riuscito a trovare la soluzione.
Queste la struttura della pagina "visualizza-annunci-milano.php"
<?php
include "config.php" // all'interno tuti i parametri del database
?>
<body>
<html>

<div>
... codice che legge altri dati da database // funziona
<?php visualizza_annunci (milano, vendite); ?> // non va visualizzare nulla
... codice che legge altri dati da database // funziona
</div>

</html>
</body>
Se provo a mettere include "connect.php" nel diplay.php il sito non visualizza nulla.

Possibile che non funziona una cosa del genere?
Grazie. Buona giornata e buon lavoro
 
<body>
<html>
forse sono rovesciati, il body dovrebbe stare all'interno di html

... codice che legge altri dati da database // funziona
<?php visualizza_annunci (milano, vendite); ?> // non va visualizzare nulla
... codice che legge altri dati da database // funziona
cosa fa "visualizza_annunci" ?

Se provo a mettere include "connect.php" nel diplay.php il sito non visualizza nulla.
ma se legge altri dati dal db, la connessione é già presente …. salvo capire come viene gestita tra i vari script

la pagina bianca è dovuta ad un errore e la prima cosa che si dovrebbe fare in uno sviluppo e capire come gestire, dove sono e come leggere gli errori
 
Grazie Marino51.
body e html sono corretti. ;) Le ho scritte male qui.
visualizza_annunci fa questo:
PHP:
<?php function visualizza_annuncio($citta, $tipo_annuncio) {

   $SQL_1 = "SELECT * FROM annuncio where archivio = 0 and cancellato = 0 and venduto = 0 and disattivo = 0";
   if ($citta <> "") {
       $SQL_1 = $SQL_1 . " and comune = '". $citta . "'";   
   }
   if ($tipo_annuncio <> "") {
       $SQL_1 = $SQL_1 . " and tipo_annuncio = '". $tipo_annuncio . "'";   
   }
 
   $SQL_1 = $SQL_1 . " order by posizione asc";

   echo ($SQL_1);
 
   $result = $conn->query($SQL_1);
   if ($result->num_rows > 0) {
       while($row = $result->fetch_assoc()) {
           echo "ciclo";
           $id_annuncio = $row['IdAnnuncio'];
           echo $id_annuncio;
          
           // qui tutto il codice per far visualizzare l'annuncio con immagine e dati
       }
   } else {
       echo "non trovato";
   }
?>
Si ferma alla
PHP:
echo ($SQL_1)

Come dicevo... sto decodificando tutte le funzioni che prima avevo fatto con connessione mysql
Grazie intatno
 
Ultima modifica di un moderatore:
@Arcanto
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
php-png.5742
quando posti del codice PHP e il tag
code-gif.5743
per il codice generico, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.5744


Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie

Per questa volta te lo sistemo io ma mi raccomando per il futuro
 
Ciao Arcanto, ma che errore ricevi? li hai controllati i log?

Nel codice postato mi sembra manchi una "}", a parte questo controlla di aver incluso correttamente le istruzioni di connessione al DB (visto che fino al echo precedente dici che funziona). Prova a scrivere l'istruzione di connessione direttamente nella funziona e vedi se così va.

Ti consiglio anche di costruire la query utilizzando una variabile come condizione spostando le if prima della dichiarazione di $SQL_1

PHP:
<?php function visualizza_annuncio($citta, $tipo_annuncio) {

if ($citta <> "") {
     $citta = " and comune=".$citta;  
     }
if ($tipo_annuncio <> "") {
     $tipo_ann =" and tipo_annuncio=".$tipo_annuncio;  
   }

$addcondition=$citta;
$addcondition .=$tipo_ann;
$addcondition .=" order by posizione asc";

$SQL_1 = "SELECT * FROM annuncio where archivio = 0 and cancellato = 0 and venduto = 0 and disattivo = 0 $addcondition ";

echo ($SQL_1);

}
 

Discussioni simili