Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consulta FOR XML y entrada a un archivo PHP

Estas en el tema de Consulta FOR XML y entrada a un archivo PHP en el foro de PHP en Foros del Web. Hola a todos. Ante todo quiero pediros disculpas si no es el foro adecuado para mi consulta. Estoy usando consultas FOR XML de SQL Server ...
  #1 (permalink)  
Antiguo 18/12/2022, 17:45
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Consulta FOR XML y entrada a un archivo PHP

Hola a todos. 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:

Código:
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

Código:
<html lang="es"><head><meta charset="UTF-8">
mi código PHP es así

Código:
?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
  #2 (permalink)  
Antiguo 18/12/2022, 23:58
 
Fecha de Ingreso: agosto-2013
Ubicación: planeta.Tierra
Mensajes: 16
Antigüedad: 10 años, 7 meses
Puntos: 6
Respuesta: Consulta FOR XML y entrada a un archivo PHP

https://es.stackoverflow.com/questions/29662/cu%C3%A1ndo-usar-utf8-encode-o-utf8-decode
https://php.watch/versions/8.2/utf8_encode-utf8_decode-deprecated
  #3 (permalink)  
Antiguo 20/12/2022, 16:46
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Respuesta: Consulta FOR XML y entrada a un archivo PHP

Cita:
Iniciado por vadtar Ver Mensaje
https://es.stackoverflow.com/questions/29662/cu%C3%A1ndo-usar-utf8-encode-o-utf8-decode
https://php.watch/versions/8.2/utf8_...ode-deprecated
Hola, muchas gracias por los links pero no he solucionado el problema. He cambiado el
Código PHP:
print odbc_result_all($res,"border=0")); 
por
Código PHP:
$valor=funciones(odbc_result_all($res,"border=0")); 
donde funciones son: la "htmlspecialchars" y de los enlaces "utf8-encode" o "utf8-decode". Saludos
  #4 (permalink)  
Antiguo 25/12/2022, 16:39
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años
Puntos: 0
Respuesta: Consulta FOR XML y entrada a un archivo PHP

Hola a todos

He encontrado la solución. Según el manual de PHP online 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í:
Código:
print  utf8_encode(odbc_result($res,"Valor"));
Gracias a todos

Etiquetas: php+base+de+datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:02.