Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Graphixx en 1 Septiembre 2014, 16:24 pm



Título: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: Graphixx en 1 Septiembre 2014, 16:24 pm
Eso mismo si tengo una linea de codigo PHP muy larga y la quiero partir en varias lineas, hice asi:
Código
  1. # escribimos la sentencia MySQL
  2. $sentencia="UPDATE ".$tabla." set nombres='$nombres',apellidos='$apellidos',direccion='$direccion',ciudad='$ciudad',pais='$pais',nacionalidad='$nacionalidad',";
  3. $sentencia.="cedula='$cedula',tel_movil='$tel_movil',tel_casa='$tel_casa',tel_oficina='$tel_oficina',email='$email',red_email='$red_email',fecha_nac='$fecha_nac',";
  4. $sentencia.="peso='$peso',altura='$altura',rh='$rh',organos='$organos',sangre='$sangre',religion='$religion',alcohol='$alcohol',tabaco='$tabaco',seguro='$seguro',";
  5. $sentencia.="nom_company='$nom_company',num_poliza='$num_poliza',tel_company='$tel_company',num_seg_social='$num_seg_social',historial_clinico='$historial_clinico' where qr='".$qr."'";
  6.  

conocen mas formas de partir el codigo ?


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: Markul en 1 Septiembre 2014, 16:52 pm
Puedes continuar el codigo en la siguiente linea sin problemas,no es necesario partir la consulta de ese modo,si no me equivoco,de cualquier forma para hacer lo que intentas prueba asi:
Código
  1.    # escribimos la sentencia MySQL
  2.    $sentencia="UPDATE ".$tabla." set nombres='$nombres',apellidos='$apellidos',direccion='$direccion',pais='$pais',nacionalidad='$nacionalidad',";
  3.    $sentencia=$sentencia ."cedula='$cedula',celular='$celular',telefono='$telefono',tel_oficina='$tel_oficina',email='$email',red_email='$red_email',fecha_nac='$fecha_nac',";
  4.    $sentencia=$sentencia ."peso='$peso',rh='$rh',organos='$organos',sangre='$sangre',religion='$religion',alcohol='$alcohol',tabaco='$tabaco',seguro='$seguro',";
  5.    $sentencia= $sentencia ."nom_company='$nom_company',num_poliza='$num_poliza',tel_company='$tel_company',num_seg_social='$num_seg_social',hist_clinico='$hist_clinico' where qr=".$qr;
  6.  


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: MinusFour en 1 Septiembre 2014, 17:05 pm
Prueba:

Código
  1. $sentencia = <<<END
  2. UPDATE "$tabla" set nombres='$nombres',apellidos='$apellidos',direccion='$direccion',pais='$pais',nacionalidad='$nacionalidad',
  3. cedula='$cedula',celular='$celular',telefono='$telefono',tel_oficina='$tel_oficina',email='$email',red_email='$red_email',fecha_nac='$fecha_nac',
  4. peso='$peso',rh='$rh',organos='$organos',sangre='$sangre',religion='$religion',alcohol='$alcohol',tabaco='$tabaco',seguro='$seguro',
  5. nom_company='$nom_company',num_poliza='$num_poliza',tel_company='$tel_company',num_seg_social='$num_seg_social',hist_clinico='$hist_clinico' where qr=$qr
  6. END;
  7.  
  8. $sentencia = str_replace(PHP_EOL, '', $sentencia);

Nota: Estás sacrificando eficiencia por legibilidad.

Lo correcto sería configurar tu editor de texto para las oraciones largas.

(http://i.imgur.com/tHsJuBD.png)


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: Shell Root en 1 Septiembre 2014, 17:13 pm
@Graphixx y printeaste la cadena y la ejecutaste en el motor de base de datos?


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: Graphixx en 1 Septiembre 2014, 19:15 pm
@Graphixx y printeaste la cadena y la ejecutaste en el motor de base de datos?

La consulta me funciona tal y como esta (ya la actualice)... lo que queria era saber que otras formas de partir codigo existen, estuve leyendo en foros y decian que con && pero con "&&" no me funciono.


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: WHK en 1 Septiembre 2014, 20:10 pm
Como es eso de partirlo? lo que debes hacer es acostumbrarte a identar los códigos estén en el legunaje que estén:

Código
  1. <?php
  2. /* escribimos la sentencia MySQL */
  3. $sentencia = '
  4. UPDATE '.$tabla.'
  5. SET
  6. nombres = "'.$nombres.'",
  7. apellidos = "'.$apellidos.'",
  8. direccion = "'.$direccion.'",
  9. ciudad = "'.$ciudad.'",
  10. pais = "'.$pais.'",
  11. nacionalidad = "'.$nacionalidad.'",
  12. cedula = "'.$cedula.'",
  13. tel_movil = "'.$tel_movil.'",
  14. tel_casa = "'.$tel_casa.'",
  15. tel_oficina = "'.$tel_oficina.'",
  16. email = "'.$email.'",
  17. red_email = "'.$red_email.'",
  18. fecha_nac = "'.$fecha_nac.'",
  19. peso = "'.$peso.'",
  20. altura = "'.$altura.'",
  21. rh = "'.$rh.'",
  22. organos = "'.$organos.'",
  23. sangre = "'.$sangre.'",
  24. religion = "'.$religion.'",
  25. alcohol = "'.$alcohol.'",
  26. tabaco = "'.$tabaco.'",
  27. seguro = "'.$seguro.'",
  28. nom_company = "'.$nom_company.'",
  29. num_poliza = "'.$num_poliza.'",
  30. tel_company = "'.$tel_company.'",
  31. num_seg_social = "'.$num_seg_social.'",
  32. historial_clinico = "'.$historial_clinico.'"
  33. WHERE qr = "'.$qr.'"
  34. ';

Recuerda escapar cada variable con mysqli_escape_string() para prevenir las inyecciones sql y usar el objeto DateTime() para validar fechas y exportar con el formato sql ( $ob->format('Y-m-d') ).

Mira, acá hay una consulta sql que hice hace tiempo y a pesar del tamaño que tiene mantengo la identación y no necesito partirla o separarla (auqnue esta consulta ya no lo uso porque estaba muy pesada, ahora uso tablas para caché desnormalizadas):

Código
  1. <?php
  2.  
  3. $busqueda = $this->mysqli->query('
  4. SELECT
  5. usuarios.id,
  6. usuarios.apellidos,
  7. usuarios.nombres,
  8.  
  9. COUNT(DISTINCT especialidades_areas.id) as cantidad_especialidades,
  10. COUNT(DISTINCT centros_medicos.id) as cantidad_centros_medicos,
  11. COUNT(DISTINCT profesionales_titulos.id) as cantidad_titulos,
  12.  
  13. IF(usuarios.hash_foto IS NOT NULL, 0, 1) as tiene_foto,
  14. IF(COUNT(DISTINCT especialidades_areas.id) = 0, 0, 1) as tiene_especialidades,
  15. IF(COUNT(DISTINCT centros_medicos.id) = 0, 0, 1) as tiene_centros_medicos,
  16. IF(COUNT(DISTINCT profesionales_titulos.id) = 0, 0, 1) as tiene_titulos
  17.  
  18. FROM usuarios
  19.  
  20. INNER JOIN usuarios_roles_relacion ON (usuarios_roles_relacion.usuario_id = usuarios.id)
  21. INNER JOIN usuarios_roles ON (usuarios_roles.id = usuarios_roles_relacion.usuarios_rol_id)
  22.  
  23. LEFT JOIN especialidades_areas_relacion_profesionales ON (especialidades_areas_relacion_profesionales.usuario_id = usuarios.id)
  24. LEFT JOIN especialidades_areas ON (especialidades_areas.id = especialidades_areas_relacion_profesionales.especialidades_area_id)
  25. LEFT JOIN usuarios_relacion_centro_medico ON (
  26. usuarios_relacion_centro_medico.usuario_id = usuarios.id AND
  27. usuarios_relacion_centro_medico.usuarios_rol_id = (
  28. SELECT id
  29. FROM usuarios_roles
  30. WHERE namespace = "profesional"
  31. LIMIT 1
  32. )
  33. )
  34. LEFT JOIN centros_medicos ON (centros_medicos.id = usuarios_relacion_centro_medico.centro_medico_id)
  35. LEFT JOIN centros_medicos_tipos ON (centros_medicos_tipos.id = centros_medicos.centros_medicos_tipo_id)
  36. LEFT JOIN profesionales_titulos ON (profesionales_titulos.usuario_id = usuarios.id)
  37.  
  38. WHERE
  39. usuarios_roles.namespace = "profesional" AND
  40. usuarios.esta_acreditado_superintendencia = 1 AND
  41. CONCAT_WS(
  42. " ",
  43.  
  44. usuarios.apellidos,
  45. usuarios.nombres,
  46. usuarios.apellidos,
  47.  
  48. profesionales_titulos.texto,
  49.  
  50. centros_medicos_tipos.nombre,
  51. centros_medicos.nombre,
  52.  
  53. especialidades_areas.nombre,
  54.  
  55. centros_medicos_tipos.nombre,
  56. centros_medicos.nombre,
  57.  
  58. profesionales_titulos.texto,
  59.  
  60. usuarios.apellidos,
  61. usuarios.nombres,
  62. usuarios.apellidos,
  63.  
  64. " "
  65. ) LIKE "%pedro%"
  66.  
  67. GROUP BY usuarios.id
  68.  
  69. ORDER BY
  70. tiene_foto,
  71. usuarios.apellidos,
  72. usuarios.nombres
  73. ');


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: Graphixx en 2 Septiembre 2014, 00:19 am
WHK ,
que diferencia hay entre importar la variable asi:
Código
  1. nombres='$nombres',
A importar la variable asi:
Código
  1. nombres= "'.$nombres.'",
Gracias.


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: WHK en 2 Septiembre 2014, 04:27 am
Varias, la primera es costumbre, la segunda es mayor control, no puedes evaluar todo tipo de objetos sobre comillas dobles, yo acostumbro a usar objetos y entre comillas dobles casi nunca funcionan o funcionan mal y terminan en fugas de información inesperadas.

Con comillas simples el string no se evalua, con comillas dobles si se evalua, el problema viene cuando usas mucho código html dentro de código php, por ejemplo:

Código:
<a href="" <?php id($x) echo 'class="active"'; ?>>xxx</a>

Si lo hubiera hecho en php con comillas dobles hubiera tenido que haber escrito html con comillas simples y puede ser peligroso porque casi todos los lenguajes de programación incluyendo php filtran comillas dobles para prevenir los xss pero no las simples a menos que des parámetros especiales a las funciones como ENT_QUOTES.

Mayor control también porque puedes procesar funciones sobre variables entremedio, por ejemplo:

Código
  1. <?php
  2. $extras = 'ghi';
  3. echo '
  4.  abc
  5.  def
  6.  '.$this->str->escapeHtml($extras).'
  7.  jkl
  8. ';

Hacer esto con comillas dobles poniendo las variables por dentro puede generar:

Mal acostumbramiento a usar variables que tienen solo un uso de vida, por ejemplo:
Código
  1. <?php
  2. $extras = $this->str->escapeHtml('ghi');
  3. echo "
  4.  abc
  5.  def
  6.  $extras
  7.  jkl
  8. ';

Ahi hay varios problemas, uno que $extras ya no lo podrás usar en un contexto que no sea html porque va filtrada,, por ejemplo si lo quieres usar en una consulta sql o dentro de una variable javascript no te servirá porque estará codificada en html, el orto problema es que talves quieras poner un simbolo peso entremedio y tendrás que usar carácteres de escape porque se va a evaluar y puede ser peligroso, otro problema como lo dije antes va en los códigos html, por ejemplo simplemachines (el sistema en php de este foro) escribe mucho las etiquetas html en echo por lo cual debes usar muchisimos carácteres de escape porque tanto php como el html los escriben en comillas dobles o podrás caer en agujeros de seguridad o en problemas de codificación.

Por ejemplo:

Código
  1. <?php
  2. echo "<a href=\"#\">\$ 0.00 pesos</a>";

Entonces para no hacer trabajo de más, prevenir agujeros de seguridad, hacer que php no evalue haciendo los echos mas rápidos, prevenir tener que estar escribiendo a cada rato carácteres de escape, etc etc mejor te acostumbras a usar una sola manera de hacer las cosas... para mi la mejor manera y la mas correcta es usar siempre código php con comillas simples, concatenar variables con un punto y escribir código html en comillas dobles.

Cuando necesito escribir código javascript dentro de php escribo php en comillas simples y javascript en comillas dobles, pero cuando javascript lo escribo en un archivo solo entonces ahi lo uso también con comillas simples, solamente html es el único lenguaje que siempre siempre uso con comillas dobles y sin excepción, las consultas sql desde php las hago con comillas dobles y php con comillas simples.

De esta manera cuando voy a programar nunca tengo problemas ni enredos con las comillas y nunca me dan problemas de ningún tipo, salvo cuando debo escribir obligadamente comillas simples sobre comillas simples, ahi si uso las secuencias de escape pero son muy pocas las veces y trato de evitarlas, en html cuando necesito escribir valores con comillas simples y dobles uso html entities, como &quote;

Saludos.


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: Graphixx en 2 Septiembre 2014, 15:51 pm
Gracias compañero queda todo muy claro, nos salimos un poco del tema, pero todo nutre el aprendizaje en PHP.


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: JorgeEMX en 4 Septiembre 2014, 06:43 am
Otra forma de poder usar variables, sobre todo objetos, entre comillas dobles y que sea menos confuso:

Código
  1. echo "Hola {$obj->text}";
  2.  

Y si, la manera correcta es identar bien los strings como lo indica WHK. Así no tendrás enemigos y tu vida nunca correrá peligro  :D


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: #!drvy en 4 Septiembre 2014, 13:48 pm
Hola, vengo a confundiros un poco xD

Como WHK ha mencionado la mejor manera de concatenar un string con otro es usando punto(.).

Pero, una manera mas eficiente de concatenear varios strings en un echo, es usando coma(,).

Código
  1. echo 'Hola ',$nombre,', tienes ',$mensajes,' mensajes';

La razón es que a diferencia de las variables o return, el constructor echo permite introducir varios parámetros.

http://php.net/manual/en/function.echo.php

Benchmark
http://www.fusionswift.com/2010/05/php-concatenation-benchmark-comma-vs-period/

Saludos


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: WHK en 4 Septiembre 2014, 15:15 pm
Antes usaba comas también, el problema es que las comas generan una mala costumbre y puede ocacionar muchos problemas, especialmente con las condicionales inline, por ejemplo:

Código
  1. <?php
  2. echo 'Hola, mi nombre es '.($nombre ? htmlspecialchars($nombre, ENT_QUOTES) : 'desconocido').'!'.

Cuando tienes muchas comas y muchos condicionales tendrás muchas excepciones en php a menos que vayas encerrando cada cosa entre parentesis, pero para evitar eso emjor usas puntos :)

Por ejemplo si miras el código fuente de simplemachines verás que casi todo está con comas y condicionales inline y hacer cambios en esa ensalada de código dentro de un mismo echo es muy dificil, normalmente debes normalizar el código pasando todo a puntos y usando condicionales por separado, pero si ves el código fuente de otros sistemas webs mas profesionales y mejores hechos como wordpress verás que todo está hecho con cierre y apertura de etiqueta php y concatenaciones con puntos, por ejemplo:

Código
  1. <h1>Hola, mi nombre es <?php _($nombre ? $nombre : 'Desconocido') ?>!.</h1>

Ahora, imagina la cantidad de código que hago durante el año, imagina si mañana dijera... sabes, es mejor hacer comas que puntos y comillas simpels que dobles... imagina la cantidad de código que tendría que ir modificando todos los dias para poder continuar con mis proyectos personales, por eso me documenté, averigué, filosofé como no sabes y llegué a la conclusión que en todos mis proyectos de php debo seguir la misma línea, la mejor para mi la cual es usar puntos para concatenar, usar apertura y cierre de tag php para escribir código html como en el ejemplo anterior, usar comillas simples para cerrar variables o strings, usar comillas dobles para código html, simples para javascript, prevenir el uso de secuencias de escape, nunca juntar la lógica de un sitio entremedio del código html (para eso se separa una página entre controladores y vistas), jamás hacer consultas sql dentro del mismo archivo php con contenido html, para eso existen los controladores (vease modelo mvc (http://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador)), nunca codificar variables antes de usarlas, siempre codificarlas en el mismo lugar donde se usará, siempre identar incluyendo parrafos y código y nunca sobrepasar una cierta longitud que provoque que se vea la barra de desplazamiento horizontal de mi editor de código a menos que sea por causa de muchas identaciones para muchas anidaciones, siempre comentar el código con /**/ y no con // porque la momento de querer compilar tendrás un dolor de cabeza gigante, además usas menos código, no tienes que comentar cada linea cuando quieres hacer comentarios con mas de una línea y se vería bastante feo la mitad del código comentado con Ç// y la otra mitad con /**/, asi que mejor uso todo con /**/, excepto cuando quieres hacer comentarios dentro de código comentado, nunca usar funciones de php obsoletas, nunca dejar visible el reporte de errores de php en producción, de preferencia usar boilerplate (http://html5boilerplate.com/) o initializr (http://www.initializr.com/) para comenzar los proyectos, etc.

Se ve muy interesante el Benchmark que pegaste, pero aun así prefiero usar puntos para concatenar :p

Saludos.


Título: Re: [AYUDA] Como se concatenan saltos de linea en el codigo de PHP .= o &&
Publicado por: Graphixx en 6 Septiembre 2014, 15:52 pm
Como es eso de partirlo? lo que debes hacer es acostumbrarte a identar los códigos estén en el legunaje que estén:
Código
  1. <?php
  2. /* escribimos la sentencia MySQL */
  3. $sentencia = '
  4. UPDATE '.$tabla.'
  5. SET
  6. nombres = "'.$nombres.'",
  7. apellidos = "'.$apellidos.'",
  8. direccion = "'.$direccion.'",
  9. ciudad = "'.$ciudad.'",
  10. historial_clinico = "'.$historial_clinico.'"
  11. WHERE qr = "'.$qr.'"
  12. ';
Esta era la solucion, barbaro, no sabia que podia dar saltos de linea en la consulta SQL jejeje, WHK sos el mejor!!!!