Modifica parametro mysql_result($result, $i, 'id') Deprecato dal 5.5

  • Creatore Discussione Creatore Discussione micha93
  • Data di inizio Data di inizio

micha93

Nuovo Utente
18 Apr 2016
12
1
3
Salve come da titolo volevo chiedermi un aiuto in quanto con mysqli dal 5.5 la funzione mysql_result che permette di incorporare gli indici nel mio caso per gestire array in piu pagine dinamiche php è stata deprecata . Consigli su come sostituirla mantenendo le stesse funzionalita?

da notare che :
PHP:
$result = mysqli_query($connessione, "SELECT * FROM players");
        $total_results = mysqli_num_rows($result);

sono aggiornati correttamente .. il problema è poi la generazione della tabella con il seguente codice :
PHP:
echo '<td>' . mysql_result($result, $i, 'id') . '</td>';




Codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
        <title>Visualizza Record</title>
</head>
<body>
<?php
/*
        VIEW-PAGINATED.PHP
        Visualizza tutti i dati della tabella 'players'
        Questa è una versione modificata del file view.php che include l'impaginazione
*/
        // connessione al database
        include('connect-db.php');
        // numero di risultati da visualizzare per pagina
        $per_page = 3;
        // calcola le pagine totali
        $result = mysqli_query($connessione,"SELECT * FROM players");
        $total_results = mysqli_num_rows($result);
        $total_pages = ceil($total_results / $per_page);
        // controlla se la variabile 'page' è impostata nell'URL (es: view-paginated.php?page=1)
        if (isset($_GET['page']) && is_numeric($_GET['page']))
        {
                $show_page = $_GET['page'];
                // mi assicuro che il valore di $show_page sia valido
                if ($show_page > 0 && $show_page <= $total_pages)
                {
                        $start = ($show_page -1) * $per_page;
                        $end = $start + $per_page;
                }
                else
                {
                        // errore - mostra il primo set di risultati
                        $start = 0;
                        $end = $per_page;
                }
        }
        else
        {
                // se la pagina non è impostata, mostra il primo set di risultati
                $start = 0;
                $end = $per_page;
        }
        // visualizza impaginazione
        echo "<p><a href='view.php'>Visualizza Tutto</a> | <b>Visualizza impaginato:</b> ";
        for ($i = 1; $i <= $total_pages; $i++)
        {
                echo "<a href='view-paginated.php?page=$i'>$i</a> ";
        }
        echo "</p>";
        // visualizza i dati in tabella
        echo "<table border='1' cellpadding='10'>";
        echo "<tr> <th>ID</th> <th>Nome</th> <th>Cognome</th> <th></th> <th></th></tr>";
        // loop tra i risultati della query del database, visualizzandoli in tabella
        for ($i = $start; $i < $end; $i++)
        {
                // mi assicuro che PHP non cerchi di mostrare risultati che non esistono
                if ($i == $total_results) { break; }
                // emissione del contenuto di ogni riga in una tabella
                echo "<tr>";
                echo '<td>' . mysql_result($result, $i, 'id') . '</td>';
                echo '<td>' . mysql_result($result, $i, 'firstname') . '</td>';
                echo '<td>' . mysql_result($result, $i, 'lastname') . '</td>';
                echo '<td><a href="edit.php?id=' . mysql_result($result, $i, 'id') . '">Edit</a></td>';
                echo '<td><a href="delete.php?id=' . mysql_result($result, $i, 'id') . '">Delete</a></td>';
                echo "</tr>";
        }
        // chiude la tabella>
        echo "</table>";
        // impaginazione
?>
<p><a href="new.php">Aggiungi un nuovo record</a></p>
</body>
</html>

Vi ringrazio anticipatamente
 
Ultima modifica:
Ciao,
- prova a controllare se la funzione mysqli è abilitata nel php.ini del tuo db;
- utilizza la funzione new mysqli
 
ecco prova a valutare una cosa del genere:
PHP:
$mysqli = new mysqli('localhost', 'username', 'password', 'nome_database');
 if ($mysqli->connect_error) {
 die('Errore di connessione (' . $mysqli->connect_errno . ') '
 . $mysqli->connect_error);
 } else {
 echo 'Connesso. ' . $mysqli->host_info . "\n";
 }
 
per echo invece prova così:
PHP:
echo '<td> . mysql_result($result, $i, 'id') . </td>';
 
all inizio del codice non l ho esplicitato c'è un include che richiama un header nel quale ci sono tutti i richiami al file di connessione al db.
Infatti il primo parametro di mysqli_query è la variabile $connessione che richiama un codice simile a quello che mi hai postato :) e fino a qui tutto okei ..
PHP:
$result = mysqli_query($connessione, "SELECT * FROM players");
        $total_results = mysqli_num_rows($result);

Il problema risiete nell ultima parte del codice :
PHP:
for ($i = $start; $i < $end; $i++)
        {
                // mi assicuro che PHP non cerchi di mostrare risultati che non esistono
                if ($i == $total_results) { break; }
                // emissione del contenuto di ogni riga in una tabella
                echo "<tr>";
                echo '<td>' . mysql_result($result, $i, 'id') . '</td>';

in pratica con l upgrade da mysql a mysqli che sto apportando per l'aggiornamento di un catalogo online la funzione mysql_result che mi serve per stampare i dati provenienti dal db gestendo al suo interno un indice che mi fa sapere quanti record stampare prima di cambiare pagina e continuare la stampa Non funziona. La funzione Mysql_result è deprecata infatti e rimossa da PHP 7.0 .. Il problema è gestire questa medesima logica senza
Codice:
mysql_result($result, $i, 'XXXX')
.
Spero di essermi spiegato meglio , ti ringrazio della risposta fulminea..
 
Facciamo alcune prove:
incominciamo in questo modo:
PHP:
mysqli_fetch_assoc($result);
fammi sapere se funziona
 
...

PHP:
for ($i = $start; $i < $end; $i++)
        {
                // mi assicuro che PHP non cerchi di mostrare risultati che non esistono
                if ($i == $total_results) { break; }
             
                 
                // emissione del contenuto di ogni riga in una tabella
               echo "<tr>";
                echo '<td>' . mysqli_fetch_all($result) . '</td>';
             //   echo '<td><a href="file.php?edit=11;id=' . mysql_result($result, $i, 'id') . '">Modifica</a></td>';
             //   echo '<td><a href="delete.php?id=' . mysql_result($result, $i, 'id') . '">Elimina</a></td>';
                echo "</tr>";

Errore : Notice: Array to string conversion in ..\www\root\file.php on line 646
e anche con assoc stesso problema.

Ho trovato ovviamente con (riprendendo dal for (il codice completo è presnete nel primo post ) ) :
PHP:
for ($i = $start; $i < $end; $i++)
        {
                // mi assicuro che PHP non cerchi di mostrare risultati che non esistono
                if ($i == $total_results) { break; }
             
$i=$start;
         while ($i<$end)
           
             {
                echo "<tr>" ;
     
        $row=mysqli_fetch_array($result,MYSQLI_ASSOC);
        echo '<td>'.$row['id']. '</td>';
        echo '<td>'.$row['nome']. '</td>';
        echo '<td>'.$row['cognome']. '</td>';
        ...
        echo "</tr>";
                $i++;
               
        }
}
}

e funziona però se vado su pagina 2 non è presente alcuna riga stampata .. pensi spazio a lei destinato completamnrte bianco
 
Ciao, secondo me ti conviene cambiare metodo di paginazione : la query dovrebbe essere dinamica ed estrarti solo i risultati della pagian richiesta. Dai un occhiata a questo snippet, nel messaggio #4 c'è una versione in mysqli
 

Discussioni simili