CSS & PHP: Formattare il testo mostrato da uno script php

Scar991

Utente Attivo
30 Apr 2012
167
0
0
Salve a tutti!
Ho realizzato un Guestbook per il mio sito ma mi sono accorto che non riesco a formattarne il testo...

I messaggi vengono pubblicati da uno script php in uno spazio delimitato da un <div id="Box">... Tuttavia se imposto le regole CSS in quel <div id="Box">, esse non vengono applicate al testo del PHP...
Qualcuno sa come fare?? Grazie mille!
 
ciao
prova a postare il css del box e la parte di script che scrve nel box
dovreti es. avere qualcosa di simile
PHP:
<div id="Box">
<php? echo "$testo";?>
</div>
 
Sono riuscito a sistemare il font, la dimensione (e un minimo di formattazione agendo però sul codice PHP)...

Vorrei però che ogni messaggio sia riquadrato, sapete come fare??
 
PHP:
<div id="Box4">
          <h1>I Messaggi</h1>
            <div id="Box_In">
		      <p>
		        <?php
  $lettura_risultati=mysql_query("select * from Guestbook order by data_ora desc");
  if(mysql_num_rows($lettura_risultati)>0){
  while( $scatola_temporanea = mysql_fetch_array($lettura_risultati) ){ 
    	$nome_utente = strip_tags($scatola_temporanea['NOME']);
    	$testo_messaggio = strip_tags($scatola_temporanea['MESSAGGIO'], "<i>,</i>,<b>,</b>,<u>,</u>, <p>, </p>");
    	$data_inserimento = strip_tags($scatola_temporanea['DATA_ORA']);
    	echo "<b>" .stripslashes($nome_utente) . "</b> ha scritto:<br><br>" .stripslashes($testo_messaggio) . "<br><br><i>" . $data_inserimento . "</i><br><br><br>";
  } //fine ciclo while che scorre la query e piazza i risultati nell'array temporaneo
}
else{ //se non ha trovato record
  echo "Nessuno ha scritto sul Guestbook, che ne dici di scrivere per primo?";
}
?>
		      </p>
            </div>

Ho usato l'espediente "<b>" .stripslashes($nome_utente) . "</b> per dare un po' di risalto alle varie voci... Io vorrei che il contenuto dell'echo sia racchiuso in un riquadro interno o che ci sia una barra che separa i vari messaggi, ma il tag <hr> non funziona perché mi sfasa la formattazione del resto del corpo (es. il messaggio 1 è corretto, linea grazie ad "hr", messaggio 2 formattato a cavolo)...
 
ciao
per visualizzare i record ti conviene usare le vecchie (ma sempre utili) <table> (nella visualizzazione di elenchi di record sono ideali)
PHP:
<div id="Box4">
<h1>I Messaggi</h1>
<div id="Box_In">
<?php
  $lettura_risultati=mysql_query("select * from Guestbook order by data_ora desc");
  if(mysql_num_rows($lettura_risultati)>0){
  	echo "<table class=\"pinco_pallo\">";
  		while( $scatola_temporanea = mysql_fetch_array($lettura_risultati) ){ 
        	$nome_utente = $scatola_temporanea['NOME'];
        	$testo_messaggio = $scatola_temporanea['MESSAGGIO'];
        	$data_inserimento = $scatola_temporanea['DATA_ORA'];
			echo "<tr>";
        	echo "<td><strong>".stripslashes($nome_utente)."</strong> ha scritto:</td><td>".nl2br(stripslashes($testo_messaggio))."</td><td><i>$data_inserimento</i></td></tr>";
		} //fine ciclo while che scorre la query e piazza i risultati nell'array temporaneo
		echo "</table>";
	}else{ //se non ha trovato record
		echo "Nessuno ha scritto sul Guestbook, che ne dici di scrivere per primo?";
	}
?>
</div>
</div>

poi puoi assegnare alla table, tr e td le classi che vuoi formattandoli come ti pare es al tr puoi dare il border rosso

non ti serve lo striptags su dati provenienti dal tuo db, ma ad esempio per il nome mettere il primo carattere maiuscolo
verifica l'nl2br che non ti faccia la doppia riga vuota, in tal caso toglilo
 
Ok con la tabella è perfetto, grazie davvero!

Avrei un'altra domanda: è possibile "selezionare" alcuni tag da poter usare?
Nel senso, vorrei, idealmente, permettere l'uso di tag come <b>, <i>, <u> e <a>... Come faccio a dire al mio script che deve postarmeli così come vengono inseriti senza che mi dia l'errore "nell'inserimento del messaggio"?
 
ciao
quando ricevi i $_POST e usi strptaggs puoi fare es.:

PHP:
<?php
//.....
$nome=strip_tags($_POST['nome'], "<br> <b> <strong>");//i tag <br> <b> <strong> non verranno eliminati
//...
?>
oppure se preferisci
PHP:
<?php
//.....
$tag_permessi="<br> <b> <strong> <hr>";
$nome=strip_tags($_POST['nome'], $tag_permessi);//i tag <br> <b> <strong> <hr> non verranno eliminati
//...
?>
 
Ho fatto tutte le modifiche che mi hai indicato ed ecco il codice che ho ricavato:

PHP:
 <?php 
	if (isset($_POST["send"]) && $_POST["send"] == "Invia") { 
		$tag_permessi="<br> <b> <i> <u> <hr>";
		$name=addslashes(trim(strip_tags($_POST['name']))); //adslshes evita quell'errore 
		$surname=addslashes(trim(strip_tags($_POST['surname']))); 
		$message=addslashes(trim(strip_tags($_POST['message'], $tag_permessi))); //questo sarebbe giusto verificare anche numero di caratteri minimo 
		$e_mail=addslashes(trim(strip_tags($_POST['e_mail'])));

		//if($name==""){$err_1=FALSE;}//vuoto 
//		if(strlen($message) < 10){$err_2=FALSE;}//vuoto o minore di 10 caratteri 
//		if(filter_var($_POST['e_mail'], FILTER_VALIDATE_EMAIL)){$e_mail=$_POST['e_mail'];}else{$err_3=FALSE;} 
//		if(($err_1*$err_2*$err_3) == 0){  
//			echo "Hai commesso degli errori: verifica che i campi richiesti siano inseriti!"; 
//		}else{ 

			$inserimento=mysql_query("insert into Guestbook (NOME, COGNOME, MESSAGGIO, INDIRIZZO, DATA_ORA) values ('$name', '$surname', '$message', '$e_mail', now())"); 
			if($inserimento){ 
				echo "Il tuo messaggio è stato inserito correttamente!"; 
			}else{ 
				echo "Errore nell'inserimento del tuo messaggio. Riprova più tardi.\n Clicca su 'Indietro' per recuperare il tuo messaggio"; 
			} 
		} 
		//ritorno al form 
?>
      </fieldset>
    </form><br />
<br />


<div id="Box4">
          <h1>I Messaggi</h1>
            <div id="Box_In">
		      <p>
		        <?php
  $lettura_risultati=mysql_query("select * from Guestbook order by data_ora desc");
  if(mysql_num_rows($lettura_risultati)>0){
	  echo "<table>";
  while( $scatola_temporanea = mysql_fetch_array($lettura_risultati) ){ 
    	$nome_utente = strip_tags($scatola_temporanea['NOME']);
    	$testo_messaggio = strip_tags($scatola_temporanea['MESSAGGIO'], $tag_permessi);
    	$data_inserimento = strip_tags($scatola_temporanea['DATA_ORA']);
		echo "<tr class=\"bordo_interno\">";
    	echo "<td class=\"bordo_interno\"><strong><b>" .stripslashes($nome_utente)."</strong> ha scritto:</td>
		<td class=\"bordo_interno\">" .nl2br(stripslashes($testo_messaggio))."</td><td class=\"bordo_interno\"><i>" . $data_inserimento . "</i></td></tr>";
  } //fine ciclo while che scorre la query e piazza i risultati nell'array temporaneo
  echo "</table>";
}
else{ //se non ha trovato record
  echo "Nessuno ha scritto sul Guestbook, che ne dici di scrivere per primo?";
}
?>
		      </p>
            </div>
    </div>

Una volta postato il messaggio, ha i suoi tag, se aggiorno la pagina oppure la riapro, i tag non vengono mantenuti e scompaiono... ???
 
Ultima modifica:
Inoltre, a quanto sembra ho fatto qualcosa che mi rigetta la punteggiatura... La frase "Ciao come stai" viene pubblicata mentre "Ciao come stai?" no! -.-'' sto impazzendo

Mi correggo: fa quel che gli pare, a volte lo fa altre no... Non capisco cosa succede!
 
ciao
non devi usare strip_tags quando leggi i dati dal db, ma solo quando li inserisci.
stip serve per non far inserire tag pericolosi nel db, quindi li ripulisce e nel db ti ritrovi dati puliti, l'esempio che ti avevo fatto si riferisce ai dati inviati dal form
 
Mi scuso per i mille messaggi contrastanti che sto inviando. Ho ancora problemi con i tag relativi a non so cosa: non vengono letti o non vengono registrati, e questo mi causa un errore...

Riscriverò solo in caso di successo sicuro e stabile... Per favore, scusatemi ancora...

Potete aiutarmi?

EDIT:

Quindi il nuovo codice sarebbe questo??

PHP:
 <?php
  $lettura_risultati=mysql_query("select * from Guestbook order by data_ora desc");
  if(mysql_num_rows($lettura_risultati)>0){
      echo "<table>";
  while( $scatola_temporanea = mysql_fetch_array($lettura_risultati) ){ 
  		$tag_permessi="<br> <b> </b> <i> </i> <u> </u> <hr>";
        $nome_utente =($scatola_temporanea['NOME']);
        $testo_messaggio = ($scatola_temporanea['MESSAGGIO']);
        $data_inserimento = ($scatola_temporanea['DATA_ORA']);
        echo "<tr class=\"bordo_interno\">";
        echo "<td class=\"bordo_interno\"><strong>" .stripslashes($nome_utente)."</strong> ha scritto:</td>
        <td class=\"bordo_interno\">" .nl2br(stripslashes($testo_messaggio))."</td><td class=\"bordo_interno\"><i>" . $data_inserimento . "</i></td></tr>";
  } //fine ciclo while che scorre la query e piazza i risultati nell'array temporaneo
  echo "</table>";
}
else{ //se non ha trovato record
  echo "Nessuno ha scritto sul Guestbook, che ne dici di scrivere per primo?";
}
?>

Non funge neppure questo, mi da errore...
 
Ultima modifica:
ciao
non avendo il tuo db non si può provare, quindi indica che errore ti da. è un errore php tipo warning o altro
poi ho visto che in
$tag_permessi="<br> <b> </b> <i> </i> <u> </u> <hr>";
hai messo i tag di chiusura, non vanno messi
$tag_permessi="<br> <b> <i> <u> <hr>";
ma aggiungi anche il tag br con lo slash e strong

$tag_permessi="<br> <br /> <b> <strong> <i> <u> <hr>";
 
PHP:
    <form id="Guestbook" name="form1" method="post" action="guestbook.php">
      <fieldset>
        <legend>Lascia un Segno!</legend>
        <hr />
        <p id="msg">
        <?php 
	if (isset($_POST["send"]) && $_POST["send"] == "Invia") { 
		$tag_permessi="<br> <br /> <b> <strong> <i> <u> <hr>";
		$name=addslashes(trim(strip_tags($_POST['name']))); //adslshes evita quell'errore 
		$surname=addslashes(trim(strip_tags($_POST['surname']))); 
		$message=addslashes(trim(strip_tags($_POST['message'], $tag_permessi))); //questo sarebbe giusto verificare anche numero di caratteri minimo 
		$e_mail=addslashes(trim(strip_tags($_POST['e_mail'])));

		//if($name==""){$err_1=FALSE;}//vuoto 
//		if(strlen($message) < 10){$err_2=FALSE;}//vuoto o minore di 10 caratteri 
//		if(filter_var($_POST['e_mail'], FILTER_VALIDATE_EMAIL)){$e_mail=$_POST['e_mail'];}else{$err_3=FALSE;} 
//		if(($err_1*$err_2*$err_3) == 0){  
//			echo "Hai commesso degli errori: verifica che i campi richiesti siano inseriti!"; 
//		}else{ 

			$inserimento=mysql_query("insert into Guestbook (NOME, COGNOME, MESSAGGIO, INDIRIZZO, DATA_ORA) values ('$name', '$surname', '$message', '$e_mail', now())"); 
			if($inserimento){ 
				echo "Il tuo messaggio è stato inserito correttamente!"; 
			}else{ 
				echo "Errore nell'inserimento del tuo messaggio. Clicca su 'Indietro' per recuperarlo"; 
			} 
		} 
		//ritorno al form 
?>
        </p>
        <hr />
        <p><span id="nome">
        <label for="name">Nome*:</label>
        <input type="text" name="name" id="name" tabindex="10" />
        <br />
        <span class="textfieldRequiredMsg">È obbligatorio specificare un valore.</span><span class="textfieldInvalidFormatMsg">Formato non valido.</span></span></p>
        <p><span id="cognome">
        <label for="surname">Cognome:</label>
        <input type="text" name="surname" id="surname" tabindex="20" />
<span class="textfieldInvalidFormatMsg">Formato non valido.</span></span></p>
        <p><span id="email">
        <label for="e_mail">Email*:</label>
        <input type="text" name="e_mail" id="e_mail" tabindex="30" />
        <br />
        <span class="textfieldRequiredMsg"><br />
        È obbligatorio specificare un valore.</span><span class="textfieldInvalidFormatMsg"><br />
        L'indirizzo specificato non è valido.</span></span></p>
      <!--  <input value="G"    type="button" style="font-weight: bold;" onclick='bold();'>-->
        <p><span id="messaggio">
          <label for="message">Messaggio*:</label>
          <textarea name="message" id="message" cols="45" rows="5" tabindex="40"></textarea>
          <span class="textareaRequiredMsg"><br />
          È obbligatorio specificare un valore.</span><span class="textareaMinCharsMsg"><br /> 
          Il tuo messaggio è troppo corto! </span></span></p>
        <p>
          <input type="submit" name="send" id="send" value="Invia" tabindex="50" />
          <input type="reset" name="reset" id="reset" value="Reset" tabindex="60" />
        </p>
      </fieldset>
    </form><br />
<br />

<div id="Box4">
          <h1>I Messaggi</h1>
            <div id="Box_In">
		      <p>
                <?php
  $lettura_risultati=mysql_query("select * from Guestbook order by data_ora desc");
  if(mysql_num_rows($lettura_risultati)>0){
      echo "<table>";
  while( $scatola_temporanea = mysql_fetch_array($lettura_risultati) ){ 
        $nome_utente =($scatola_temporanea['NOME']);
        $testo_messaggio = ($scatola_temporanea['MESSAGGIO']);
        $data_inserimento = ($scatola_temporanea['DATA_ORA']);
        echo "<tr class=\"bordo_interno\">";
        echo "<td class=\"bordo_interno\"><strong>" .stripslashes($nome_utente)."</strong> ha scritto:</td>
        <td class=\"bordo_interno\">" .nl2br(stripslashes($testo_messaggio))."</td><td class=\"bordo_interno\"><i>" . $data_inserimento . "</i></td></tr>";
  } //fine ciclo while che scorre la query e piazza i risultati nell'array temporaneo
  echo "</table>";
}
else{ //se non ha trovato record
  echo "Nessuno ha scritto sul Guestbook, che ne dici di scrivere per primo?";
}
?>
		      </p>
            </div>
    </div>
    </div>
<p>
    <script type="text/javascript">
var sprytextfield1 = new Spry.Widget.ValidationTextField("nome", "custom");
var sprytextfield2 = new Spry.Widget.ValidationTextField("cognome", "custom", {isRequired:false});
var sprytextfield3 = new Spry.Widget.ValidationTextField("email", "email");
var sprytextarea1 = new Spry.Widget.ValidationTextarea("messaggio", {minChars:10});
    </script>
  </p>

Ho pubblicato l'intero codice. Mi ha fatto inserire un solo messaggio, poi per ognuno mi da l'errore che ho postato nell'if dell'inserimento. Ho provato con e senza tag, mi ripete sempre quell'errore: Errore nell'inserimento del tuo messaggio. Clicca su 'Indietro' per recuperarlo...

@ borgo italia Ho allegato l'export del db in formato .txt... Spero ti sia utile per capire il problema.

Gli altri allegati sono per il funzionamento degli script di controllo autogenerati dal programma...
 

Allegati

Ultima modifica:
ciao
ho visto intanto la tabella, manca un campo importante,
poi se metti 'nome' come primary, "pinco" può inserire solo un messaggio

`id` int(12) NOT NULL autoincrement primarykey,
`nome` varchar(40) NOT NULL,
`cognome` varchar(40) NOT NULL,
ecc....

dimenticavo
lo script del post sopra è lo script completo che usi?
 
Ultima modifica:
Sembra che in questo modo vada tutto bene, tranne che mi ha sfasato un po' la tabella, ma quello lo risolvo in fretta...

Lo script è completo, eccezion fatta per la porzione di codice che si occupa della connessione al db, che ho messo prima di tutto il codice, se non erro - formattazione appena eseguita, devo reinstallare i programmi!
 
ciao ecco
l'ho sistemato un poco, però non ho guardato i js e css se funziano o no, guarda poi che posso aver tralasciato alcuni <div></div>
e aver fatto alcuni errori di battitura.
se noti ho usato l'istruzione $_SERVER['PHP_SELF'] rendendo lo script indipendente dal nome della pagina (che se vuoi puoi chiarla anche pinco_pallo.php)
poi se guardi sul blog trovi un bel editor che ti permette di formattare il testo (se guardi nel mio sito "contatti" ne vedi uno simile)
leggi i commenti

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>guestbook</title>
<!-- qui metti tutti i js e i css e/o i loro richiami-->
</head>
<body>
<?php
//qui metti i dati di connessione ecc...
if (isset($_POST["send"]) && $_POST["send"] == "Invia") { 
	$tag_permessi="<br> <br /> <b> <strong> <i> <u> <hr>";
	$name=addslashes(trim(strip_tags($_POST['name']))); //adslshes evita quell'errore 
	$surname=addslashes(trim(strip_tags($_POST['surname']))); 
	$message=addslashes(trim(strip_tags($_POST['message'], $tag_permessi))); //questo sarebbe giusto verificare anche numero di caratteri minimo 
	$e_mail=addslashes(trim(strip_tags($_POST['e_mail'])));
	//poi ti CONVIENE FARE le verifiche, le verifiche tramite js sono facilmente aggirabili (es js disattivato)
	//ti puoi ritrovare delle porcherie o che qualcuno non inserisca i dati che vorresti
	if($name==""){$err_1=FALSE;}//vuoto 
	if(strlen($message) < 10){$err_2=FALSE;}//vuoto o minore di 10 caratteri 
	if(!filter_var($e_mail, FILTER_VALIDATE_EMAIL)){$err_3=FALSE;} 
	if(($err_1*$err_2*$err_3) == 0){  
		echo "Hai commesso degli errori: verifica che i campi richiesti siano inseriti!";
		//con l'istruzione seguenti torni al form pulito in modo che uno possa riprovare (dopo 3 secondi dato da content='3,...)
		//se vuoi più lungo o più corto modifica da 0 a quello che vuoi
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}else{ 
		$inserimento=mysql_query("insert into Guestbook (NOME, COGNOME, MESSAGGIO, INDIRIZZO, DATA_ORA) values ('$name', '$surname', '$message', '$e_mail', now())"); 
		if($inserimento){ 
                $messaggio= "<h2>Il tuo messaggio è stato inserito correttamente!</h2>";
				echo "<meta http-equiv='Refresh' content='3; URL=alla_pagina_che_vuoi.php'>";//come sopra ma puoi rimandare alla pagina che vuoi
				//basta cambiare il nome della pagina oppure il solito htmlspecialchars($_SERVER['PHP_SELF'])
		}else{ 
			echo "<h2>Errore nell'inserimento del tuo messaggio. Riprova più tardi</h2>";
			echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";//come sopra
		} 
	}
}else{//mentre registra i dati non vedi il messaggi ed il form
	$lettura_risultati=mysql_query("select * from Guestbook order by data_ora desc");
	if(mysql_num_rows($lettura_risultati)>0){
		echo "<div id="Box4"><h1>I Messaggi</h1><div id=\"Box_In\"><p>";
		echo "<table>";
		while( $scatola_temporanea = mysql_fetch_array($lettura_risultati) ){ 
			$nome_utente =($scatola_temporanea['NOME']);
			$testo_messaggio = ($scatola_temporanea['MESSAGGIO']);
			$data_inserimento = ($scatola_temporanea['DATA_ORA']);
			echo "<tr class=\"bordo_interno\">";
			echo "<td class=\"bordo_interno\"><strong>" .stripslashes($nome_utente)."</strong> ha scritto:</td>
        <td class=\"bordo_interno\">" .nl2br(stripslashes($testo_messaggio))."</td><td class=\"bordo_interno\"><i>".$data_inserimento ."</i></td></tr>";
		} //fine ciclo while che scorre la query e piazza i risultati nell'array temporaneo
		echo "</table>";
		echo "</div></div>";
	}else{ //se non ha trovato record
		echo "Nessuno ha scritto sul Guestbook, che ne dici di scrivere per primo?";
	}
?>
<form id="Guestbook" name="form1" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
      <fieldset>
        <legend>Lascia un Segno!</legend>
        <hr />
        <p id="msg">
        </p>
        <hr />
        <p><span id="nome">
        <label for="name">Nome*:</label>
        <input type="text" name="name" id="name" tabindex="10" />
        <br />
        <span class="textfieldRequiredMsg">È obbligatorio specificare un valore.</span><span class="textfieldInvalidFormatMsg">Formato non valido.</span></span></p>
        <p><span id="cognome">
        <label for="surname">Cognome:</label>
        <input type="text" name="surname" id="surname" tabindex="20" />
		<span class="textfieldInvalidFormatMsg">Formato non valido.</span></span></p>
        <p><span id="email">
        <label for="e_mail">Email*:</label>
        <input type="text" name="e_mail" id="e_mail" tabindex="30" />
        <br />
        <span class="textfieldRequiredMsg"><br />
        È obbligatorio specificare un valore.</span><span class="textfieldInvalidFormatMsg"><br />
        L'indirizzo specificato non è valido.</span></span></p>
      <!--  <input value="G"    type="button" style="font-weight: bold;" onclick='bold();'>-->
        <p><span id="messaggio">
          <label for="message">Messaggio*:</label>
          <textarea name="message" id="message" cols="45" rows="5" tabindex="40"></textarea>
          <span class="textareaRequiredMsg"><br />
          È obbligatorio specificare un valore.</span><span class="textareaMinCharsMsg"><br /> 
          Il tuo messaggio è troppo corto! </span></span></p>
        <p>
          <input type="submit" name="send" id="send" value="Invia" tabindex="50" />
          <input type="reset" name="reset" id="reset" value="Reset" tabindex="60" />
        </p>
      </fieldset>
    </form><br />
<?php
}
?>
</body>
</html>

provalo (salva comunque il tuo vecchio) e verifica che non abbia fatto errori di digitazione
fammi sapere
 

Discussioni simili