Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] str_replace y sql

Estas en el tema de str_replace y sql en el foro de PHP en Foros del Web. Primero que nada, gracias a todos por ayudarme y tomarse el tiempo para leer mi pregunta. Esto es lo que trato de hacer: Necesito que ...
  #1 (permalink)  
Antiguo 02/04/2016, 09:19
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 8 años
Puntos: 0
Pregunta str_replace y sql

Primero que nada, gracias a todos por ayudarme y tomarse el tiempo para leer mi pregunta.

Esto es lo que trato de hacer:

Necesito que determinados "textos", por así llamarlo, en un determinado bloque sean reemplazados por otros, por ejemplo: cuando el texto #forosfelweb sea cargado, se reemplace por <b>#ForosDelWeb</b>, pero para esto, quiero que los textos que se vallan a reemplazar, sean tomados de una tabla en mi base de datos llamada "acciones", de las filas "original" (referente a texto original) y "reemplazo" (referente al texto por el que será reemplazado), este es el código con el que estoy tratando de lograr mi función:



Código HTML:

<?php  
 include('../procesos/abre_conexion.php');  

    $query99 = "SELECT * from acciones";     // Esta linea hace la consulta 
    $result99 = mysql_query($query99);  

    $registro99 = mysql_fetch_array($result99)   ?>
    
    <?php
// creamos la funcion
function howls($valor){
// la variable $caritas
// guardara como valor
// un array con los posibles caracteres ;)
$variables = array('$registro99[original]',);
// $imagenes, tambien contendra un array
// con las imagenes que usaremos
$sus = array('$registro99[reemplazo]',);
// hacemos el reemplazo
return (str_replace($variables, $sus, $valor));
}
// habilitamos el bufer de salida
ob_start("howls");
?>
    
    #SalirA beber Cerveza Montoro en barrio santo con Andreita.
    
    <?php
// aqui desabilitamos el bufer
ob_end_flush();
?>

    <? include('../procesos/cierra_conexion.php'); ?>




Pero no me funciona, alguna sugerencia?
  #2 (permalink)  
Antiguo 02/04/2016, 14:27
Avatar de edgaralexanderfr  
Fecha de Ingreso: julio-2014
Ubicación: Caracas
Mensajes: 12
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: str_replace y sql

Hola,

El primer detalle que noto en tu función howls, son las líneas dónde asignas las variables de búsqueda y reemplazo, ya que estás guardando en un nuevo array un String, que contiene el array asociativo del registro de tu consulta con cada clave respectiva, ésto no es necesario.

Basta con pasar el array asociativo directamente con cada clave incluyéndo el búfer de entrada a la función str_replace, aquí reescribí un poco tu código para que tengas una mejor noción de ello:

Código PHP:
<?php
  
  
include('../procesos/abre_conexion.php');
  
  function 
howls ($buffer) {
    return 
str_replace($registro99['original'], $registro99['reemplazo'], $buffer);
  }
  
  
$query99    'SELECT * from acciones'// Ésta línea hace la consulta...
  
$result99   mysql_query($query99) or die(mysql_error());
  
$registro99 mysql_fetch_array($result99);
  
  
ob_start('howls');
  echo 
'#SalirA beber Cerveza Montoro en barrio santo con Andreita.';
  
ob_end_flush();
  
  include(
'../procesos/cierra_conexion.php');
  
?>
Puedes probarlo así a ver si te funciona, también agregué la condición 'or die(mysql_error())' para comprobar si no es error de la consulta en sí y si ésta te retorna un registro vacío.

También te recomendaría que hicieras lo mismo con tu conexión a la base de datos para descartar cualquier posible inconveniente, es todo lo que puedo decirte.

Un saludo y suerte...
  #3 (permalink)  
Antiguo 02/04/2016, 18:12
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 8 años
Puntos: 0
Respuesta: str_replace y sql

Hola Edgar! muchas gracias por responder, hice los cambios que me sugeriste, al pie de la letra, incluso intenté cambiando la comilla simple por doble comilla en las variables $registro99, y en un intento más removí dichas comillas, pero aún nada, ni error ni cambios en el texto.
  #4 (permalink)  
Antiguo 02/04/2016, 20:13
Avatar de edgaralexanderfr  
Fecha de Ingreso: julio-2014
Ubicación: Caracas
Mensajes: 12
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: str_replace y sql

Hola,

Intenta cambiando ésta línea:

Código PHP:
$registro99 mysql_fetch_array($result99); 
Por:

Código PHP:
$registro99 mysql_fetch_assoc($result99); 
Ahora los arrays deberían ser asociativos (accesibles mediante Strings) en vez de índices (números) como tal...

Buena suerte con ello...
  #5 (permalink)  
Antiguo 02/04/2016, 20:38
Avatar de edgaralexanderfr  
Fecha de Ingreso: julio-2014
Ubicación: Caracas
Mensajes: 12
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: str_replace y sql

(Lo siento, éste post se duplicó por error del sistema y no hallo cómo eliminarlo)

Hola,

Intenta cambiando ésta línea:

Código PHP:
$registro99 mysql_fetch_array($result99); 
Por:

Código PHP:
$registro99 mysql_fetch_assoc($result99); 
Ahora los arrays deberían ser asociativos (accesibles mediante Strings) en vez de índices (números) como tal...

Buena suerte con ello...
  #6 (permalink)  
Antiguo 02/04/2016, 21:35
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 8 años
Puntos: 0
Respuesta: str_replace y sql

Cita:
Iniciado por edgaralexanderfr Ver Mensaje
(Lo siento, éste post se duplicó por error del sistema y no hallo cómo eliminarlo)

Hola,

Intenta cambiando ésta línea:

Código PHP:
$registro99 mysql_fetch_array($result99); 
Por:

Código PHP:
$registro99 mysql_fetch_assoc($result99); 
Ahora los arrays deberían ser asociativos (accesibles mediante Strings) en vez de índices (números) como tal...

Buena suerte con ello...

No te preocupes! te agradezco tu nueva respuesta y te comento que continua sin funcionar, sé que no es problema de la conexión porque si imprimo las variables $registro99['original'] y $registro99['reemplazo'], imprime lo que debería. He buscado en varios foros y sitios web, también en inglés, y no logro encontrar nada al respecto.
  #7 (permalink)  
Antiguo 03/04/2016, 08:52
Avatar de edgaralexanderfr  
Fecha de Ingreso: julio-2014
Ubicación: Caracas
Mensajes: 12
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: str_replace y sql

Hola,

El principal inconveniente que veo aquí es el no poder determinar el error con facilidad, me parece extraño que PHP no te reporte algo al respecto, ¿estás seguro de tener a tu servidor habilitado para el reporte de errores...?

Puedes probar agregando éstas líneas en el tope de tu script (justo antes de incluir tu archivo de conexión y justo después de la apertura <?php):

Código PHP:
error_reporting(E_ALL);
ini_set('display_errors''1');
ini_set('display_startup_errors''1'); 
Puedes también provocar un error intencional en algún lado para probar, puedes poner uno de compilación como por ejemplo:

Código PHP:
funcionquenoexiste(); 
O uno de runtime:

Código PHP:
$a 5;
$b 0;
echo 
$a $b
Por lo que sé en algunas versiones de Apache el reporte de errores está deshabilitado a propósito por defecto por razones de seguridad, y en caso de ocurrir algún error comprometedor el usuario no pueda verlo...

Última edición por edgaralexanderfr; 03/04/2016 a las 09:01
  #8 (permalink)  
Antiguo 03/04/2016, 10:16
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 8 años
Puntos: 0
Respuesta: str_replace y sql

Este es el único error que me imprime, pero según yo no debería interferir, o si?

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /Applications/XAMPP/xamppfiles/htdocs/procesos/abre_conexion.php on line 24

cambié mysql por mysqli y me imprime este nuevo error diciendo que la base de datos no existe:ç

Warning: mysql_select_db() expects parameter 2 to be resource, object given in /Applications/XAMPP/xamppfiles/htdocs/procesos/abre_conexion.php on line 26
La Base de Datos howllermain NO EXISTE

Esto es lo que hay en mi archivo abre_conexion.php:

Cita:
<?php

// Parametros a configurar para la conexion de la base de datos

$hotsdb = "localhost"; // sera el valor de nuestra BD
$basededatos = "howllermain"; // sera el valor de nuestra BD

$usuariodb = "root"; // sera el valor de nuestra BD
$clavedb = ""; // sera el valor de nuestra BD

$tabla_db1 = "timeline"; // sera el valor de una tabla
$tabla_db2 = "pp"; // sera el valor de otra tabla
$tabla_db3 = "usuarios"; // sera el valor de otra tabla
$tabla_db4 = "comentarios"; // sera el valor de otra tabla
$tabla_db5 = "difusiones"; // sera el valor de otra tabla recomendaciones recs
$tabla_db6 = "joins"; // sera el valor de otra tabla
$tabla_db7 = "acciones"; // sera el valor de otra tabla
$tabla_db8 = "notificaciones"; // sera el valor de otra tabla



// Fin de los parametros a configurar para la conexion de la base de datos

$conexion_db = mysqli_connect("$hotsdb","$usuariodb","$clavedb")
or die ("Conexión denegada, el Servidor de Base de datos que solicitas NO EXISTE");
$db = mysql_select_db("$basededatos", $conexion_db)
or die ("La Base de Datos <b>$basededatos</b> NO EXISTE");
?>
  #9 (permalink)  
Antiguo 03/04/2016, 11:02
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 8 años
Puntos: 0
Respuesta: str_replace y sql

La conexión a la BD la está haciendo correctamente, el problema yo siento que rige en que la función de reemplazo no se está realizano correctamente por lo que veo.

Última edición por gesquivel; 03/04/2016 a las 11:58
  #10 (permalink)  
Antiguo 03/04/2016, 13:33
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 8 años
Puntos: 0
Respuesta: str_replace y sql

Lo resolví con el siguiente código:

Cita:
<?php

include('../procesos/abre_conexion.php');

$post = 'salir a beber Cerveza Montoro en barrio santo con Andreita';


$sqlconsulta = mysql_query("select * from acciones") or die("error consulta");

$i = 0;
$lib1 = array();
$lib2 = array();
while($rowNot = mysql_fetch_array($sqlconsulta)){
$lib1[$i]= $rowNot["original"];
$lib2[$i] = $rowNot["reemplazo"];
$i++;
}
$resultado = str_replace($lib1, $lib2, $post);
echo $resultado;

include('../procesos/cierra_conexion.php');

?>
Una pregunta amigo, cómo puedo meter esta consulta en un buffer como el anterior? para poder abrirlo y cerrarlo donde necesite cerrarlo.
  #11 (permalink)  
Antiguo 03/04/2016, 13:58
Avatar de edgaralexanderfr  
Fecha de Ingreso: julio-2014
Ubicación: Caracas
Mensajes: 12
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: str_replace y sql

Hola,

Ésta podría ser la solución (aunque un poco fea):

Código PHP:
<?php 

include('../procesos/abre_conexion.php'); 

$post 'salir a beber Cerveza Montoro en barrio santo con Andreita';


$sqlconsulta mysql_query("select * from acciones") or die("error consulta"); 

$i 0
$lib1 = array(); 
$lib2 = array(); 
while(
$rowNot mysql_fetch_array($sqlconsulta)){ 
$lib1[$i]= $rowNot["original"]; 
$lib2[$i] = $rowNot["reemplazo"]; 
$i++; 


define('LIB_1'serialize($lib1));
define('LIB_2'serialize($lib2));

function 
howls ($post) {
  return 
str_replace(unserialize(LIB_1), unserialize(LIB_2), $post);
}

ob_start('howls');
echo 
$post;
ob_end_flush();

include(
'../procesos/cierra_conexion.php'); 

?>
Deberías buscar aparte cómo pasar parámetros al callback de la función ob_start, ya que no estaría muy seguro, pero insisto, ¿para qué necesitas hacer ésto?.

Me parece más cómodo que reemplaces justo cuando vayas a hacer el echo, no le veo la utilidad a reemplazar con dicha función, no sé si la necesites para algo en particular, pero personalmente solo la he utilizado en caso que necesite ofuscar código HTML o algo por el estilo...

Un saludo...

Última edición por edgaralexanderfr; 03/04/2016 a las 14:21
  #12 (permalink)  
Antiguo 03/04/2016, 17:48
 
Fecha de Ingreso: abril-2016
Ubicación: Aguascalientes
Mensajes: 18
Antigüedad: 8 años
Puntos: 0
Respuesta: str_replace y sql

Planeaba hacerlo así por comodidad, tengo todos mis scripts por separados y gran parte de mi web trabajando con includes, no utilicé buffer, simplemente usé una variable, muchas gracias por el aporte!

Etiquetas: sql, str_replace
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 20:22.