Foros del Web » Programando para Internet » PHP »

Separar caracteres

Estas en el tema de Separar caracteres en el foro de PHP en Foros del Web. A ver si alguien sabe como va esto: Como puedo cortar una cadena de caracteres con php para meter cada caracter por separado en una ...
  #1 (permalink)  
Antiguo 19/05/2008, 08:05
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 0
Separar caracteres

A ver si alguien sabe como va esto:

Como puedo cortar una cadena de caracteres con php para meter cada caracter por separado en una tabla de la base de datos.

Ejemplo

yo escribo:

deporte, tarjeta, penalti, falta

Y mediante php que coja cada uno de los caraceteres y en mi tabla tags los meta por separado, cada uno en un registro.

Alguien sabe como se puede hacer?
  #2 (permalink)  
Antiguo 19/05/2008, 08:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Separar caracteres

Hola Hamwe,

Para eso usas la función explode o split.

Saludos.
  #3 (permalink)  
Antiguo 21/05/2008, 02:43
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 0
Respuesta: Separar caracteres

Gracias por la respuestar Gator, probé explode pero no me separa nada :

Código PHP:
<?php
// Ejemplo 1
$cadena "futbol#penalti#falta#tarjeta";
$elementos explode("#"$cadena);
echo 
$elementos[0]; // trozo1
echo $elementos[1]; // trozo2 
echo $elementos[2]; // trozo3
echo $elementos[3]; // trozo4 
?>
Me lo representa todo junto:

futbolpenaltifaltatarjeta
  #4 (permalink)  
Antiguo 21/05/2008, 03:06
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Respuesta: Separar caracteres

Cita:
Iniciado por Hamwe Ver Mensaje
Como puedo cortar una cadena de caracteres con php para meter cada caracter por separado en una tabla de la base de datos.
¿Quieres separar cada caracter? o cada palabra o término de los que están separados por comas?
__________________
Javascript Códigos - Bambú difunde
  #5 (permalink)  
Antiguo 21/05/2008, 03:14
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 0
Respuesta: Separar caracteres

Hola tunait

quiero separar cada caracter.

La historia es que quiero meter un formulario, entonces tu introduces una serie de caracteres separados por comas como los que indiqué antes y al darle enviar, con explode se me separe cada uno de ellos y se me ingresan en una tabla de mi base de datos
  #6 (permalink)  
Antiguo 21/05/2008, 03:24
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Respuesta: Separar caracteres

Perdona que insista pero es que me resulta muy extraño que quieras separar cada caracter y cuanto mejor maticemos mejor que mejor

usando deporte, tarjeta, penalti, falta

separarlos por caracteres sería
d <- un caracter
e <- otro caracter
p
o
r
t
e
s
,
...etc.
Es decir, se crearía entonces un registro para cada una de las letras y las comas.

¿Es eso lo que quieres?
  #7 (permalink)  
Antiguo 21/05/2008, 03:29
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 0
Respuesta: Separar caracteres

Ah coño perdona tienes razon estaba expresandome mal, sería cada palabra no cada caracter. Estaba pensando como si cada caracter fuera una palabra
  #8 (permalink)  
Antiguo 21/05/2008, 03:41
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Respuesta: Separar caracteres

jeje vale, ya me parecía raro

Pues mira, sobre lo que mencionabas antes de que habías hecho el explode y te lo representa todo junto pues en realidad es eso, te lo "representa" todo junto, pero está en realidad por separado sólo que al imprimirlo lo hace todo seguido

Código PHP:
<?php
// Ejemplo 1
$cadena "futbol#penalti#falta#tarjeta";
$elementos explode("#"$cadena);
echo 
$elementos[0]; // trozo1
echo $elementos[1]; // trozo2 
echo $elementos[2]; // trozo3
echo $elementos[3]; // trozo4 
?>
pídele mejor que te haga un print_r()

Código PHP:
<?php
// Ejemplo 1
$cadena "futbol#penalti#falta#tarjeta";
$elementos explode("#"$cadena);
print_r($elementos);
?>
Ahí verás que tienes un array con los elementos separados de la cadena inicial
  #9 (permalink)  
Antiguo 21/05/2008, 03:56
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 0
Respuesta: Separar caracteres

Estupendo!!! ahora si lo separa, voy a seguir investigando sobre lo que quiero hacer y si tengo alguna otra duda la pongo

Muchas Gracias!!
  #10 (permalink)  
Antiguo 21/05/2008, 04:07
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Respuesta: Separar caracteres

Recuerda que con el print_r() sólo ha cambiado la forma de visualizarlo pero en realidad con el explode() ya lo tenías por separado

Me alegra que hayas puesto algo en claro. Cualquier duda, pregunta


un saludo!
  #11 (permalink)  
Antiguo 21/05/2008, 04:17
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 0
Respuesta: Separar caracteres

Bien, ahora la siguiente duda:

Este es el codigo mediante el cual tengo un formulario y yo ingreso las palabras que quiero meter en mi base de datos, entonces... donde debe ir el explode para que me introduzca cada palabra como un registro?

Código PHP:

<?php require_once('../almacen/Connections/proba.php'); ?>
<?php
function GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
$editFormAction $_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset(
$_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2")) {
  
$insertSQL sprintf("INSERT INTO pais (id, nombre) VALUES (%s, %s)",
                       
GetSQLValueString($_POST['id'], "int"),
                       
GetSQLValueString($_POST['nombre'], "text"));

  
mysql_select_db($database_proba$proba);
  
$Result1 mysql_query($insertSQL$proba) or die(mysql_error());

  
$insertGoTo "insertar.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$insertGoTo .= (strpos($insertGoTo'?')) ? "&" "?";
    
$insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  
header(sprintf("Location: %s"$insertGoTo));
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
</form>

<form method="post" name="form2" action="<?php echo $editFormAction?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Pais:</td>
      <td><input type="text" name="nombre" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Insertar registro"></td>
    </tr>
  </table>
  <input type="hidden" name="id" value="">
  <input type="hidden" name="MM_insert" value="form2">
</form>
<p>&nbsp;</p>
</body>
</html>
  #12 (permalink)  
Antiguo 21/05/2008, 04:38
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Respuesta: Separar caracteres

Suponiendo que tengas un campo de nombre tags en donde se introducirán una serie de palabras separadas por comas y quieras que luego se inserten por separado cada una en un registro en la bd sería, esquemáticamente, algo así

input de formulario -> nombre = "tags"
Se envía ->
Se recoge el campo ->

$tags = isset($_POST["tags"]) ? $_POST["tags"] : false;

Si $tags es distinto de false separas los valores por comas

$tags = explode(",", $tags);

Creas la sentencia sql

Código PHP:
$sql "insert into tuTabla (valorTag) values \n";
$contador 0;
foreach(
$tags as $item){
    if(
$contador$sql .= ", ";
    
$contador++;
    
$sql .= "\n('$item')";

Eso te crearía la sentencia sql para introdocir los registros en tu bd

En base al ejemplo que dejaste al principio

deporte, tarjeta, penalti, falta

quedaría algo parecido a esto

Código PHP:
"insert into tuTabla (valorTag) values
('deporte'),
('tarjeta'),
('penalti'),
('falta')" 
  #13 (permalink)  
Antiguo 21/05/2008, 05:01
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 0
Respuesta: Separar caracteres

Olvidemos el primer ejemplo que di ya que era para hacerme una idea básica. Lo que realmente necesito conseguir es que quien entre en la web donde quiero insertar ese formulario pueda meter una serie de palabras que luego se estructuren en la base de datos.

Acabo de modificar el código pero mete todo en el mismo registro
Yo introduzco 3 paises separados por comas y me crea un nuevo registro con los 3 paises juntos no me los separa
Código PHP:
<?php require_once('../almacen/Connections/proba.php'); ?>
<?php
function GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
$editFormAction $_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}

if (
$tags = isset($_POST["tags"]) ? $_POST["tags"] : false); {
  
$tags explode(","$tags);
    
$insertSQL "insert into pais (tags) values \n";
$contador 0;
foreach(
$tags as $item){
    if(
$contador$sql .= ", ";
    
$contador++;
    
$insertSQL .= "\n('$item')";
}  

  
mysql_select_db($database_proba$proba);
  
$Result1 mysql_query($insertSQL$proba) or die(mysql_error());

  
$insertGoTo "insertar.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$insertGoTo .= (strpos($insertGoTo'?')) ? "&" "?";
    
$insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  
header(sprintf("Location: %s"$insertGoTo));
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
</form>

<form method="post" name="form2" action="<?php echo $editFormAction?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Pais:</td>
      <td><input type="text" name="tags" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Insertar registro"></td>
    </tr>
  </table>
  <input type="hidden" name="id" value="">
  <input type="hidden" name="MM_insert" value="form2">
</form>
<p>&nbsp;</p>
</body>
</html>
Estoy haciendo algo mal y no se el que, gracias por la ayuda y paciencia, soy algo novato en esto
  #14 (permalink)  
Antiguo 21/05/2008, 05:47
 
Fecha de Ingreso: abril-2008
Mensajes: 70
Antigüedad: 16 años
Puntos: 0
Respuesta: Separar caracteres

Acabo de conseguirlo tenia algo mal en el código:

El código final queda así por si alguien quiere emplearlo.

Código PHP:
<?php require_once('../almacen/Connections/proba.php'); ?>
<?php
function GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
$editFormAction $_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}

if (
$tags = isset($_POST["tags"]) ? $_POST["tags"] : false); {
  
$tags explode(","$tags);
    
$insertSQL "insert into pais (tags) values \n";
$contador 0;
foreach(
$tags as $item){
    if(
$contador)  $insertSQL .= ", ";
    
$contador++;
    
$insertSQL .= "\n('$item')";
}  

  
mysql_select_db($database_proba$proba);
  
$Result1 mysql_query($insertSQL$proba) or die(mysql_error());

  
$insertGoTo "";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$insertGoTo .= (strpos($insertGoTo'?')) ? "&" "?";
    
$insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  
header(sprintf("Location:"$insertGoTo));
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
</form>

<form method="post" name="form2" action="<?php echo $editFormAction?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Pais:</td>
      <td><input type="text" name="tags" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Insertar registro"></td>
    </tr>
  </table>
  <input type="hidden" name="id" value="">
  <input type="hidden" name="MM_insert" value="form2">
</form>
<p>&nbsp;</p>
</body>
</html>
  #15 (permalink)  
Antiguo 21/05/2008, 06:03
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Respuesta: Separar caracteres

Estupendo, me alegra que los solucionaras

Un saludo
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 16:44.