Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

bioshock

Redireccionar {Resolvido}

Mensagens Recomendadas

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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á...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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  :(

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.