Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Perdida no Còdigo

Cadastro com Loop - MySQL

Recommended Posts

Queridos amigos, depois de um bom tempo aqui estou novamente com mais um problema, só para variar né rsrsrs

 

Gostaria de saber se alguém poderia fazer a gentileza de me ajudar no seguinte, preciso de um site que gere 3 links automáticos à partir de um unico cadastro, por exemplo, o usuário coloca o nome no formulário e, ao clicar em "Cadastrar Links", sejam cadastrados 3 id's diferentes com o mesmo nome que o usuário colocou.

 

Criei um bd bem simples com apenas dois campos, id e usuario, já tenho um formulário que está fazendo o cadastro normalmente no bd.

 

O código do formulário é:

<form action="cadastro.php" method="post" name="form1" id="form1">
  <fieldset>
  <label>Nome:
  <input type="text" name="usuario" value="" size="32" />
  </label>
  <input type="submit" value="Cadastrar Links" />
  </fieldset>
</form>

O código da página cadastro.php é:


<?php require('config.php'); ?>
<?php
$usuario = $_POST['usuario'];
mysql_select_db($database_config);
$query_links = "INSERT INTO teste.links(id ,usuario) VALUES (NULL , '$usuario');";
$links = mysql_query($query_links) or die('ERRO AO CADASTRAR: '.mysql_error());
header ("Location: index.php");
?>

Existe alguma forma de fazer ao clicar em "Cadastrar Links", sejam cadastrados 3 id's diferentes com o mesmo nome que o usuário colocou?

 

Agradeço pela atenção de todos, qualquer ajuda será bem vinda...

Beijos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade isso não é o código e sim a idéia pra você inserir no seu código.

 

Dá uma lida ae Link

 

A idéia é fazer 3 inserts , ou seja precisa do laço de repetição

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na página de cadastro.

Após entender o Looping(laço), siga a idéia que te passei.

 

i=0;
 enquanto  i<3     
 insere na tabela VALUES (NULL , user);
i=i+1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada, ajudou muito, vou ler mais a respeito do laço de repetição e volto para dizer se deu tudo certo...
Beijos



Marcos, fiz um teste sem cadastrar no bd e funcionou

 

 

<?php
$i = 0;
while ($i < 3){
    echo $i . "<hr>";
$i++;
}
?>

Porém, quando tentei colocar para cadastrar no bd não funcionou:

 

 

<?php
$usuario = $_POST['usuario'];
mysql_select_db($database_config);
$i = 0;
while ($i < 3){
$query_links = "INSERT INTO teste.links(id ,usuario) VALUES (NULL , '$usuario');";
$i++;
}
$links = mysql_query($query_links) or die('ERRO AO CADASTRAR: '.mysql_error());
header ("Location: index.php");
?>

Tentei também substituir o NULL por $i++ e também não deu, alguma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum .

Como estão os tipos de dados na tabela teste.links?

 

Seo campo id for auto incremento,altere o insert

 

INSERT INTO teste.links(usuario) VALUES ('$usuario');";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os dados estão assim:

CREATE TABLE `links` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;

Modifiquei o insert para:

$i = 0;
while ($i < 3){
$query_links = "INSERT INTO teste.links(usuario) VALUES ('$usuario');";
$i++;
}

e também não funcionou, continua cadastrando apenas um registro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa linha tem que estar no while


$links = mysql_query($query_links) or die('ERRO AO CADASTRAR: '.mysql_error())

O uso da váriável $links parece desnescessário no contexto.

 

Deixando o campo vazio o SGBD automaticamente insere o id(auto incremento). Você havia deixado como NULL e o campo é NOT NULL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retirei a variavel, agora ficou assim:

 

 

<?php
$usuario = $_POST['usuario'];
mysql_select_db($database_config);

$i = 0;
while ($i < 3){
$query_links = "INSERT INTO teste.links(usuario) VALUES ('$usuario');";
$i++;
}

mysql_query($query_links) or die('ERRO AO CADASTRAR: '.mysql_error());
header ("Location: index.php");
?>

 

 

E continua cadastrando apenas um registro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eba, muito obrigada, agora funcionou!!!
Se alguém tiver a mesma duvida o código ficou assim:

<?php
$usuario = $_POST['usuario'];
$i = 0;
while ($i < 3){
$query_links = "INSERT INTO teste.links(usuario) VALUES ('$usuario');";
$i++;
mysql_query($query_links) or die('ERRO AO CADASTRAR: '.mysql_error());
}
header ("Location: index.php");
?>

Agora me surgiu uma outra duvida, após fazer o cadastro dos 3 registros está redirecionando para a página index.php onde está o formulário, teria alguma forma de redirecionar para outra página listando apenas esses 3 registros?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim. Você pode armazenar os dados que foram inseridos em uma variável (pode ser em cookie ou variável de sessão) e ao exibir

a "outra " página fazer um select comparando a variável com as linhas da tabela.

Outra possibilidade, acho que mais viável em termos de performance do SGBD, seria armazenar em array os dados inseridos e recuperá-lo na "outra " página.

Existem n maneiras de se fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aff, agora complicou de verdade né rsrsrsrs + tudo bem menos um problema...
Vou tentar fazer o redirecionamento da página com uma variavel e na nova página tentar fazer um select desses dados...
Mais uma vez muito obrigada pela sua ajuda, depois eu volto para compartilhar o resultado.
Beijos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada Marcos,


Desculpe pelo titulo do post, vou ficar atenta as regras do fórum...

Não sei se é a melhor forma de fazer mas consegui redirecionar para outra página e listar os 3 ultimos resultados que serão necessários, caso alguém tenha a mesma duvida fiz o seguinte:

 

Na página cadastro.php coloquei:

header ("Location: resultado.php?usuario=$usuario");

Na página resultado.php coloquei:

<?php
$usuario = $_GET['usuario'];
if(isset($usuario) != NULL){
$sql = mysql_query("SELECT * FROM links ORDER BY id DESC LIMIT 3");
while ($mostra = mysql_fetch_array($sql)){
$id     = $mostra['id'];
$user     = $mostra['usuario'];
$url     = '/ad.php?';
echo $url.'user='.$user.'&code='.$id."<br>";
}
}
?>

O resultado final foi:

 

/ad.php?user=teste&code=48

/ad.php?user=teste&code=49

/ad.php?user=teste&code=50

 

Mais tarde vou ler com mais calma esses links que me passou...

Mais uma vez agradeço muito pela sua atenção e colaboração!

 

Beijos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcos, agora apareceu o seguinte erro:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given

O código que gerou o problema é:

<?php
$usuario = $_GET['usuario'];
if(isset($usuario) != NULL){
$sql = mysql_query("SELECT * FROM links ORDER BY id DESC LIMIT 5");
while ($mostra = mysql_fetch_array($sql)){
$id     = $mostra['id'];
$user     = $mostra['usuario'];
$url     = 'http://localhost/ad.php?';
echo ".$url.'usuario='.$user.'&code='.$id.";
}
}
?>

O que não entendo é que o problema só aparece quando quer, ou seja, as vezes atualizo a página e ele aparece, as vezes não...

 

Tem alguma idéia de como resolver esse problema?

 

Obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

if(isset($usuario) != NULL){

 

Corrige essa linha aí.

Com esse código, você diz ao programa:

 

 

se (for setada ($usuario) diferente de NULL){...
 
/// correto é
 
se (for setada ($usuario) e ($usuario)diferente de NULL){...

 

Ler http://blog.thiagobelem.net/apredendo-a-usar-as-funcoes-empty-e-isset/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.