2010-11-23 27 views
6

Estoy tratando de almacenar HTML en una base de datos, así que cuando recupere el formulario de la base de datos, necesito mostrarlo como un formulario en lugar de como texto. ¿Hay alguna manera de hacerlo?Cómo almacenar html en una base de datos mysql

Ésta es la forma

$form = "<form id='' method='' action='' class=''> 
    <input type='hidden' name='my-item-id' value= $uid /> 
    <input type='hidden' name='my-item-name' value=$title /> 
    <input type='hidden' name='my-item-price' value='1' /> 
    <input type='hidden' name='my-item-qty' value='1' /> 
    <input type='submit' name='my-add-button' class='button' value='Add to cart'/> 
    </form>"; 

en el momento recupero lo anterior de la base de datos se muestra como texto,

también el campo de formulario en la base de datos es varchar(1000)

include('adodb.inc.php'); 
include('adodb-pager.inc.php'); 
$sql = 'select title as "TITLE",description as "DESCRIPTION",form as "ADD TO CART" from mathspapers order by sysdate desc'; 
$pager = new ADODB_Pager($db,$sql); 

$pager->Render(); 

Gracias

+1

Probablemente deba incluir el código que utiliza para leer los valores de la base de datos y enviarlos al cliente. –

+0

Muestra el código que estás utilizando para recuperar el código. Además, ¿qué tamaño es su campo varchar? –

+0

¿Guardar POST como serializado es suficiente? –

Respuesta

8

Cuando está almacenando texto en la base de datos, probablemente use addslashes().
Luego, cuando devuelve texto de la base de datos, necesita algo como stripslashes() antes de mostrar el texto HTML. PHP Manual on stripslashes

0

I Si tuviera que adivinar, diría que su campo VARCHAR es demasiado pequeño para ocupar todo el HTML, por lo que una etiqueta se corta en algún lugar, lo que hace que el HTML se muestre como texto.

+0

Hola, gracias por la respuesta, puedo ver el formulario completo como texto, así que no creo que el varchar sea pequeño. – amir

0

Mi suposición sin más pruebas es que está convirtiendo el html de formulario en sus equivalentes seguros html, por lo tanto, simplemente 'emite' como texto, es solo texto.

Compruebe de salida que el código fuente real no es algo así como &lt; para <

1

En lugar de almacenar patrón de forma entera (y valores) en el campo db puedo aconsejarle para almacenar solamente formar nombres de campo y los datos (valores) como pares clave-valor.

Puede usarlos fácilmente si los almacena de forma estándar; (uso en la página de procesamiento de formularios)

$form_data = "my-item-id=".$_POST["my-item-id"]."&my-item-name=".$_POST["my-item-name"]."&my-item-price=".$_POST["my-item-price"]."&my-item-qty=".$_POST["my-item-qty"]; 

luego almacenar $ form_data sólo a db

a utilizar los datos de db (seguramente después de tirar $ form_data de db) se puede utilizar parse_str

parse_str($form_data,$form_data_from_db); 

echo $ form_data_from_db ["my-item-id"] imprimirá su entrada de formulario almacenada, por ejemplo

Pero estos no son mis principales consejos. ¿Cómo construirá su patrón para cada campo de datos almacenados? Simplemente crea una función para crear formularios como muchos cms.

prueba esto;

function myform_pattern_1($id,$method,$action,$class,$form_data){ 

parse_str($form_data,$fd); 

$form_html = "<form id='' method='' action='' class=''>"; 
$form_html .= "<input type='hidden' name='my-item-id' value='".$fd["my-item-id"]."' />"; 
$form_html .= "<input type='hidden' name='my-item-name' value='".$fd["my-item-id"]."' />"; 
$form_html .= "<input type='hidden' name='my-item-price' value='".$fd["my-item-id"]."' />"; 
$form_html .= "<input type='hidden' name='my-item-qty' value='".$fd["my-item-id"]."' />"; 
$form_html .= "<input type='submit' name='my-add-button' class='button' value='Add to cart'/>"; 
$form_html .= "</form>"; 
return $form_html; 
} 

Llame a esta función donde desee;

echo myform_pattern_1("form_id","post","","form_class",$form_data); 

Este uso tiene una gran ventaja en su método. Puede cambiar la sintaxis de formulario siempre que lo desee.Tal vez quiera -incluso- integrar un complemento de validación de Jquery más tarde o simplemente quiera usar otro estilo o incluso cambiar la sintaxis agregando etiquetas, tendrá que cambiar todos los campos de db almacenados si almacena el formulario completo en db. uso de la función es mucho más flexible.Also no usará db para el almacenamiento de etiquetas innecesarias -repeating- etc.

espero que les guste, Cys

Para obtener más información sobre parse_str; http://php.net/manual/en/function.parse-str.phpenter code here

0

De la documentación de PHP para htmlspecialchars: Ciertos caracteres tienen un significado especial en HTML traducciones hechas son las más útiles para la programación web todos los días. Si necesita traducir todas las entidades de caracteres HTML, use htmlentities() en su lugar.

El resultado se almacena en la base de datos y luego cuando se extrae de la base de datos.

Lo tienes.

Cuestiones relacionadas