-
Altervista, versione 5.4
Gentile staff, buonasera.
Ho notato che quest'oggi è stata rilasciata la versione di php 7 e sono rimaste selezionabili le meno recenti versioni 5.6 , 5.3extra e 5.3.
Io ho il mio sito che avevo ottimizzato per la versione php 5.4 , che fino a ieri era selezionabile ma che da oggi è scomparsa come possibile scelta.
Scegliendo un'altra versione il mio sito non funziona e per rinnovare tutto il codice mi servirebbero settimane di lavoro che purtroppo non ho.
Sarebbe possibile rendere nuovamente selezionabile la versione di php 5.4 , visto che comunque è anche più recente della 5.3?
Restando in attesa di un vostro gentile riscontro, porgo i miei più cordiali saluti
Giorgio
-
Nel tuo sito vedo:
Codice:
Fatal error: Uncaught Error: Call to undefined function mysql_query()
Quella funzione non è più supportata in PHP7 ma ad esempio su PHP5.6 funziona correttamente. Assicurati di non aver selezionato PHP7, sia nella root che in eventuali sottocartelle.
Ciao!
-
Anche inserendo la versione 5.6 mi compaiono errori similari, tipo:
"Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead"
Non avendo la possibilità nell'immediato di aggiornare tutto il codice del sito, chiedevo se fosse possibile ripristinare la scelta di poter selezionare anche la versione del php 5.4
-
Si perché è deprecato da php 5.5.0 e rimosso da php 7.0.0.. Puoi provare php 5.3? (Ovviamente se il tuo software è compatibile)
-
Già l'avevo provato. Se uso la 5.3 mi escono messaggi tipo:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given
Questi li avevo già risolti migrando alla 5.4
Ecco perché sto chiedendo se è possibile ripristinare dal menù a tendina la scelta anche della 5.4 In fondo è una versione superiore alla 5.3 e utilizzata fino a ieri
-
Nel frattempo che risponde lo staff puoi condividere il tuo codice con noi? Senza dati personali
Scusami non vorrei che si tratti di un errore di codice..
Magari aggiungi la versione e l'applicazione utilizzata..
Lo so scusami è una fesseria ma più di così non posso aiutarti.
-
Buongiorno Darbula.
Ti ringrazio innanzitutto per l’interessamento.
Alcune parti del codice interessate sono le seguenti:
Codice PHP:
$MySql = "SHOW TABLE STATUS";
$Result = mysql_query($MySql);
if (mysql_num_rows($Result)>0) { ...
Oppure un’altra, presa da un altro file:
Codice PHP:
$MySql = "SELECT * FROM BlackList WHERE IP = '".$_SERVER['REMOTE_ADDR']."' AND Granted = 0";
$Result = mysql_query($MySql);
if (mysql_num_rows($Result) == 1) { ...
Adesso, so già che, con l’avvento delle versioni php dal 5.5, occorre modificare il mysql con mysqli e passargli altre informazioni; sta di fatto comunque che, con la versione 5.4, mi funzionava tutto perfettamente.
Il grosso problema è che, per passare alla versione 5.6 o ancora meglio alla 7, dovrei modificare un qualcosa come 300 pagine php in quanto ognuna fa qualcosa di diverso e in ognuna di esse trovo riferimenti a mysql_num_rows, mysql_query, mysql_select_db ecc.
Ecco perché chiedevo se era possibile rendere di nuovo utilizzabile la 5.4 - così nel frattempo avrei la possibilità di aggiornare tutti i codici non bloccandomi inesorabilmente il sito
-
EDIT: soluzione trovata.
Nel primo esempio l'errore che riporta indica che in mysql_num_rows() stai passando un booleano false dato che la query (erronea) ti restituisce falso.. Prova questo codice sostituendo con il tuo database. https://ideone.com/p9nzjW
Logica applicativa per php che si interfaccia con MySQL.
php deve almeno effettuare l'accesso a MySQL e poi si possono effettuare query.. mysql_connet non consente la dichiarazione del database quindi php si connette a mysql ma per nessun database, con la sintassi sql SHOW TABLE STATUS recupero tutte le informazioni delle tabelle, tra cui l'engine utilizzato ecc.. Io credo che tu volevi recuperare solo il nome di una singola tabella o più tabelle, mi sbaglio?
Qui trovi un esempio per recuperare solo i nomi di tabelle http://php.net/manual/en/function.mysql-list-tables.php si proprio grazie a questo esempio sono riuscito nel ricostruire la logica.
ini_set sui server condivisi talvolta è disabilitato, per non mostrare alcun tipo di errore si può impostare error_reporting(0); ma se il tuo programma prevede la cattura degli errori , bisognerebbe agire da li..
Mentre la seconda query se intendi filtrare dei risultati per due campi ... È giusta.. Prima connessione (mysql_connect) a mysql poi scelta del database (mysql_select_db) ecc... inserisci mysql_error in modo che io possa esaminare l'errore...
Ciao e scusa per la lunghezza del post.
Quindi non penso che la versione di php centri qualcosa ma più che altro credo che la migrazione di MySQL 5.1 verso MySQL 5.6 fa apparire questi errori (dovuti al codice sbagliato).
-
Teoricamente dovrebbe funzionare anche con le versioni 5.6. Potresti ricevere dei warning sul fatto che le funzioni siano deprecate, ma puoi inserire:
Codice:
error_reporting(E_ALL ^ E_DEPRECATED);
In ogni caso, purtroppo php5.4 non è più attivabile.
Ciao!
-
Post editato.. Grazie alemoppo
-
Ciao Darbula.
Appena possibile proverò tutti i tuoi preziosi consigli. Se la versione 5.4 non è più attivabile non mi resta che procedere piano piano a modificare tutti i file php.
Ti ringrazio e soprattutto per la lunghezza dei post, in quanto le risposte esaustive fanno capire sicuramente meglio il problema e non saranno mai troppo lunghe ^^
-
Nel cambio da mysql verso mysqli o PDO mantieni la copia originale dei file mysql.. Così puoi tornare indietro..
Presta attenzione che la migrazione verso mysqli se pur simile cambia gli argomenti..
Ad esempio in mysql DB $link è dopo su mysql_select_db mentre è prima in mysqli DB mysqli_select_db
Cmq. prima della migrazione dovresti correggere i tuoi errori..
Prego figurati.. Ciao
-
Sto impazzendo. In questo periodo sono riuscito ad aggiustare solo i primi due file php, me ne mancano tantissimi altri.
Chiedo il vostro aiuto per cercare di risolvere questi due errori che mi restituisce il mio sito, impostato alla versione 7 di php su Altervista.
Fino a pochi giorni fa, quando era ancora selezionabile la versione 5.4 del php, funzionava tutto perfettamente.
Nel momento in cui tento di effettuare l'accesso, la pagina mi va in errore rendendomi i seguenti messaggi (oltre a dirmi che la password è sbagliata):
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /membri/sailorland/login.php on line 15
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /membri/sailorland/login.php on line 55
Ho naturalmente cercato e trovato mille sorgenti di informazioni in rete, e ognuna l'ho testata senza però mai trovare la soluzione corretta per ripristinare il funzionamento e completare l'accesso.
Da quel che ho capito, entrambi si aspettano un valore positivo restituito dalla query, ma da come vi ho detto, fino alla versione 5.4 funzionava bene e adesso non capisco quale sia il problema.
Vi posto la pagina del codice interessata:
Codice PHP:
<? session_start();
error_reporting(E_ALL | E_STRICT);
include ('inc/para.inc.php');
include ('inc/op2.php');
$MySql = "SELECT * FROM BlackList WHERE IP = '".$_SERVER['REMOTE_ADDR']."' AND Granted = 0";
$Login1 = isset($_POST['Login1'])?$_POST['Login1']:'';
$Pass1 = isset($_POST['Pass1'])?$_POST['Pass1']:'';
$Result = mysqli_query($db, "SELECT * FROM BlackList");
if (mysqli_num_rows($Result) == 1) {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="main.css" TYPE="text/css">
<link rel="shortcut icon" href="favicon.ico" />
<?
?>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
if(screen.width == 360 || screen.width == 640){
document.write('<body scroll=no style="background-image: url(img/esilio2_640x360.jpg);">');
}
else{
document.write('<body scroll=no style="background-image: url(img/esilio2_1680x1050.jpg);background-size: 100% 100%;">');
}
</SCRIPT>
<?
echo "<br><center><font color=blue><div style='font-size:14px'><b>Questa postazione è esclusa dal gioco! <br><br>
*****Se pensi che si tratti di un errore*contatta il Gestore</b></font><br><br></div></center>";
$MySql = "INSERT INTO LogErrori (Nome, Errore, DataEvento, IP) VALUES ('".$Login1."', '<Bloccato>', NOW(), '".$_SERVER['REMOTE_ADDR']."')";
mysqli_query($db, $MySql);
exit();
};
$MySql = "SELECT * FROM Personaggio";
$MySql .= " WHERE Nome = '$Login1'";
$MySql .= " AND Pass = '$Pass1'";
$Result = mysqli_query($db, $MySql);
$rs = mysqli_fetch_array($Result, MYSQLI_BOTH);
if ($rs) {
$_SESSION['Login'] = trim($rs['Nome']);
$IDRazza = $rs['IDRazza'];
$IDGilda = $rs['IDGilda'];
$_SESSION['Master'] = $rs['Master'];
$Sesso = strtolower($rs['Sesso']);
$_SESSION['Sesso_S'] = $Sesso;
$_SESSION['Super_S'] = $rs['Super'];
$_SESSION['Admin_S'] = $rs['Admin'];
$Doppio = $rs['Doppio'];
$_SESSION['Pres'] = 'S';
$MySql = "SELECT * FROM Razza WHERE IDRazza = '$IDRazza'";
$Result = mysqli_query($db, $MySql);
$rs = mysqli_fetch_array($Result, MYSQLI_BOTH);
$ImgRazza = $rs['URLImg'];
$DescRazza = $rs['Razza'];
if ($IDGilda != "") {
$MySql = "SELECT * FROM Gilda WHERE IDGilda = '$IDGilda'";
$Result = mysqli_query($db, $MySql);
$rs = mysqli_fetch_array($Result, MYSQLI_BOTH);
$ImgGilda = $rs['URLImg'];
$DescGilda = $rs['Gilda'];
$_SESSION['Oggetti_S'] = $rs['Oggetti'];
$rs['Super'] = isset($_SESSION["Super_S"])?$_SESSION["Super_S"]:'';
$rs['Esilio'] = isset($_SESSION["Esilio_S"])?$_SESSION["Esilio_S"]:'';
$rs['Prigione'] = isset($_SESSION["LogFinanza_S"])?$_SESSION["LogFinanza_S"]:'';
$rs['LogFinanza'] = isset($_SESSION["LogDoppi_S"])?$_SESSION["LogDoppi_S"]:'';
$rs['Gst_AR'] = isset($_SESSION["Gst_AR_S"])?$_SESSION["Gst_AR_S"]:'';
$rs['Gst_Razza'] = isset($_SESSION["Gst_Razza_S"])?$_SESSION["Gst_Razza_S"]:'';
} else {
$ImgGilda = 'nessuno.gif';
$DescGilda = 'Cittadino';
$_SESSION['Oggetti_S'] = 0;
$_SESSION['Super_S'] = 0;
$_SESSION['Esilio_S'] = 0;
$_SESSION['Prigione_S'] = 0;
$_SESSION['LogFinanza_S'] = 0;
$_SESSION['LogDoppi_S'] = 0;
$_SESSION['Gst_AR_S'] = 0;
$_SESSION['Gst_Razza_S'] = 0;
}
$_SESSION['IDGilda_S'] = $IDGilda;
$_SESSION['ImgGilda_S'] = $ImgGilda;
$_SESSION['DescGilda_S'] = $DescGilda;
$_SESSION['IDRazza_S'] = $IDRazza;
$_SESSION['ImgRazza_S'] = $ImgRazza;
$_SESSION['DescRazza_S'] = $DescRazza;
$Doppio = 0 + $Doppio;
$IP = $_SERVER['REMOTE_ADDR'];
$Host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$MySql = 'INSERT INTO LogEntrate (Nome, DataEvento, IP, Host) VALUES (\''.$_SESSION['Login'].'\', NOW(), \''.$_SERVER['REMOTE_ADDR'].'\', \''.$Host.'\')';
$Result = mysqli_query($db, $MySql);
$_COOKIE["lastlogin"] = isset($_COOKIE['lastlogin'])?$_COOKIE['lastlogin']:'';
if (($_COOKIE['lastlogin'] != $_SESSION['Login'])
&&($_COOKIE['lastlogin'] != "")) {
$MySql = 'SELECT COUNT(*) AS NumDoppi FROM Personaggio WHERE (Nome = \''.$_SESSION['Login'].'\'';
$MySql .= ' OR Nome = \''.pars($_COOKIE['lastlogin']).'\')';
$MySql .= ' AND Doppio = \''.$Doppio.'\' AND Doppio > 0';
$Result = mysqli_query($db, $MySql);
$rs = mysqli_fetch_array($Result, MYSQLI_BOTH);
if ((0 + $rs['NumDoppi']) < 2) {
$MySql = 'INSERT INTO LogDoppi (Nome, Doppio, DataEvento, IP, Host) VALUES ';
$MySql .= '(\''.$_SESSION['Login'].'\', \''.pars($_COOKIE['lastlogin']).'\', NOW(), \''.$_SERVER['REMOTE_ADDR'].'\', \''.$Host.'\')';
$Result = mysqli_query($db, $MySql);
};
}
setcookie('lastlogin',$_SESSION['Login'],0,'','',0);
include ('inc/controlloesilio.php');
} else {
$_SESSION['Login'] = '';
if (($Login1 != '') && ($Pass1 != '')) {
$MySql = 'INSERT INTO LogErrori (Nome, Errore, DataEvento, IP) VALUES (\''.$Login1.'\', \''.$Pass1.'\', NOW(), \''.$_SERVER['REMOTE_ADDR'].'\')';
$Result = mysqli_query($db, $MySql);
$MySql = 'SELECT count(*) FROM LogErrori WHERE IP = \''.$_SERVER['REMOTE_ADDR'].'\' AND DATE_ADD(DataEvento, INTERVAL 60 MINUTE) > NOW()';
##### si conteggiano solo i tentativi dell'ultima ora #####
$Result = mysqli_query($db, $MySql);
$rs = mysqli_fetch_array($Result, MYSQLI_BOTH);
if ($rs[0]>10) {
$MySql = 'INSERT INTO BlackList (IP, Nota, Ora, Host) VALUES ';
$MySql .= '(\''.$_SERVER['REMOTE_ADDR'].'\', \''.$Login1.' (tenta password)\', NOW(), \''.gethostbyaddr($_SERVER['REMOTE_ADDR']).'\')';
$Result = mysqli_query($db, $MySql);
}
}
};
include('inc/cambiastanza.php');
$cambiastanzainc = true;
if ($_SESSION['Login'] != '') {
if ($_SESSION['Stanza'] == '') {
cambiastanza(1,$_SESSION['Login']);
};
### Da lanciare prima del controllo esilio ###
$MySqlPersonaggio = "UPDATE Presenti SET ";
$MySqlPersonaggio .= "Pres='$Pres', ";
$MySqlPersonaggio .= "IDRazza='$IDRazza', ";
$MySqlPersonaggio .= "DescRazza='$DescRazza', ";
$MySqlPersonaggio .= "ImgRazza='$ImgRazza', ";
$MySqlPersonaggio .= "Master='".$_SESSION['Master']."', ";
$MySqlPersonaggio .= "Sesso='$Sesso', ";
$MySqlPersonaggio .= "IDGilda='$IDGilda', ";
$MySqlPersonaggio .= "DescGilda='$DescGilda', ";
$MySqlPersonaggio .= "ImgGilda='$ImgGilda', ";
$MySqlPersonaggio .= "LastIP='".$_SERVER['REMOTE_ADDR']."', ";
$MySqlPersonaggio .= "UltimoRefresh=NOW(), ";
$MySqlPersonaggio .= "OraEntrata=NOW(), ";
$MySqlPersonaggio .= "OraUscita='2037-12-31 00:00:00' ";
$MySqlPersonaggio .= "WHERE Nome = '".pars($_SESSION['Login'])."'";
mysqli_query($db, $MySqlPersonaggio);
header("Location: main.php?Dir=1", true);
exit();
} else {
include ("inc/header.html.inc.php");
?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="main.css" TYPE="text/css">
<link rel="shortcut icon" href="favicon.ico" />
<form action="index2_1680x1050.php" target="_top" method="post">
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
if(screen.width == 360 || screen.width == 640){
document.write('<body scroll=no color=gold style="background-image: url(img/login.jpg)">');
}
else
{
document.write('<body scroll=no color=gold style="background-image: url(img/login.jpg);background-size: 100% 100%;">');
}
</SCRIPT>
<div style="font-size:14px">
Utente non riconosciuto, <br>errore nella scrittura del nominativo o della password del proprio <br> personaggio.
<br><br>
Per recuperare la password utilizzate l'apposita sezione <br> posta prima di accedere alla Land o scrivere all'indirizzo E-Mail <br> <A href="mailto:jorgiob@tiscalinet.it?subject=Problemi Recupero Password"><i><?=htmlXspecialchars($par_WebmasterEmail)?></i></A> specificando il nome del vostro personaggio <br> e l'E-Mail di registrazione.<br>
<br>
Fate attenzione a non tentare l'accesso con la password errata <br> troppe volte
o la vostra postazione verrà automaticamente <br> esclusa e vi sarà successivamente
impedito l'accesso al gdr.<br>
<br>Nel caso vogliate riprovare ad accedere cliccate
<font face="French Script MT" size="7"><b>
<input type="submit" value="qui" style=color:gold;background:#222376;font-size:14px></form></b>
</font></div>
<? session_destroy();
}
?>
</body>
Se riuscissi a risolvere questi problemi, magari quelli presenti nelle altre pagine potrebbero essere simili e proseguire così da solo.
Chiedo il vostro aiuto
Grazie
Giorgio
-
Prova a inserire (a scopo di debug) nella riga 14:
Codice PHP:
var_dump($Result);
Stessa cosa tra la 54 e 55.
Ma $db come lo hai inizializzato? Hai utilizzato mysqli_connect()?
Ciao!
-
Precedenza degli errori se si verificano nella stessa condizione... Cioè se la condizione è soddisfatta (vera) eseguo codice livello 1 e codice livello 2 (i due errori che vedi) quindi l'errore è in codice livello 1 e se lo risolvi ti funziona anche in codice livello 2..
Cmq. mysql_query o mysqli_query da false solo se la query è errata.
Ovviamente come ti indica alemoppo è il metodo giusto
Post editato
-
Ciao Alemoppo.
Si, il mysqli_connect() lo si trova nell'include ('inc/op2.php') in 5ª riga dove all'interno troviamo:
Codice PHP:
$db = mysqli_connect("localhost",$par_DbUser,$par_DbPassword) or die("<b>ERRORE DI ACCESSO AI DATI</B><br>L'errore di solito è dovuto a problemi di sovraccarico del server, è temporaneo e sparisce dopo qualche minuto.<br><a href='Javascript:location.reload()'>riprova</a>");
mysqli_select_db($db, $par_SiteName);
Inserendo il comando che mi hai scritto, il sito fornisce il seguente errore:
bool(false)
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /membri/sailorland/login.php on line 15
bool(false)
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /membri/sailorland/login.php on line 56
-
bool(false), significa che c'è qualcosa che non va o nella connessione del db o nella query.
La tabella si chiama "BlackList"? (controlla maiuscole e minuscole).
Vediamo se la connessione al database è avvenuta correttamente; prova a inserire:
Codice PHP:
var_dump($db);
p.s: puoi impostare il nome del database anche nella mysqli_connect() come ultimo parametro.
Ciao!
-
Allora, grazie a entrambi per le risposte ^^
Confermo la correttezza del nome della tabella BlackList
Di seguito l'errore dettagliato in seguito al comando var_dump($db);
bool(false) object(mysqli)#1 (19) { ["affected_rows"]=> int(-1) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: b396954eeb2d1d9ed7902b8bae237b287f21ad9e $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(1046) ["error"]=> string(20) "No database selected" ["error_list"]=> array(1) { [0]=> array(3) { ["errno"]=> int(1046) ["sqlstate"]=> string(5) "3D000" ["error"]=> string(20) "No database selected" } } ["field_count"]=> int(0) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(10) "5.6.33-log" ["server_version"]=> int(50633) ["stat"]=> string(154) "Uptime: 5046907 Threads: 2 Questions: 1608849914 Slow queries: 207 Opens: 4322246 Flush tables: 1 Open tables: 8192 Queries per second avg: 318.779" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(30289190) ["warning_count"]=> int(0) }
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /membri/sailorland/login.php on line 16
bool(false)
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /membri/sailorland/login.php on line 57
Non ho capito invece il post scriptum
-
Poiché utilizzi mysqli_select_db non c'è bisogno di dichiarare il DB come 4 argomento per la funzione mysqli_connect ... post editato e spero di aver trovato la soluzione
PS. In questa funzione devi usare il tuo nome del database che in altervista coincide con my_utentealtervista cioè my_sailorland nel tuo caso specifico
Cos'è la variabile $par_SiteName? Fai var_dump($la_variabile_target) ovviamente dovrai sostituire $la_variabile_target in quelle che vuoi verificare è cioè $par_SiteName appena sotto la funzione mysqli_select_db e lanci solo questo script. (Cioè la posizione http percorso di dove leggi questo script)