Ir para conteúdo

Arquivado

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

Nicolas Sousa

Problema com formulário comentarios

Recommended Posts

Tava a fazer criação de um formulario para colocação de comentarios , mas encontro varios erros e acabo por não descobrir como resolve-los... procuro ajuda para os identificar ...

 

P.S: Sou amador em programação de páginas

 

 

Erro: Parse error: syntax error, unexpected '$nome' (T_VARIABLE) in C:\xampp\htdocs\PAP\pages\insertcomment.php on line 9

 

 

Codigo

 

<?php include "connection.php"; 


 $nome=$_POST['nome'];
 $email=$_POST['email'];
 $comentario=$_POST['comentario'];


   $insert =  "INSERT INTO comentarios_tb (Nome,Email,Comentario);   VALUES ("$nome","$email", "$comentario")"; 
   $query = mysql_query($insert);
   
   echo "<center><h1> Obrigado o seu comentário foi enviado </h1> </center>";
   ?>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, tente assim

19 minutos atrás, Nicolas Sousa disse:

$insert =  "INSERT INTO comentarios_tb (Nome,Email,Comentario);   VALUES ("$nome","$email", "$comentario")"; 

 troque por 

$insert = "INSERT INTO 
comentarios_tb 
(nome, 
email, 
comentario)
VALUES(
'$nome',
'$email',
'$comentario')";

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola. seja bem vindo.
1. em principio, essas variaveis deveriam ser envoltas em aspas simples:

Citar

("$nome","$email", "$comentario")";

 

2. mas esse código está obsoleto; além de ser inseguro as funções mysql* foram removidas. pesquise sobre mysqli ou PDO.

 

3. aqui tem outras dicas boas:
https://forum.imasters.com.br/topic/542539-atenção-orientações-e-regras-do-fórum-de-php/

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Nicolas Sousa

Primeiro (Parse Error)

Aí diz que a variável não existe e você quer usar algo que não exite.

Para que essas variáveis existam a array super-global POST tem que ter esses índices para preencher assim como que você fez.

Se o arquivo não recebeu os dados post vai sempre acabar nesse erro. É aconselhável verificar se o(s) valor(es) existe(m) antes de atribuí-lo(s).

 

Sobre o mysql já disseram. Então o que posso mais ajudar é sugerindo que leia isso:

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde e obrigado.

 

Como já tinha dito sou um completo amador no que se trata desta linguagem e estou a aprender por casa visto que a escola não me fornece essa aprendizagem... Preciso de a aprender com urgência pelo menos o básico para criar um formulário de comentários e de reservas ate dia 10 de Julho para conseguir finalizar a PAP (Prova de Aptidão Profissional) e assim sendo terminar o 12º ano (ano final em Portugal).

 

Não precisa de ser segura , apenas de funcionar... pretendo aprender a linguagem mais a fundo mas, só após ingressar a universidade.

 

Segui os dois primeiros conselhos mas ainda apareceram mais erros não sei se é normal...

13 horas atrás, Omar~ disse:

@Nicolas Sousa

Primeiro (Parse Error)

Aí diz que a variável não existe e você quer usar algo que não exite.

Para que essas variáveis existam a array super-global POST tem que ter esses índices para preencher assim como que você fez.

Se o arquivo não recebeu os dados post vai sempre acabar nesse erro. É aconselhável verificar se o(s) valor(es) existe(m) antes de atribuí-lo(s).

 

Sobre o mysql já disseram. Então o que posso mais ajudar é sugerindo que leia isso:

 

 

Também tou a seguir o seu concelho mas não estou a perceber muito bem este tutorial ,  as minhas variaveis foram todas colocadas em cima :

 

 $nome=$_POST['nome'];
 $email=$_POST['email'];
 $comentario=$_POST['comentario'];

 

mas mesmo assim ele diz que não identifica a variavel...

fiz a alteração que vi no tutorial  

 

 

 

   $insert =  ('INSERT INTO comentarios_tb (Nome,Email,Comentario);   VALUES (:nome, :email, :comentario)');

 

 

E aparece me o seguinte :

 

Notice: Undefined index: nome in C:\xampp\htdocs\PAP\pages\insertcomment.php on line 4

Notice: Undefined index: email in C:\xampp\htdocs\PAP\pages\insertcomment.php on line 5

Notice: Undefined index: comentario in C:\xampp\htdocs\PAP\pages\insertcomment.php on line 6

Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\xampp\htdocs\PAP\pages\insertcomment.php:10 Stack trace: #0 {main} thrown in C:\xampp\htdocs\PAP\pages\insertcomment.php on line 10

 

 

PS: Preciso mesmo muito do vosso apoio para conseguir terminar o meu projeto...

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
13 horas atrás, Nicolas Sousa disse:

Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\xampp\htdocs\PAP\pages\insertcomment.php:10 Stack trace: #0 {main} thrown in C:\xampp\htdocs\PAP\pages\insertcomment.php on line 10

 

Mais importante: Não use msql_query como já lhe informaram, isso não exite mais no php, foi removido a muito... muito tempo devido a inumeros problemas, principalmente falha de segurança, além de que isso era lento demais.

Restrinja-se a usar mysqli_* ou PDO que é muito mais eficiente em todos aspectos.

 

Observe isso:

Spoiler

Arquivo do formulário


<form method="POST" action="registrar.php">
  <input type="text" name="nome" />
  <input type="text" name="email" />
  <textarea name="comentario"></textarea>
</form>

 

Arquivo registrar.php


<?php
if (!isset($_POST['nome']) || empty($_POST['nome'])) {
  echo "O \"nome\" não existe ou não foi digitado";
} else if (!isset($_POST['email']) || empty($_POST['email'])) {
  echo "O \"email\" não existe ou não foi digitado";
} else if (!isset($_POST['comentario']) || empty($_POST['comentario'])) {
  echo "O \"comentario\" não existe ou não foi digitado";
} else {
  echo "Todos dados necessários foram recebidos<br />"
    . "Instanciar a conexão e inserir os dados nesse laço<hr />"
    . "Os dados recebidos estão assim:"
    . "<pre>";
  var_dump($_POST);
  echo "</pre>";
}

 

O exemplo do guia:


$insert->execute([
    'indice' => 'valor'
]);

'indice' é o nome da coluna na tabela que conectou

'valor' é o resultado do input_POST que queira salvar na coluna.

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Copiei esse codigo que voce me colocou como exemplo , com esse codigo vai funcionar a colocação de comentarios na base de dados?

 

$insert->execute([
    'indice' => 'valor'
]);

 

Codigo:

Spoiler

 $insert->execute([
    'Nome' => 'nome'
    'Email' => 'email'
    'Comentario' => 'comentario'
])

 

ele da me este erro:

 

Spoiler

Parse error: syntax error, unexpected ''Email'' (T_CONSTANT_ENCAPSED_STRING), expecting ']' in C:\xampp\htdocs\PAP\pages\inseertcomment.php on line 18

 

 

fiz as alterações que no erro diz , mas se  o fizer acontece mais ... PHP é mesmo um bicho de 7 cabeças...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe o que é ARRAY ou como usar/definir/escrever ?

É sem dúvida uma das se não a mais importante coisa na linguagem, alguém que domina isso vai ter um vasta quantidade de recursos a mão.

Isso aqui é uma array

[
  'indice1' => 'valor1',
  'indice2' => 'valor2',
];

 

Isso aqui é uma array na forma mais grotesca, porém é importante conhecer pois raramente é necessário.

array(
  'indice1' => 'valor1',
  'indice2' => 'valor2',
);

Ambas arrays são singular e associativa, porque não possuem sub-índices e possuem um índice para cada cada valor na entrada.

Exemplo de array multi-dimensional não associativa e associativa ao mesmo tempo. (Não é o caso aqui, é só para mostrar mesmo)

Spoiler

[
  'entrada' => [
    'sub-valor1',
    'sub-valor2',
    'sub-valor3' => [
      'def' => 'def-value' => [
                   'defv1',
                   'defv2',
                ],
      ],
   ],
  'entrada2',
  'entrada3'
];

 

 

Enfim é: entrada > chave virgula  | entrada > chave virgula | entrada > chave virgula | entrada > chave virgula  etc.....

cada entrada deve ser terminada com uma virgula, e toda instrução deve ser terminado em ponto-e-virgula.

 

Duvido muito que o nome das suas colunas no banco comecem com letras em caixa alta. Reveja isso aí lembre-se:

11 horas atrás, Omar~ disse:

'indice' é o nome da coluna na tabela que conectou

'valor' é o resultado do input_POST que queira salvar na coluna.

 

 

 

47 minutos atrás, Nicolas Sousa disse:

PHP é mesmo um bicho de 7 cabeças...

A diferença de um programador experiente para o não experiente é que o experiente já passou por muitos erros e os solucionou.

A diferença do bom programador para o mal programador é que o bom pensa de forma prática e eficaz, bastando olhar e analisar para saber o que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim tem toda a razão ... o meu estudo foi baseado em vídeos de youtube já muito antigos e poucos explícitos..

 

As únicas linguagens em que fui leccionado foram HTML , Visual Basic , Assembley e linguagens de introdução como o tradicional Pascal e Portugol...

Sei que tou a ser um chato mas é por pura inocência não quero de modo nenhum ser um incomodo..

 

Novamente sou muito grato pela a ajuda que me esta a fornecer 

Compartilhar este post


Link para o post
Compartilhar em outros sites
56 minutos atrás, Nicolas Sousa disse:

Novamente sou muito grato pela a ajuda que me esta a fornecer

 

Mostre seu formulário que está a enviar os dados, talvez o erro esteja lá

Compartilhar este post


Link para o post
Compartilhar em outros sites

Formulario :

 

Spoiler

<form name="commentform" action="inseertcomment.php" method="post" >
          <div class="one_third first">
           Nome: <input type="text" name="nome" id="nome" value="" size="22" required>
          </div>
          <div class="one_third">
           
           Email: <input type="email" name="email" id="email" value="" size="22" required>
          </div>
          <div class="block clear">
           
          Comentário:  <textarea name="comentario" id="comentario" cols="106" rows="10"></textarea>
          </div>
          <div>
            <input type="submit" name="submit" value="Enviar Comentário">
            &nbsp;
            <input type="reset" name="reset" value="Reset">
          </div>
        </form>

 

 

condigo php:

Spoiler

<?php
if (!isset($_POST['nome']) || empty($_POST['nome'])) {
  echo "O \"nome\" não existe ou não foi digitado";
} else if (!isset($_POST['email']) || empty($_POST['email'])) {
  echo "O \"email\" não existe ou não foi digitado";
} else if (!isset($_POST['comentario']) || empty($_POST['comentario'])) {
  echo "O \"comentario\" não existe ou não foi digitado";
} else {
  echo "Todos dados necessários foram recebidos<br />"
    . "Instanciar a conexão e inserir os dados nesse laço<hr />"
    . "Os dados recebidos estão assim:"
    . "<pre>";
  var_dump($_POST);
  echo "</pre>";
  
  $insert->execute([
    'nome' => 'nome',
    'email' => 'email',
    'comentario' => 'comentario',
]);
}

 

erro:

 

Spoiler

Notice: Undefined variable: insert in C:\xampp\htdocs\PAP\pages\inseertcomment.php on line 16

Fatal error: Uncaught Error: Call to a member function execute() on null in C:\xampp\htdocs\PAP\pages\inseertcomment.php:16 Stack trace: #0 {main} thrown in C:\xampp\htdocs\PAP\pages\inseertcomment.php on line 16

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Nicolas Sousa disse:

Notice: Undefined variable: insert in C:\xampp\htdocs\PAP\pages\inseertcomment.php on line 16

Fatal error: Uncaught Error: Call to a member function execute() on null in C:\xampp\htdocs\PAP\pages\inseertcomment.php:16 Stack trace: #0 {main} thrown in C:\xampp\htdocs\PAP\pages\inseertcomment.php on line 16

 

Você não leu o guia que apresentei, e pelo visto nenhum tipo de guia a respeito...

 

Fica a dica, tem que estudar meu filho. E quanto mais saber ainda será pouco e nunca terá o conhecimento suficiente. Há muitos anos eu programo em PHP e até hoje estudo, e mesmo que sei de muita coisa "vira-e-se-revira" me pego sem saber o que fazer.

 

O problema é que se você deve criar algo antes de querer utilizar, esse foi seu erro inicial e continua cometendo ele.

Spoiler

<?php
if (!isset($_POST['nome']) || empty($_POST['nome'])) {
  echo "O \"nome\" não existe ou não foi digitado";
} else if (!isset($_POST['email']) || empty($_POST['email'])) {
  echo "O \"email\" não existe ou não foi digitado";
} else if (!isset($_POST['comentario']) || empty($_POST['comentario'])) {
  echo "O \"comentario\" não existe ou não foi digitado";
} else {

  $host = '127.0.0.1';  // endereço do banco de dados
  $db = 'seu_database'; // nome do tabase que está a tabela
  $usuario = 'root';    // login de acesso ao banco de dados
  $senha = '';          // senha de acesso ao banco de dados

  try {
    $dsn = "mysql:host={$host}; dbname={$db}";
    $options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'];

    // $con => é o objeto da instancia da PDO
    $con = new PDO($dsn, $usuario, $senha, $options);
  } catch (PDOException $erro) {
    echo ('Erro na conexão: ' . $erro->getMessage());
  }

  $tabela = 'nome_da_tabela'; // nome da tabela em que os dados devem ser salvos

  // variável $insert armazena o método do objeto da pdo
  // aqui tem que indicar a tabela depois as colunas isso se chama "preparar" depois o statements
  $insert = $con->prepare("INSERT INTO {$tabela} (nome, email, comentario) VALUES (:nome, :email, :comentario)");

  // Executar por array passando os valores do statements como índices e os valores são os dados do post
  $insert->execute([
    'nome' => $_POST['nome'],
    'email' => $_POST['email'],
    'comentario' => $_POST['comentario'],
   ]);

  if ($insert->rowCount()) {
    echo ('Dados Registrados');
  } else {
    echo ('Nenhum registro inserido');
  }
}

 

 

NOTA* O que mostrei é só um exemplo, não vá coloca isso online, pois não há tratamento algum de dados.

Não vá querer um sql_inject em seu database que só lhe tará dor de cabeça no futuro, ou mesmo um corromper seu sistema sql para ter que reinstalar tudo e perder todos os dados.

Então mesmo que local cuidado com o que você vai digitar e salvar nas áreas dos posts. PDO com statements já trás alguma segurança, mas não faz milagre. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por lamounier
      Bom dia,
      Estou tentando incorporar comentários do google meu negocio no meu site, encotrei um código que quando coloco o id da empresa que quero puxar ele não retorna nada, mas com outro id´s(place_id ) ele funciona:
       
      <!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <div id="wpac-google-review"></div> </body> <script type="text/javascript"> wpac_init = window.wpac_init || []; wpac_init.push({widget: 'GoogleReview', id: 25199, place_id: 'ChIJe76wHt6WpgARKwwUjmwjK78', view_mode: 'list'}); (function() { if ('WIDGETPACK_LOADED' in window) return; WIDGETPACK_LOADED = true; var mc = document.createElement('script'); mc.type = 'text/javascript'; mc.async = true; mc.src = 'https://embed.widgetpack.com/widget.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(mc, s.nextSibling); })(); </script> </html> Alguém sabe oque pode está errado ou uma outra forma de incorporar os comentários? 
    • Por pmatheusvinhas
      Boa noite.
       
      Estou tendo problemas com a seção de comentários no tema que estou utilizando ao tentar trabalhar com o Jetpack Comments. Segundo o link (https://jetpack.com/support/comments/troubleshooting-jetpack-comments/) é porque meu tema não trabalha com a função
       
      comment_form() Esta é a seção da forma funcional, padrão do tema.

       
      Ao trocar toda a seção de resposta pela função "comment_form()", o comentário aparece no formato do Jetpack mas ao submeter o comentário...
       

       
      E como se não bastasse, não tenho as opções de login através das rede sociais.
      Segue o comments.php do tema. Desde já, muito obrigado.
      https://github.com/tareq1988/wedocs/blob/develop/templates/comments.php
       
    • Por JOão paulo da silva
      Olá,  pessoal ! 
       
      Estou querendo exibir os comentários dos posts na página inicial do meu template wordpress, mas não estou conseguindo.  Já tentei colar na index.ph a função comments_template(); do arquivos single.php mais não deu certo.
       
      Alguém aqui poderia me ajudar, como fazer isso.
    • Por JonasGz
      Boa tarde, to realmente mt estressado kkkk, pq já tentei de todas as formas e n vejo o porque de não estar aparecendo os comentários nas postagens, estou criando meu primeiro tema e os respectivos arquivos ficaram assim, peguei o template de comentários direto do codex do wordpress e coloquei a tag para puxar mas parece que não esta puxando ou está faltando alguma coisa, e não coloquei nada na functions.php. O site é o seguinte: www.vagasempregos.me
       
      meu single.php está assim, bem simples.
      <h2 class="text-center"> <?php the_title() ?> </h2> <div class="img-post img-fluid"> <?php the_post_thumbnail() ?> </div> <?php if ( function_exists('yoast_breadcrumb') ) { yoast_breadcrumb(' <p id="breadcrumbs">','</p> '); } ?> <?php the_content() ?> <?php endwhile; ?> <?php else : ?> <p>Não existem posts.</p> <?php endif ?> <div class="comments col-sm-12"> <?php comments_template(); ?> </div>  
      comments.php
      <?php //Get only the approved comments $args = array( 'status' => 'approve' ); // The comment Query $comments_query = new WP_Comment_Query; $comments = $comments_query->query( $args ); // Comment Loop if ( $comments ) { foreach ( $comments as $comment ) { echo '<p>' . $comment->comment_content . '</p>'; } } else { echo 'No comments found.'; } ?>  
    • Por joao14k
      Olá boa noite a todos, sou novo aqui no fórum, e precisaria de uma ajudar relacionado ao banco de dados e comentários.
       
      Estou tentando obter a quantidade dos comentários que os posts tem, porém não estou obtendo sucesso por falta de conhecimento. Espero que alguém possa me ajudar.
       
      O corpo do código é este...

        <div class="clearfix"></div>   <div class="section_holder25">   <div class="container">   <div class="content_left">   <div class="section_holder28 three">          <?         if ($_GET['id']>0) {         $busca = " AND id_noticia=".(int)$_GET['id'];         } else if ($_GET['categoria']>0) {         $busca = " AND tbnoticias.id_categoria=".(int)$_GET['categoria'];         }         $i=0;         $SQL = " SELECT         tbnoticias.*,         DATE_FORMAT(tbnoticias.data,'<span>%d</span>%m, %Y')  as data1 ,         tbnoticias_categorias.*         FROM          tbnoticias         INNER JOIN tbnoticias_categorias ON (tbnoticias_categorias.id_categoria = tbnoticias.id_categoria)         WHERE 1         ".$busca."         ORDER BY          data DESC         ";         $numeros = preg_replace("/[^0-9]/", "", $texto);         $Lista = new Consulta($SQL,20,$PGATUAL);         while ($linha = db_lista($Lista->consulta)) { $i++;         ?>                 <div class="post_holder">             <div class="date"><?=utf8_decode($linha['data1']);?></div>             <div class="date comments"> <span><i class="fa fa-comment"></i></span> <?=utf8_decode($linha['$numeros']);?></div>             <div class="post_img">               <div class="hover_box">                 <div class="box_inner"> <a href="#">                   </a> <a href="<?=utf8_decode($dadosconfig['urlblog']);?>/<?=$linha['id_noticia'];?>/<?=amigaveis(retiraAcentos($linha['titulo']));?>.html">                   <div class="icon"><i class="fa fa-link"></i></div>                   </a> </div>               </div>               <img src="<?=utf8_decode($dadosconfig['urlblog']);?>/arquivos/noticias/<?=$linha['imagem'];?>" alt="" class="img_size1"/> </div>             <div class="clearfix"></div>             <br/>             <a href="<?=utf8_decode($dadosconfig['urlblog']);?>/<?=$linha['id_noticia'];?>/<?=amigaveis(retiraAcentos($linha['titulo']));?>.html">             <h3 class="uppercase padd_top1"><?=conteudo($linha['titulo']);?></h3>             </a>             <p><?=conteudo($linha['subtitulo']);  if (strlen($linha['subtitulo'])>145) echo '...'; ?></p>             <br/>             <a class="readmore_but5" href="<?=utf8_decode($dadosconfig['urlblog']);?>/<?=$linha['id_noticia'];?>/<?=amigaveis(retiraAcentos($linha['titulo']));?>.html">Ver Mais</a> </div>           <!--end postholder-->                      <div class="divider_line"></div>                 <?                 }                 ?>
       
      E eu gostaria de tentar pegar as quantidade dos comentários que os posts tem, porém os comentário está alocado em uma tabela chamada tbnoticias_comentarios no banco de dados.
       
      A linha que eu gostaria que resultado fosse informado é...

      <div class="date comments"> <span><i class="fa fa-comment"></i></span> <?=utf8_decode($linha['$numeros']);?></div>
×

Informação importante

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