Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá! Recentemente tive uma dúvida em relação ao meu banco de dados para com o php, criei atualmente duas tabelas diferentes tendo elas conectadas para criação e login de usuários(tbl_users) e a outra para postagens(pubs), mas quando faço minha postagem ele não envia para o banco de dados, alguém pode me ajudar?
Códigos a seguir:
PHP do Login
<?php
session_start();
require_once 'dbconnect.php';
if (isset($_SESSION['userSession'])!="") {
header("Location: home.php");
exit;
}
if (isset($_POST['btn-login'])) {
$email = strip_tags($_POST['email']);
$password = strip_tags($_POST['password']);
$email = $DBcon->real_escape_string($email);
$password = $DBcon->real_escape_string($password);
$query = $DBcon->query("SELECT user_id, email, password FROM tbl_users WHERE email='$email'");
$row=$query->fetch_array();
$count = $query->num_rows; // if email/password are correct returns must be 1 row
if (password_verify($password, $row['password']) && $count==1) {
$_SESSION['userSession'] = $row['user_id'];
setcookie("login",$email);
header("Location: home.php");
} else {
$msg = "<div class='alert'>
<span class='glyphicon glyphicon-info-sign'></span> Esse Usuário não Existe!
</div>";
}
$DBcon->close();
}
?>
<!doctype html>
<html>
<head>
<title>Login :: Nicken</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="Sublime Contact Form Widget Responsive, Login form web template,Flat Pricing tables,Flat Drop downs Sign up Web Templates, Flat Web Templates, Login signup Responsive web template, Smartphone Compatible web template, free webdesigns for Nokia, Samsung, LG, SonyEricsson, Motorola web design" />
<script type="application/x-javascript"> addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false); function hideURLbar(){ window.scrollTo(0,1); } </script>
<!-- fonts -->
<link href="//fonts.googleapis.com/css?family=Nunito:300,400,700" rel="stylesheet">
<link href="//fonts.googleapis.com/css?family=Muli:300,400" rel="stylesheet">
<!-- /fonts -->
<!-- css -->
<link href="_estilos/login.css" rel='stylesheet' type='text/css' media="all" />
<!-- /css -->
</head>
<body>
<div class="signin-form">
<div class="container">
<form class="form-signin" method="post" id="login-form">
<?php
if(isset($msg)){
echo $msg;
}
?>
<h1 class="agileits w3 wthree w3-agile w3-agileits agileinfo agile">Comunidade Nicken</h1>
<div class="content-w3ls agileits w3 wthree w3-agile w3-agileits agileinfo agile">
<h2>Faça Seu Login</h2>
<form method="post" class="form-agileits">
<input type="email" class="email" name="email" placeholder="ENDEREÇO DE E-MAIL" title="Por Favor, E-Mail Válido." required />
<input type="password" class="form-control" placeholder="SUA SENHA" name="password" title="Por Favor, Senha Válida." required />
<input type="submit" class="sign-in" name="btn-login" value="Fazer Login">
</form>
</div>
<p class="copyright agileits w3 wthree w3-agile w3-agileits agileinfo agile">Não Tem Cadastro? <a href="register.php">Faça Agora!</a></p>
</body>
</html>
Php do sistema de postagens:
<?php
// Report all PHP errors
error_reporting(E_ALL);
include("_corpo/header.php");
if (isset($_POST['publish'])) {
if ($_FILES["file"]["error"] > 0) {
$texto = $_POST["texto"];
$hoje = date("Y-m-d");
if ($texto == "") {
echo "<h3>Tens de escrever alguma coisa antes de publicar!</h3>";
}else{
$query = "INSERT INTO pubs (user,texto,data) VALUES ('$login_cookie','$texto','$hoje')";
$data = mysqli_query($query) or die();
if ($data) {
header("Location: ./");
}else{
echo "Alguma coisa não correu lá muito bem... Tenta outra vez mais tarde";
}
}
}else{
$n = rand(0, 1000000);
$img = $n.$_FILES["file"]["name"];
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$img);
$texto = $_POST['texto'];
$hoje = date("Y-m-d");
if ($texto == "") {
echo "<h3>Tens de escrever alguma coisa antes de publicar!</h3>";
}else{
$query = "INSERT INTO pubs (texto,imagem,data) VALUES ('$texto','$img','$hoje')";
$data = mysqli_query($query) or die();
if ($data) {
header("Location: ./");
}else{
echo "Alguma coisa não correu lá muito bem... Tenta outra vez mais tarde";
}
}
}
}
?>
<html><head><link href="_estilos/home.css" rel='stylesheet' type='text/css' media="all" />
</head>
<header>
</header>
<body>
<div id="publish">
<form method="POST" enctype="multipart/form-data">
<br />
<textarea placeholder="Escreve uma publicacão nova" name="texto"></textarea>
<label for="file-input">
<img src="_imagens/imagegrey.png" title="Inserir uma fotografia" />
</label>
<input type="submit" value="Publicar" name="publish" />
<input type="file" id="file-input" name="file" hidden />
</form>
</div>
</body>
</html>É a minha postagem no fórum e eu não conheço muito bem o sistema, me desculpe realmente.
Acrescentei tudo o que você pediu e apareceu o seguinte:
>
Citar
De um print_r/var_dump logo após o seu _POST, veja se está chegando algo...
array(3) { ["email"]=> string(27) "meu@mail.com" ["password"]=> string(9) "minhasenha" ["btn-login"]=> string(11) "Fazer Login" }
E quando fui fazer a postagem apareceu os seguintes erros:
Notice: Undefined variable: login_cookie in /var/www/Nicken/home.php on line 15
Warning: mysqli_query() expects at least 2 parameters, 1 given in /var/www/Nicken/home.php on line 16
Consegui resolver uma parte do problema de conexão, era apenas mostrar duas variáveis para mysqli_query e conectar a página de login a página de postagens, fazendo o login_cookie funcionar, mas infelizmente agora quando tento postar o problema é outro:
Não aparece erro nenhum mas também não manda para o banco de dados, apenas para a pasta de upload.
Sem problemas @Nicken não leva pro pessoal não, só reforço as regras do forum para uma organização, fora q a leitura daquele post é realmente muito rica em detalhes..
Voltando ao post...
Notice: Undefined variable: login_cookie in /var/www/Nicken/home.php on line 15
... Ops pera ai...
Então eu tava digitando hehe.
Tenta avaliar oq estava sendo enviado então pro banco...
Ex:
$query = "INSERT INTO pubs (texto,imagem,data) VALUES ('$texto','$img','$hoje')";
echo $query;die();
...
Pega a consulta e insere manualmente.
Veja se da algum erro.
(Isso em ambas Query de inserts (obviamente 1 de cada vez)>
Citar
Pega a consulta e insere manualmente.
Veja se da algum erro.
(Isso em ambas Query de inserts (obviamente 1 de cada vez)
Coloquei em ambas e os resultados foram os seguintes:
UPLOAD:
$query = "INSERT INTO pubs (texto,imagem,data) VALUES ('$texto','$img','$hoje')";
echo $query;die();
INSERT INTO pubs (texto,imagem,data) VALUES ('[Texto de Teste]','imagem.jpg','2017-03-21')
TEXTO NORMAL:
$query = "INSERT INTO pubs (user,texto,data) VALUES ('$login_cookie','$texto','$hoje')";
echo $query;die();
INSERT INTO pubs (user,texto,data) VALUES ('Usuário','[Texto de Teste]','2017-03-21')Insere os mesmo no Banco manualmente agora,
vai la abre o PhpMyAdmin, adminer.php ... enfim o cliente q tu tiver e veja se da algum erro ao executar essas querys
Falando em SQL..
Como está está a estrutura dessa sua tabela?
pubs
da um DESC nela, veja se todos os tipos estão de acordo com oq você vai inserir.
@gabrieldarezzo Muito obrigado mesmo pela ajuda, você me deu uma ótima base para procurar os meus erros através dos sites e dos códigos, sem dúvida uma grande ajuda.
Consegui resolver o erro de postagem de imagens, ali faltava $login_cookie então não identificava o usuário para a seguinte postagem.
Apenas um erro agora:
Não reconhece no sql o mesmo código sem imagem.
Muito bom, a ideia do forum é exatamente essa, ajudar você a trilhar o caminho e não percorrer o mesmo por você.
Recomendo fortemente que você estude a respeito de prepare/bind_param, eles diminuem e deixam o código mais claro evitando o uso desses carinhas aqui:
real_escape_string
Exemplo de um Select utilizando bind_param protegido de SQL INJECTION:
<?php
$db = new mysqli("localhost", "root", "", "imasters");
if ($db->connect_errno) {
echo "Failed to connect to MySQL: (" . $db->connect_errno . ") " . $db->connect_error;
}
$nome = 'Gabriel Sousa Darezzo';
$stmt = $db->prepare("SELECT * FROM usuario where nome_completo = ?");
if($stmt === false) {
trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->errno . ' ' . $conn->error, E_USER_ERROR);
}
//Bind parameters. Types: s = string, i = integer, d = double, b = blob
$stmt->bind_param('s', $nome);
if(!$stmt->execute()){
die('ocorreu um erro');
}
$res = $stmt->get_result();
$usuarios = $res->fetch_all(MYSQLI_ASSOC);
//Caso seja apenas uma linha, Por exemplo WHERE id = 3, pode usar o fetch_array() que evita um retorno de array de arrays()
//$usuarios = $res->fetch_array(MYSQLI_ASSOC);
var_dump($usuarios);
Outro exemplo que talvez possa te ajudar é de insert de arquivo:
[https://github.com/gabrieldarezzo/comum/blob/master/upload_file.php](https://github.com/gabrieldarezzo/comum/blob/master/upload_file.php)
Bons estudos
>
Citar
mas quando faço minha postagem ele não envia para o banco de dados, alguém pode me ajudar?
Eu quero te ajudar.
Eu vou te ajudar.
Mas você pra isso você precisa me/nós ajudar....
Erros estão habilitados? Se sim acontece alguma coisa o que?
Para habilitar os mesmos: