Bom dia, gostava de saber como é possível colocar o nome do ficheiro q eu der upload na base de dados… no campo imagem_noticia
Gostaria de saber como fazer… O meu input é assim:
<input type="file" name="file"/>
Bom dia, gostava de saber como é possível colocar o nome do ficheiro q eu der upload na base de dados… no campo imagem_noticia
Gostaria de saber como fazer… O meu input é assim:
<input type="file" name="file"/>
$nome_original = $_FILES["file"]["name"];
Se quiser o nome sem o formato do arquivo, pode usar o basename()
http://php.net/manual/pt_BR/function.basename.php
Nesse exemplo do W3School tem algumas validações:
https://www.w3schools.com/php/php_file_upload.asp
Boa tarde, obrigado pela resposta. Não estou conseguindo, não sei se estou fazendo algo de errado também… O meu código está assim!
<input type="file" id="imagem" name="file"/>
E no meu PHP… :
$nome_original = $_FILES["imagem"]["name"];
$query = "INSERT INTO noticias(imagem_noticia) VALUES ('$nome_original', '$datanoticia')";
Você tem que alterar o name do input, se você quiser usar o $_FILES
<input type="file" id="imagem" name="imagem"/>
$_FILES[ Aqui é o NAME do input, não o ID ]["name"];
Ou usar do jeito que eu mandei mesmo, já que o name = file
$nome_original = $_FILES["file"]["name"];
Não está funcionando…
HTML:
<input type="file" id="imagem" name="imagem"/>
Código PHP:
$imagem = $_FILES["imagem"]["name"];
Código SQL:
$query = "INSERT INTO noticias(imagem_noticia) VALUES ('$imagem')";
O que é que será que estou fazendo de errado?
Talvez esse seja o problema?
É que tenho uma <form>
…
<form method="post" action="upload.php" enctype="multipart/form-data">
`<p>Imagem:</p>`
<input type="file" id="imagem" name="file"/>
<button ng-disabled="verificarcampos()" type="submit" name="submit" ng-click="adicionar()">Publicar Notícia<button>
</form>
Como pode verificar o metodo é post no upload .php… e tou usando outro ficheiro (index.php) que serve apenas pra enviar dados para o banco de dados, será essa a razão de não conseguir ler o nome do ficheiro? Obs: o index.php é que está tentando ler o nome do ficheiro pra enviar para o banco de dados.
Se este form está dando POST para a página upload.php, as informações deste formulário vão ser enviadas para o upload.php.
Não sei se entendi muito bem, você está usando apenas um arquivo (index.php), contendo o formulário e salvando no banco?
Senão é só alterar o action para index.php
<form method="post" action="index.php" enctype="multipart/form-data">
Sua index.php está +/- assim?
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$target_file = basename($_FILES["file"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["file"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["file"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["file"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
}
else{
echo '<!DOCTYPE html>
<html>
<body>
<form action="index.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="file" id="imagem">
<input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>
';
}
Bom dia, minha index.php não tem nada sobre a imagem, como eu disse é apenas pra adicionar á base de dados… aqui está o código do meu index.php
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
require '../vendor/autoload.php';
$app = new \Slim\App;
// Get container
$container = $app->getContainer();
// Register component on container
$container['view'] = function ($container) {
$view = new \Slim\Views\Twig('../src/view/', [
//'cache' => 'path/to/cache'
]);
// Instantiate and add Slim specific extension
$router = $container->get('router');
$uri = \Slim\Http\Uri::createFromEnvironment(new \Slim\Http\Environment($_SERVER));
$view->addExtension(new Slim\Views\TwigExtension($router, $uri));
return $view;
};
$app->get('/', function (Request $request, Response $response, array $args) {
return $this->view->render($response, 'index.html');
});
$app->post('/inserirAlerta', function (Request $request, Response $response, array $args) {
$conn = mysqli_connect("localhost", "root", "", "noticia");
if (!$conn) {
$data=array("status"=>"Nao foi possivel conectar com a base de dados.");
return $response->withJson($data);
die("Erro: " . mysqli_connect_error());
}
$info= json_decode(file_get_contents("php://input"));
$titulonoticia = mysqli_real_escape_string($conn, $info->titulo);
$descricaonoticia = mysqli_real_escape_string($conn, $info->descricao);
$nome_original = $_FILES["file"]["name"];
$datanoticia = mysqli_real_escape_string($conn, $info->data);
$tiponoticia = mysqli_real_escape_string($conn, $info->tipo);
$query = "INSERT INTO noticias(titulo_noticia, texto_noticia, imagem_noticia, data_noticia, tipo_noticia) VALUES ('$titulonoticia', '$descricaonoticia', '$nome_original', '$datanoticia','$tiponoticia')";
if(mysqli_query($conn, $query))
{
$data=array("status"=>"Inserido");
}
else
{
$data=array("status"=>"Erro");
}
});
$app->run();
Tá muito difícil resolver isso daqui
Se me conseguisse ajudar seria mesmo fantástico, obrigado pela sua resposta também!
Se você der o print na variável $nome_original, o que aparece?
Talvez, por causa do framework, essa variável não esteja mais com essa informação, mas esteja no $request.
Nunca usei mas dando um procurada sobre upload de arquivo achei essa página. http://www.slimframework.com/docs/v3/cookbook/uploading-files.html
Invés de usar a variavel $_FILES, você precisa usar $request com as especificações desse framework.
$uploadedFiles = $request->getUploadedFiles();
// handle single input with single file upload
$uploadedFile = $uploadedFiles['example1'];
if ($uploadedFile->getError() === UPLOAD_ERR_OK) {
$filename = moveUploadedFile($directory, $uploadedFile);
$response->write('uploaded ' . $filename . '<br/>');
}
Tá dando erro… Talvez não esteja bem… Voce tem discord?
Só se tiver.
Como não consigo usar SLIM agora, fiz só não testei, dá CTRL+F e pesquisa por //ADD e //REMOVE, são as partes que eu adicionei ou removi algo no código.
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
require '../vendor/autoload.php';
$app = new \Slim\App;
// Get container
$container = $app->getContainer();
$container['upload_directory'] = __DIR__ . '/uploads';//ADD - AQUI É A PASTA ONDE VAI SER SALVA A IMAGEM
// Register component on container
$container['view'] = function ($container) {
$view = new \Slim\Views\Twig('../src/view/', [
//'cache' => 'path/to/cache'
]);
// Instantiate and add Slim specific extension
$router = $container->get('router');
$uri = \Slim\Http\Uri::createFromEnvironment(new \Slim\Http\Environment($_SERVER));
$view->addExtension(new Slim\Views\TwigExtension($router, $uri));
return $view;
};
$app->get('/', function (Request $request, Response $response, array $args) {
return $this->view->render($response, 'index.html');
});
$app->post('/inserirAlerta', function (Request $request, Response $response, array $args) {
$conn = mysqli_connect("localhost", "root", "", "noticia");
if (!$conn) {
$data=array("status"=>"Nao foi possivel conectar com a base de dados.");
return $response->withJson($data);
die("Erro: " . mysqli_connect_error());
}
$info= json_decode(file_get_contents("php://input"));
$titulonoticia = mysqli_real_escape_string($conn, $info->titulo);
$descricaonoticia = mysqli_real_escape_string($conn, $info->descricao);
//$nome_original = $_FILES["file"]["name"];//REMOVE - Não esta funcionando
//ADD
$directory = $this->get('upload_directory');
$uploadedFiles = $request->getUploadedFiles();
// handle single input with single file upload
$uploadedFile = $uploadedFiles['file'];
if ($uploadedFile->getError() === UPLOAD_ERR_OK) {
$filename = moveUploadedFile($directory, $uploadedFile);
$nome_original = $filename;
$response->write('uploaded ' . $filename . '<br/>');
}
//ADD
$datanoticia = mysqli_real_escape_string($conn, $info->data);
$tiponoticia = mysqli_real_escape_string($conn, $info->tipo);
$query = "INSERT INTO noticias(titulo_noticia, texto_noticia, imagem_noticia, data_noticia, tipo_noticia) VALUES ('$titulonoticia', '$descricaonoticia', '$nome_original', '$datanoticia','$tiponoticia')";
if(mysqli_query($conn, $query))
{
$data=array("status"=>"Inserido");
}
else
{
$data=array("status"=>"Erro");
}
});
//ADD
/**
* Moves the uploaded file to the upload directory and assigns it a unique name
* to avoid overwriting an existing uploaded file.
*
* @param string $directory directory to which the file is moved
* @param UploadedFile $uploaded file uploaded file to move
* @return string filename of moved file
*/
function moveUploadedFile($directory, UploadedFile $uploadedFile)
{
$extension = pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION);
$basename = bin2hex(random_bytes(8)); // see http://php.net/manual/en/function.random-bytes.php
$filename = sprintf('%s.%0.8s', $basename, $extension);
$uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
return $filename;
}
$app->run();