Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salve galera! Desenvolvi um sistema de vídeos com comentários, porém, os comentários não estão sendo gravado no banco de dados e aparece um erro de Duplicate entry '1' for key 'PRIMARY'
video.php
<?php include"conexao.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">](http://www.w3.org/1999/xhtml)
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<link href="../css/video.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="cont">
<div id="barratv"><img src="img/tv.png" width="112" height="112"></div>$recupera = $_GET['idvideo'];
$video = mysql_query("SELECT * FROM postvideo WHERE `idvideo` = '$recupera'")
or die(mysql_error());$idvideo = $res_video["idvideo"];
$titulo = $res_video["titulo"];
$embed = $res_video["embed"];
$desc = $res_video["desc"];
?>
<div id="recebevideo">
<div id="titvideo"><span class="titv"><? echo $titulo; ?></span></div>
<div id="mostravideo">
<? echo $embed; ?><br />
</div>
<div class="bordadesc"><img src="img/bordadesc.png" width="600" height="10"></div>
<div id="descvideo">
<img src="img/mini_logotv.png" align="left" width="25"><?php echo $desc; ?>
</div>
<div class="bordadesc"><img src="img/bordadescbaixo.png" width="600" height="10"></div><br><br>
<?
}
}
?>
</div>
<?php
$form_autor = $_POST['nome'];
$form_email = $_POST['email'];
$form_comentario = $_POST['comentvideo'];
?>
<?php
if(isset($_POST['cadastrar']) && $_POST['cadastrar'] =='ok'){
$poststatus = 'aguardando';
$data = date('Y-m-d H:i:s');
$autor = strip_tags(trim($_POST['nome']));
$email = strip_tags(trim($_POST['email']));
$comentario = strip_tags(trim($_POST['coment']));
if(empty($autor)){
$retorno = "informe o seu nome";
}elseif(empty($email)){
$retorno = "informe seu email";
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$retorno = "Informe email valido";
}elseif(empty($comentario)){
$retorno = "informe seu comentário";
}if(empty($retorno)){
$cadastrar_comentario = mysql_query("INSERT INTO comentvideo (postid, poststatus, data, autor, email, coment) VALUES ('$recupera', '$poststatus', '$data', '$autor', '$email', '$comentario' )")
or die(mysql_error());
if($cadastrar_comentario >= '1'){
$retorno = "recebemos seu comentário e ele será publicado assim que for aprovado por nossa equipe, obrigado.";
unset($form_autor, $form_email, $form_comentario);
}else{
$retorno = "erro ao cadastrar comentário";}
}
}
?>
<div id="recebecoment"><h2>comentarios</h2>
<div id="formcoment">
<h2><?php if(isset($retorno)){echo "$retorno";} ?></h2>
<form method="post" action="" name="comentar" enctype="multipart/form-data">
<fieldset>
<legend>Deixe o seu comentario</legend>
<label><span>Nome</span>
<input type="text" name="nome" value="<?php echo $form_autor; ?>"/>
</label>
<label><span>Email</span>
<input type="text" name="email" value="<?php echo $form_email; ?>"/>
</label>
<label><span>Comentario</span>
<textarea name="coment" rows="3" value="<?php echo $form_comentario; ?>"></textarea>
</label>
<input type="hidden" name="cadastrar" value="ok" />
<input type="submit" value="enviar comentário" class="btn"/>
</fieldset>
</form>
</div>
<?
$id_do_video= $_GET['idvideo'];
$comentarios = mysql_query("SELECT * FROM comentvideo WHERE `idvideo` = '$recupera' AND poststatus = 'aprovado'")
or die(mysql_error());
if(@mysql_num_rows($comentarios) == '0'){
echo "não existe comentario no momento";
}else{
while($res_coment=mysql_fetch_array($comentarios)){
$postid = $res_coment["postid"];
$poststatus = $res_coment["poststatus"];
$data = $res_coment["data"];
$autor = $res_coment["autor"];
$email = $res_coment["email"];
$comentario = $res_coment["coment"];
$default = "http://www.somewhere.com/homestar.jpg";
$size = 40;
$grav_url = "[http://www.gravatar.com/avatar/"](http://www.gravatar.com/avatar/) . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;
?>
<div id="<? echo $class; $num = $num + 1; ?>">
<img src="<?php echo $grav_url; ?>" alt="" align="left" style="border: solid #0292c0 2px"/><span class="titcomentvideo"><?php echo $autor; ?></span>disse em: <?php echo date('d/m/Y H:i', strtotime($data)); ?><br /><?php echo $comentario; ?><br /></div>
<?
}
}
?>
</div>
</div>
<br />
<?
$link = mysql_query("SELECT
idvideo,
img
FROM postvideo")
or die(mysql_error());
if(@mysql_num_rows($link) == '0'){
echo"não existe videos no momento";
}else{
while($res_links=mysql_fetch_array($link)){
$id_video = $res_links[0];
$img = $res_links[1];
?>
<a href="?pagina=video&idvideo=<? echo $id_video ?>"><img src="../video/<?php echo $img; ?>" border="0"/></a>
<?php
}
}
?>
</div>
</body>
</html>setpnm2010.sql
tabela comentvideo
CREATE TABLE IF NOT EXISTS `comentvideo` (
`postid` int(11) NOT NULL AUTO_INCREMENT,
`idvideo` varchar(11) NOT NULL,
`poststatus` text NOT NULL,
`data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`autor` text NOT NULL,
`email` text NOT NULL,
`site` text NOT NULL,
`coment` text NOT NULL,
PRIMARY KEY (`postid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
tabela post video
CREATE TABLE IF NOT EXISTS `postvideo` (
`idvideo` int(11) NOT NULL AUTO_INCREMENT,
`titulo` varchar(250) NOT NULL,
`data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`img` char(32) NOT NULL,
`embed` text NOT NULL,
`desc` text NOT NULL,
`categoria` varchar(200) NOT NULL,
PRIMARY KEY (`idvideo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;wedeson, seu campo postid no banco é auto_increment, e na sua aplicação você utiliza ele com o valor da variável $recupera que é o ID do vídeo.
O certo é o campo postid incrementar automático.
troque
$cadastrar_comentario = mysql_query("INSERT INTO comentvideo (postid, poststatus, data, autor, email, coment) VALUES ('$recupera', '$poststatus', '$data', '$autor', '$email', '$comentario' )")
or die(mysql_error());
por
$cadastrar_comentario = mysql_query("INSERT INTO comentvideo (poststatus, data, autor, email, coment) VALUES ('$poststatus', '$data', '$autor', '$email', '$comentario' )")
or die(mysql_error());
Veja se retorna algum erro, se retornar poste aqui...
gravou no banco de dados ok agora, porém, não pegou o id do video, o campo ficou vazio.
werdeson,
Inclua o campo na query e a variável que pega o ID do vídeo, faça assim (exemplo):
$cadastrar_comentario = mysql_query("INSERT INTO comentvideo (idvideo, poststatus, data, autor, email, coment) VALUES ('$recupera','$poststatus', '$data', '$autor', '$email', '$comentario' )")
or die(mysql_error());
SUGESTÃO
Amigo o tipo do campo idvideo na sua tabela comentvideo deve ser int(11).
É necessário o relacionamento entre essas tabelas também, se você quiser estudar sobre abra um tópico na seção de MySQL que te ajudo.
Um abraço.
Deu certinho cara, muito obrigado mesmo, pessoas como você é q faz esse forum ser tão respeitado. Valeu!!!
Resolvido.
Obs.: Vou estudar sobre o assunto q você sugeriu. obrigado
Amigo boa tarde, eu nem vi o código mas pelo erro gerado " Duplicate entry '1' for key 'PRIMARY' "
Voce está inserindo o mesmo código na chave primária.
Na sua tabela você criou um campo auto_increment? Mostre como está sua tabela com os campos e atributos.