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

Postar comentários


Clayton Souza

Pergunta

Oi pessoal,

Será que alguém pode me ajudar?

É o seguinte, eu conheço pouco de PHP, estou tentando criar um sistema de comentários, o sistema funciona, só que ao inserir o código para validar os campos e inserir os dados no banco, a página do navegador fica em branco, onde estou errando?, segue o código:

este é o código do sistema de comentários que está funcionando, se eu inserir as informações direto no banco de dados e atualizar, o comentário aparece normalmente, mas se inserir a validação e o INSERT, retorna uma página em branco e não tenho acesso ao formulário.

//estou inserindo o código de validação dos campos e o INSERT antes desta <ul> abaixo

<ul>

<?php

$comentarios = mysql_query("SELECT
                    id,
                    post_status,
                    data,
                    nome,
                    email,
                    comentario
                    FROM c_comments
                    WHERE post_status = 'aprovado'
                    ORDER BY data ASC")
                    or die(mysql_error());
if(@mysql_num_rows($comentarios)     == '0'){
                    echo "Não existe comentário neste tópico, seja o primeiro";
}else{

                while($res_comments=mysql_fetch_array($comentarios)){

                $id         = $res_comments[0];
                $post_status     = $res_comments[1];                
                $data            = $res_comments[2];
                $nome           = $res_comments[3];
                $email           = $res_comments[4];
                $comentario      = $res_comments[5];
                
                $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=60";  
                $size = 60;                 
                $grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;

?>

<li>
<h2><img src="<?php echo $grav_url; ?>" alt="" /><?php echo $nome; ?> disse em <?php echo date('d/m/y H:m', strtotime($data)); ?></h2>
<p><?php echo $comentario;?>
</li>

<?php
    }
}
?>
</ul>


<div id="comentar">

<?php 
$form_nome = $_POST['nome'];
$form_email = $_POST['email'];
$form_comentario = $_POST['comentario'];
?>



<form method="post" action="" name="comentar" enctype="multipart/form-data">
  <fieldset>
        <legend>Deixe seu comentário</legend>
            <label><span>Nome</span>
            <input type="text" name="nome" value="<?php echo $form_nome; ?>" /></label>
            
            <label><span>Email</span>
            <input type="text" name="email" value="<?php echo $form_email; ?>" /></label>
            
            <label><span>Comentário</span>
            <textarea name="comentario" rows="5" cols="0"><?php echo $form_comentario; ?></textarea>
            <input type="hidden" name="Cadastrar" value="Ok" />
      <input type="submit" value="Enviar Comentário" class="btn"/>
    </fieldset>    
</form>

</id><!--comentar-->
Este é o código para validar os campos e inserir os dados no banco.
<?php if(isset($_POST['cadastrar']) && $_POST['cadastrar'] == 'ok'){

<?php
$post_status = 'aguardando';
$recupera = $_GET['post'];


$nome      = strip_tags(trim($_POST['nome']));
$email      = strip_tags(trim($_POST['email']));
$comentario = strip_tags(trim($_POST['comentario']));

        if(empty($nome)){
            $retorno = "informe seu nome";
        }elseif(empty($email)){
            $retorno = "informe seu email";
        }elseif(empty(!filter_var($email, FILTER _VALIDATE_EMAIL)){
            $retorno = "informe um email válido";
        }elseif(empty($comentario)){
            $retorno = "escreva seu comentário";
        }elseif(empty($retorno)){

$cadastrar_comentario = mysql_query("INSERT INTO c_comments (id, post_status, data, autor, email, comentario) 
                                    VALUES ('$recupera', '$post_status', 'post_data', '$nome', '$email', , '$comentario')")
                        or die(mysql_error());
                        
                        if($cadastrar_comentario >= '1'){
                            $retorno = "Recebemos seu comentário, ele será publicado depois de aprovado. Obrigado!";
                            unset($form_nome, $form_email, $form_comentario); 
                        }else{
                            $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
                            }
        }
    }

?>

Link para o comentário
Compartilhar em outros sites

25 respostass a esta questão

Posts Recomendados

  • 0
Bom dia!

Você jogou o texto com o resultado na variável $retorno, mas não a imprimiu na tela. No final do código, imprima a variável $retorno...

echo $retorno;
Valeu pela dica, coloquei o
echo $retorno;
desta forma
$retorno = "Erro ao cadastrar seu comentário, tente novamente!";
echo $retorno;

Mas continua retornando uma página em branco e nenhum erro.

Link para o comentário
Compartilhar em outros sites

  • 0

Dando uma olhada 'mais de perto', vi que existem vários problemas no código que você colou aqui.

1 - Está sendo utilizado 'elseif', quando o correto é 'else if' (com espaço após o else);

2 - Após verificar se a variável $_POST['cadastrar'] existe e se é == 'ok', foi aberta uma nova tag do PHP, sendo que não é necessário já que são todos comandos PHP (se existir algum código que não seja PHP entre essa linha e a tag do PHP que foi iniciada, então você deverá fechar a tag PHP após verificar as informações da variável $_POST);

3 - Nesta linha:

elseif(empty(!filter_var($email, FILTER _VALIDATE_EMAIL)){
existe um espaço entre a constante FILTER e o underline... está correto? 4 - Na mesma linha do número 3, você está negando a função filter_bar (através do caracter !), creio que isto não era para estar ali... qual é o objetivo da função empty verificar o retorno desta função? 5 - Ainda na mesma linha do número 3, foram abertos 3 parênteses, mas somente 2 foram fechados (você deve fechar mais 1); 6 - Troque esta linha:
if($cadastrar_comentario >= '1'){
por:
if(mysql_affected_rows($cadastrar_comentario)){
7 - Coloque o 'echo $retorno' antes da penúltima chave (}):
if(mysql_affected_rows($cadastrar_comentario)){
            $retorno = "Recebemos seu comentário, ele será publicado depois de aprovado. Obrigado!";
            unset($form_nome, $form_email, $form_comentario);
        }else{
            $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
        }
        echo $retorno;
    }
}
Bom, é isto. Faça estas alterações, teste e diga se resolvou. E de qualquer forma, adicione estas linhas no começo do arquivo (deixe-as nas primeiras linhas do arquivo e se caso estiver usando session, coloque após o início da session):
error_reporting(E_ALL);
ini_set('display_errors', '1');

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

  • 0
Dando uma olhada 'mais de perto', vi que existem vários problemas no código que você colou aqui.

1 - Está sendo utilizado 'elseif', quando o correto é 'else if' (com espaço após o else);

2 - Após verificar se a variável $_POST['cadastrar'] existe e se é == 'ok', foi aberta uma nova tag do PHP, sendo que não é necessário já que são todos comandos PHP (se existir algum código que não seja PHP entre essa linha e a tag do PHP que foi iniciada, então você deverá fechar a tag PHP após verificar as informações da variável $_POST);

3 - Nesta linha:

elseif(empty(!filter_var($email, FILTER _VALIDATE_EMAIL)){
existe um espaço entre a constante FILTER e o underline... está correto? 4 - Na mesma linha do número 3, você está negando a função filter_bar (através do caracter !), creio que isto não era para estar ali... qual é o objetivo da função empty verificar o retorno desta função? 5 - Ainda na mesma linha do número 3, foram abertos 3 parênteses, mas somente 2 foram fechados (você deve fechar mais 1); 6 - Troque esta linha:
if($cadastrar_comentario >= '1'){
por:
if(mysql_affected_rows($cadastrar_comentario)){
7 - Coloque o 'echo $retorno' antes da penúltima chave (}):
if(mysql_affected_rows($cadastrar_comentario)){
            $retorno = "Recebemos seu comentário, ele será publicado depois de aprovado. Obrigado!";
            unset($form_nome, $form_email, $form_comentario);
        }else{
            $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
        }
        echo $retorno;
    }
}
Bom, é isto. Faça estas alterações, teste e diga se resolvou. E de qualquer forma, adicione estas linhas no começo do arquivo (deixe-as nas primeiras linhas do arquivo e se caso estiver usando session, coloque após o início da session):
error_reporting(E_ALL);
ini_set('display_errors', '1');
Eu fiz todas as modificações, testei no servidor local, subi para um servidor remoto e nada, nem retorna erro, só uma página em branco, mesmo colocando a linha
error_reporting(E_ALL);
ini_set('display_errors', '1');

Não retornou erro, mais alguma dica ou eu consegui realmente dá um nó nesse script?

Link para o comentário
Compartilhar em outros sites

  • 0
Cola o código aqui com as modificações para darmos uma olhada...

Segue o código completo:

<?php 
error_reporting(E_ALL);
ini_set('display_errors', '1');

if(isset($_POST['cadastrar']) && $_POST['cadastrar'] == 'ok'){

$post_status = 'aguardando';
$recupera = $_GET['post'];

$autor      = strip_tags(trim($_POST['nome']));
$email      = strip_tags(trim($_POST['email']));
$comentario = strip_tags(trim($_POST['comentario']));

                    if(empty($autor)){
                        $retorno = "informe seu nome";
                    }else if(empty($email)){
                        $retorno = "informe seu email";
                    }else if(empty(filter_var($email, FILTER_VALIDATE_EMAIL))){
                        $retorno = "informe um email válido";
                    }else if(empty($comentario)){
                        $retorno = "escreva seu comentário";
                    }else if(empty($retorno)){

$cadastrar_comentario = mysql_query("INSERT INTO c_comments (id, post_status, data, nome, email, comentario) 
                                    VALUES ('$recupera', '$post_status', 'post_data', '$nome', '$email', '$comentario')")
                    or die(mysql_error());
                    if(mysql_affected_rows($cadastrar_comentario)){
                        $retorno = "Recebemos seu comentário, ele será publicado depois de aprovado. Obrigado!";
                        unset($form_autor, $form_email, $form_comentario); 
                    }else{
                        $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
                        }
                    echo $retorno
        }
    }
?>

<ul>
<?php

$comentarios = mysql_query("SELECT
                    id,
                    post_status,
                    data,
                    nome,
                    email,
                    comentario
                    FROM c_comments
                    WHERE post_status = 'aprovado'
                    ORDER BY data ASC")
                    or die(mysql_error());
if(@mysql_num_rows($comentarios)     == '0'){
                    echo "Não existe comentário neste tópico, seja o primeiro";
}else{

                    while($res_comments=mysql_fetch_array($comentarios)){

                    $id              = $res_comments[0];
                    $post_status     = $res_comments[1];                
                    $data            = $res_comments[2];
                    $nome            = $res_comments[3];
                    $email           = $res_comments[4];
                    $comentario      = $res_comments[5];
                
                $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=60";  
                $size = 60;                 
                $grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;

?>

<li>
<h2><img src="<?php echo $grav_url; ?>" alt="" /><?php echo $nome; ?> disse em <?php echo date('d/m/y H:m', strtotime($data)); ?>h</h2>
<p><?php echo $comentario;?>
</li>

<?php
    }
}
?>
</ul>


<div id="comentar">

<?php 

$form_nome = $_POST['nome'];
$form_email = $_POST['email'];
$form_comentario = $_POST['comentario'];
?>

<form method="post" action="" name="comentar" enctype="multipart/form-data">
  <fieldset>
        <legend>Deixe seu comentário</legend>
            <label><span>Nome</span>
            <input type="text" name="nome" value="<?php echo $form_nome; ?>" /></label>
            
            <label><span>Email</span>
            <input type="text" name="email" value="<?php echo $form_email; ?>" /></label>
            
            <label><span>Comentário</span>
            <textarea name="comentario" rows="5" cols="0"><?php echo $form_comentario; ?></textarea>
            <input type="hidden" name="Cadastrar" value="Ok" />
      <input type="submit" value="Enviar Comentário" class="btn"/>
    </fieldset>    
</form>

</id><!--comentar-->

Link para o comentário
Compartilhar em outros sites

  • 0

Eae!

Acho que encontrei o erro...

}else if(empty(filter_var($email, FILTER_VALIDATE_EMAIL))){
Retire a função empty daí. A função filter_var retorna false se a variável não passar no filtro... logo não há necessidade de verificar novamente. Retirando esta linha, o código funciona. Deixe assim:
}else if(filter_var($email, FILTER_VALIDATE_EMAIL)){

Qualquer coisa, volte a postar.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Eae!

Acho que encontrei o erro...

}else if(empty(filter_var($email, FILTER_VALIDATE_EMAIL))){
Retire a função empty daí. A função filter_var retorna false se a variável não passar no filtro... logo não há necessidade de verificar novamente. Retirando esta linha, o código funciona. Deixe assim:
}else if(filter_var($email, FILTER_VALIDATE_EMAIL)){
Qualquer coisa, volte a postar. Abraços
É está difícil, não sei mais o que perguntar, acho que vou desistir deste código, continua retornando uma página em branco e nehuma mensagem de erro, todavia, vou colar mais uma vez o código com as mudanças aí:
<?php 
error_reporting(E_ALL);
ini_set('display_errors', '1');

if(isset($_POST['cadastrar']) && $_POST['cadastrar'] == 'ok'){

$post_status = 'aguardando';
$post_data = 'date('Y-m-d H:i:s);
$id        = strip_tags(trim($_POST['id']));
$nome      = strip_tags(trim($_POST['nome']));
$email      = strip_tags(trim($_POST['email']));
$comentario = strip_tags(trim($_POST['comentario']));

                    if(empty($nome)){
                        $retorno = "informe seu nome";
                    }else if(empty($email)){
                        $retorno = "informe seu email";
                    }else if(filter_var($email, FILTER_VALIDATE_EMAIL)){
                        $retorno = "informe um email válido";
                    }else if(empty($comentario)){
                        $retorno = "escreva seu comentário";
                    }else if(empty($retorno)){

$cadastrar_comentario = mysql_query("INSERT INTO c_comments (id, post_status, data, nome, email, comentario) 
                                    VALUES ('$id', '$post_status', 'post_data', '$nome', '$email', '$comentario')")
                    or die(mysql_error());
                    if(mysql_affected_rows($cadastrar_comentario)){
                        $retorno = "Recebemos seu comentário, ele será publicado depois de aprovado. Obrigado!";
                        unset($form_nome, $form_email, $form_comentario); 
                    }else{
                        $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
                        }
                    echo $retorno
        }
    }
?>

<ul>
<?php

$comentarios = mysql_query("SELECT
                    id,
                    post_status,
                    data,
                    nome,
                    email,
                    comentario
                    FROM c_comments
                    WHERE post_status = 'aprovado'
                    ORDER BY data ASC")
                    or die(mysql_error());
if(@mysql_num_rows($comentarios)     == '0'){
                    echo "Não existe comentário neste tópico, seja o primeiro";
}else{

                    while($res_comments=mysql_fetch_array($comentarios)){

                    $id              = $res_comments[0];
                    $post_status     = $res_comments[1];                
                    $data            = $res_comments[2];
                    $nome            = $res_comments[3];
                    $email           = $res_comments[4];
                    $comentario      = $res_comments[5];
                
                $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=60";  
                $size = 60;                 
                $grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;

?>

<li>
<h2><img src="<?php echo $grav_url; ?>" alt="" /><?php echo $nome; ?> disse em <?php echo date('d/m/y H:m', strtotime($data)); ?>h</h2>
<p><?php echo $comentario;?>
</li>

<?php
    }
}
?>
</ul>


<div id="comentar">

<?php 

$form_nome = $_POST['nome'];
$form_email = $_POST['email'];
$form_comentario = $_POST['comentario'];
?>

<form method="post" action="" name="comentar" enctype="multipart/form-data">
  <fieldset>
        <legend>Deixe seu comentário</legend>
            <label><span>Nome</span>
            <input type="text" name="nome" value="<?php echo $form_nome; ?>" /></label>
            
            <label><span>Email</span>
            <input type="text" name="email" value="<?php echo $form_email; ?>" /></label>
            
            <label><span>Comentário</span>
            <textarea name="comentario" rows="5" cols="0"><?php echo $form_comentario; ?></textarea>
            <input type="hidden" name="Cadastrar" value="Ok" />
      <input type="submit" value="Enviar Comentário" class="btn"/>
    </fieldset>    
</form>

</id><!--comentar-->

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, agora é certo! É até um erro comum rsrs

O nome do campo 'cadastrar' no formulário você escreveu a primeira letra em MAIÚSCULO, e o valor dele (ok) também deixou a primeira letra em MAIÚSCULO. Logo, quando você verificava se $_POST['cadastrar']=='ok', retornava falso porque o campo 'cadastrar' não existe, e sim 'Cadastrar' e com valor 'Ok'. Altere para minúsculo os dois nomes e vai funcionar!

Esse foi era o principal problema, mas ainda há outros dois que tem que arrumar:

(1)

linha 8:

$post_data = 'date('Y-m-d H:i:s);
retirnar a aspas simples antes da função date e colocá-la após a letra ':
$post_data = date('Y-m-d H:i:s');
(2) linha 34:
echo $retorno
adicionar ponto e vírgula:
echo $retorno;
Por via das dúvidas, vou deixar aqui o código que eu alterei e funcionou (salvou as informações no banco):
<?php 

    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("teste") or die(mysql_error());
    
    if(isset($_POST['cadastrar']) && $_POST['cadastrar'] == 'ok'){
        echo "ok";
        $post_status = 'aguardando';
        $post_data = date('Y-m-d H:i:s');
        $id        = strip_tags(trim($_POST['id']));
        $nome      = strip_tags(trim($_POST['nome']));
        $email      = strip_tags(trim($_POST['email']));
        $comentario = strip_tags(trim($_POST['comentario']));

        if(empty($nome)){
                $retorno = "informe seu nome";
            }else if(empty($email)){
                $retorno = "informe seu email";
            }else if(filter_var($email, FILTER_VALIDATE_EMAIL)){
                $retorno = "informe um email válido";
            }else if(empty($comentario)){
                $retorno = "escreva seu comentário";
            }else if(empty($retorno)){

            $cadastrar_comentario = mysql_query("INSERT INTO  c_commns (id, post_status, data, nome, email, comentario) VALUES ('$id', '$post_status', 'post_data', '$nome', '$email', '$comentario')") or die(mysql_error());
            if(mysql_affected_rows($cadastrar_comentario)){
                $retorno = "Recebemos seu comentário, ele será publicado depois de aprovado. Obrigado!";
                unset($form_nome, $form_email, $form_comentario); 
            }else{
                $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
            }
            echo $retorno;
        }
    }
?>

<ul>
<?php

    $comentarios = mysql_query("SELECT id,post_status,data,nome,email,comentario FROM  c_commns WHERE post_status = 'aprovado' ORDER BY data ASC") or die(mysql_error());
    if(@mysql_num_rows($comentarios) == '0'){
        echo "Não existe comentário neste tópico, seja o primeiro";
    }else{
        while($res_comments=mysql_fetch_array($comentarios)){
            $id              = $res_comments[0];
            $post_status     = $res_comments[1];                
            $data            = $res_comments[2];
            $nome            = $res_comments[3];
            $email           = $res_comments[4];
            $comentario      = $res_comments[5];
                    
            $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=60";  
            $size = 60;                 
            $grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;

?>

<li>
    <h2>
        <img src="<?php echo $grav_url; ?>" alt="" /><?php echo $nome; ?> disse em <?php echo date('d/m/y H:m', strtotime($data)); ?>h
    </h2>
    <p>
        <?php echo $comentario;?>
    </p>
</li>

<?php
    }
}
?>
</ul>


<div id="comentar">

<?php 
    $form_nome = (isSet($_POST['nome']))?$_POST['nome']:'';
    $form_email = (isSet($_POST['email']))?$_POST['email']:'';
    $form_comentario = (isSet($_POST['comentario']))?$_POST['comentario']:'';
?>

<form method="post" action="" name="comentar" enctype="multipart/form-data">
  <fieldset>
        <legend>Deixe seu comentário</legend>
            <label><span>Nome</span>
            <input type="text" name="nome" name="nome" value="<?php echo $form_nome; ?>" /></label>
            
            <label><span>Email</span>
            <input type="text" name="email" value="<?php echo $form_email; ?>" /></label>
            
            <label><span>Comentário</span>
            <textarea name="comentario" rows="5" cols="0"><?php echo $form_comentario; ?></textarea>
            <input type="hidden" name="cadastrar" value="ok" />
      <input type="submit" value="Enviar Comentário" class="btn"/>
    </fieldset>    
</form>

</id><!--comentar-->

Qualquer problema, posta dinovo ^_^

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

  • 0

Muito boa sua correção, agora percebo que o código funciona, pelo menos está retornando os erros, o que dá um norte não é?, desculpa a demora em dar retorno, é que a velox me deixou alguns dias sem sinal.

Bem o erro que está retornando é o seguinte:

Notice: Undefined index: id in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\comentarios.php on line 30

Incorrect integer value: '' for column 'id' at row 1

Seguem as linhas próximas da linha 30:

27    $post_status   = 'aguardando';
28    $post_data     = date('Y-m-d H:i:s');
29    $id                 = strip_tags(trim($_POST['id']));
30    $nome           = strip_tags(trim($_POST['nome']));
31    $email            = strip_tags(trim($_POST['email']));
32    $comentario   = strip_tags(trim($_POST['comentario']));

Na minha tabela;

O campo id é do tipo int(11), nulo não, AUTO_INCREMENT, PRIMARY_KEY

O campo post_status é do tipo text, nulo não

o campo data é do tipo timestamp, nulo não, CURRENT_TIMESTAMP, ON UPDATE_TIMESTAMP

O campo nome é do tipo text, nulo não

O campo email é do tipo text, nulo não

O campo comentario é do tipo text, nulo não

Link para o comentário
Compartilhar em outros sites

  • 0

Sem problemas ^_^

Sobre o undefined index, é porque não existe nenhum campo no formulário com name/id chamado 'id', e quando você tenta pegar o valor desse campo na linha 30 (pelo $_POST['id']) ele não encontra, então aparece essa notificação!

--

E como está o seu comando SQL?? Ele executa normalmente se você executá-lo direto no banco?

Link para o comentário
Compartilhar em outros sites

  • 0
Sem problemas ^_^

Sobre o undefined index, é porque não existe nenhum campo no formulário com name/id chamado 'id', e quando você tenta pegar o valor desse campo na linha 30 (pelo $_POST['id']) ele não encontra, então aparece essa notificação!

--

E como está o seu comando SQL?? Ele executa normalmente se você executá-lo direto no banco?

Sem problemas, quando eu escrevo o comentário direto no banco de dados funciona perfeitamente, o que devo fazer?

Também, qual o collation que devo usar para que os comentários seja acentuados, pois estão sendo registrados assim:

este sistema de coment�rios funciona?

Editado por Clayton Souza
Link para o comentário
Compartilhar em outros sites

  • 0

Para a acentuação, o padrão deve ser utf8.

Sobre o erro no banco, é nesta linha:

$cadastrar_comentario = mysql_query("INSERT INTO  c_commns (id, post_status, data, nome, email, comentario) VALUES ('$id', '$post_status', 'post_data', '$nome', '$email', '$comentario')") or die(mysql_error());

O que aconteceu é que você está tentando inserir $id na coluna id, mas não existe nenhum campo no formulario com name/id chamado 'id' (vide o erro anterior).

O que seria este campo id? O usuário que iria digitar ou é automático?

Link para o comentário
Compartilhar em outros sites

  • 0
Para a acentuação, o padrão deve ser utf8.

Sobre o erro no banco, é nesta linha:

$cadastrar_comentario = mysql_query("INSERT INTO  c_commns (id, post_status, data, nome, email, comentario) VALUES ('$id', '$post_status', 'post_data', '$nome', '$email', '$comentario')") or die(mysql_error());
O que aconteceu é que você está tentando inserir $id na coluna id, mas não existe nenhum campo no formulario com name/id chamado 'id' (vide o erro anterior). O que seria este campo id? O usuário que iria digitar ou é automático?
Na verdade este campo 'id' é automático, gera uma sequência numérica que é atribuida a cada comentário, eu eliminei todas as referências ao 'id' do script e deu o seguinte erro: Incorrect datetime value: 'post_data' for column 'data' at row 1 Seria esta linha
$post_data = date('Y-m-d H:i:s');

está incorreto este formato de data e hora, ou sugere outro erro?

Se eu digitar o caminho na barra de endereço do navegador, consigo acessar os comentários e o formulário, se inserir o comentário direto no banco e atualizar a página, funciona tudo perfeito, mas ao tentar inserir os dados e comentário pelo formulário e clicar em enviar, gera o erro mostrado acima.

Editado por Clayton Souza
Link para o comentário
Compartilhar em outros sites

  • 0

Se o tipo do campo no seu banco de dados estiver como DATE, você não pode inserir horário lá. Da forma como você está tentando inserir, o campo deve ser do tipo DATETIME. Para mais informações sobre o tipo DATE, DATETIME e TIMESTAMP, veja aqui: http://dev.mysql.com/doc/refman/5.1/en/datetime.html

Link para o comentário
Compartilhar em outros sites

  • 0
Se o tipo do campo no seu banco de dados estiver como DATE, você não pode inserir horário lá. Da forma como você está tentando inserir, o campo deve ser do tipo DATETIME. Para mais informações sobre o tipo DATE, DATETIME e TIMESTAMP, veja aqui: http://dev.mysql.com/doc/refman/5.1/en/datetime.html

Vou ler o link com as informações, para um aprendiz este tipo de informação é valiosa.

Pois bem, tenho um campo data onde o tipo é timestamp, com atributo on update CURRENT_TIMESTAMP, padrão CURRENT_TIMESTAMP, extra ON UPDATE CURRENT_TIMESTAMP.

Sendo o erro

Incorrect datetime value: 'post_data' for column 'data' at row 1

Tentei mudar o tipo para DATATIME, mas deu o seguint erro:

Erro

consulta SQL:

ALTER TABLE `c_comments` CHANGE `data` `data` DATETIME ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

Mensagens do MySQL :

#1067 - Invalid default value for 'data'

Link para o comentário
Compartilhar em outros sites

  • 0

#1067 - Invalid default value for 'data'

Bem... acho que você deveria fazer a normalização dos dados. O campo que você está criando é campo composto, o que vai contra a primeira forma normal que diz que cada campo deve ter atributos simples...

Criando uma coluna para a data e outra para o horário, seria bem mais fácil quando você precisasse trabalhar com estes dados pois não teria que alterá-los caso quisesse apenas um deles!

Se quiser saber o porque fazer a normalização ou o que é exatamente a normalização, aqui tem mais detalhes: http://pt.wikipedia.org/wiki/Normalização_em_banco_de_dados

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

  • 0
#1067 - Invalid default value for 'data'

Bem... acho que você deveria fazer a normalização dos dados. O campo que você está criando é campo composto, o que vai contra a primeira forma normal que diz que cada campo deve ter atributos simples...

Criando uma coluna para a data e outra para o horário, seria bem mais fácil quando você precisasse trabalhar com estes dados pois não teria que alterá-los caso quisesse apenas um deles!

Se quiser saber o porque fazer a normalização ou o que é exatamente a normalização, aqui tem mais detalhes: http://pt.wikipedia.org/wiki/Normalização_em_banco_de_dados

Perfeito, vou mudar o campo data e criar um campo time, realizar as alterações no código e torçer para dar certo, valeu!

Depois comento o resultado.

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, fiz a alteração no banco de dados e alterei o campo 'data' e criei o campo 'time' ficou assim:

INSERT INTO `comentarios`.`c_comments` (
`id` ,
`post_status` ,
`data` ,
`time` ,
`nome` ,
`email` ,
`comentario` 
)
Sendo que o campo 'data' é do tipo 'DATE' e o campo 'time' é do tipo 'TIME'. Mais uma vez retorna uma página com o erro HTTP500. Vou colar o código aqui para ver onde eu errei.
<?php 

        error_reporting(E_ALL);
        ini_set('display_errors', '1');
        
        $conexao = mysql_connect("localhost", "root", "")
                or die ("Não foi possivel conectar ao servidor MySQL");
        $db      = mysql_select_db("comentarios")
                or die ("Não foi possivel acessar o banco de dados");
        
        if(isset($_POST['cadastrar']) && $_POST['cadastrar'] == 'ok'){
            echo "ok";
            $post_status = 'aguardando';
            $post_data      = date('Y-m-d H:i:s');
            $post_time         = time('H:i:s');
            $nome        = strip_tags(trim($_POST['nome']));
            $email       = strip_tags(trim($_POST['email']));
            $comentario  = strip_tags(trim($_POST['comentario']));

            if(empty($nome)){
                    $retorno = "informe o seu nome";
                }else if(empty($email)){
                    $retorno = "informe o seu email";
                }else if(filter_var($email, FILTER_VALIDATE_EMAIL)){
                    $retorno = "informe um email válido";
                }else if(empty($comentario)){
                    $retorno = "escreva o seu comentário";
                }else if(empty($retorno)){

                $cadastrar_comentario = mysql_query("INSERT INTO  c_comments (post_status, data, time, nome, email, comentario) VALUES ('$post_status', '$post_data', '$post_time', '$nome', '$email', '$comentario')") or die(mysql_error());
                if(mysql_affected_rows($cadastrar_comentario)){
                    $retorno = "Recebemos seu comentário, ele será publicado depois de aprovado. Obrigado!";
                    unset($form_nome, $form_email, $form_comentario); 
                }else{
                    $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
                }
                echo $retorno;
            }
        }
    ?>

    <ul>
    <?php

        $comentarios = mysql_query("SELECT post_status,data,time,nome,email,comentario FROM  c_comments WHERE post_status = 'aprovado' ORDER BY data ASC") or die(mysql_error());
        if(@mysql_num_rows($comentarios) == '0'){
            echo "Não existe comentário neste tópico, seja o primeiro";
        }else{
        
            while($res_comments=mysql_fetch_array($comentarios)){
                $post_status     = $res_comments[0];
                $data            = $res_comments[1];
                $time             = $res_comments[2]
                $nome            = $res_comments[3];
                $email           = $res_comments[4];
                $comentario      = $res_comments[5];
                $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=60";  
                $size = 60;                 
                $grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;

    ?>

    <li>
        <h2>
            <img src="<?php echo $grav_url; ?>" alt="" /><?php echo $nome; ?> escreveu em <?php echo date('d/m/y'($data)); ?>
            <?php echo time('H:i:s'($time)); ?>h
        </h2>
        <p>
            <?php echo $comentario;?>
        </p>
    </li>

    <?php
        }
    }
    ?>
    </ul>


    <div id="comentar">

    <?php 
        $form_nome = (isSet($_POST['nome']))?$_POST['nome']:'';
        $form_email = (isSet($_POST['email']))?$_POST['email']:'';
        $form_comentario = (isSet($_POST['comentario']))?$_POST['comentario']:'';
    ?>

    <form method="post" action="" name="comentar" enctype="multipart/form-data">
      <fieldset>
            <legend>Deixe seu comentário</legend>
                <label><span>Nome</span>
                <input type="text" name="nome" name="nome" value="<?php echo $form_nome; ?>" /></label>
                
                <label><span>Email</span>
                <input type="text" name="email" value="<?php echo $form_email; ?>" /></label>
                
                <label><span>Comentário</span>
                <textarea name="comentario" rows="5" cols="0"><?php echo $form_comentario; ?></textarea>
                <input type="hidden" name="cadastrar" value="ok" />
          <input type="submit" value="Enviar comentário" class="btn"/>
        </fieldset>    
    </form>

    </id><!--comentar-->

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, agora está retornando este erro:

Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\comentarios.php on line 56

Erro ao cadastrar seu comentário, tente novamente!

Já ao subir a um servidor remoto deu o seguinte erro:

Entrada '0' duplicada para a chave 1

O código está assim:

<?php 

    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("comentarios") or die(mysql_error());
    
    if(isset($_POST['cadastrar']) && $_POST['cadastrar'] == 'ok'){
        echo "ok";
        $post_status = 'aguardando'; 
        $post_data = date('Y-m-d H:i:s');         
        $nome      = strip_tags(trim($_POST['nome']));
        $email      = strip_tags(trim($_POST['email']));
        $comentario = strip_tags(trim($_POST['comentario']));

        if(empty($nome)){
                $retorno = "informe seu nome";
            }else if(empty($email)){
                $retorno = "informe seu email";
            }else if(filter_var($email, FILTER_VALIDATE_EMAIL)){
                $retorno = "informe um email válido";
            }else if(empty($comentario)){
                $retorno = "escreva seu comentário";
            }else if(empty($retorno)){

linha 55      $cadastrar_comentario = mysql_query("INSERT INTO  c_comments (post_status, data, nome, email, comentario) VALUES ('$post_status', '$post_data', '$nome', '$email', '$comentario')") or die(mysql_error()); 
linha 56      if(mysql_affected_rows($cadastrar_comentario)){ 
linha 57      $retorno = "Recebemos seu comentário, ele será publicado depois de aprovado. Obrigado!";
          unset($form_nome, $form_email, $form_comentario); 
         }else{
         $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
            }
            echo $retorno;
        }
    }
?>

<ul>
<?php

    $comentarios = mysql_query("SELECT post_status,data,nome,email,comentario FROM  c_comments WHERE post_status = 'aprovado' ORDER BY data ASC") or die(mysql_error());
    if(@mysql_num_rows($comentarios) == '0'){
        echo "Não existe comentário neste tópico, seja o primeiro";
    }else{
        while($res_comments=mysql_fetch_array($comentarios)){
            
            $post_status     = $res_comments[0];                
            $data            = $res_comments[1];
            $nome            = $res_comments[2];
            $email           = $res_comments[3];
            $comentario      = $res_comments[4];
                    
            $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=60";  
            $size = 60;                 
            $grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;

?>

<li>
    <h2>
        <img src="<?php echo $grav_url; ?>" alt="" /><?php echo $nome; ?> disse em <?php echo date('d/m/y H:m', strtotime($data)); ?>h
    </h2>
    <p>
        <?php echo $comentario;?>
    </p>
</li>

<?php
    }
}
?>
</ul>


<div id="comentar">

<?php 
    $form_nome = (isSet($_POST['nome']))?$_POST['nome']:'';
    $form_email = (isSet($_POST['email']))?$_POST['email']:'';
    $form_comentario = (isSet($_POST['comentario']))?$_POST['comentario']:'';
?>

<form method="post" action="" name="comentar" enctype="multipart/form-data">
  <fieldset>
        <legend>Deixe seu comentário</legend>
            <label><span>Nome</span>
            <input type="text" name="nome" name="nome" value="<?php echo $form_nome; ?>" /></label>
            
            <label><span>Email</span>
            <input type="text" name="email" value="<?php echo $form_email; ?>" /></label>
            
            <label><span>Comentário</span>
            <textarea name="comentario" rows="5" cols="0"><?php echo $form_comentario; ?></textarea>
            <input type="hidden" name="cadastrar" value="ok" />
      <input type="submit" value="Enviar Comentário" class="btn"/>
    </fieldset>    
</form>

</id><!--comentar-->

Editado por Clayton Souza
Link para o comentário
Compartilhar em outros sites

  • 0

Beleza pessoal, conseguí resolver maior parte do problema, agora é o seguinte:

O que acontece agora é que a validação só funciona em parte.

Se deixo algum campo em branco ou insiro a informação errada, o script não envia para o banco de dados, mas não dá a menssagem ao usuário:

por exemplo: "escreva o seu nome" ou "escreva um email válido"

Quando insiro todas as informações corretas, não aparece a mensagem "Recebemos seu comentário e ele sera publicado assim que for aprovado por nossa equipe, obrigado!",

O que está faltando, ou sobrando?

Vou colar o código alterado

<?php 

    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("Comentarios") or die(mysql_error());
    
    if(isset($_POST['cadastrar']) && $_POST['cadastrar'] == 'ok'){
        $post_status = 'aguardando'; 
        $post_data = date('Y-m-d H:i:s');         
        $nome      = strip_tags(trim($_POST['nome']));
        $email      = strip_tags(trim($_POST['email']));
        $comentario = strip_tags(trim($_POST['comentario']));

        if(empty($nome)){
                $retorno = "informe o seu nome";
            }elseif(empty($email)){
                $retorno = "informe o seu email";
            }elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
                $retorno = "informe um email válido";
            }elseif(empty($comentario)){
                $retorno = "escreva o seu comentário";
        }if(empty($retorno)){

            $cadastrar_comentario = mysql_query ("INSERT INTO  c_comments (post_status, data, nome, email, comentario) VALUES ('$post_status', '$post_data', '$nome', '$email', '$comentario')") 
            or die(mysql_error()); 
            if($cadastrar_comentario >= '1'){  
    $retorno = "Recebemos seu comentário e ele sera publicado assim que for aprovado por nossa equipe, obrigado!";  
unset($form_nome, $form_email, $form_comentario);  
}else{  
    $retorno = "Erro ao cadastrar seu comentário, tente novamente!";  
        }  
    } 
} 
?> 

<ul>
<?php

    $comentarios = mysql_query("SELECT id,post_status,data,nome,email,comentario FROM  c_comments WHERE post_status = 'aprovado' ORDER BY data ASC") or die(mysql_error());
    if(@mysql_num_rows($comentarios) == '0'){
        echo "Não existe comentário neste tópico, seja o primeiro";
    }else{
        while($res_comments=mysql_fetch_array($comentarios)){
            
            $id                 = $res_comments[0];
            $post_status     = $res_comments[1];                
            $data            = $res_comments[2];
            $nome            = $res_comments[3];
            $email           = $res_comments[4];
            $comentario      = $res_comments[5];
                    
            $default = "http://www.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=60";  
            $size = 60;                 
            $grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;

?>

<li>
    <h2>
        <img src="<?php echo $grav_url; ?>" alt="" /><?php echo $nome; ?> disse em <?php echo date('d/m/y H:m', strtotime($data)); ?>h
    </h2>
    <p>
        <?php echo $comentario;?>
    </p>
</li>

<?php
    }
}
?>
</ul>


<div id="comentar">

<?php 
    $form_nome = (isSet($_POST['nome']))?$_POST['nome']:'';
    $form_email = (isSet($_POST['email']))?$_POST['email']:'';
    $form_comentario = (isSet($_POST['comentario']))?$_POST['comentario']:'';
?>

<form method="post" action="" name="comentar" enctype="multipart/form-data">
  <fieldset>
        <legend>Deixe seu comentário</legend>
            <label><span>Nome</span>
            <input type="text" name="nome" name="nome" value="<?php echo $form_nome; ?>" /></label>
            
            <label><span>Email</span>
            <input type="text" name="email" value="<?php echo $form_email; ?>" /></label>
            
            <label><span>Comentário</span>
            <textarea name="comentario" rows="5" cols="0"><?php echo $form_comentario; ?></textarea>
            <input type="hidden" name="cadastrar" value="ok" />
      <input type="submit" value="Enviar Comentário" class="btn"/>
    </fieldset>    
</form>

</id><!--comentar-->

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...