Ir para conteúdo
Fórum Script Brasil
  • 0

Mysql Alterando Estrutura De Um Texto Com Muitos Espaços


Rafa Librenz

Pergunta

E aí, pessoal.

Procuro ajuda em um pequeno detalhe que está me causando um grande problema.

Estou trabalhando com PHP e MySQL, desenvolvendo um site de cifras para violão. O objetivo é fazer um site simples, com poucos recursos, mas que seja funcional. Vou publicar apenas as cifras que eu mesmo faço.

O funcionamento dele é simples: index.php lista todas as cifras existentes no banco de dados, dando um link para clicar e visualizar a cifra.

O banco de dados tem essa estrutura:

Tabela 'cifras', com 4 campos:

id, int(11), auto-increment, PRIMARY

artista, varchar(99)

musica, varchar(99)

cifra, LONGTEXT

O index.php lista todos as cifras assis:

"$artista - $musica", que quando clicados abrem "musica.php?id=$id"

musica.php tem somente este código:

<?
require("connect_db_cifras.php");
$id = $_GET['id'];
$sql = "SELECT * FROM cifras WHERE `id` = $id";
$pegar = mysql_query("$sql");
while ($sql = mysql_fetch_array($pegar) ) {
$cifra = $sql["cifra"];
echo "$cifra";
}
?>

Ou seja, ele simplesmente escreve no HTML exatamente do que está armazenado no campo 'cifra'.

O que está armazenado do campo 'cifra' nada mais é do que a CIFRA! Essa cifra eu escrevo no Microsoft Word, exporto pra HTML (filtrada) e o que eu coloco nesse campo é o código HTML escrito pelo Word.

Até aí tudo bem. O funcionamento tá perfeito, só que o problema é que as cifras são cheias de espaços para colocar os acordes no lugar certo.

Vejam esse arquivo:

http://librenz.prophp.org/bruno_e_marrone_...m_as_rosas.html

O que separa um acorde do outro na mesma linha são espaços.

Mas olha o que acontece quando você acessa a cifra pelo banco de dados:

http://librenz.prophp.org/musica.php?id=3

Os espaços somem e os acordes ficam amontoados, inutilizando grande parte da função da cifra (colocar os acordes no lugar certo).

Estou montando um painelzinho de administração, onde vou poder inserir, modificar e deletar as cifras do site. Por enquanto só está pronto o sistema de inserção, que se você se interessa em me ajudar, pode usar à vontade:

http://librenz.prophp.org/admin

user: temp

senha: usuario

A minha dúvida mortal é: Como faço para que todos os espaços sejam exibidos?

Já perdi horas com isso. O que eu acho muito estranho é que o código-fonte do arquivo original gerado pelo Word e da página gerada por musica.php é exatamente o mesmo, mas é exibido de forma diferente.

Alguém sabe o que eu posso tentar?

Obrigado.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Olha no seu código fonte... os espaços estão lá... o que está acontecendo então é o fato de você estar dando espaços apenas apertando a tecla de espaço... troque os espaço por "&nbsp;" (sem as aspas) esse código corresponde ao espaço e é corretamente interpretado pelo navegador... qualquer coisa você pode utilizar o próprio php para trocar espaços em branco por &nbsp;

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, eu acho que o buraco é mais embaixo. Eu sei que se eu trocar os espaços por "&nbsp;" eles vão aparecer como eu quero, mas isso daria um trabalho do cão. Só seria possível se o word gerasse o HTML com eles. Mas o arquivo HMTL que o word gera (com espaços SIMPLES) é exibido de acordo com o que eu quero. Porque quando o PHP gera a página com o que está no banco de dados os espaços não aparecem?

Olha só... Este link e este outro têm o código-fonte exatamente igual! Porque ficam diferentes???

Ah... Tem outra coisa...

Eu tentei mudar o campo cifra de 'LONGTEXT' pra 'LONGBLOB'. Aí quando eu vou inserir um registro na tabela ele pede pra eu upar um arquivo (isso lá no PHP MyAdmin). Assim deu certo!

Só que eu não consegui fazer uma interface para envio do arquivo no meu painel de controle.

Eu tentei usar assim:

$sqlinsert = "INSERT INTO cifras (id, artista, musica, cifra) VALUES ('', '$artista', '$musica', LOAD_FILE('$cifra'))";

Mas não funcionou... Eu queria colocar o arquivo no banco de dados exatamente da forma que o PHP MyAdmin colocou. Alguém sabe como fazer?

Editado por Rafa Librenz
Link para o comentário
Compartilhar em outros sites

  • 0

Campos do tipo BLOB são destinados a gravação de arquivos no banco de dados, por isso ele pediu para enviar um arquivo...

Como eu disse, você não precisa alterar os espaços em branco por &nbsp; manualmente, faça isso usando a str-replace...

Pode até não parecer, mas o correto é o navegador NÃO exibir os espaços em branco que (tirando o espaço entre uma palavra em outra) são inseridos apertando consecutivamente a tecla de espaço, inclusive em editores decentes(ex. dreamweaver) o cara pode morrer apertando a tecla de espaço que ele só vai permitir um espaço entre cada palavra... nada mais (no caso para do dreamweaver para inserir vários espaços entre uma palavra e outra o cara tem que combinar ctrl+shift+tecla de espaço, e ele insere o espaço e no html joga o código &nbsp;).

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Wander Soares

Olá Rafa, beleza

cara tive esse problema num sistema que estava desenvolvendo e é muito fácil de resolver veja abaixo, outra coisa se possível me envia esse sistema pra eu somar com um que estou criando aqui, valeu, um abraço. wandersas@hotmail.com

sobre o problema só precisa acrescenter isto <pre> antes de $cifra como segue:

$cifra = $sql["cifra"];

echo "<pre>$cifra";

}

?>

té mais..............

Link para o comentário
Compartilhar em outros sites

  • 0
Guest wander soares

Cara você tentou isso

<?

require("connect_db_cifras.php");

$id = $_GET['id'];

$sql = "SELECT * FROM cifras WHERE `id` = $id";

$pegar = mysql_query("$sql");

while ($sql = mysql_fetch_array($pegar) ) {

$cifra = $sql["cifra"];

echo "<pre> $cifra";

}

?>

não tem erro ele vai fazer com que os acordes fiquem no lugar certo na cifra.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...