Mostrar imagens da base de dados

patita86

Power Member
Boa noite pessoal, estou a tirar um curso onde tenho que responder a umas perguntas com avaliação e gostava de saber se me podem ajudar. Eu ponho aqui as perguntas e as respostas e será que me podem confirmar se estou errado ou certo?

How many times can you tear a 1,024-page phonebook into equal halves, each time throwing away one of the halves, before only one page remains?
10 (x)
32
512
1,024

How many bits do you need, minimally, in order to represent the (decimal) number 7 in binary?
3 (x)
4
7
8

How many n-letter keywords are possible when using Vigenère's cipher, assuming a 26-letter alphabet?
n
26
26n (x)
n26

GDB is a debugger.
True (x)
False

GetString uses malloc in order to allocate memory for users' input.
True (x)
False

make is a compiler.
True (x)
False

main must be the first function defined in a .c file.
True (x)
False
 
Última edição:
1. Certo.
2. Don't remembah.
3. I don't know what's that, never heard about it before.
4. Certo.
5. Não te sei responder porque nunca estudei C.
6. Certo.
7. Falso, pelo menos em C++. Não precisa de ser a primeira função, apenas precisa de estar definida.
 
Make não é um compilador! O Make é algo mais generalista e abrangente que isso; a função do make é orquestrar o processo de compilação/build, resolvendo automaticamente dependências inerentes entre ficheiros. Claro que não é totalmente automático, tu tens de especificar essas dependências por via de uma DSL -- o make com base nessa relações que tu especificaste, faz uma ordenação topológica, filtra e manda compilar e linkar o que é necessário para chegar à build final. Dito isto, o MAKE não faz qualquer distinção semântica entre ficheiros, gera ASTs, compila código ou qualquer outra função do compilador...porque não é um compilador; usa sim eventuais compiladores (e outras ferramentas) no processo de build.

A terceira não estou a perceber muito bem...Em teoria, um cifra de Vigenère com uma alfabeto de n chars permite n! keywords. Talvez não esteja a captar bem o que é pedido.
 
#include <stdio.h>



int main(void)

{

for (int i = 1; i != 0; i++)

printf("%d\n", i);

return 0;

}

Ele vai ficar num loop infinito até atingir o "integer overflow". Qual é o valor máximo que o integer poderá obter? Pelo que vi na net o valor máximo seria 2147483647. é esse o ultimo numero que ira aparecer? já meti esse e tirando uns quantos mas ele em vez de continuar a incrementar 1 esta a diminuir o valor que foi inicializado.
 
ele está sempre a aumentar*, presta lá atenção ao output.
PROTIP: -5 é menor que -4



* só há uma ocorrencia em que esse loop diminui o valor de i
 
Tenho que fazer uma pagina em php que faça o registo de um utilizador na BD mas que valide os campos user pass e confirmação da pass.

If $_POST["username"] ou $_POST["password"] esta vazio ou if $_POST["password"] diferente de $_POST["confirmation"], informar que existe um determinado erro.


a query para inserir supostamente é esta ("INSERT INTO users (username, hash, cash) VALUES(?, ?, 10000.00)", $_POST["username"], crypt($_POST["password"]));


a query tem de retornar false if INSERT falhar caso o username já exista.


Caso o registo seja efetuado ele deve relembrar a sessão e passar para a pagina índex.php

a única coisa que consegui fazer ate agora foi a validação e mesmo assim não sei se esta correto.

$username = $_POST['username'];
$password = $_POST['password'];
$confirmation = $_POST['confirmation'];

if (empty($_POST['username'])) { $add_errors['username'] = 'Please enter the name!'; }

if (!empty($_POST['password']) or !empty($_POST['confirmation'])) {
$add_errors['password'] = 'Please enter the password!'; }

if ($_POST['password'] != $_POST['confirmation']) {
$error[] = 'Your passwords did not match.'; }
else {
$password = $_POST['password']; } }
else {
$errors[] = '<font color="red">Please provide a password.</font>'; }
 
Última edição:
se queres ver se o user já existe fazes um select no username escolhido no registo. Se devolver 1 row ou + é porque existe.

Para lembrar a sessão fazes tipo: $_SESSION['loggedIn'] = true; e $_SESSION['userId'] = $id-primario-retirado-da-bd; (há uma função qualquer que vai buscar o last insert ID)
 
se queres ver se o user já existe fazes um select no username escolhido no registo. Se devolver 1 row ou + é porque existe.

Para lembrar a sessão fazes tipo: $_SESSION['loggedIn'] = true; e $_SESSION['userId'] = $id-primario-retirado-da-bd; (há uma função qualquer que vai buscar o last insert ID)

Já consegui obrigado.

Agora um duvida de sql.

como é que ligo duas tabelas. Neste caso tenha a tabela users e outra images. Quero que cada imagem inserida na tabela image fique associada ao user que esta logado no site.
 
Com o JOIN do MySQL

Algo assim:


SELECT users.nome, imagens.link FROM users JOIN imagens ON users.id = imagens.id_proprietario
WHERE users.id = 1

Isto iria devolver um resultado para o user com id = 1 onde cada row teria:
(se tirasses o WHERE aparecia todas as imagens com os seus donos)

Nome utilizador <-> Link da imagem
1 <-> link
1 <-> outrolink
... <-> ...

Uma coisa assim. No select podes fazer select do que quiseres mas como estás a usar o JOIN tens de usar "tabela.coluna"
E a tabela das imagens tem de ter um ID do dono da imagem (o ex que usei foi id_proprietario) que é igual ao ID principal do user.
 
tenho a tabela users com os campos id, username, firstname, lastname e tenho a tabela images com os campos id, image, description.

Terei então que criar um campo na tabela imagens que serve como chave estrangeira para a tabela users certo?


Tenho outra situação, estou com a página Search para permitir fazer pesquisas por username, primeiro ou ultimo nome mas quando entro na página aquilo mostra as pesquisas feitas anteriormente e aparece um erro como este:

1192


O codigo que tenho é esse:

<form action="search.php" method="post">
<input type="text" style="width: 291px; padding: 2px" name="term" value="Search username, first name or last name" onclick="this.value='';" onblur="this.value=!this.value?'Search username, first name or last name':this.value;"/><br />
<input type="submit" name="submit" value="Submit" />
</form>

<?php
mysql_connect ("localhost", "jharvard","crimson") or die (mysql_error());
mysql_select_db ("photobook");

$term = $_POST['term'];

$sql = mysql_query("select * from users where username like '%$term%'");

while ($row = mysql_fetch_array($sql)){
echo '<br/> First Name: '.$row['firstname'];
echo '<br/> Last Name: '.$row['lastname'];
echo '<br/> Username: '.$row['username'];
echo '<br/><br/>';
}

?>
 
tenho a tabela users com os campos id, username, firstname, lastname e tenho a tabela images com os campos id, image, description.

Terei então que criar um campo na tabela imagens que serve como chave estrangeira para a tabela users certo?

Ao contrário. Crias um campo na tabela users e nesse campo tens a ID primária da imagem correspondente na tabela imagens
 
Quanto a cena da imagem estive a ver e o que quero é o seguinte.

Cada user pode fazer o upload de X fotos. quero que a foto tenha o user logado associado. O que isso me faz entender é que a imagem é que tem que ter o user associado logo a FK devia ser na tabela imagens ou o raciocínio está errado?
 
Última edição:
Já consigo fazer o upload das fotos para a base de dados ou melhor fica o caminho guardado na bd e a imagem numa pasta.

Agora so me falta mostrar, ele não dá erro mas a imagem simplesmente não aparece.

O código que tenho.

página upload:
<form enctype="multipart/form-data" action="uploaded.php" method="POST">
Name: <input type="text" name="name"><br>

Photo: <input type="file" name="photo"><br>
<input type="submit" value="Add">
</form>


página uploaded:


<?php

//This is the directory where images will be saved
$target = "images/";
$target = $target . basename( $_FILES['photo']['name']);

//This gets all the other information from the form
$name=$_POST['name'];
$pic=($_FILES['photo']['name']);

// Connects to your Database
mysql_connect("localhost", "user", "pass") or die(mysql_error()) ;
mysql_select_db("photobook") or die(mysql_error()) ;

//Writes the information to the database
mysql_query("INSERT INTO `employees` VALUES ('$name', '$pic')") ;

//Writes the photo to the server
if(move_uploaded_file($_FILES['photo']['tmp_name'], $target))
{

//Tells you if its all ok
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory";
}
else {

//Gives and error if its not
echo "Sorry, there was a problem uploading your file.";
}
?>

página photos:

<?php
// Connects to your Database
mysql_connect("localhost", "user", "pass") or die(mysql_error()) ;
mysql_select_db("photobook") or die(mysql_error()) ;

//Retrieves data from MySQL
$data = mysql_query("SELECT * FROM employees") or die(mysql_error());
//Puts it into an array
while($info = mysql_fetch_array( $data ))
{

//Outputs the image and other data
Echo "<img src=images/".$info['photo'] ."> <br>";
Echo "<b>Name:</b> ".$info['name'] . "<br> ";
}
?>


a pasta imagens está na mesma onde estão os ficheiros das paginas. alguém me consegue ajudar?
 
Back
Topo