Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Meu PDO, não está retornando nenhum valor, e está dando erro ao tentar baixar o arquivo:
/monthly_2020_04/Screenshot_8.png.e2f0492a9700c44fce6edd04befff496.png" />
<?php
//se não tiver o parametro, mata a aplicação.
if (isset($_POST['codigo_video'])) {
$codigo_video = $_POST['codigo_video'];
}
//Aqui está um exemplo simples de como fazer uma conexão PDO
$host = 'localhost';
$db = 'onteach';
$user = 'root';
$pass = 'root';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
//$pdoQuery = $pdo->query("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = '{$codigo_video}'");
try{
$ready = $pdo->prepare("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = :codigo_video");
$ready->bindParam(':codigo_video', $codigo_video);
// $ready = $pdo->prepare($pdoQuery);
// $ready->execute();
}catch(PDOException $e){
echo $e->getMessage();
}
while($rs = $ready->fetch(PDO::FETCH_ASSOC));{
$local = 'upload/';
$local_arquivo = $local.$rs;
header('Content-type: octet/stream');
// Indica o nome do arquivo como será "baixado". Você pode modificar e colocar qualquer nome de arquivo
header('Content-disposition: attachment; filename="'.$rs.'";');
// Indica ao navegador qual é o tamanho do arquivo
header('Content-Length: '.filesize($local_arquivo));
// Busca todo o arquivo e joga o seu conteúdo para que possa ser baixado
readfile($local_arquivo);
}
print_r($rs);
?>
Alguém sabe resolver? Visto que o $rs não retorna o dado arquivo da tabelaO "problema" foi um pouco mais "fundo", contudo,
implementando as orientações de /profile/118098-andr%C3%A9-severino/?do=hovercard" data-mentionid="118098" href="/profile/118098-andr%C3%A9-severino/" rel="">@André Severino,
segue, abaixo, possível solução:
CÓDIGO:
<?php
//se não tiver o parametro, mata a aplicação.
if (isset($_POST['codigo_video'])) {
$codigo_video = $_POST['codigo_video'];
}
//Aqui está um exemplo simples de como fazer uma conexão PDO
$host = 'localhost';
$db = 'onteach';
$user = 'root';
$pass = 'root';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
//$pdoQuery = $pdo->query("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = '{$codigo_video}'"); $ready = $pdo->prepare("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = :codigo_video");
$ready->bindParam(':codigo_video', $codigo_video);
$ready->execute(); echo $e->getMessage();
}
while ($rs = $ready->fetch(PDO::FETCH_ASSOC)) {
$local = 'upload/';
$local_arquivo = $local.$rs['arquivo'];
if (file_exists($local_arquivo)) {
header('Content-type: octet/stream');
// Indica o nome do arquivo como será "baixado". Você pode modificar e colocar qualquer nome de arquivo
header('Content-disposition: attachment; filename="'.$rs['arquivo'].'";');
// Indica ao navegador qual é o tamanho do arquivo
header('Content-Length: '.filesize($local_arquivo));
// Busca todo o arquivo e joga o seu conteúdo para que possa ser baixado
readfile($local_arquivo);
} else {
echo "Arquivo nao existe!";
}
}>
1 hora atrás, André Severino disse:
Nesta linha, você precisa passar o campo do result set.
//$local_arquivo = $local.$rs;
$local_arquivo = $local.$rs['arquivo'];
seria interessante também antes do download verificar se o arquivo existe:
if( file_exists($local_arquivo) ) {
... headers e readfile
}
Opa andré tudo certo?
Testei como você disse porém apareceu este erro gigante aqui..
>
58 minutos atrás, ShadowDLL disse:
O "problema" foi um pouco mais "fundo", contudo,
implementando as orientações de /profile/118098-andr%C3%A9-severino/?do=hovercard" data-mentionid="118098" href="/profile/118098-andr%C3%A9-severino/" rel="">@André Severino,
segue, abaixo, possível solução:
CÓDIGO:
<?php
//se não tiver o parametro, mata a aplicação.
if (isset($_POST['codigo_video'])) {
$codigo_video = $_POST['codigo_video'];
}
//Aqui está um exemplo simples de como fazer uma conexão PDO
$host = 'localhost';
$db = 'onteach';
$user = 'root';
$pass = 'root';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
//$pdoQuery = $pdo->query("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = '{$codigo_video}'"); $ready = $pdo->prepare("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = :codigo_video");
$ready->bindParam(':codigo_video', $codigo_video);
$ready->execute(); echo $e->getMessage();
}
while ($rs = $ready->fetch(PDO::FETCH_ASSOC)) {
$local = 'upload/';
$local_arquivo = $local.$rs['arquivo'];
if (file_exists($local_arquivo)) {
header('Content-type: octet/stream');
// Indica o nome do arquivo como será "baixado". Você pode modificar e colocar qualquer nome de arquivo
header('Content-disposition: attachment; filename="'.$rs['arquivo'].'";');
// Indica ao navegador qual é o tamanho do arquivo
header('Content-Length: '.filesize($local_arquivo));
// Busca todo o arquivo e joga o seu conteúdo para que possa ser baixado
readfile($local_arquivo);
} else {
echo "Arquivo nao existe!";
}
}
Segue o outro erro apresentado acimaTestei com arquivo PNG e apareceu assim: https://prnt.sc/s4ao4n
Este erro ira ocorrer porque, muito provavelmente,
você está tentando fazer o Download do Arquivo
via Ajax, e até onde sei, isso é impossível...
Não seria mais fácil você apenas "redirecionar o
usuário" passando o ID do conteúdo como um
parâmetro GET?
Segue exemplo para melhor compreensão:
CÓDIGO [ INDEX.PHP ]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title> TESTE </title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" />
</head>
<body>
<div class="container">
<table class="table">
<thead>
<tr>
<th># ID</th>
<th># FILE</th>
<th>#</th>
</tr>
</thead>
<tbody>
<?php
$conn = new PDO ('mysql:host=localhost;dbname=onteach', 'root', 'root');
$conteudo = $conn->prepare("SELECT * FROM conteudo");
$conteudo->execute();
while ($key = $conteudo->fetch(PDO::FETCH_OBJ)):?>
<tr>
<td><?= $key->idConteudo ?></td>
<td><?= $key->arquivo ?></td>
<td>
<a href="download.php?id=<?= $key->conteudo_video ?>" class="btn btn-danger">
DOWNLOAD
</a>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</div>
</body>
</html>
**CÓDIGO [ DOWNLOAD.PHP ]**
<?php
//se não tiver o parametro, mata a aplicação.
if (isset($_GET['id'])) {
$codigo_video = $_GET['id'];
}
//Aqui está um exemplo simples de como fazer uma conexão PDO
$host = 'localhost';
$db = 'onteach';
$user = 'root';
$pass = 'root';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
//$pdoQuery = $pdo->query("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = '{$codigo_video}'"); $ready = $pdo->prepare("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = :codigo_video");
$ready->bindParam(':codigo_video', $codigo_video);
$ready->execute(); echo $e->getMessage();
}
while ($rs = $ready->fetch(PDO::FETCH_ASSOC)) {
$local = 'upload/';
$local_arquivo = $local.$rs['arquivo'];
if (file_exists($local_arquivo)) {
header('Content-type: octet/stream');
// Indica o nome do arquivo como será "baixado". Você pode modificar e colocar qualquer nome de arquivo
header('Content-disposition: attachment; filename="'.$rs['arquivo'].'";');
// Indica ao navegador qual é o tamanho do arquivo
header('Content-Length: '.filesize($local_arquivo));
// Busca todo o arquivo e joga o seu conteúdo para que possa ser baixado
readfile($local_arquivo);
} else {
echo "Arquivo nao existe!";
}
}
Vale a pena ressaltar que os códigos acima são
apenas exemplos, sendo assim, podendo existir
abordagens melhores que as utilizadas...@Matheus B. Siqueira tente esse script meu:
https://github.com/Spell-Master/sm-web/tree/master/javascript/FileTransfer
Basta informar local, nome do arquivo com sua extensão assim como eu transcrevi no exemplo:
No caso fora do laço de repetição do while
if (file_exists($local_arquivo)) {
?>
<script>
file = new FileTransfer();
file.download('<?= $local_arquivo ?>', true);
</script>
<?php
}>
24 minutos atrás, ShadowDLL disse:
Este erro ira ocorrer porque, muito provavelmente,
você está tentando fazer o Download do Arquivo
via Ajax, e até onde sei, isso é impossível...
Não seria mais fácil você apenas "redirecionar o
usuário" passando o ID do conteúdo como um
parâmetro GET?
Segue exemplo para melhor compreensão:
CÓDIGO [ INDEX.PHP ]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title> TESTE </title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" />
</head>
<body>
<div class="container">
<table class="table">
<thead>
<tr>
<th># ID</th>
<th># FILE</th>
<th>#</th>
</tr>
</thead>
<tbody>
<?php
$conn = new PDO ('mysql:host=localhost;dbname=onteach', 'root', 'root');
$conteudo = $conn->prepare("SELECT * FROM conteudo");
$conteudo->execute();
while ($key = $conteudo->fetch(PDO::FETCH_OBJ)):?>
<tr>
<td><?= $key->idConteudo ?></td>
<td><?= $key->arquivo ?></td>
<td>
<a href="download.php?id=<?= $key->conteudo_video ?>" class="btn btn-danger">
DOWNLOAD
</a>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
</div>
</body>
</html>
**CÓDIGO [ DOWNLOAD.PHP ]**
<?php
//se não tiver o parametro, mata a aplicação.
if (isset($_GET['id'])) {
$codigo_video = $_GET['id'];
}
//Aqui está um exemplo simples de como fazer uma conexão PDO
$host = 'localhost';
$db = 'onteach';
$user = 'root';
$pass = 'root';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
//$pdoQuery = $pdo->query("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = '{$codigo_video}'"); $ready = $pdo->prepare("SELECT conteudo.arquivo FROM conteudo WHERE conteudo.conteudo_video = :codigo_video");
$ready->bindParam(':codigo_video', $codigo_video);
$ready->execute(); echo $e->getMessage();
}
while ($rs = $ready->fetch(PDO::FETCH_ASSOC)) {
$local = 'upload/';
$local_arquivo = $local.$rs['arquivo'];
if (file_exists($local_arquivo)) {
header('Content-type: octet/stream');
// Indica o nome do arquivo como será "baixado". Você pode modificar e colocar qualquer nome de arquivo
header('Content-disposition: attachment; filename="'.$rs['arquivo'].'";');
// Indica ao navegador qual é o tamanho do arquivo
header('Content-Length: '.filesize($local_arquivo));
// Busca todo o arquivo e joga o seu conteúdo para que possa ser baixado
readfile($local_arquivo);
} else {
echo "Arquivo nao existe!";
}
}
Vale a pena ressaltar que os códigos acima são
apenas exemplos, sendo assim, podendo existir
abordagens melhores que as utilizadas...
Entendi amigo, vou tentar assim, naquela parte "
<?= $key->conteudo_video ?>"
Como eu faço para ele puxar o valor do select?, como exemplo assim:
<select name="conteudo" id="conteudo">
</select>
//no jquery
var codigoVideo = $("#conteudo").val();Tentei assim, mas quando clico no botão ele não da certo:
<button href="baixar_arquivo.php?id=<?= $_POST['conteudo']; ?>"Aparece Undefined Index conteudo:
<?php
$codigo_video = $_POST['conteudo'];
$conn = new PDO ('mysql:host=localhost;dbname=onteach', 'root', 'root');
$conteudo = $conn->prepare("SELECT * FROM conteudo WHERE conteudo.conteudo_video = '$codigo_video'");
$conteudo->execute();
while ($key = $conteudo->fetch(PDO::FETCH_OBJ)):?>
<button href="baixar_arquivo.php?id=<?= $key->conteudo_video ?>" type="button" id="baixar_ctt" class="btn btn-secondary btn-sm" data-dismiss="modal">Baixar material</button></div>
<?php endwhile; ?>Vamos lá,
Primeiro, antes de lhe mostrar um exemplo, poderia
enviar o código onde você seleciona o item que
deseja fazer o download?
Claro https://pastebin.com/RYs5S36q
Lembrando que os valores que coloca no main.js, definem os options, que no fim, definem o valor do select que seria o campo que teria que baixar o arquivo
>
52 minutos atrás, ShadowDLL disse:
Vamos lá,
Primeiro, antes de lhe mostrar um exemplo, poderia
enviar o código onde você seleciona o item que
deseja fazer o download?
# RESOLVIDO
Nesta linha, você precisa passar o campo do result set.
if( file_exists($local_arquivo) ) {
... headers e readfile
}