Ir ao conteúdo
  • Cadastre-se

Inserção Usando Easyphp


edu.guitar

Posts recomendados

Olá novamente! Falei de um tópico sobre BD com Easyphp. Quem quiser verificar:

http://forum.clubedohardware.com.br/resolvido-bd-easyphp/935008?p=5040591#post5040591

Aliás, obrigado mais uma vez, dif, pela força naquele tópico.

Estou tentando inserir dados agora. Estou com dificuldades. Quem puder ajudar, agradeço.

Eis o que fiz:

conexão.php

<?php

$conexao = mysql_connect("localhost", "root", "");

mysql_select_db("classes", $conexao);

?>

index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Cadastro</title>

</head>

<body>

<form method="post" action="validaUser.php">

<p>Nome da Turma:

<input type="text" name="nome"/>

</p>

<p>Curso:

<input type="text" name="curso"/>

</p>

<p>Início:

<input type="text" name="inicio"/>

</p>

<p>

Término:

<input type="text" name="termino"/>

<input type="submit" value="Confirma"/>

</p>

</form>

</body>

</html>

cadastra_turma.php -- certeza que tem coisa errada aqui

<?php

//iniciamos uma sessao

session_start();

//resgatamos os dados passados por POST

$nome = $_POST["nome"];

$curso = $_POST["curso"];

$inicio = $_POST["inicio"];

$termino = $_POST["termino"];

//validamos os campos vazios

if( empty($nome) or empty($curso) or empty($inicio) or empty($termino)){

echo "<script>

alert('prencha todos os campos');

history.go(-1);

</script>";

exit;

}

//iniciaremos uma conexao com o bd incluindo o arquivo conexao.php

include 'conexao.php';

//inserimos os dados necessários (todos são not null no BD, logo, todos são necessários

$consulta= "INSERT into tb_turmas VALUES ('$2A', '$Reciclagem de Vigilantes', '$01/02/2011', '$02/03/2011')";

$dados = mysql_query($consulta);

$row = mysql_num_rows($dados);

header ("Location: inserido.php");

// mysql_free_result($dados);

mysql_close($conexao);

?>

inserido.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Cadastro</title>

</head>

<body>

Os dados foram inseridos!

</body>

</html>

Link para o comentário
Compartilhar em outros sites

Amigo,

O que seria esses '$' em cada campo dos dados que você está inserindo?

Não existem eles na hora de inserir.

Tente retirá-los para ver se funciona:

$consulta= "INSERT into tb_turmas VALUES ('2A', 'Reciclagem de Vigilantes', '01/02/2011', '02/03/2011')";

Caso não consiga, então troque os campos '01/02/2011', '02/03/2011' por:

to_date('01/02/2011','dd/mm/YYYY'), to_date( '02/03/2011','dd/mm/YYYY') respectivamente.

Link para o comentário
Compartilhar em outros sites

Entendi. Vou fazer isso.

Só estou com dúvida quando ao to_date. Ficaria fora do insert?

Estou mais acostumado com Oracle e SQL Server. Creio que o formato padrão seja 'mm/dd/YYYY', mas não deveria dar erro na hora de inserir. Seria um erro conceitual.

Vou ver aqui.

Obrigado, Roberto!

Link para o comentário
Compartilhar em outros sites

ficaria assim..

INSERT into tb_turmas VALUES ('2A', 'Reciclagem de Vigilantes', to_date('01/02/2011','dd/mm/YYYY'),to_date('02/03/2011','dd/mm/YYYY'));

Indiferente... o to_date, só mostra que a string que você está tentando colocar no campo data, é uma data, que está no formato, que você colocar de máscara.

Você pode colocar 1999/30/12 com a mascara YYYY/dd/mm e ele mesmo assim, vai funcionar.

Link para o comentário
Compartilhar em outros sites

  • Moderador

interessante isso, a funçao to_date() converte uma string em data roberto?

por exemplo se eu colocar to_date('09/07/1982', 'dd/mm/YYYY') o phpmyadmin reconhece como 1982-07-09 ? sempre coloquei minhas datas assim pra nao dar problemas... pois ja tive problemas com data em uma avaliaçao do 3 semestre da minha faculdade resultando no conceito B .. rsrs se nao fosse a data teria ganhado A

Link para o comentário
Compartilhar em outros sites

Então... Posso estar falando besteira mas acredito que sim...

Porque pense comigo...

Se você joga por exemplo um valor qualquer... como ela vai saber que é um valor válido?

Na teoria ele se enquadra da seguinte maneira...

Se você jogar 1999 com máscara YYYY ele aceita, testem...

Se você jogar 1999 com máscara MM ou DD ele não aceita...

Basicamente seria o seguinte...

Você com a máscara mostrar pro banco, por exemplo "12/12/2012" com a máscara... "dd/mm/YYYY", que os 2 digitos antes da barra são dias, que os 2 digitos entre barras é o mes, e os 4 ultimos numeros são anos. Por isso dá inconsistencia se você tentar colocar anos com 4 dígitos e a máscara estar com 2.

Lembrando... Isso é o que eu acredito que ocorra, baseado na prática, não li em nenhum artigo que isso é válido, no entanto... a prática, mostra que é sim ^^

Link para o comentário
Compartilhar em outros sites

Sobre o phpmyadmin reconhecer como 1982-07-09, acho que posso ajudar: Realmente, se eu mandar em formato diferente, como por exempo 1982/07/09 ele não recohece. Aí temos que criar uma conversão. Ficaria assim:

$ano=$data{6}.$data{7}.$data{8}.$data{9};

$mes=$data{3}.$data{4};

$dia=$data{0}.$data{1};

$data = $ano.'-'.$mes.'-'.$dia;

Ou seja, eu inverto as strings do vetor. Deste modo, eu ignoro as barras e traduzo corretamente para o banco o que o usuário digitou.

Link para o comentário
Compartilhar em outros sites

Ae pessoal, consegui fazer a inserção!

Vou mostrar:

conexao.php

//a conexão é de praxe, por enquanto estou usando o localhost mesmo

<?php

$conexao = mysql_connect("localhost", "root", "");

mysql_select_db("classes", $conexao);

?>

form.php

\\ criei métodos para não enviar "submit" com campos vazios e para padronizar o formato em "xx/xx/xxxx", pois vou usar isso para fazer a conversão para o phpMyAdmin

<script src="SpryAssets/SpryValidationTextField.js" type="text/javascript"></script>

<link href="SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css" />

<form id="data" name="data" method="post" action="teste.php">

<p> </p>

<p><span id="sprytextfield1">

<label for="data"></label>

<input type="text" name="data" id="data" />

<span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span></span></p>

<p>

<input type="submit" name="Acessar" id="Acessar" value="Acessar" />

</p>

<p> </p>

</form>

<script type="text/javascript">

var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1", "date", {format:"mm/dd/yyyy"});

</script>

teste.php

<?php

include 'form.php';

include 'conexao.php';

$data = $_POST["data"];

$ano=$data{6}.$data{7}.$data{8}.$data{9};

$mes=$data{3}.$data{4};

$dia=$data{0}.$data{1};

$data = $ano.'-'.$mes.'-'.$dia;

echo $data;

$sql = mysql_query("INSERT into tb_tabela (data) VALUES ('$data')"); die ("");

?>

É isso aí. Deu certo :D. Só peço para a moderação ainda não encerrar o tópico porque vou tirar duas dúvidas. São essas: A conversão que fiz é realmente necessária ou talvez o "to_date" tenha essa função? E se eu for criar somente uma consulta no banco de dados para retornar um positivo ou negativo? Exemplo: Se eu criar um campo para colocar uma data e o sistema procurar no banco de dados para ver se essa data já foi cadastrada (para depois inserir alguma coisa... seria uma espécie de verificação para não viciar os dados)?

Até.

Link para o comentário
Compartilhar em outros sites

  • Moderador

para verificar se algo ja esta cadastrado é só você fazer uma consulta e atribuir uma variavell para o mysql_num_rows

geralmente eu faço assim:


if( $linha = mysql_num_row > 0){
echo "ja consta no banco"
}

so um exemplo de uso..

sobre as datas.. por padrão e nativo o phpmyadmin só aceita o formato yyyy-mm-dd

pra mudar isso só com uma funçao ... bom eu nao vejo muito o porque de cadastrar a data do jeito que conhemos.. podemos trazer a data do banco formatada..

Link para o comentário
Compartilhar em outros sites

Fiz da seguinte maneira:

teste.php

<?php

include 'form.php';

include 'conexao.php';

$data = $_POST["data"];

$ano=$data{6}.$data{7}.$data{8}.$data{9};

$mes=$data{3}.$data{4};

$dia=$data{0}.$data{1};

$data = $ano.'-'.$mes.'-'.$dia;

echo $data;

// a linha abaixo eu estou comentando, pois quero primeiro testar a busca para depois juntar com a inserção

//$sql = mysql_query("INSERT into tb_tabela (data) VALUES ('$data')"); die ("");

//Não reparem: Criei uma tabela só com um campo para data. É teste mesmo.

$consulta = "SELECT * FROM tb_tabela WHERE data ='$data'";

$dados = mysql_query($consulta);

$row = mysql_num_rows($dados);

if( $row = mysql_num_row > 0){

echo "ja consta no banco";

}

else

//A ideia foi fazer um auto incremento (mas acho que percorre automaticamente...)

$row = mysql_num_rows($dados)++;

?>

E... dá "Fatal error: Can't use function return value in write context in C:\Arquivos de programas\EasyPHP-5.3.6.0\www\teste\teste.php on line 26".

Se eu tiro a condicional aparece: "Notice: Use of undefined constant mysql_num_row - assumed 'mysql_num_row' in C:\Arquivos de programas\EasyPHP-5.3.6.0\www\teste\teste.php on line 22".

Link para o comentário
Compartilhar em outros sites

  • Moderador

acontece amigo.. que você simplesmente copiou e colou no seu teste o codigo que era ser so para exemplo... é logico que você deveria ter adaptado.. porque o mysql_num_rows precisa de parameto pois é uma funçao.. da mesma forma que o mysql_fetch_array(). cuidado com os ctrl C , ctrl V isso pode acabar te prejudicando...

veja bem o que você fez:

$row = mysql_num_rows($dados);

if( $row = mysql_num_row > 0){
echo "ja consta no banco";
}

você ja tinha atribuido a funçao a variavel $row

então nao pode simplesmente fazer aquilo dentro do if que vai dar erro.

como você ja atribuiu é só fazer:


if ($row > 0){
blablabla...
}

so peço que você estude um pouco amigo. www.php.net tem a api com toda as explicaçoes em portugues...

porque você quer fazer um auto incremento ali? essa eu nao entendi

Link para o comentário
Compartilhar em outros sites

Sim, sim... dei bola fora. Fiz a atribuição duas vezes para $row e, sim, preciso diminuir o ctrl+c ctrl+v rs, afinal, é bem mais proveitoso reescrever o código, compilar menos, pensar mais. Eu chego lá o/.

Agradeço o toque.

Já estou começando a fazer mais na unha... fico animado.

Fechou! Deu certo mesmo e já me deu uma boa base.

Ah, o auto-incremento é porque fiquei pensando em um vetor percorrendo as linhas da tabela... não me liguei no "select * from"! ">0 " se refere ao número de linhas encontradas e não à posição da linha "atual"... Só para explicar o que estava passando pela minha cabeça, mas agora assimilei*.

Brigadão mais uma vez a todos.

Valeu!

Link para o comentário
Compartilhar em outros sites

  • Moderador

certo, que bom que funcionou amigo.

normalmente no banco você ja seta o campo ID como auto increment. e para percorrer a tabela... tem varios modos... while, for, foreach enfim...

aquele if ( $var > 0) é para verificar se a linha ja existe na hora da consulta.. se for igual a 1 significa que ja existe então nao tem porque recadastrar.. por exemplo usei isto para um cadastro de adminstrador... consulto a tabela, percorro e identifico, se ja existe um admin cadastrado com o login tal, então ele mostra uma mensagem de erro... que ja existe um com esse nome... senao ele dá um insert into e cadastra.

basicamente isso.

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...