Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, eu tenho um sistema de comentários que quando um "player" preenche esse comentário, ele vai direto para pagina inicial, funciona como um feedback, só que ele pode usar isso várias e várias vezes, eu queria que ele usasse apenas uma vez e não pudesse mais utilizar, sendo assim só seria possível usar uma vez.
Ou q só poderia usar se tivesse x quantidades de pontos no banco de dados(eu tenho uma coluna com pontos) e a cada vez que ele usasse esse formulário(comentário), ele perderia 1 ponto,e quando não tivesse mais pontos, ele não poderia comentar.
Alguém tem alguma ideia de como posso fazer isso? e qual funções utilizar?
VALEUU!!!
>
2 horas atrás, michelmir disse:
Olá!
Baseando-se nesta parte da sua questão:
Você pode usar PHP e MySql como solução montando um script para debitar o ponto a cada vez que usuário realizar um submit no formulário. No caso, partindo que você já tem um sistema de login de usuário, você pode criar um script php que ao ser chamado atualiza a coluna "pontos" no MySql.
Abaixo segue um script básico com função de atualizar a coluna pontos quando o botão submit do formulário "comentários" for clicado. Repare que no início do mesmo contém um "session_start()" que tem como função armazenar o id do usuário durante o seu login. Esse número ID é usado para selecionar dados relativos a ele :
<?php
// Initialize the session
session_start();
if(isset($_POST['submit'])){
include 'pdo_connection.php';
$sth = $db->prepare("SELECT pontos FROM users WHERE id = ".$_SESSION["id"]."");
$sth->execute();
$result = $sth->fetchColumn();
$pontos = $result - 1;
$st = $db->prepare("UPDATE users SET pontos = $pontos WHERE id = ".$_SESSION["id"]."");
$st->execute();
$db = null;
}
?>
E abaixo, o script que inseri o comentário, por exemplo. Nesse script php, o comentário é inserido na coluna "comentario" do MySql onde ao mesmo tempo ele chama o script php (**update-pontos.php**) acima onde atualiza a pontuação depois do comentário ter sido inserido:
<?phpsession_start();
$link = mysqli_connect("localhost", "root", "", "system");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Escape user inputs for security
$comentario = mysqli_real_escape_string($link, $_REQUEST['comentario']);
// Attempt insert query execution
$sql = "INSERT INTO comentarios (comentario, usuarioFK) VALUES ('$comentario',".$_SESSION["id"].")";
if(mysqli_query($link, $sql)){
include_once 'update-pontos.php';
header("location: comentario-inserido-com-sucesso.php");
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
?>
Criei um sistema bem básico como forma de demonstração. Dê uma olhada e se possível baixe os arquivos para testar. No caso do banco de dados criei uma tabela para armazenar os comentários e uma tabela para armazenar usuários e seus pontos.
[Link para o sistema básico de testes](http://2020x.000webhostapp.com/post02/index.php)
Então, eu já tenho tudo feito, só quero implementar essa função para remover x pontos e também só dar submit se tiver esses pontos!
No caso a parte onde a pessoa envia o formulário"comentário" é essa abaixo:
>
Citar
<?php
global $config;
require("config.php");
$ots = POT::getInstance();
$ots->connect(POT::DB_MYSQL, connection());
$SQL = $ots->getDBHandle();
$ide = new IDE;
$ide->requireLogin();
if($ide->isLogged()){
$accountName = $_SESSION['nickname'];
//$SQL->query('SELECT * FROM accounts WHERE name="'.$accountName.'"')->fetch();
}
?>
<br>
<br> <form method="POST" action="/comentarios.php">
<div class="wrap-login100">
</span>
<span class="login100-form-title p-b-34 p-t-27">
COMENTÁRIO/FEEDBACK
</span>
<center><h4><b>Deixe seu comentário contando sua experiência com o jogo</b></h4></center><br>
<div class="wrap-input100 validate-input" data-validate = "Enter username">
<input type="text" value="<? echo $accountName; ?>" class="input100" name="nome" placeholder="Nome" required />
<span class="focus-input100" data-placeholder=""></span>
</div>
<div class="wrap-input100 validate-input" data-validate = "Enter username"> <h1><font color="white"> Comente sua experiência com o jogo no campo abaixo:</h1>
<textarea type="mensagem" class="input100" name="mensagem" maxlength="110" placeholder="Digite aqui sua observação" required /> </textarea>
<span class="focus-input100" data-placeholder=""></span>
</div>
<div class="wrap-input100 validate-input" data-validate = "Enter username">
<span class="focus-input100" data-placeholder=""></span>
<h2><font color="white">
<select name="sendo" class="buttonseelct" required />
<?php
date_default_timezone_set("America/Sao_paulo");
$ano = date ('Y');
$mes = date ('m');
$dia =date ('d');
print '<option value="'.date('Y-m-d').'">'.$dia.'/'.$mes.'/'.$ano.' </option>';
?>
</div>
</font></select>
</h2></div>
<div class="container-login100-form-btn">
<button type="submit" class="login100-form-btn">
Enviar
</button>
</div>
<br>
<div class="container-login100-form-btn">
<button type="reset" class="login100-form-btn">
Limpar Campos
</button>
</div>
</form>
Agora abaixo é pra poder acessar a informação do banco de dados:
>
Citar
<?php
$servidor = "localhost";
$usuario = "root";
$senha = "";
$dbname = "comentario";
//Criar a conexao
$conn = mysqli_connect($servidor, $usuario, $senha, $dbname);
E abaixo é quando o formulário é enviado
>
Citar
<?php
session_start();
include_once("comentario.php");
$nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING);
$mensagem = filter_input(INPUT_POST, 'mensagem', FILTER_SANITIZE_STRING);
$sendo = filter_input(INPUT_POST, 'sendo', FILTER_SANITIZE_STRING);
//echo "Nome: $nome <br>";
//echo "E-mail: $email <br>";
$result_usuario = "INSERT INTO comentario (nome, mensagem, sendo, created) VALUES ('$nome', '$mensagem', '$sendo', NOW())";
$resultado_usuario = mysqli_query($conn, $result_usuario);
if(mysqli_insert_id($conn)){
$_SESSION['msg'] = "<p style='color:green;'>Comentário enviado com sucesso, obrigado por enviar o seu feedback.</p>";
header("Location:/index.php/p/v/sucesso2");
}else{
$_SESSION['msg'] = "<p style='color:red;'>Comentário não enviado, tente novamente</p>";
header("Location:/index.php/p/v/fail2");
}Desculpa o código todo bagunçado, sou iniciante nessa parte de php, então sai tudo bagunçado kkk
>
14 hours ago, Gniusplay said:
Então, eu já tenho tudo feito, só quero implementar essa função para remover x pontos e também só dar submit se tiver esses pontos!
No caso a parte onde a pessoa envia o formulário"comentário" é essa abaixo:
Agora abaixo é pra poder acessar a informação do banco de dados:
E abaixo é quando o formulário é enviado
O script comentario.php contém uma tabela chamada comentário com colunas nome, mensagem, sendo e created. No caso, qual tabela esta a coluna pontos? Se puder, me diga o nome da tabela onde esta a coluna pontos e suas respectivas colunas pra eu poder adaptar o script que atualizará os pontos pra você.
>
5 horas atrás, michelmir disse:
O script comentario.php contém uma tabela chamada comentário com colunas nome, mensagem, sendo e created. No caso, qual tabela esta a coluna pontos? Se puder, me diga o nome da tabela onde esta a coluna pontos e suas respectivas colunas pra eu poder adaptar o script que atualizará os pontos pra você.
A tabela pontos está em outro banco de dados(no banco de dados da conta de cada pessoa que criou a conta)
Fica no banco de dados awvenda2>accounts>premium_points
a imagem abaixo mostra onde tá:

Então, basicamente você deverá criar um script php que tenha a função de atualizar os pontos do usuário quando o mesmo clicar no botão 'enviar comentário'. Pelo que entendi, você mencionou que existem outros bancos de dados que estão conectados entre-si neste projeto, correto? ou seria apenas um banco de dados com todas as tabelas nele?
De qualquer forma, ambas as situações você deverá se atentar na forma como o script se conecta a esses banco de dados configurando o script de conexão conforme as suas configurações bem como a query SELECT e UPDATE.
Abaixo, segue um script que atualiza a pontuação '**premium_points'** da tabela '**accounts'**:
**Nome:** update-pontos.php
<?php
// Initialize the session
session_start();
$db = new PDO('mysql:host=localhost;dbname=', 'user', 'pass');
$sth = $db->prepare("SELECT premium_points FROM accounts WHERE userFK = ".$_SESSION["nickname"]."");
$sth->execute();
$result = $sth->fetchColumn();
$pontos = $result - 1;
$st = $db->prepare("UPDATE accounts SET premium_points = $pontos WHERE userFK = ".$_SESSION["nickname"]."");
$st->execute();
$db = null;
?>
Repare que na query '**WHERE userFK'** você deve sustituir o '**userFK'** pelo nome da coluna que armazena o id do usuário correspondente dentro dessa tabela '**accounts'**, ou seja, seria uma foreing key (FK) dentro da tabela '**accounts**', pois na imagem que você postou não dá pra ver como se chama a coluna do ID do usuário nesta tabela.
Outro ponto é o **$_SESSION**. No caso reparei que existe um '**$_SESSION['nickname']'**. O **$_SESSION** deve estar relacionado com o ID do usuário que esta logado pois dessa forma a query SELECT retornará corretamente os resultados relacionados ao usuário logado.
Após ter criado o script '**update-pontos.php'**, abra o script que envia os dados do formulário para a tabela '**comentários'** e inclua um '**include**' na seguinte parte:
if(mysqli_insert_id($conn)){
include_once 'update-pontos.php';
$_SESSION['msg'] = "<p style='color:green;'>Comentário enviado com sucesso, obrigado por enviar o seu feedback.</p>";
header("Location:/index.php/p/v/sucesso2");
}
Dessa forma, caso a mensagem seja enviada corretamente, este script também chama e executa o script '**update-pontos.php'** que atualiza a coluna '**premium_points**' atualizando os dados relativos a mesma.
Dê uma olhada [neste exemplo](http://2020x.000webhostapp.com/post02/index2.php) que criei. Quando você inserir um comentário no campo e clicar no botão **enviar comentário**, a mensagem é inserida na tabela '**comentários' **e ao mesmo tempo, com o sucesso da mensagem enviada, o campo '**premium_points**' é atualizado em uma outra tabela chamada '**accounts**'.
Por fim, basicamente a lógica é mais ou menos essa. Uns também criam funções para executar este tipo de tarefa outros preferem utilizar métodos simples desde que o script seja criado evitando [sql injection](https://www.php.net/manual/pt_BR/security.database.sql-injection.php).
Tente adaptar ao seu projeto, lembrando de configurar a conexão conforme os dados do seu banco de dados, usuário e senha do mesmo.
Caso alguém deseje acrescentar alguma melhoria, fique a vontade.>
9 horas atrás, michelmir disse:
Então, basicamente você deverá criar um script php que tenha a função de atualizar os pontos do usuário quando o mesmo clicar no botão 'enviar comentário'. Pelo que entendi, você mencionou que existem outros bancos de dados que estão conectados entre-si neste projeto, correto? ou seria apenas um banco de dados com todas as tabelas nele?
De qualquer forma, ambas as situações você deverá se atentar na forma como o script se conecta a esses banco de dados configurando o script de conexão conforme as suas configurações bem como a query SELECT e UPDATE.
Abaixo, segue um script que atualiza a pontuação '**premium_points'** da tabela '**accounts'**:
**Nome:** update-pontos.php
<?php
// Initialize the session
session_start();
$db = new PDO('mysql:host=localhost;dbname=', 'user', 'pass');
$sth = $db->prepare("SELECT premium_points FROM accounts WHERE userFK = ".$_SESSION["nickname"]."");
$sth->execute();
$result = $sth->fetchColumn();
$pontos = $result - 1;
$st = $db->prepare("UPDATE accounts SET premium_points = $pontos WHERE userFK = ".$_SESSION["nickname"]."");
$st->execute();
$db = null;
?>
Repare que na query '**WHERE userFK'** você deve sustituir o '**userFK'** pelo nome da coluna que armazena o id do usuário correspondente dentro dessa tabela '**accounts'**, ou seja, seria uma foreing key (FK) dentro da tabela '**accounts**', pois na imagem que você postou não dá pra ver como se chama a coluna do ID do usuário nesta tabela.
Outro ponto é o **$_SESSION**. No caso reparei que existe um '**$_SESSION['nickname']'**. O **$_SESSION** deve estar relacionado com o ID do usuário que esta logado pois dessa forma a query SELECT retornará corretamente os resultados relacionados ao usuário logado.
Após ter criado o script '**update-pontos.php'**, abra o script que envia os dados do formulário para a tabela '**comentários'** e inclua um '**include**' na seguinte parte:
if(mysqli_insert_id($conn)){
include_once 'update-pontos.php';
$_SESSION['msg'] = "<p style='color:green;'>Comentário enviado com sucesso, obrigado por enviar o seu feedback.</p>";
header("Location:/index.php/p/v/sucesso2");
}
Dessa forma, caso a mensagem seja enviada corretamente, este script também chama e executa o script '**update-pontos.php'** que atualiza a coluna '**premium_points**' atualizando os dados relativos a mesma.
Dê uma olhada [neste exemplo](http://2020x.000webhostapp.com/post02/index2.php) que criei. Quando você inserir um comentário no campo e clicar no botão **enviar comentário**, a mensagem é inserida na tabela '**comentários' **e ao mesmo tempo, com o sucesso da mensagem enviada, o campo '**premium_points**' é atualizado em uma outra tabela chamada '**accounts**'.
Por fim, basicamente a lógica é mais ou menos essa. Uns também criam funções para executar este tipo de tarefa outros preferem utilizar métodos simples desde que o script seja criado evitando [sql injection](https://www.php.net/manual/pt_BR/security.database.sql-injection.php).
Tente adaptar ao seu projeto, lembrando de configurar a conexão conforme os dados do seu banco de dados, usuário e senha do mesmo.
Caso alguém deseje acrescentar alguma melhoria, fique a vontade.
ótimo, eu entendi, obrigado!
Só mais uma duvida, e como faço pra não enviar o comentário caso a tabela de pontos esteja em 0?Tente fazer o seguinte:
Selecione exatamente a parte do código do formulário contato abaixo:
<div class="container-login100-form-btn">
<button type="submit" class="login100-form-btn">
Enviar
</button>
</div>
<br>
<div class="container-login100-form-btn">
<button type="reset" class="login100-form-btn">
Limpar Campos
</button>
</div>
Em seguida, por cima dessa seleção que você fez, cole o script abaixo:
<?php
$db = new PDO('mysql:host=localhost;dbname=sistema', 'user', 'pass');
$sth = $db->prepare("SELECT premium_points FROM accounts WHERE userFK = ".$_SESSION["nickname"]."");
$sth->execute();
$result = $sth->fetchColumn();
if ($result < 1): ?>
<h6>Você não possui pontos suficientes para comentar</h6>
<div class="container-login100-form-btn">
<button type="submit" class="login100-form-btn" disabled>Enviar</button>
</div>
<br>
<div class="container-login100-form-btn">
<button type="reset" class="login100-form-btn" disabled>Limpar Campos</button>
</div>
<?php else: ?>
<div class="container-login100-form-btn">
<button type="submit" class="login100-form-btn" >Enviar</button>
</div>
<br>
<div class="container-login100-form-btn">
<button type="reset" class="login100-form-btn" >Limpar Campos</button>
</div>
<?php endif ?>
O script acima desabilitará os botões "**Enviar**" e "**Limpar Campos**" caso o usuário tenha zero premium_points, caso contrário os botões "**Enviar**" e "**Limpar Campos**" estarão habilitados.
Lembrando que você deve inserir as informações de conexão do banco de dados bem como se atentar para a parte da query "**WHERE userFK**" ser exatamente o nome da coluna da tabela "**accounts**" que armazena o ID do usuário cadastrado bem como o "**$_SESSION["nickname"]**" estar relacionado ao ID do usuário também. Dessa forma o resultado retornado estará relacionado ao usuário logado >
1 hora atrás, michelmir disse:
Tente fazer o seguinte:
Selecione exatamente a parte do código do formulário contato abaixo:
<div class="container-login100-form-btn">
<button type="submit" class="login100-form-btn">
Enviar
</button>
</div>
<br>
<div class="container-login100-form-btn">
<button type="reset" class="login100-form-btn">
Limpar Campos
</button>
</div>
Em seguida, por cima dessa seleção que você fez, cole o script abaixo:
<?php
$db = new PDO('mysql:host=localhost;dbname=sistema', 'user', 'pass');
$sth = $db->prepare("SELECT premium_points FROM accounts WHERE userFK = ".$_SESSION["nickname"]."");
$sth->execute();
$result = $sth->fetchColumn();
if ($result < 1): ?>
<h6>Você não possui pontos suficientes para comentar</h6>
<div class="container-login100-form-btn">
<button type="submit" class="login100-form-btn" disabled>Enviar</button>
</div>
<br>
<div class="container-login100-form-btn">
<button type="reset" class="login100-form-btn" disabled>Limpar Campos</button>
</div>
<?php else: ?>
<div class="container-login100-form-btn">
<button type="submit" class="login100-form-btn" >Enviar</button>
</div>
<br>
<div class="container-login100-form-btn">
<button type="reset" class="login100-form-btn" >Limpar Campos</button>
</div>
<?php endif ?>
O script acima desabilitará os botões "**Enviar**" e "**Limpar Campos**" caso o usuário tenha zero premium_points, caso contrário os botões "**Enviar**" e "**Limpar Campos**" estarão habilitados.
Lembrando que você deve inserir as informações de conexão do banco de dados bem como se atentar para a parte da query "**WHERE userFK**" ser exatamente o nome da coluna da tabela "**accounts**" que armazena o ID do usuário cadastrado bem como o "**$_SESSION["nickname"]**" estar relacionado ao ID do usuário também. Dessa forma o resultado retornado estará relacionado ao usuário logado
A tabela de contas são essas ai, e a "**$_SESSION["nickname"]**" deve ser "**$_SESSION["name"]**"
Eu alterei porém fala que não tenho ponto, mesmo tendo, sendo assim não consigo enviar o formulário
E alterei a linha para:
$sth = $db->prepare("SELECT premium_points FROM accounts WHERE name = ".$_SESSION["name"]."");Quais são as colunas após a coluna "premium_points?
Quanto a $_session[' '], dentro da mesma deverá conter algum nome que deve estar relacionado a algum valor dentro da tabela accounts. Normalmente é uma foreingKey. Outro ponto é verificar se o usuário logado contém pontos. Observei que na primeira imagem que você enviou, alguns usuários estão com a pontuação zerada. No caso você esta logado com alguma conta que possui pontos? Por fim, vamos testando as possibilidades baseando-se no que falamos aqui
>
9 horas atrás, michelmir disse:
Quais são as colunas após a coluna "premium_points?
Quanto a $_session[' '], dentro da mesma deverá conter algum nome que deve estar relacionado a algum valor dentro da tabela accounts. Normalmente é uma foreingKey. Outro ponto é verificar se o usuário logado contém pontos. Observei que na primeira imagem que você enviou, alguns usuários estão com a pontuação zerada. No caso você esta logado com alguma conta que possui pontos? Por fim, vamos testando as possibilidades baseando-se no que falamos aqui
A conta que estou logado tem pontos, e mesmo alterando o ponto pra 0 ou pra 1, o site fica do mesmo jeito, não consegue enviar o formulário.
$_session[' '] é name, que no caso é o login (conta) da pessoa(deixei $_session['name'])
As colunas estão na seguinte forma:
id name, password, premdays, lastday, email, key, blocked, warnings, group_id, page_acess, page_lastday, email_new_time, rlname, location, created, email_code, next_email, premium_points, nickname, avatar, about_me, language
Depois de um tempo tentando, consegui fazer, só vai enviar caso ele esteja com um ou mais pontos, caso contrário os botão de enviar e limpar campo não aparece, e quando ele envia um comentário, os pontos vão para 0, no caso ele só poderá enviar uma vez!
Obrigado, você me ajudou demais.
O Código caso alguém esteja precisando também:
<?php
$db = new PDO('mysql:host=localhost;dbname=awvenda2', 'root', '');
$sth = $db->prepare("SELECT `premium_points` FROM `accounts` WHERE `id` = ".$_SESSION['account_id']."");
$sth->execute();
$result = $sth->fetchColumn();
if ($result == 0): ?>
<h1>Você não possui pontos suficientes para comentar</h1>
<?php else: ?>
<div class="container-login100-form-btn">
<?php
$sth = $db->prepare("UPDATE `accounts` SET `premium_points` = '0' WHERE `accounts`.`id` = ".$_SESSION['account_id']."");
$sth->execute();
?>
<button type="submit" class="login100-form-btn" >Enviar</button>
</div>
<br>
<div class="container-login100-form-btn">
<button type="reset" class="login100-form-btn" >Limpar Campos</button>
</div>
<?php endif ?>Que bom que funcionou. Sucesso aí
Olá!
Baseando-se nesta parte da sua questão:
>
Quote
...só poderia usar se tivesse x quantidades de pontos no banco de dados(eu tenho uma coluna com pontos) e a cada vez que ele usasse esse formulário(comentário), ele perderia 1 ponto,e quando não tivesse mais pontos, ele não poderia comentar.
Você pode usar PHP e MySql como solução montando um script para debitar o ponto a cada vez que usuário realizar um submit no formulário. No caso, partindo que você já tem um sistema de login de usuário, você pode criar um script php que ao ser chamado atualiza a coluna "pontos" no MySql.
Abaixo segue um script básico com função de atualizar a coluna pontos quando o botão submit do formulário "comentários" for clicado. Repare que no início do mesmo contém um "session_start()" que tem como função armazenar o id do usuário durante o seu login. Esse número ID é usado para selecionar dados relativos a ele :
<?php
// Initialize the session
// Initialize the session
// Check connection
// Escape user inputs for security
$comentario = mysqli_real_escape_string($link, $_REQUEST['comentario']);
// Attempt insert query execution
if(mysqli_query($link, $sql)){
} else{