Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

problemas com substr()

Recommended Posts

Olá.

Dominio

www.gapde.com.br

 

Na pagina principal index_conteudo.php

Tem uma chamda á função substr() do php.

 

minha chamada é assim:

 
echo $foto2."".
$nome_depoente."".
substr($descricao_depoimento,0,50)."...
Leia mais..
";

Toda a parte:

    <td valign="top"> 
      <center>
         <a href="depoimentos.php?acao=listar"><font face="castellar" size="5"><b>Depoimentos</b></font></a><br />
         de deficientes.
      </center><br />

	 <?
	   $depoimentos=$MySQL->query("
								select 
								  de.id_depoimento, 
								  en.nome_entrevistado,
								  en.foto_entrevistado,
								  de.descricao_depoimento
								from 
								  depoimentos de
								  inner join entrevistado en on en.id_entrevistado=de.id_entrevistado
								order by 
								  de.id_depoimento desc
								limit 0,3
								   ");
		if(mysql_num_rows($depoimentos)==0) {echo "Ainda não há depoimento cadastrado!";}
		else {
		      print " Depoimento de:<br>";
			  while(list($id_depoimento,$nome_depoente, $foto, $descricao_depoimento)=mysql_fetch_row($depoimentos))
				{				  
				   include("global/funcoes_php/foto_ver.php");

 					   echo 
					     $foto2."<br>
						 <a href=\"depoimentos.php?acao=exibir&id_depoimento=$id_depoimento\">".$nome_depoente."</a><br>".
						 substr($descricao_depoimento,0,50)."...
						 <a href=\"depoimentos.php?acao=exibir&id_depoimento=$id_depoimento\">Leia mais..</a><br>
						 ";
				}
		      }
        ?>         
     </td>

Viu o substr()?

No Mysql, descricao_depoimento é longblob

Pois é, ela não esta funcionando no servidor do UOLHOST.

Na verdade, quando apena chamo o campo , ele é exibido normalmente. Porem, quando coloco ele na substr(). ai, não exibe nada e nem da erro.

Tem como fazer uma função php, se não funcionar, exibir o erro?

O que devo fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara fiz assim:

SUBSTRING(de.descricao_depoimento, 1, 50)

Voce acredita que esta acontecendo a mesma coisa?

 

Não retorna valor.

 

Nem no banco nem no php.

 

Os caras do suporte te deixam 7 dias sem reposta.

 

É dificil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

C:\dev\mysql\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.41 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use exemplo
Database changed

mysql> select @var := 'andrey knupp', substring( @var, 1, 5 ) as substring;
+------------------------+-----------+
| @var := 'andrey knupp' | substring |
+------------------------+-----------+
| andrey knupp           | andre     |
+------------------------+-----------+
1 row in set (0.01 sec)

mysql>

 

só você usar a função 'substring' no seu campo, tipo:

SELECT substring( texto, 1, 50 ) as texto FROM .. INNER JOIN .. WHERE .. 

 

Lembrando que se você colocar 'texto', 0, 50 .. vai dar errado, 0 é considerado como false, no PHP também, mais no MySQL vai ser retornado NULL, veja:

mysql> select @var := 'andrey knupp', substring( @var, 0, 5 ) as substring;
+------------------------+-----------+
| @var := 'andrey knupp' | substring |
+------------------------+-----------+
| andrey knupp           |           |
+------------------------+-----------+
1 row in set (0.00 sec)

 

se você quiser concatenar os 'três' pontinhos também pode ..

mysql> select @var := 'andrey knupp', concat( substring( @var, 1, 6 ), ' ... leia mais ' ) as texto;
+------------------------+-----------------------+
| @var := 'andrey knupp' | texto                 |
+------------------------+-----------------------+
| andrey knupp           | andrey ... leia mais  |
+------------------------+-----------------------+
1 row in set (0.00 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara fiz assim:

SUBSTRING(de.descricao_depoimento, 1, 50)

Voce acredita que esta acontecendo a mesma coisa?

 

Não retorna valor.

 

Nem no banco nem no php.

 

Os caras do suporte te deixam 7 dias sem reposta.

 

É dificil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, se não está retornando no banco, é possivelmente problema na sua tabela, da uma olhada aí.

pois fazendo o substring diretamente da tabela, funcionou perfeitamente, veja:

C:\dev\mysql\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.41 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use exemplo;
Database changed
mysql> create table teste(
   ->     texto text not null
   -> )engine = myisam row_format = default;
Query OK, 0 rows affected (0.07 sec)

mysql> insert into teste values( 'Testando uma função nativa do mysql, fazendo um substr diretamente no sql' );
Query OK, 1 row affected (0.02 sec)

mysql> select concat( substring( teste.texto, 1, 10 ), ' ... leia mais' ) as texto from teste;
+--------------------------+
| texto                    |
+--------------------------+
| Testando u ... leia mais |
+--------------------------+
1 row in set (0.00 sec)

mysql> select concat( substring( teste.texto, 1, 50 ), ' ... leia mais' ) as texto from teste;
+------------------------------------------------------------------+
| texto                                                            |
+------------------------------------------------------------------+
| Testando uma função nativa do mysql, fazendo um su ... leia mais |
+------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha.

Se eu coloco assim:

substr($descricao_depoimento,1,50)

No php.

Olha em

www.gapde.com.br o que que saiu na parte de depoimentos. Onde tem ma foto de uma moça. abaixo dela. Detalhe: localmente, funciona normal e em outro provedor tambem.

 

Rapaz.

 

Exportei a tabela e os dados olha só o que gravou no campo descricao_depoimentos no lugar do texto que eu coloquei:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;


CREATE TABLE depoimentos (
 id_depoimento int(5) unsigned NOT NULL AUTO_INCREMENT,
 id_def_tipo int(5) NOT NULL DEFAULT '0',
 id_entrevistado int(5) NOT NULL DEFAULT '0',
 descricao_depoimento longblob,
 PRIMARY KEY (id_depoimento)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

INSERT INTO depoimentos (id_depoimento, id_def_tipo, id_entrevistado, descricao_depoimento) VALUES
(2, 2, 3, 0x3c50207374796c653d224d415247494e3a2030636d2030636d20313070742220636c6173733d4d736f4e6f726d616c3e3c464f4e542073697a653d333e3c464f4e5420666163653d43616c696272693e446573646520323030342070617274696369706f20646f2070726f6772616d612028696e636c7573c3a36f206e6f206d65726361646f2064652074726162616c686f20706172612050504453292c206d617320736f6d656e746520656e74c3a36f20c3a92071756520636f6e73656775692074657220756d20656d707265676f20646520636172746569726120617373696e6164612e3c3f786d6c3a6e616d65737061636520707265666978203d206f206e73203d202275726e3a736368656d61732d6d6963726f736f66742d636f6d3a6f66666963653a6f666669636522202f3e3c6f3a703e3c2f6f3a703e3c2f464f4e543e3c2f464f4e543e3c2f503e0d0a3c50207374796c653d224d415247494e3a2030636d2030636d20313070742220636c6173733d4d736f4e6f726d616c3e3c464f4e542073697a653d333e3c464f4e5420666163653d43616c696272693e466f6920756d61206772616e646520656d6fc3a7c3a36f2070617261206d696d2c20706f6973206572612061207072696d656972612076657a207175652076657374696120756d20756e69666f726d6520646520756d6120656d70726573612c2073656e646f20617373696d206520736162656e646f206461206772616e64652063617061636964616465207175652074696e686120617272656761636569206173206d616e67617320652066756920c3a1206c7574612e3c6f3a703e3c2f6f3a703e3c2f464f4e543e3c2f464f4e543e3c2f503e0d0a3c50207374796c653d224d415247494e3a2030636d2030636d20313070742220636c6173733d4d736f4e6f726d616c3e3c464f4e542073697a653d333e3c464f4e5420666163653d43616c696272693e436f6d206f2061706f696f2064612064697265c3a7c3a36f20646f2047415044452028677275706f2064652061706f696f206120706573736f6120636f6d20646566696369c3aa6e636961292065207365757320706172636569726f7320636f6e7365677569206d65207175616c696669636172206d656c686f722c2065206173206f706f7274756e69646164657320666f72616d20617061726563656e646f202c616761727265692d617320636f6d206166696e636f2c20706f697320657261207475646f207175652073656d70726520717569732e3c6f3a703e3c2f6f3a703e3c2f464f4e543e3c2f464f4e543e3c2f503e0d0a3c50207374796c653d224d415247494e3a2030636d2030636d20313070742220636c6173733d4d736f4e6f726d616c3e3c464f4e542073697a653d333e3c464f4e5420666163653d43616c696272693e486f6a652c2061706573617220646f20706f75636f2074656d706f2c206d652073696e746f206d7569746f207265616c697a6164612e20506f73736f2064697a65722061676f72612071756520736f7520756d61206369646164c3a32c20706f69732074656e686f20756d2074726162616c686f20717565206d65206461206469676e69646164652c206520756d61206d656c686f72207175616c696461646520646520766964612c20616772616465c3a76f207072696d6569726f206120446575732c206520746f64617320617320706573736f617320717565206d6520616a75646172616d3c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e203c2f5350414e3e6520636f6e74696e75616d206d652064616e646f20666f72c3a761202c20706f727175652073656d20656c6173206575206ec3a36f207465726961206368656761646f206174652061717569202c7365692071756520652073c3b33c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e203c2f5350414e3e636f6d65c3a76f2c20736f6e686f20656d2069722061696e6461206d616973206c6f6e67652c2065207175656d207361626520756d206469612066617a657220756d6120666163756c646164652c207365692071756520657374652065206f20736f6e686f206465206d7569746f7320505044533c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e203c2f5350414e3e652065737065726f2071756520636f6d203c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e3c2f5350414e3e6120616a7564613c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e203c2f5350414e3e646f2047415044453c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e203c2f5350414e3e65206f2061706f696f206465207365757320706172636569726f7320706f7373616d6f7320636865676172206cc3a12e3c6f3a703e3c2f6f3a703e3c2f464f4e543e3c2f464f4e543e3c2f503e0d0a3c50207374796c653d224d415247494e3a2030636d2030636d20313070742220636c6173733d4d736f4e6f726d616c3e3c464f4e542073697a653d333e3c464f4e5420666163653d43616c696272693e526f73656e693c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e203c2f5350414e3e4d75726961c3a92c3c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e203c2f5350414e3e3237206465206a756e686f20323031312e3c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e203c2f5350414e3e3c5350414e207374796c653d226d736f2d737061636572756e3a20796573223e3c2f5350414e3e3c2f464f4e543e3c2f464f4e543e3c6f3a703e3c2f6f3a703e3c2f503e);

Mas vai entender.

Quando clicko no nome da moça. abre o depoimento dela. E lá, eu chamo a descriçao completa. E nela, vem o texto certinho,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for aspas, acho que um addslashes resolve .. mais fique sabendo que é errado utilizar longblob pra esse tipo de coisa

você vai gastar memoria no mysql atoa, blob é pesado .. troque para texto

CREATE TABLE depoimentos (
 id_depoimento int(5) unsigned NOT NULL AUTO_INCREMENT,
 id_def_tipo int(5) NOT NULL DEFAULT '0',
 id_entrevistado int(5) NOT NULL DEFAULT '0',
 descricao_depoimento text,
 PRIMARY KEY (id_depoimento)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se usa campo blob pra guardar informações desse tipo, troque para text

Estou usando blob por, na maioria dos casos, os textos serem extensos.

 

Estou errado?

 

Devo mesmo usar text?

mesmo quando ao texto forem enviadas tags html?

Compartilhar este post


Link para o post
Compartilhar em outros sites

blob é pesado .. troque para texto

CREATE TABLE depoimentos (
 id_depoimento int(5) unsigned NOT NULL AUTO_INCREMENT,
 id_def_tipo int(5) NOT NULL DEFAULT '0',
 id_entrevistado int(5) NOT NULL DEFAULT '0',
 descricao_depoimento text,
 PRIMARY KEY (id_depoimento)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

 

Como o Andrey Knupp falou, troque para text

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.