Migrazione da PHP4 a PHP5

  • Creatore Discussione Creatore Discussione Levian
  • Data di inizio Data di inizio

Levian

Utente Attivo
30 Set 2008
51
0
0
Ecco il mio problema.

Gestisco una Comunità Online hostata sullo spazio gratuito di altervista, che a breve migrerà da PHP4 a PHP5. Ho provato fin da subito ad abilitare il PHP5, come consigliato, ma nonostante ciò la comunità presenta alcuni bug che non riesco a correggere. In pratica nella compilazione di alcuni semplici form, qualora l'utente inserisce un apostrofo, il messaggio non viene aggiornato/salvato. Questo succede:

- Quando l'utente tenta di aggiornare i dati del suo profilo.
- Quando l'utente tenta di inviare un messaggio nel forum interno.
- Quando l'utente tenta di inviare un messaggio privato.

Ripeto, accade solo quando viene inserito nel testo almeno un apostrofo, altrimenti funziona tutto correttamente.

Incollo il codice delle tre pagine in questione, sperando che possa servire a qualcosa.
 
Pagina dei messaggi privati:

PHP:
<? session_start();
include ("inc/variabile1.php");
include ("inc/variabile2.php");
include ("inc/variabile3.php");
include ("inc/variabile4.php");

if ($_GET['cancella'] != '') {
	$IDCanc = 0 + $_POST['IDCanc'];
	if ($IDCanc >0) {
	    $MySql = "INSERT INTO BakMessaggi SELECT * FROM Messaggi WHERE ID = $IDCanc AND Destinatario = '".pars($Login)."'";
	    mysql_query($MySql);
		$MySql = "DELETE FROM Messaggi WHERE ID = $IDCanc AND Destinatario = '".pars($Login)."'";
		mysql_query($MySql);
		header("Location: comunicazionel.php?p=$p&Ord=$Ord&Max=$Max", false);
	}
}
include ('inc/variabile5.php');
?>
<title>Comunity</title>
</head>
<body bgcolor="fbf4e4">
<div align="center">
  <table border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <tr>
      <td></td>
      <td><div align="center">
  <font face="Verdana" color="#800000"><strong><?= strtoupper(htmlspecialchars($par_MessaggiName)) ?></strong></font></div></td>
      <td></td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
    </tr>
  </table><br><br>
  <?
function formattadata($tim)
{
	return(strftime("%d/%m/%Y %H:%M", strtotime($tim)));
}

if ($_POST['Destinatario'] != '') {

	$Testo = htmlspecialchars($Testo);
	$Testo = str_replace("\n", "<br>", $Testo);

	$IDAllegato = 0 + $_POST['IDAllegato'];

	if ($IDAllegato > 0) {
			
			$MySql = "Select * From Messaggi";
			$MySql .= " Where ID = '$IDAllegato'";
			$MySql .= " AND Destinatario = '".pars($Login)."'";

			$Result = mysql_query($MySql);
			if ($rs = mysql_fetch_array($Result)) {
				$TestoAllegato = htmlspecialchars($par_MessaggiNameSing).' inoltrato da <b>'.htmlspecialchars($rs['Mittente']).'</b>';
				$TestoAllegato .=' il '.formattadata($rs['Spedito']).':<br>';
				$TestoAllegato .= addslashes($rs['Testo']);
				$TestoAllegato = str_replace('', '', $TestoAllegato);
				$TestoAllegato = str_replace('', '', $TestoAllegato);
			} else {
				$TestoAllegato = '<b>Allegato non presente.</b>';
			}
			$rs->close;
			mysql_free_result($Result);
			$Testo .= '<br><br>'.$TestoAllegato.'';
	}
	
	
	if (($_SESSION['IDGilda_S']%100 == 0) && (0 + $_SESSION['IDGilda_S'] > 0)) {
		$Dest = explode(',', $_POST['Destinatario']);
	} else {
		$Dest[0] = $_POST['Destinatario'];
	}
	for ($i = 0; $i <= count($Dest)-1; $i++) {
		$Destinatario = trim($Dest[$i]);
		$MySql = "SELECT Nome FROM Personaggio WHERE Nome = '$Destinatario'";
		$Result = mysql_query($MySql);
		$rs = mysql_fetch_array($Result);
		$Esiste = (!(!$rs));
		$rs->close;
		mysql_free_result($Result);
		$Certified = 0;
		if ($Esiste) {

			$MySql = "INSERT Into Messaggi (Mittente, Destinatario, Testo, Spedito) VALUES ('$Login', '$Destinatario', '$Testo', NOW())";
			mysql_query($MySql);

			$Certified = mysql_affected_rows();
			
			$IDCanc = 0 + $IDCanc;
			if (($IDCanc != "") && ($i==count($Dest)-1)) {
				$MySql = "INSERT INTO BakMessaggi SELECT * FROM Messaggi WHERE ID = $IDCanc AND Destinatario = '".pars($Login)."'";
				mysql_query($MySql);
				$MySql = "DELETE From Messaggi WHERE ID = $IDCanc AND Destinatario = '".pars($Login)."'";
				mysql_query($MySql);
	    	}
?>
  <table border=0 width="400">
    <? if($Certified == 1) { ?>
    <tr><td><div align="center"><?= htmlspecialchars($par_MessaggiNameSing) ?>:<br>
<?= stripslashes($Testo) ?><br><br>
<strong>Spedito Correttamente.</strong></div></td></tr>
    <? } else { ?>
    <tr><td><div align="center">Crash Del Sistema: 
          <?= strtoupper(htmlspecialchars($par_MessaggiNameSing)) ?> 
             
          <?= htmlspecialchars(stripslashes($Destinatario)) ?>
    </div></td></tr>
    <tr><td><?= strftime("%d/%m/%Y %H:%M:%S") ?>
    <div align="center"></div></td></tr>
    <tr><td><?= $Testo ?>
    <div align="center"></div></td></tr>
    <? } ?>
  </table>
  <br>
  <?		} else { ?>
  Destinatario 
  '<?= htmlspecialchars($Destinatario) ?>' 
  non presente.<br>
  <?
		}
	}
} else { ?>
</div>
<form action="comunicazioneavviatal.php" method="post">
  <table width="558" height="353" border="0" align="center">
    <tr>
      <td width="418"><div align="center">Destinatario
            <?
if (($_SESSION['IDGilda_S']%100 == 0) && (0 + $_SESSION['IDGilda_S'] > 0)) {
	echo '[Power]';
}
?><br>
            <input type="text" size="20" name="Destinatario" value="<?= $Dest ?>">
            <br><br>Comunicazione<br>
            <textarea name="Testo" rows="3" cols="35"></textarea>    
          <br>
              
      </div></td>
      <td width="130">
        <div align="left">
          <input type="submit" value="Spedisci" Style="font-weight:bold;font-family:Verdana;font-size:8pt"> 
      </div></td></tr>
      <?
if ($_POST['allega'] != '') {
	
	$MySql = "Select * From Messaggi";
	$MySql .= " Where ID = '".$_POST['IDCanc']."'";
	$MySql .= " AND Destinatario = '".pars($Login)."'";

	$Result = mysql_query($MySql);
	if($rs = mysql_fetch_array($Result)) {
	?>	<input type=hidden name=IDAllegato value="<?= $_POST['IDCanc'] ?>">
          <td><div align="center"></div></td>
          </tr> <?
	}
	$rs->close;
	mysql_free_result($Result);
}
?>
    </table>
    <? if (($_GET['cancella'] != '') || ($_GET['cancellaerispondi'] != '')) { ?>
    <input type=hidden name="IDCanc" value="<?= $_POST['IDCanc'] ?>">
    <? } ?>
    <input type=hidden name="p" value="<?= $_POST['p'] ?>">
    <input type=hidden name="Ord" value="<?= $_POST['Ord'] ?>">
    <input type=hidden name="Max" value="<?= $_POST['Max'] ?>">
  </div>
</form>
  <div align="center">
  <? } ?>
  </div>
  </div>
</body>
</html>
 
Pagina dove si aggiorna il profilo:


PHP:
<? session_start();
include ('inc/variabile1.php');
include ('inc/variabile2.php');
include ('inc/variabile3.php');
$pg = trim($pg);
$Modifica = trim($Login);
$upd = ((strtoupper($pg) == strtoupper($Login)) and (trim($pg) != "") and (strtoupper($Modifica) == strtoupper($pg)));

function barra($valore, $maxvalore)
{
$colore = "black";
$colore1 = "black";

$bar = '<table cellpadding=0 cellspacing=0 border=0 width="'.$valore.'" height=10>';
$bar .= '<tr><td align=right bgcolor="'.$colore.'" width=';
if ($valore > 100) {
    $bar .= '100><font color=black>+</font>';
}
else
{
    $bar .= $valore.'><img src=\'LINK\' width='.$valore.' height=1>';
};
$bar .= "</td>";
if (($maxvalore - $valore) > 0) {
$bar .= '<td align=right bgcolor="'.$colore1.'" width=';
$bar .= ($maxvalore - $valore).'><img src=\'LINK\' width='.($maxvalore-$valore).' height=1>';
$bar .= "</td>";
};
$bar .= "</tr>";
$bar .= "</table>\n";
return $bar;
};
$MySql = "SELECT Personaggio.*, Razza.Razza, Razza.URLImg AS URLImgRazza, Gilda.Gilda, Gilda.URLImg AS URLImgGilda
         FROM Personaggio
         LEFT JOIN Razza
         ON Personaggio.IDRazza = Razza.IDRazza
         LEFT JOIN Gilda
         ON Personaggio.IDGilda = Gilda.IDGilda
         WHERE Nome = '".pars($pg)."'";
$result = mysql_query($MySql);
$rs = mysql_fetch_array($result);

if ((trim($pg) == "") or !($rs)) {
   $rs->close;
   mysql_close;
   echo("<script><!--\nhistory.back();\n//-->\n</script>");
   exit();
};
    #########################################
    # Il Recordset non è vuoto              #
    #########################################

$UrlImg = trim($rs["URLImg"]);
If ($UrlImg == "")
   $UrlImg = "img/sagoma".$rs["Sesso"].".gif";
$UrlImgRazza = trim($rs["URLImgRazza"]);
If ($UrlImgRazza == "")
   $UrlImgRazza = "spacer.gif";
$UrlImgGilda = trim($rs["URLImgGilda"]);
If ($UrlImgGilda == "")
   $UrlImgGilda = "niente.gif";
   
$Gilda = trim($rs["Gilda"]);
if ($Gilda == "") {
	if (strtolower($rs["Sesso"]) == "f") {
		$Gilda = "Cittadino";
	} else {
		$Gilda = "Cittadino";
	}
}
include ('inc/variabile4.php');
?>
<html>
<head>
<title>Comunity</title>
<style type="text/css">
<!--
.Stile7 {font-size: 9}
body,td,th {
	color: #000000;
	font-weight: Bold;
	font-family: Verdana;
	font-size: 9px;
}
a:link {
	color: #000000;
	text-decoration: none;
}
a:visited {
	text-decoration: none;
	color: #000000;
}
a:hover {
	text-decoration: none;
	color: #000000;
}
a:active {
	text-decoration: none;
	color: #000000;
}
.style1 {font-size: 16px}
-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body bgcolor="fbf4e4">    
<div align="center"></div>
    <div style="position: absolute; width: 510px; height: 453px; z-index: 1; left: 51px; top: 61px; overflow: auto">
<table border="1" cellspacing="0" cellpadding="2" width="100%">
<? if ($upd) { ?>
<form action="profilol.php" method="POST">
<input type="hidden" name="pg" value="<?= urlencode($pg) ?>">
<tr>
	<td width=100><div align="center"><strong><font size="2" face="Verdana"><strong>Pass</strong></font></strong></div></td>
	<td><div align="center"><input type="pass" name="pass" maxlength="50" value="<?= htmlspecialchars($rs["Pass"]) ?>" size=55></div></td>
</tr>
<tr>
	<td width=100><div align="center"><font size="2" face="Verdana"><strong>Storia</strong></font></div></td><td><div align="center"><?
	if ((trim($rs["Background"]) == "") && !($upd)) {
		echo "Nessuna Informazione.";
	} else {
		if ($upd) {
			echo "<textarea cols=40 rows=20 name=\"background\">".htmlspecialchars($rs["Background"])."</textarea>";
		} else {
			echo htmlspecialchars($rs["Background"]);
		}	
	} ?></div></td>
</tr>
<tr>
<tr>
	<td><div align="center"><font size="2" face="Verdana"><strong>Aspetto</strong></font></div></td><td colspan="3"><div align="center"><input type="text" name="urlimg" maxlength="255" value="<?= htmlspecialchars($rs["URLImg"]) ?>" size=55></div></td>
</tr>
<tr>
	<td colspan="4"><div align="center"><input type="Submit" Style="font-weight:bold;font-family:Verdana;font-size:8pt" value="Aggiorna"></div></td>
</tr>
</form>
<? } ?></table>
<? $rs->close;
 ?>
</div>
    <div style="position: absolute; width: 260px; height: 180px; z-index: 1; left: 578px; top: 208px; overflow: auto">
      <div align="center">
        <table width="200" border="1" align="center">
          <tr>
            <td width="100" align="center"><div align="center"><a href="profilol.php?pg=<?= urlencode($pg) ?>"><strong><font face="Verdana"><strong><font size="5">Profilo</font></strong></font></strong></a></div></td>
          </tr>
          <tr>
            <td width="100" align="center"><div align="center"><a href="profilo2l.php?pg=<?= urlencode($pg) ?>"><strong><font face="Verdana"><strong><font size="5">Proprietà</font></strong></font></strong></a></div></td>
          </tr>
          <tr>
            <td width="100" align="center"><div align="center">
                <?
if (isset($Login)) {
   if ($Login == $pg) {
      echo('<a href="profilo3l.php?pg='.urlencode($pg).'"><font size="5">Aggiorna</font></a></td>');
   }
};
 ?>
              </div>
          </tr>
        </table>
      </div>
</div>
</body>
</html>
 
Pagina per inviare messaggi nel forum interno della comunità:



PHP:
<? session_start();
include ('inc/variabile1.php');
include ('inc/variabile2.php');
include ('inc/variabile3.php');

$IDAraldo = $ID;
$IDMsgPadre = 0 + $IDMsgPadre;

if ($IDAraldo == ""){ ?>
    Crash Del Sistema.
<?  exit();
};

$MySql = "SELECT * FROM Araldo WHERE IDAraldo = ".$IDAraldo;
$Result = mysql_query($MySql);
$rs = mysql_fetch_array($Result);

    If (($Master_Araldo== 1) && ($Master < 1) ) {
        echo '';
        exit();
    }
    If ((($Capo==1) && ($Master_Araldo != 1)) && ($Master != 2))
{
        echo '';
        exit();
    }
    If ((($Capo!=1) && ($Master_Araldo == 1)) && ($Master != 1))
{
        echo '';
        exit();
    }
    If (($Gilda==1) && (0 + $IDGilda_S -100 < 0)) {
        echo '';
        exit();
    }

    If (($Razza==1) && (((0 + $IDRazza_S) % 1000) -10 < 0)) {
	    echo '';
    	exit();
    }
    
    If (($CapoRazza==1) && ((((0 + $IDRazza_S) % 10) != 0) || (((0 + $IDRazza_S) % 1000) == 0))) {
        echo '';
        exit();
    }


$Punti = $rs['Punti'];

include ('inc/variabile4.php');
?>
<title>Comunity</title>
<style type="text/css">
<!--
body,td,th {
	color: #000000;
}
a:link {
	color: #000000;
	text-decoration: none;
}
a:visited {
	text-decoration: none;
	color: #000000;
}
a:hover {
	text-decoration: none;
	color: #000000;
}
a:active {
	text-decoration: none;
	color: #000000;
}
-->
</style></head>
<body bgcolor="fbf4e4">
<p align="center">&nbsp;</p>
<table border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="20" height="20"></td>
    <td width="600" height="20"></td>
    <td width="20" height="20"></td>
  </tr>
  <tr>
    <td width="20"></td>
    <td>
<table cellpadding=2 cellspacing=0 border=0 width="100%"><tr>
    <td colspan=3 align=center><font face="Verdana" color="#800000"><strong><?= htmlspecialchars($rs["Descrizione"]) ?></strong></font><br>
    <? if ($rs["Master"]==1) { ?>
    <? } elseif ($rs["Capo"] == 1) { ?>
<? };
    $rs->close;
    
    if ($op == "modifica") {
        $MySql = "SELECT * FROM MessaggioAraldo WHERE IDMessaggio = '$IDMsg' AND IDAraldo = '$IDAraldo'";
        if ($Ban_S != '1') {
        	$MySql .= " AND Autore = '".pars($Login)."'";
        }
        $Result = mysql_query($MySql);
		$rs = mysql_fetch_array($Result);
        $Titolo = $rs["Titolo"];
        $Messaggio = $rs["Messaggio"];
		$Tag = $rs["Tag"];
        $rs->close;
    }
    if ($IDMsgPadre > 0) {
        $MySql = "SELECT * FROM MessaggioAraldo WHERE IDMessaggio = '$IDMsgPadre'";
        $Result = mysql_query($MySql);
		$rs = mysql_fetch_array($Result);
        $TitoloPadre = $rs["Titolo"];
        $AutorePadre = $rs["Autore"];
        $rs->close;
    } ?></td>
</tr>
</table></td>
    <td width="20"></td>
  </tr>
  <tr>
    <td width="20" height="20"></td>
    <td height="20"></td>
    <td width="20" height="20"></td>
  </tr>
</table>
<br>
<center>
<table border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="20" height="20"></td>
    <td width="600" height="20"></td>
    <td width="20" height="20"></td>
  </tr>
  <tr>
    <td width="20"></td>
    <td>
<table border=0 align="center" cellpadding=2 cellspacing=0>
<tr>
    <form action="datiinternil.php" method=Post>
    <input type=hidden name=ID value="<?= $IDAraldo ?>">
    <input type=hidden name=p value="<?= $p ?>">
    <input type=hidden name=IDMsg value="<?= $IDMsg ?>">
    <input type=hidden name=IDMsgPadre value="<?= $IDMsgPadre ?>">
</tr>
<?	if ($IDMsgPadre > 0) {	?>
<tr><input type=hidden size=50 name=Titolo value="<?= htmlspecialchars($TitoloPadre) ?>">
	<td align=center valign=top>Oggetto: <b><?= htmlspecialchars($TitoloPadre) ?></b><br>
	  Autore: <b><?= htmlspecialchars($AutorePadre) ?></b></td>
</tr>
<?	}	else { ?>
<tr>
<td align=center valign=top>
	<select name="Tag" id="Tag">
<option value="<?=$Tag?>" selected>Tag Attuale: <?=$Tag?></option>
    <option value="[Aiuto]">Aiuto</option>
    <option value="[Altro]">Altro</option>
	<option value="[Info]">Info</option>
    </select></td>
</tr> 
<tr>
    <td align=center> 

       <input type=text size=50 name=Titolo value="<?= htmlspecialchars($Titolo) ?>"></td>
</tr><?	}	?>   
<tr>
    <td align=center><textarea cols=40 rows=10 name=Messaggio><?= htmlspecialchars($Messaggio) ?></textarea>   </td>
</tr>
<tr>
    <td></td>
</tr>
<? if ($Punti == '1') {
	$MySql = "SELECT * FROM Punti WHERE IDMessaggioAraldo = '$IDMsg'";
    $Result = mysql_query($MySql);
	
	for ($i = 1; $i <= 20; $i++) {
		$rs = mysql_fetch_array($Result);
		echo '<tr><td>';
		echo "<input name=Nome$i value='".$rs['Nome']."'><select name=Esperienza$i>";
			for ($j = -10; $j <= 20; $j++) {
				echo '<option value=\''.($j/2).'\'';
				if (($rs['Esperienza']==($j/2)) || ((''.$rs['Nome']=='') && ($j == 0))) {
					echo ' SELECTED';
				}
				echo '>'.($j/2).'</option>';
			}
		echo '</select>';
		echo '</td></tr>';
	}
	$rs->close;
} ?>
<tr>
    <td align=center><div align="center">
      <input type="submit" value="Aggiorna" Style="font-weight:bold;font-family:Verdana;font-size:8pt">
    </div></td>
    </form>
</tr>
</table></td>
    <td width="20"></td>
  </tr>
  <tr>
    <td width="20" height="20"></td>
    <td height="20"></td>
    <td width="20" height="20"></td>
  </tr>
</table>
</body>
</html>
 
E' probabile che il problema sia il mancato escaping dell'apostrofo. In effetti usi la addslashes solo in questo punto:

PHP:
$TestoAllegato .= addslashes($rs['Testo']);

(almeno per quanto riguarda il primo file). L'uso di htmlspecialchars non è sufficiente come in questo caso:

PHP:
$Testo = htmlspecialchars($Testo);

perchè chiamata in questo modo non effettua l'escaping degli apici singoli, ma solo dei doppi. Si dovrebbe usare il parametro ENT_QUOTES.
 
Mh, quindi mi consigli di fare una cosa simile?

PHP:
$Testo = htmlspecialchars($Testo, ENT_QUOTES);

Se sono un pò tardo scusami tanto. ^^


Riguardo alla prima parte che mi hai evidenziato, stai dicendo che è inopportuno usare l'addslashes?
 
No assolutamente, anzi forse sarebbe il caso di usarla di più!

Probabilmente con PHP 4 il codice non ti dava problemi perchè era attiva la direttiva magic_quotes_gpc, che ti effettuava automaticamente l'escaping degli apici per le variabili passate tramite GET o POST.
Ma visto che l'utilizzo di questa direttiva è deprecato e verrà rimossa, è molto probabile che nella configurazione con PHP5 sia stata disabilitata.
Per sincerartene prova a fare uno script tipo questo:

PHP:
<?php
if( get_magic_quotes_gpc() == 1) {
 echo 'magic_quotes_gpc is enabled.';
} else {
 echo 'magic_quotes_gpc is disabled.';
}
?>

Nel caso sia disabilitata è opportuno che tutte le variabili utilizzate da query di inserimento o update, vengano prima passate sotto alla addslashes
 
Ok, grazie mille per i suggerimenti e la disponibilità all'ascolto/aiuto. ^^

Stasera faccio lo script e controllo, poi farò sapere.
 
Ho fatto la prova ed hai ragione.
Con PHP4: magic_quotes_gpc is enabled.
Con PHP5 invece: magic_quotes_gpc is disabled.

Se modifico le variabili in addslashes dovrei risolvere il problema degli apostrofi o potrebbero insorgere complicazioni?

Inoltre hai detto che bisogna modificare "tutte le variabili utilizzate da query di inserimento o update", se sbaglio e uso l'addslashes per variabili che non rientrano in tale categoria? Non vorrei compromettere il codice. Saresti così gentile da compilarmi, secondo la tua logica, almeno uno dei tre file che ho incollato? Negli altri due vedrò di cavarmela da solo, dato che credo di aver già disturbato abbastanza. ^^'

Grazie mille.
 
Prova un po' col codice modificato così. Non potendolo provare è anche possibile che non sia corretto, ma il senso delle modifiche è quello...
In più aggiungerei anche qualche controllo di validazione sulle variabili che ti arrivano tramite GET e POST, ad esempio per sincerarmi che $_POST['IDCanc'] sia affettivamente un intero prima di utilizzarlo come tale!

PHP:
<? session_start();
include ("inc/variabile1.php");
include ("inc/variabile2.php");
include ("inc/variabile3.php");
include ("inc/variabile4.php");

if ($_GET['cancella'] != '') {
    $IDCanc = 0 + $_POST['IDCanc'];
    if ($IDCanc >0) {
        // L'aggiunta di addslashes qui sotto potrebbe essere ridondante, se fosse per caso gia presente nella funzione "pars(...)"
        // Lo stesso vale per tutte le volte che viene usata questa funzione. Se comprende gia addslashes e inutile (se non deleterio)
        // applicarla una seconda volta
        $MySql = "INSERT INTO BakMessaggi SELECT * FROM Messaggi WHERE ID = $IDCanc AND Destinatario = '".addslashes(pars($Login))."'";
        mysql_query($MySql);
        $MySql = "DELETE FROM Messaggi WHERE ID = $IDCanc AND Destinatario = '".addslashes(pars($Login))."'";
        mysql_query($MySql);
        header("Location: comunicazionel.php?p=$p&Ord=$Ord&Max=$Max", false);
    }
}
include ('inc/variabile5.php');
?>
<title>Comunity</title>
</head>
<body bgcolor="fbf4e4">
<div align="center">
  <table border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <tr>
      <td></td>
      <td><div align="center">
  <font face="Verdana" color="#800000"><strong><?= strtoupper(htmlspecialchars($par_MessaggiName)) ?></strong></font></div></td>
      <td></td>
    </tr>
    <tr>
      <td></td>
      <td></td>
      <td></td>
    </tr>
  </table><br><br>
  <?
function formattadata($tim)
{
    return(strftime("%d/%m/%Y %H:%M", strtotime($tim)));
}

if ($_POST['Destinatario'] != '') {

    $Testo = htmlspecialchars($Testo);
    $Testo = str_replace("\n", "<br>", $Testo);

    $IDAllegato = 0 + $_POST['IDAllegato'];

    if ($IDAllegato > 0) {
            
            $MySql = "Select * From Messaggi";
            $MySql .= " Where ID = '$IDAllegato'";
            $MySql .= " AND Destinatario = '".addslashes(pars($Login))."'";

            $Result = mysql_query($MySql);
            if ($rs = mysql_fetch_array($Result)) {
                $TestoAllegato = htmlspecialchars($par_MessaggiNameSing).' inoltrato da <b>'.htmlspecialchars($rs['Mittente']).'</b>';
                $TestoAllegato .=' il '.formattadata($rs['Spedito']).':<br>';
                $TestoAllegato .= $rs['Testo'];
                $TestoAllegato = str_replace('', '', $TestoAllegato);
                $TestoAllegato = str_replace('', '', $TestoAllegato);
            } else {
                $TestoAllegato = '<b>Allegato non presente.</b>';
            }
            $rs->close;
            mysql_free_result($Result);
            $Testo .= '<br><br>'.$TestoAllegato.'';
    }
    
    
    if (($_SESSION['IDGilda_S']%100 == 0) && (0 + $_SESSION['IDGilda_S'] > 0)) {
        $Dest = explode(',', $_POST['Destinatario']);
    } else {
        $Dest[0] = $_POST['Destinatario'];
    }
    for ($i = 0; $i <= count($Dest)-1; $i++) {
        $Destinatario = trim($Dest[$i]);
        $MySql = "SELECT Nome FROM Personaggio WHERE Nome = '" . addslashes($Destinatario) . "'";
        $Result = mysql_query($MySql);
        $rs = mysql_fetch_array($Result);
        $Esiste = (!(!$rs));
        $rs->close;
        mysql_free_result($Result);
        $Certified = 0;
        if ($Esiste) {

            $MySql = "INSERT Into Messaggi (Mittente, Destinatario, Testo, Spedito) VALUES ('" . addslashes($Login) . "', '" . addslashes($Destinatario) . "', '" . addslashes($Testo) . "', NOW())";
            mysql_query($MySql);

            $Certified = mysql_affected_rows();
            
            $IDCanc = 0 + $IDCanc;
            if (($IDCanc != "") && ($i==count($Dest)-1)) {
                $MySql = "INSERT INTO BakMessaggi SELECT * FROM Messaggi WHERE ID = $IDCanc AND Destinatario = '".addslashes(pars($Login))."'";
                mysql_query($MySql);
                $MySql = "DELETE From Messaggi WHERE ID = $IDCanc AND Destinatario = '".addslashes(pars($Login))."'";
                mysql_query($MySql);
            }
?>
  <table border=0 width="400">
    <? if($Certified == 1) { ?>
    <tr><td><div align="center"><?= htmlspecialchars($par_MessaggiNameSing) ?>:<br>
<?= stripslashes($Testo) ?><br><br>
<strong>Spedito Correttamente.</strong></div></td></tr>
    <? } else { ?>
    <tr><td><div align="center">Crash Del Sistema: 
          <?= strtoupper(htmlspecialchars($par_MessaggiNameSing)) ?> 
             
          <?= htmlspecialchars(stripslashes($Destinatario)) ?>
    </div></td></tr>
    <tr><td><?= strftime("%d/%m/%Y %H:%M:%S") ?>
    <div align="center"></div></td></tr>
    <tr><td><?= $Testo ?>
    <div align="center"></div></td></tr>
    <? } ?>
  </table>
  <br>
  <?        } else { ?>
  Destinatario 
  '<?= htmlspecialchars($Destinatario) ?>' 
  non presente.<br>
  <?
        }
    }
} else { ?>
</div>
<form action="comunicazioneavviatal.php" method="post">
  <table width="558" height="353" border="0" align="center">
    <tr>
      <td width="418"><div align="center">Destinatario
            <?
if (($_SESSION['IDGilda_S']%100 == 0) && (0 + $_SESSION['IDGilda_S'] > 0)) {
    echo '[Power]';
}
?><br>
            <input type="text" size="20" name="Destinatario" value="<?= $Dest ?>">
            <br><br>Comunicazione<br>
            <textarea name="Testo" rows="3" cols="35"></textarea>    
          <br>
              
      </div></td>
      <td width="130">
        <div align="left">
          <input type="submit" value="Spedisci" Style="font-weight:bold;font-family:Verdana;font-size:8pt"> 
      </div></td></tr>
      <?
if ($_POST['allega'] != '') {
    
    $MySql = "Select * From Messaggi";
    $MySql .= " Where ID = '".$_POST['IDCanc']."'";
    $MySql .= " AND Destinatario = '".addslashes(pars($Login))."'";

    $Result = mysql_query($MySql);
    if($rs = mysql_fetch_array($Result)) {
    ?>    <input type=hidden name=IDAllegato value="<?= $_POST['IDCanc'] ?>">
          <td><div align="center"></div></td>
          </tr> <?
    }
    $rs->close;
    mysql_free_result($Result);
}
?>
    </table>
    <? if (($_GET['cancella'] != '') || ($_GET['cancellaerispondi'] != '')) { ?>
    <input type=hidden name="IDCanc" value="<?= $_POST['IDCanc'] ?>">
    <? } ?>
    <input type=hidden name="p" value="<?= $_POST['p'] ?>">
    <input type=hidden name="Ord" value="<?= $_POST['Ord'] ?>">
    <input type=hidden name="Max" value="<?= $_POST['Max'] ?>">
  </div>
</form>
  <div align="center">
  <? } ?>
  </div>
  </div>
</body>
</html>
 
Sì, così funziona. Io e la mia Comunità ti ringraziamo dal profondo del cuore per il tuo aiuto. *_*

Adesso mi metto a sistemare le altre due pagine, sperando di non fare casini. ^^'
 
Ho provato a sistemare il codice del terzo file in questo modo:

PHP:
<? session_start();
include ('inc/variabile1.php');
include ('inc/variabile2.php');
include ('inc/variabile3.php');

$IDAraldo = $ID;
$IDMsgPadre = 0 + $IDMsgPadre;

if ($IDAraldo == ""){ ?>
    Crash Del Sistema.
<?  exit();
};

$MySql = "SELECT * FROM Araldo WHERE IDAraldo = '".addslashes(pars($IDAraldo))."'";
$Result = mysql_query($MySql);
$rs = mysql_fetch_array($Result);

    If (($Master_Araldo== 1) && ($Master < 1) ) {
        echo '';
        exit();
    }
    If ((($Capo==1) && ($Master_Araldo != 1)) && ($Master != 2))
{
        echo '';
        exit();
    }
    If ((($Capo!=1) && ($Master_Araldo == 1)) && ($Master != 1))
{
        echo '';
        exit();
    }
    If (($Gilda==1) && (0 + $IDGilda_S -100 < 0)) {
        echo '';
        exit();
    }

    If (($Razza==1) && (((0 + $IDRazza_S) % 1000) -10 < 0)) {
        echo '';
        exit();
    }
    
    If (($CapoRazza==1) && ((((0 + $IDRazza_S) % 10) != 0) || (((0 + $IDRazza_S) % 1000) == 0))) {
        echo '';
        exit();
    }


$Punti = $rs['Punti'];

include ('inc/variabile4.php');
?>
<title>Comunity</title>
<style type="text/css">
<!--
body,td,th {
    color: #000000;
}
a:link {
    color: #000000;
    text-decoration: none;
}
a:visited {
    text-decoration: none;
    color: #000000;
}
a:hover {
    text-decoration: none;
    color: #000000;
}
a:active {
    text-decoration: none;
    color: #000000;
}
-->
</style></head>
<body bgcolor="fbf4e4">
<p align="center">&nbsp;</p>
<table border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="20" height="20"></td>
    <td width="600" height="20"></td>
    <td width="20" height="20"></td>
  </tr>
  <tr>
    <td width="20"></td>
    <td>
<table cellpadding=2 cellspacing=0 border=0 width="100%"><tr>
    <td colspan=3 align=center><font face="Verdana" color="#800000"><strong><?= htmlspecialchars($rs["Descrizione"]) ?></strong></font><br>
    <? if ($rs["Master"]==1) { ?>
    <? } elseif ($rs["Capo"] == 1) { ?>
<? };
    $rs->close;
    
    if ($op == "modifica") {
        $MySql = "SELECT * FROM MessaggioAraldo WHERE IDMessaggio = '$IDMsg' AND IDAraldo = '".addslashes(pars($IDAraldo))."'";
        if ($Ban_S != '1') {
            $MySql .= " AND Autore = '".addslashes(pars($Login))."'";
        }
        $Result = mysql_query($MySql);
        $rs = mysql_fetch_array($Result);
        $Titolo = $rs["Titolo"];
        $Messaggio = $rs["Messaggio"];
        $Tag = $rs["Tag"];
        $rs->close;
    }
    if ($IDMsgPadre > 0) {
        $MySql = "SELECT * FROM MessaggioAraldo WHERE IDMessaggio = '".addslashes(pars($IDMsgPadre))."'";
        $Result = mysql_query($MySql);
        $rs = mysql_fetch_array($Result);
        $TitoloPadre = $rs["Titolo"];
        $AutorePadre = $rs["Autore"];
        $rs->close;
    } ?></td>
</tr>
</table></td>
    <td width="20"></td>
  </tr>
  <tr>
    <td width="20" height="20"></td>
    <td height="20"></td>
    <td width="20" height="20"></td>
  </tr>
</table>
<br>
<center>
<table border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="20" height="20"></td>
    <td width="600" height="20"></td>
    <td width="20" height="20"></td>
  </tr>
  <tr>
    <td width="20"></td>
    <td>
<table border=0 align="center" cellpadding=2 cellspacing=0>
<tr>
    <form action="datiinternil.php" method=Post>
    <input type=hidden name=ID value="<?= $IDAraldo ?>">
    <input type=hidden name=p value="<?= $p ?>">
    <input type=hidden name=IDMsg value="<?= $IDMsg ?>">
    <input type=hidden name=IDMsgPadre value="<?= $IDMsgPadre ?>">
</tr>
<?    if ($IDMsgPadre > 0) {    ?>
<tr><input type=hidden size=50 name=Titolo value="<?= htmlspecialchars($TitoloPadre) ?>">
    <td align=center valign=top>Oggetto: <b><?= htmlspecialchars($TitoloPadre) ?></b><br>
      Autore: <b><?= htmlspecialchars($AutorePadre) ?></b></td>
</tr>
<?    }    else { ?>
<tr>
<td align=center valign=top>
    <select name="Tag" id="Tag">
<option value="<?=$Tag?>" selected>Tag Attuale: <?=$Tag?></option>
    <option value="[Aiuto]">Aiuto</option>
    <option value="[Altro]">Altro</option>
    <option value="[Info]">Info</option>
    </select></td>
</tr> 
<tr>
    <td align=center> 

       <input type=text size=50 name=Titolo value="<?= htmlspecialchars($Titolo) ?>"></td>
</tr><?    }    ?>   
<tr>
    <td align=center><textarea cols=40 rows=10 name=Messaggio><?= htmlspecialchars($Messaggio) ?></textarea>   </td>
</tr>
<tr>
    <td></td>
</tr>
<? if ($Punti == '1') {
    $MySql = "SELECT * FROM Punti WHERE IDMessaggioAraldo = '$IDMsg'";
    $Result = mysql_query($MySql);
    
    for ($i = 1; $i <= 20; $i++) {
        $rs = mysql_fetch_array($Result);
        echo '<tr><td>';
        echo "<input name=Nome$i value='".$rs['Nome']."'><select name=Esperienza$i>";
            for ($j = -10; $j <= 20; $j++) {
                echo '<option value=\''.($j/2).'\'';
                if (($rs['Esperienza']==($j/2)) || ((''.$rs['Nome']=='') && ($j == 0))) {
                    echo ' SELECTED';
                }
                echo '>'.($j/2).'</option>';
            }
        echo '</select>';
        echo '</td></tr>';
    }
    $rs->close;
} ?>
<tr>
    <td align=center><div align="center">
      <input type="submit" value="Aggiorna" Style="font-weight:bold;font-family:Verdana;font-size:8pt">
    </div></td>
    </form>
</tr>
</table></td>
    <td width="20"></td>
  </tr>
  <tr>
    <td width="20" height="20"></td>
    <td height="20"></td>
    <td width="20" height="20"></td>
  </tr>
</table>
</body>
</html>

Il problema è che.. non funziona (o meglio, continua a non andare l'invio dei thread). Dove sbaglio? T_T
 
Cominciamo dall'inizio:

PHP:
$IDAraldo = $ID;

La variabile $ID, da dove arriva? Da questa form?
Codice:
    <form action="datiinternil.php" method=Post>
    <input type=hidden name=ID value="<?= $IDAraldo ?>">
    <input type=hidden name=p value="<?= $p ?>">
    <input type=hidden name=IDMsg value="<?= $IDMsg ?>">
    <input type=hidden name=IDMsgPadre value="<?= $IDMsgPadre ?>">

Prova in questo modo:

PHP:
$IDAraldo = $_POST['ID'];

Lo stesso dicasi per tutte le variabili passate tramite GET o POST...
E' probabile che anche la direttiva register_globals sia disattivata
come per la magic_quotes_gpc
 
Sì, da quel form.



Ho provato a sistemare in questo modo ma non è servito a niente (forse dimentico qualcosa di importante?):

PHP:
<? session_start();
include ('inc/variabile1.php');
include ('inc/variabile2.php');
include ('inc/variabile3.php');

$IDAraldo = $_POST['ID'];
$IDMsgPadre = $_POST['0 + $IDMsgPadre'];

if ($IDAraldo == ""){ ?>
    Crash Del Sistema.
<?  exit();
};

$MySql = "SELECT * FROM Araldo WHERE IDAraldo = '".addslashes(pars($IDAraldo))."'";
$Result = mysql_query($MySql);
$rs = mysql_fetch_array($Result);

    If (($Master_Araldo== 1) && ($Master < 1) ) {
        echo '';
        exit();
    }
    If ((($Capo==1) && ($Master_Araldo != 1)) && ($Master != 2))
{
        echo '';
        exit();
    }
    If ((($Capo!=1) && ($Master_Araldo == 1)) && ($Master != 1))
{
        echo '';
        exit();
    }
    If (($Gilda==1) && (0 + $IDGilda_S -100 < 0)) {
        echo '';
        exit();
    }

    If (($Razza==1) && (((0 + $IDRazza_S) % 1000) -10 < 0)) {
        echo '';
        exit();
    }
    
    If (($CapoRazza==1) && ((((0 + $IDRazza_S) % 10) != 0) || (((0 + $IDRazza_S) % 1000) == 0))) {
        echo '';
        exit();
    }


$Punti = $rs['Punti'];

include ('inc/variabile4.php');
?>
<title>Comunity</title>
<style type="text/css">
<!--
body,td,th {
    color: #000000;
}
a:link {
    color: #000000;
    text-decoration: none;
}
a:visited {
    text-decoration: none;
    color: #000000;
}
a:hover {
    text-decoration: none;
    color: #000000;
}
a:active {
    text-decoration: none;
    color: #000000;
}
-->
</style></head>
<body bgcolor="fbf4e4">
<p align="center">&nbsp;</p>
<table border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="20" height="20"></td>
    <td width="600" height="20"></td>
    <td width="20" height="20"></td>
  </tr>
  <tr>
    <td width="20"></td>
    <td>
<table cellpadding=2 cellspacing=0 border=0 width="100%"><tr>
    <td colspan=3 align=center><font face="Verdana" color="#800000"><strong><?= htmlspecialchars($rs["Descrizione"]) ?></strong></font><br>
    <? if ($rs["Master"]==1) { ?>
    <? } elseif ($rs["Capo"] == 1) { ?>
<? };
    $rs->close;
    
    if ($op == "modifica") {
        $MySql = "SELECT * FROM MessaggioAraldo WHERE IDMessaggio = '$IDMsg' AND IDAraldo = '".addslashes(pars($IDAraldo))."'";
        if ($Ban_S != '1') {
            $MySql .= " AND Autore = '".addslashes(pars($Login))."'";
        }
        $Result = mysql_query($MySql);
        $rs = mysql_fetch_array($Result);
        $Titolo = $rs["Titolo"];
        $Messaggio = $rs["Messaggio"];
        $Tag = $rs["Tag"];
        $rs->close;
    }
    if ($IDMsgPadre > 0) {
        $MySql = "SELECT * FROM MessaggioAraldo WHERE IDMessaggio = '".addslashes(pars($IDMsgPadre))."'";
        $Result = mysql_query($MySql);
        $rs = mysql_fetch_array($Result);
        $TitoloPadre = $rs["Titolo"];
        $AutorePadre = $rs["Autore"];
        $rs->close;
    } ?></td>
</tr>
</table></td>
    <td width="20"></td>
  </tr>
  <tr>
    <td width="20" height="20"></td>
    <td height="20"></td>
    <td width="20" height="20"></td>
  </tr>
</table>
<br>
<center>
<table border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="20" height="20"></td>
    <td width="600" height="20"></td>
    <td width="20" height="20"></td>
  </tr>
  <tr>
    <td width="20"></td>
    <td>
<table border=0 align="center" cellpadding=2 cellspacing=0>
<tr>
    <form action="datiinternil.php" method=Post>
    <input type=hidden name=ID value="<?= $IDAraldo ?>">
    <input type=hidden name=p value="<?= $p ?>">
    <input type=hidden name=IDMsg value="<?= $IDMsg ?>">
    <input type=hidden name=IDMsgPadre value="<?= $IDMsgPadre ?>">
</tr>
<?    if ($IDMsgPadre > 0) {    ?>
<tr><input type=hidden size=50 name=Titolo value="<?= htmlspecialchars($TitoloPadre) ?>">
    <td align=center valign=top>Oggetto: <b><?= htmlspecialchars($TitoloPadre) ?></b><br>
      Autore: <b><?= htmlspecialchars($AutorePadre) ?></b></td>
</tr>
<?    }    else { ?>
<tr>
<td align=center valign=top>
    <select name="Tag" id="Tag">
<option value="<?=$Tag?>" selected>Tag Attuale: <?=$Tag?></option>
    <option value="[Aiuto]">Aiuto</option>
    <option value="[Altro]">Altro</option>
    <option value="[Info]">Info</option>
    </select></td>
</tr> 
<tr>
    <td align=center> 

       <input type=text size=50 name=Titolo value="<?= htmlspecialchars($Titolo) ?>"></td>
</tr><?    }    ?>   
<tr>
    <td align=center><textarea cols=40 rows=10 name=Messaggio><?= htmlspecialchars($Messaggio) ?></textarea>   </td>
</tr>
<tr>
    <td></td>
</tr>
<? if ($Punti == '1') {
    $MySql = "SELECT * FROM Punti WHERE IDMessaggioAraldo = '$IDMsg'";
    $Result = mysql_query($MySql);
    
    for ($i = 1; $i <= 20; $i++) {
        $rs = mysql_fetch_array($Result);
        echo '<tr><td>';
        echo "<input name=Nome$i value='".$rs['Nome']."'><select name=Esperienza$i>";
            for ($j = -10; $j <= 20; $j++) {
                echo '<option value=\''.($j/2).'\'';
                if (($rs['Esperienza']==($j/2)) || ((''.$rs['Nome']=='') && ($j == 0))) {
                    echo ' SELECTED';
                }
                echo '>'.($j/2).'</option>';
            }
        echo '</select>';
        echo '</td></tr>';
    }
    $rs->close;
} ?>
<tr>
    <td align=center><div align="center">
      <input type="submit" value="Aggiorna" Style="font-weight:bold;font-family:Verdana;font-size:8pt">
    </div></td>
    </form>
</tr>
</table></td>
    <td width="20"></td>
  </tr>
  <tr>
    <td width="20" height="20"></td>
    <td height="20"></td>
    <td width="20" height="20"></td>
  </tr>
</table>
</body>
</html>

Cosa comporta il fatto che la direttiva register_globals sia disattivata?
 
Ultima modifica:
Se la direttiva register_globals è attiva, si può accedere direttamente alle variabili passate tramite GET o POST, come facevi tu prima. Se invece è disattivo, non si può accedere direttamente, ma bisogna farlo tramite gli array $_GET e $_POST.

Questo di sicuro non può funzionare:

PHP:
$IDMsgPadre = $_POST['0 + $IDMsgPadre'];

dovrebbe essere così:

PHP:
$IDMsgPadre = 0 + $_POST['$IDMsgPadre'];
 
Capisco.

Haimè, anche con la modifica all'errore che avevo compiuto, non funziona con php5. Continua a non mandarmi thread, probabilmente c'è dell'altro. ^^'

P.s. - Ormai ritengo sia una certezza il fatto che la direttiva register_globals sia disattivata con PHP5. Fare uno script di prova per verificare sarebbe superfluo.

Morale della favola, sono disperato sia per il secondo che per il terzo file che ho postato. Fortuna che almeno il primo è sistemato, grazie a te Trogo. T_T
 
Non disperare, la strada è ancora lunga ma non infinita! Dato che finora non hai mai parlato di errori, mi sa che ti convenga inserire all'inizio degli script queste righe:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);

In modo da abilitare la visualizzazione degli eventuali errori
 
Non mi visualizza alcun errore, tecnicamente il codice non sembra avere pecche. L'unico problema è che, appunto, tutte le funzionalità sono corrette salvo quella della creazione di un nuovo thread (SOLO, e ripeto SOLO in seguito all'inserimento di apostrofi/apici, altrimenti funziona tutto in maniera ottimale).
 
Nel secondo e terzo script i dati vengono inviati a questi altri due:
profilol.php e datiinternil.php, dove credo vengano fatti l'update e l'insert.
Puoi postare anche queste due pagine?
 

Discussioni simili