Oppure

Loading
02/10/12 13:14
luigi7
Salve, ho un problema sia nell'inserimento dati e nella modifica dati..

tutto qui funziona tutto fin che non metto ad esempio le doppie virgolette nel testo in un input text..

non capisco come devo fare ad risolvere il problema
vi posto il listato che ho fatto anche se lo fatto un po male perché non sono un grand cima di php/mysql.

<?php
// Includo 
require_once(dirname(__FILE__) . '/../inc.php');
require_once(dirname(__FILE__) . '/admin.php');
require_once(dirname(__FILE__) . "/../template/".$template_admin."/header.php");
require_once(dirname(__FILE__) . "/../include/tiny_mce.php");
	
$intID = (int)$_GET["id"];
	
$active = (isset($_POST["active"])) ? trim ($_POST["active"]): '';	

//Query SQL
		

		$query = "SELECT * FROM pagine WHERE id=".$intID."";
		$result = $db->query($query)   or die($db->error);
		if(empty($intID)) {
		echo "ID non specificato";
}
elseif ($result->num_rows==0) { echo "Record non trovato!"; }
else
{		
		$strSQL = "SELECT * FROM pagine"
				. " WHERE id = ".$intID."";
		//Eseguo la query e recupero i dati
		$result =  $db->query($strSQL);
        $row = $result->fetch_assoc();
	//	$user = $row["_user"];
		$user_id = $row["_userid"];
		$titolo = $row['titolo'];
        $testo = $row['testo'];
		$p_url = $row["url"];
		$tag = $row['tag'];
        $data = $row['data'];
        $active = $row['active'];
         
		$data_explode = explode('-', $data); 
        $gg = $data_explode[2];
        $mm = $data_explode[1];
        $aa = $data_explode[0];		
				
		//Libero la memoria
		$result->free_result(); 
if(isset($_POST["invia"]))
{
	$titolo = protect($_POST["titolo"]);
    $testo =protect($_POST["testo"]);
    $tag =protect($_POST["tag"]); 
	$user = protect($_POST["user"]);
    $data = protect($_POST["data"]);
 	$_url = protect($_POST["_url"]);

	
	
	$dtmPubblicazione = $_POST["data"];
    $data_explode = explode('-', $dtmPubblicazione); 
    $dtmPubblicazione = "".$data_explode[2]."-".$data_explode[1]."-".$data_explode[0]."";

	
		if($_POST["user"] == "0")
	{
	$error = "Non hai inserito l'utente";
	}elseif(empty($_url))
	{
	$error = "Non hai inserito l'url";
	}
	elseif(empty($titolo))
	{
	$error = "Non hai inserito il titolo";
	}
	elseif(empty($testo))
	{
	$error = "Non hai inserito il testo";
	}
	elseif(empty($data))
	{
	$error = "Non hai inserito la data";
	}
	elseif(empty($active))
	{
	$error = "Non hai inserito lo stato";
	}
 	else
	{
	
	$db_titolo = $db->real_escape_string($titolo);
    $db_testo = $db->real_escape_string($testo);
    $db_data = $db->real_escape_string($data);
    $db_tag = $db->real_escape_string($tag);
    $db_active = $db->real_escape_string($active);
	$db_user = $db->real_escape_string($user);
	$db_url =  $db->real_escape_string($_url);
	
	
		$strSQL = "UPDATE pagine SET"
						. " _userid = ".$db_user.","
						. "url = '".$db_url."',"
						. " titolo = '".$db_titolo."',"
						. " testo = '".$db_testo."',"
						. " tag = '".$db_tag."',"
						. " data = '".$dtmPubblicazione."',"
						. " active = '".$db_active."'"
                		. " WHERE id = ".$intID."";	
		$db->query($strSQL)   or die($db->error);
		$db->close();
		$msg = "<p>modificato</p>";
		$msg.="<p><a href=\"pagine.php\">Torna alla lista</a></p>";
		$msg.="<p><a href=\"pag_modifica.php?id=".$intID."\">Modifica ancora</a></p>";
   
}   
		
}
?>

<p class="titolo">Modifica Pagina:&nbsp;&nbsp;<?php echo $row["titolo"]; ?></p>

<?php	if ( isset ( $error ) )	{ echo '			<p class="error">' . $error . '</p>' . "\n";	}	?>
<?php	if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {?>


	<form action="<?php echo $_SERVER['PHP_SELF']?>?id=<?php echo $_GET["id"]; ?>" method="post">
	
<table width="100%" align="center">

<tr>
      <td>Seleziona user_select</td>
      <td><?php echo "<select name=\"user\">";?>

   
        <option  selected="selected" value="0">Seleziona</option>
        <?php
	$result = $db->query("SELECT * FROM utenti");
	
	while($row = $result->fetch_array())
	{
	$user= $row['_user'];
	$id = $row['id'];
  ?>
        <option value="<?php echo $id; ?>"<?php if($user_id=="".$id."") echo 'selected'?>><?php echo $user; ?></option>
        <?php
  }
?>
      </select></td>
    </tr>
<tr>
	<td>Titolo</td>
	<td><input name="titolo" type="text" id="titolo"  value="<?php if ( isset ( $_POST['titolo'] ) ) { echo $_POST['titolo']; } else { echo $titolo; } ?>" size="50"  /></td>
</tr><tr>
	<td>url</td>
	<td><input name="_url" type="text" id="_url"  value="<?php if ( isset ( $_POST['_url'] ) ) { echo $_POST['_url']; } else { echo $p_url; } ?>"  /></td>
</tr>
<tr>
	<td>Testo</td>
	<td><textarea cols="50" rows="10" name="testo"><?php if ( isset ( $_POST['testo'] ) ) { echo $_POST['testo']; } else { echo $testo; } ?></textarea></td>
</tr>

<tr>
	<td>Data</td>
	<td><input name="data" type="text" id="data"   value="<?php echo @"".$gg."-".$mm."-".$aa."";?>"  /></td>
</tr><tr>
	<td>tag</td>
	<td><input name="tag" type="text" id="tag"  value="<?php if ( isset ( $_POST['tag'] ) ) { echo $_POST['tag']; } else { echo $tag; } ?>"  /></td>
</tr>
<tr>
	<td>Stato di attivazione</td>
	<td>
 Pubblica<input type="radio" name="active" value="1"  <?php if($active=='1') echo 'checked="checked"'?> />
     Nascosto<input type="radio" name="active" value="2" <?php if($active=='2') echo 'checked="checked"'?>/>
	
	</td>
</tr>
<tr>
	<td></td>
	<td></td>
</tr>
</table>
		<input type="submit" value="Modfiica" name="invia" />&nbsp;<input type="reset" value="Annulla Modifiche">

	</form>
	<?php 
	}
	}?><?php
require_once(dirname(__FILE__) . "/../template/".$template_admin."/footer.php");
?>


la funzione protect è questa:
function protect($value) {
    $value = (get_magic_quotes_gpc()) ? stripslashes($value) : $value;
    return $value;
}


mi dite come posso risolvere il problema??

scusate per l'italiano ma non so come scriverlo perché non conosco come risolvere il problema..
poi io ho problemi con linguaggio perché sono invalido.

vi ringrazio molto.. e buona giornata.
aaa
02/10/12 13:43
Roby94
Che errore ricevi? è un errore PHP o MySQL? Che risultato da quando provi ad inserire un testo con "virgolette"?
aaa
02/10/12 13:54
luigi7
Postato originariamente da Roby94:

Che errore ricevi? è un errore PHP o MySQL? Che risultato da quando provi ad inserire un testo con "virgolette"?


ok, non ricevo nessun errore di php e mysql..

se scrivo il titolo della pagina e do invio e devo ancora inserire altri dati in altri input text ..

quello che c'è scritto dopo sparisce e rimane solo la prima parte.

come posso evitare?
grazie mille.
Ultima modifica effettuata da luigi7 02/10/12 13:55
aaa
02/10/12 14:29
Roby94
Beh questo mi fa pensare che la query venga modificata dai dati passati dall'input ma teoricamente se usi un metodo che si chiama real_escape_string credo che esegua la funzione mysql_real_escape_string sui dati, e questo dovrebbe impedire che la query venga modificata da virgolette presenti nel testo (principalmente per difendersi dalle SQL injector), io controllerei quel metodo.
aaa
02/10/12 14:47
luigi7
ciao, ok..

però io non so il motivo in quel codice se metto questo " stripslashes " doveva fare che rimaneva anche quello dopo \" ??

non so che parte lo devo inserire..

mi dici per caso è questa funzione trovato con l'amico google..

però a me non me funziona.. ora riprovo meglio e poi ti faccio sapere..

ciao e buona giornata.
aaa
02/10/12 14:56
luigi7
ad esempio ho trovato questo su un altro sito..

 <?
$string = "L\'operazione \"GT\" per utente\utenti";
$string = stripslashes ( $string );
echo $string; // risultato: L'operazione "GT" per utente\utenti
?> 

questo funziona ..

ma se metto nel mio codice dopo l'invio non avend completato tutto diventa cosi:
L\'operazione

come mai ??

grazie mille.
aaa
02/10/12 15:01
Roby94
Allora adesso ho capito, non avevo letto bene tutto il codice, allora tu prima con mysql_real_escape_string vai a correggere la stinga per immeterla nel db quindi Ciao sono "Gianluca" diventa Ciao sono \"Gianluca\" in questo modo la query non vine modificata nel suo effetto, però tu dopo averla corretta la vai di nuovo a danneggiare con stripslashes che va a eliminare gli escape quindi la query va a modificarsi se ci sono caratteri come ' e " in poche parole via stripslashes o meglio ancora la funzione protext e esegui come una operazione il mysql_real_escape_string possibilmente direttamente da funzione e non da metodo
aaa
02/10/12 15:08
luigi7
Postato originariamente da Roby94:

Allora adesso ho capito, non avevo letto bene tutto il codice, allora tu prima con mysql_real_escape_string vai a correggere la stinga per immeterla nel db quindi Ciao sono "Gianluca" diventa Ciao sono \"Gianluca\" in questo modo la query non vine modificata nel suo effetto, però tu dopo averla corretta la vai di nuovo a danneggiare con stripslashes che va a eliminare gli escape quindi la query va a modificarsi se ci sono caratteri come ' e " in poche parole via stripslashes o meglio ancora la funzione protext e esegui come una operazione il mysql_real_escape_string possibilmente direttamente da funzione e non da metodo


scusa molto... non c'è nessun problema al database come dici tu..

e solo la visualizzazione nel form che sparisce..

per il database non c'è nessun problema e solo la visualizzazione del form quando vado inserire i dati con i \ etc..
e poi premo invio il form aggiorna e spariscono le lettere dopo i \..
e ho notato che nell'html viene generato cosi:

<td><input name="titolo" type="text" id="titolo" value="L\\'operazione \\"GT\\" per utente\\utenti" size="40" /></td>

e firefox lo segnala di rosso e mi sembra che non è corretto..

mi dici come mai..??

grazie mille.
aaa