PHP - Consulta FOR XML y entrada a un archivo PHP

 
Vista:
Imágen de perfil de Pelida

Consulta FOR XML y entrada a un archivo PHP

Publicado por Pelida (3 intervenciones) el 19/12/2022 00:33:55
Ante todo quiero pediros disculpas si no es el foro adecuado para mi consulta. Estoy usando consultas FOR XML de SQL Server (de aquí lo de mis disculpas) y el contenido de mi pregunta forma parte de mis pruebas para aprender un poco de PHP y HTML. Voy al asunto. Tengo una tabla y un procedimiento almacenado del cual obtengo una variable NVARCHAR con contenido HTML que luego quiero usar en PHP, este es el código SQL Server:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
USE Pruebas
GO
if OBJECT_ID('Pruebas..SP_Prueba') IS NOT NULL DROP PROC SP_Prueba
GO
if OBJECT_ID('Pruebas..CLIENTE') IS NOT NULL DROP TABLE CLIENTE
GO
CREATE TABLE CLIENTE (Cliente smallint,Nombre nvarchar(20),Pais nvarchar(3) )
INSERT INTO CLIENTE VALUES(1,'CLIENT ONE','EUA'),(2,'CLIENTE DOS CON Ñ','ESP')
GO
CREATE PROC SP_Prueba
AS
BEGIN
    DECLARE @Values NVARCHAR(MAX);
    SET @Values = '<!DOCTYPE html><html lang="es"><head><meta charset="UTF-8"><title>html form</title></head><body><table><form  method="post">'
    SET @Values += CAST ( (
    SELECT  CONCAT('Submit','"formaction="func/action_borrar.php?Id=',Cliente) AS [td/button/@type],'Borrar' AS [td/button],'',
           Nombre AS [td],'',Pais AS td,''
    FROM CLIENTE ORDER BY Cliente
    FOR XML PATH('tr'), TYPE
    ) AS nvarchar(max))
    SET @Values += '</form></table></body></html>'
    SELECT @Values
END

Si pego la salida del SSMS (SQL Server Management Studio, EXEC SP_Prueba;) en un archivo de texto con extensión .html y lo abro en el Edge la eñe se ve bien, pero si ejecuto el procedimiento como entrada de un archivo .php para formatear una salida HTML donde debía de ir la eñe sale el carácter extraño que sale siempre si el idioma no se configura correctamente que es un rombo con un signo de "?" a pesar de que la salida HTML tiene bien los tags

1
<html lang="es"><head><meta charset="UTF-8">

mi código PHP es así

1
2
3
4
5
6
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/func/connect.php'];
$sql="EXEC SP_Pruebas;";
$res=odbc_exec($con,$sql);
print odbc_result_all($res,"border=0");
?>

me podéis ayudar a solucionarlo ?. Muchas gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consulta FOR XML y entrada a un archivo PHP

Publicado por Yamil Bracho (22 intervenciones) el 19/12/2022 01:11:03
Prueba colocando
print htmlspecialchars(odbc_result_all($res,"border=0"));

Otra opcion es htmlentities()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pelida

Consulta FOR XML y entrada a un archivo PHP

Publicado por Pelida (3 intervenciones) el 20/12/2022 23:43:57
Hola, muchas gracias por tu respuesta pero no he solucionado el problema. He cambiado el
1
print odbc_result_all($res,"border=0"));
por
1
$valor=funciones(odbc_result_all($res,"border=0"));
donde funciones son: la tuya "htmlspecialchars", "utf8-encode" o "utf8-decode". Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Consulta FOR XML y entrada a un archivo PHP

Publicado por Ivan (118 intervenciones) el 22/12/2022 18:23:30
Hola,

si la salida es la variables $res se debe usar así:

1
print odbc_result_all(htmlspecialchars($res),"border=0");

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pelida

Consulta FOR XML y entrada a un archivo PHP

Publicado por Pelida (3 intervenciones) el 25/12/2022 23:34:30
Hola Ivan, eso tampoco me ha funcionado. He encontrado la solución y la comento. Según el manual de PHP online
1
https://www.php.net/manual/es/function.odbc-exec.php
la función odbc-exec devuelve y sito literalmente "un identificador de resultado de ODBC si el comando SQL se ejecutó con éxito" lo que me atrevo a compararlo con un Recordset de otros lenguajes por tanto hay que hacer referencia a las columnas del conjunto de datos que en este caso es una sola línea con una sola columna llamada "Valor" que es la que tiene una cadena de caracteres con código HTML, a mi me ha funcionado así:
1
print  utf8_encode(odbc_result($res,"Valor"));
. Gracias a todos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar