ahsc 1 Denunciar post Postado Novembro 19, 2009 Olá a todos. Tenho uma classe, peguei na net e é muito boa por sinal, que tem um método para inserção de banco de dados. Utilizo ela há algum tempo e até o presente momento não havia erro com ela. Agora eu tenho um problema de inserção de conteúdo no banco de dados quando eu tenho alguma aspa no meio do texto. Ela pode ser tanto simples quanto dupla que dá erro. Esse é o método. function insere($tabela, $dados) { /* Função para executar uma inserção em uma tabela no mysql. Crie um array como a seguir contendo os campos e os seus respectivos valores. $dados=array( "Campo1" => "Valor1", "Campo2" => "Valor2", "Campo3" => "Valor3"); Em seguida passe como parametro a tabela e o array com os dados para executar a inserção. $con->insere(\'Tabela1\', $dados); */ $arrcampos=array_keys($dados); $arrvalores=array_values($dados); $numcampos=count($arrcampos); $numvalores=count($arrvalores); if($numcampos == $numvalores) { $sql="INSERT INTO $tabela ("; foreach($arrcampos as $campo) { $sql.="$campo,"; } $sql=substr_replace($sql,")",-1,1);//tirando a ultima virgula $sql.=" VALUES("; foreach($arrvalores as $valor) { $sql.='"'.$valor.'",'; } $sql=substr_replace($sql,")",-1,1);//tirando a ultima virgula } else { echo "<div style='margin-top:35%; text-align:center'>Erro ao checar número de campos e valores.\n<br /> <a href=javascript:history.back(1)>voltar</a></div>"; exit(); } $this->query=$sql; $this->sqlExec(); //print "dados inseridos com sucesso."; } } e aqui a chamada do método: //define objetos (campos de input) $organizar = new Cadastros($_POST['organizar']); $nivel = new Cadastros($_POST['nivel']); $titulo = new Cadastros($_POST['titulo']); $resumo = new Cadastros($_POST['resumo']); $sobre = new Cadastros($_POST['sobre']); $noticia = new Cadastros($_POST['noticia']); $posicao = new Cadastros($_POST['posicao']); $leiaMais = "leia mais"; $data = date("Y-m-d"); $arquivo = new Cadastros($_FILES['userfile']['name']); $dados3 = array( "nivel" => "".$nivel->getNomeCampo()."", "sobre" => "".$sobre->getNomeCampo()."", "titulo" => "".$titulo->getNomeCampo()."", "resumo" => "".$resumo->getNomeCampo()."", "dia" => "".$data."", "leiaMais" => "".$leiaMais."", "noticia" => "".$noticia->getNomeCampo()."" ); //recupera o último id inserido $con3->insereNoticia('noticias', $dados3); O problema está na hora em que o usuário vai inserir uma notícia e nessa notícia tem ""(aspas duplas ou simples) gera erro na inserção no bd. Já tentei de várias formas e até agora não consegui. alguém tem idéia de como posso resolver isso? obrigado a quem puder me ajudar. Compartilhar este post Link para o post Compartilhar em outros sites
Helena Barden 0 Denunciar post Postado Novembro 19, 2009 Já tento coloca \ na frente da aspa? Compartilhar este post Link para o post Compartilhar em outros sites
MLeandroJr! 2 Denunciar post Postado Novembro 19, 2009 Depois de: $noticia = new Cadastros($_POST['noticia']); Coloque: $noticia = addslashes($noticia); A função addslashes() escapa as aspas existentes na string. Compartilhar este post Link para o post Compartilhar em outros sites
ahsc 1 Denunciar post Postado Novembro 19, 2009 Olha o erro que deu Erro ao executar query. Erro: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dispara: \'Não vão tirar esse título do São Paulo na mão grande\',Vice de futebo' at line 1 Depois de: $noticia = new Cadastros($_POST['noticia']); Coloque: $noticia = addslashes($noticia); A função addslashes() escapa as aspas existentes na string. Sim, já tentei isso mais não rolou tb. Já tento coloca \ na frente da aspa? Compartilhar este post Link para o post Compartilhar em outros sites
felipebmfaria 1 Denunciar post Postado Novembro 19, 2009 Verifique se o servidor está com magic_quotes "on" ou "off"... se estiver on, você nao precisa usar addslashes, pq o magic_quotes faz isso p você... se estiver off, use addslashes... espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites
MLeandroJr! 2 Denunciar post Postado Novembro 19, 2009 Está dando problema nas aspas simples. :angry: Em vez disso então, vamos tentar: $noticias = str_replace("\"", "\\\"", $noticias); Isso escapará somente as aspas duplas. Compartilhar este post Link para o post Compartilhar em outros sites
ahsc 1 Denunciar post Postado Novembro 19, 2009 Erro ao executar query. Erro: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dispara: \"Não vão tirar esse título do São Paulo na mão grande\",Vice de futebo' at line 1 erro apresentando. Tô ficando loko com isso. O problema é que não dá para por nem aspas simples nem dupla. tá difícil isso. Compartilhar este post Link para o post Compartilhar em outros sites
ahsc 1 Denunciar post Postado Novembro 19, 2009 Putz, finalmente funfou. Foi com addslashes mesmo. Vwl pela força. Depois de: $noticia = new Cadastros($_POST['noticia']); Coloque: $noticia = addslashes($noticia); A função addslashes() escapa as aspas existentes na string. Compartilhar este post Link para o post Compartilhar em outros sites