Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
bioshock

Redireccionar {Resolvido}

Recommended Posts

bioshock

Deixo-vos parte do código onde me surge o problema, caso seja preciso o resto também arranjo:

//This makes sure they did not leave any fields blank
if (!$_POST['username'] | !$_POST['pass'] | !$_POST['pass2'] | !$_POST['email'] | !$_POST['contacto']) {
die('You did not complete all of the required fields');
}
else
{
header ('Location: www.google.pt');
}

O objectivo é: A pessoa preenche os campos, caso não os campos não estejam em branco então quando clicar no botão "Registar" ele abre a página google.pt.

O problema é que não faz nada o botão..soluções? Obrigado.

Share this post


Link to post
Share on other sites
KiNgPiTo

experimenta:

header ('Location: http://www.google.pt');

EDIT: Poderás também estar a ter problemas com a verificação de se está definido o Post, para tal utilizas a função isset($_POST['nome']).. se retorna true, é porque está definida, senão, é porque não está...

Share this post


Link to post
Share on other sites
bioshock

<?php 
// Connects to your Database 
mysql_connect("localhost", "root", "") or die(mysql_error()); 
mysql_select_db("supless") or die(mysql_error()); 

//This code runs if the form has been submitted
if (isset($_POST['submit'])) { 

//This makes sure they did not leave any fields blank
if (!$_POST['username'] | !$_POST['pass'] | !$_POST['pass2'] | !$_POST['email'] | !$_POST['contacto']) {
die('You did not complete all of the required fields');
}
else
{
 Header ('Location:  http://www.google.pt');
}
// checks if the username is in use
if (!get_magic_quotes_gpc()) {
$_POST['username'] = addslashes($_POST['username']);
}
$usercheck = $_POST['username'];
$check = mysql_query("SELECT username FROM supless WHERE username = '$usercheck'") 
or die(mysql_error());
$check2 = mysql_num_rows($check);

//if the name exists it gives an error
if ($check2 != 0) {
die('Sorry, the username '.$_POST['username'].' is already in use.');
} 

// this makes sure both passwords entered match
if ($_POST['pass'] != $_POST['pass2']) {
die('Your passwords did not match. ');
}

// here we encrypt the password and add slashes if needed
$_POST['pass'] = md5($_POST['pass']);
if (!get_magic_quotes_gpc()) {
$_POST['pass'] = addslashes($_POST['pass']);
$_POST['username'] = addslashes($_POST['username']);
}

// now we insert it into the database
$insert = "INSERT INTO supless (username, password, email, contacto, empresa)
VALUES ('".$_POST['username']."', '".$_POST['pass']."', '".$_POST['email']."', '".$_POST['contacto']."', '".$_POST['empresa']."')";
$add_member = mysql_query($insert);

?>
<?php 
} 
else 
{	
?>
<?php
}
?>

Esse é o código completo.

Eu possuo um form de registo, nesse form tenho o botão "Registar", quando clico no botão "Registar, ele tem que detectar se o que foi introduzido está correcto (ou seja, se não existe já username etc etc), esta parte está a funcionar perfeitamente, o problema vem depois, que é o seguinte: Quando eu registo com sucesso, tem de haver um redireccionamento, neste caso para a página do google. E é este problema que ainda não consegui decifrar.

Em relação ao $POST['nome'], não percebi. Obrigado

Share this post


Link to post
Share on other sites
bioshock

Edit: Peço desculpa mas afinal não está, enganei-me. Se alguém me poder ajudar, obrigado!

Share this post


Link to post
Share on other sites
sc0rpion

O que o kingpito estava a referir é que para verificar se os campos estao preenchidos deves usar o método isset() em vez de fazeres !$_POST, ou seja:

if (!isset($_POST['username']) || !isset($_POST['pass']) || !isset($_POST['pass2']) || !isset($_POST['email']) || !isset($_POST['contacto'])) {

Já agora, estavas a usar só uma barra | . O operador de comparação são duas barras ||. Sinceramente nc tinha visto só com uma barra, isso funciona? Se calhar até é possível mas desconheço :S

Share this post


Link to post
Share on other sites
jcfr

O que o kingpito estava a referir é que para verificar se os campos estao preenchidos deves usar o método isset() em vez de fazeres !$_POST, ou seja:

if (!isset($_POST['username']) || !isset($_POST['pass']) || !isset($_POST['pass2']) || !isset($_POST['email']) || !isset($_POST['contacto'])) {

Já agora, estavas a usar só uma barra | . O operador de comparação são duas barras ||. Sinceramente nc tinha visto só com uma barra, isso funciona? Se calhar até é possível mas desconheço :S

desculpa se estiver errado...

pelo que percebo disto (pouco), o isset($_POST['variavel']) só verifica se a variável foi enviadae se veio pelo metodo post correcto?

ou seja não serve pois se tiveres uma form com a variavel 'variavel' e fizeres submeter a form o isset vai detectar como se a variável existisse porque realmente existe, o unico problema e que está vazia ou em branco...

posso estar errado mas por via de duvidas geralemente uso

if(isset($_POST['variavel'])&&($_POST['variavel']!="")){

se estiver errado corrijam-me...

Share this post


Link to post
Share on other sites
jcfr

isset() e empty(), para verificar as variáveis.

sim é uma opção melhor que a que sugeri...

Share this post


Link to post
Share on other sites
softklin

Já agora, estavas a usar só uma barra | . O operador de comparação são duas barras ||. Sinceramente nc tinha visto só com uma barra, isso funciona? Se calhar até é possível mas desconheço :S

Sim., são ambos válidos. O || é o "ou exclusivo" o ou lógico, em que se um dos membros a comparar retornar verdadeiro, não vai avaliar mais nada na condição, e considera-a como verdadeira (de facto, no or, basta que um dos membros seja verdadeiro, para a expressão toda ser verdadeira). O operador | vai pode ser usado para avaliar toda a expressão, mesmo que conclua que qualquer dos membros que seja verdadeiro. Pode dar jeito nalgumas situações especificas, por exemplo, em que te interesse executar funções num if. Deixo um exemplo:

http://ideone.com/BRNzqnrE


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
bioshock

Pessoal eu acho que vocês não perceberam. O problema não está em registar os dados na Base de dados. E sim, eu posso utilizar apenas um " | " ou mesmo não utilizar o "!isset($_POST['username'])" que funciona na mesma.

O problema está aqui:

if (!isset($_POST['username']) || !isset($_POST['pass']) || !isset($_POST['pass2']) || !isset($_POST['email']) || !isset($_POST['contacto'])) {
die('You did not complete all of the required fields');
} 
else
{
header('Location: http://www.google.pt');
}

Supostamente, se ele não preencher os campos todos aparece a mensagem "You did not..." caso contrário abre a página google..o problema é que não abre, simplesmente não acontece nada. Perceberam?? Obrigado!

Share this post


Link to post
Share on other sites
scorch

Tenta fazer isto e diz se já aparece alguma coisa.

if (!isset($_POST['username']) || !isset($_POST['pass']) || !isset($_POST['pass2']) || !isset($_POST['email']) || !isset($_POST['contacto'])) {
die('You did not complete all of the required fields');
}
else
{
        echo "Todos os campos foram preenchidos.";
        header('Location: http://www.google.pt');
}


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
mjamado

Mais duas coisas para experimentares:

- Tens alguma coisa, especialmente markup antes da primeira tag <?php ? Antes dos headers não pode sair absolutamente nada para o browser.

- Depois do header, é conveniente fazeres um exit ou um die, para matares o script - se é um redirect, o resto não interessa. Provavelmente não é disto, mas mal não faz e é assim que está correcto.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
sc0rpion

De facto esqueci-me de referir que deves usar o empty() para verificar o POST dos campos pois se os deixares em branco eles são submetidos na mesma só que sem nada.

softclean obrigado pela explicação  :( De facto não conhecia mesmo e isso dá jeito nalgumas situações  :(

Share this post


Link to post
Share on other sites
mjamado

Já agora outra nota. Apenas um pipe não é um operador lógico! Não usem, de forma nenhuma, em comparações lógicas.

Um pipe é a operação binária "ou", que é completamente diferente do operador lógico "ou", ok?

1 || 2 = 1

1 | 2 = 3 (01 + 10 = 11 em binário)

E por amor da santa não confundam com o "ou exclusivo", que no PHP é o operador binário ^ ou o operador lógico xor.

Se não sabem, não inventem. Depois admiram-se da fama que o PHP tem...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
yoda

@bioshock,

Tu é que não entendeste. A função isset() apenas verifica se a variável existe e não tem valor NULL, logo desde que a tenhas no markup antes de redireccionares para essa pagina, essas variáveis vão sempre existir nem que não tenham valor nenhum, portanto usar só o isset() nesse caso não chega.

Share this post


Link to post
Share on other sites
bioshock

Tenta fazer isto e diz se já aparece alguma coisa.

if (!isset($_POST['username']) || !isset($_POST['pass']) || !isset($_POST['pass2']) || !isset($_POST['email']) || !isset($_POST['contacto'])) {
die('You did not complete all of the required fields');
}
else
{
        echo "Todos os campos foram preenchidos.";
        header('Location: http://www.google.pt');
}

Boas, em nada deu. Ele está a registar com sucesso, como já registava, mas não faz o redireccionamento. Dá-me um erro, na linha 17 e a linha 17 é esta:

header('Location: redirect.php');

O erro:

Warning: Cannot modify header information - headers already sent

Share this post


Link to post
Share on other sites
mjamado
O erro:

Warning: Cannot modify header information - headers already sent

Não sei porque é pedes ajuda se depois não lês as ajudas:

- Tens alguma coisa, especialmente markup antes da primeira tag <?php ? Antes dos headers não pode sair absolutamente nada para o browser.

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
bioshock

Já troquei o "Die" pelo "Header", se era a isso que te referias, e em nada resultou.

Share this post


Link to post
Share on other sites
mjamado

Já troquei o "Die" pelo "Header", se era a isso que te referias, e em nada resultou.

Eh pá, eu acho que a minha frase é clara, mas se calhar sou eu...

- Tens alguma coisa, especialmente markup antes da primeira tag <?php ?

"Tens", segunda pessoa do presente do indicativo do verbo ter; contens; possuis;

"alguma coisa", forma genérica, algo.

"antes", contrário de depois, duma forma temporal ou espacial.

És capaz de responder de forma cabal à pergunta? É que o erro é clarinho como água: impossível modificar informação de headers; headers já enviados. O que quer dizer que alguma coisa (olha, cá está) foi enviada antes (cá este este também) dessa instrução header.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
bioshock

A que te referes em relação ao markup?

Possuo este código no topo

<html xmlns="http://www.w3.org/1999/xhtml"><head>
<?php 
// Connects to your Database 
mysql_connect("localhost", "root", "") or die(mysql_error()); 
mysql_select_db("supless") or die(mysql_error()); 

//This code runs if the form has been submitted
if (isset($_POST['submit'])) { 

//This makes sure they did not leave any fields blank
if (!$_POST['username'] | !$_POST['pass'] | !$_POST['pass2'] | !$_POST['email'] | !$_POST['contacto']) {
        die('You did not complete all of the required fields');
}
else
{
	Header('Location:  http://www.google.pt');
}

De notar que está tudo, repito tudo, a funcionar! Só não funciona o Header.

Edit: Já alterei o "die" com o "header" e nada deu.

Share this post


Link to post
Share on other sites
mjamado

A informação estava lá todinha na minha primeira resposta...  :wallbash:

- Tens alguma coisa, especialmente markup antes da primeira tag <?php ? Antes dos headers não pode sair absolutamente nada para o browser.

Tira as tags <html> e <head> de lá de cima para depois do bloco php onde tens o redirect e fica logo a funcionar...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
bioshock

Peço desculpa, mas só tou a iniciar no php nesta semana. E já ando com bases de dados etc, desculpa a sério. Obrigado!

Obrigado a todos.

Share this post


Link to post
Share on other sites
mjamado

Peço desculpa, mas só tou a iniciar no php nesta semana. E já ando com bases de dados etc, desculpa a sério. Obrigado!

Obrigado a todos.

Não tens que pedir desculpa. Estamos cá para ajudar. Mas é conveniente ler as respostas com atenção...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
softklin

Não sabia que não eram operadores lógicos, peço desculpa por isso. No entanto, mesmo sem saber o seu funcionamento, sempre soube o seu comportamento em operações lógicas, e como disse, pode dar jeito em algumas situações.

Podes esclarecer o porquê de não o usar em operações lógicas?


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.