Ir para conteúdo

Arquivado

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

DinhoPHP

INSERT INTO não funciona por nada!

Recommended Posts

Estou desesperado, peguei este simples código (que já utilizei no passado) apenas para testar a inserção no banco de dados, já que o mais complexo que fiz não funcionava, porém, este comporta-se da mesma maneira, sem gerar mensagem de erro e não insere nada. Por favor, não sei mais o que fazer!

<?php
try{
        $pdo = new PDO("mysql:host=localhost; dbname=bd", "root", "");
    }catch(PDOException $e){
        echo  $e->getMessage();
    }
return $pdo;
?>

<html>

<head>

</head>

<body>

<!--<form method="get" action="" enctype="multipart/form-data"/>
    <input type="hidden" name="nivel" value="1"/>
    <input type="text" name="nome" placeholder="Insira o seu nome"/>

    <input type="submit" name="enviar" value="Postar"/>
</form> -->

<?php
//$nivel = $_POST["nivel"];
$nome = $_GET["nome"];
$insert = $pdo->prepare("INSERT INTO clientes (nome) VALUES (:nome)");
//$insert->bindValue(":nivel", $nivel);
$insert->bindValue(":nome", $nome);

$busca = $pdo->prepare("SELECT * FROM clientes WHERE nome=?");
$busca->execute(array($nome));

if ($busca->rowCount() == 0) {

    $insert->execute();

}else{
echo "<h1>Já existe!</h1>";
}

//echo var_dump($busca);
?>
</body>

</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah! Eu passei o nome pela url só para testar e o nome do BD e da tabela estão corretos. Já testei também no servidor do meu site.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use ERRMODE_EXCEPTION para reportar os erros e os codes dentro do bloco try/catch

<?php

try {

	
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	
	//$nivel = $_POST["nivel"];
	$nome = $_GET["nome"];
	$insert = $pdo->prepare("INSERT INTO clientes (nome) VALUES (:nome)");
	//$insert->bindValue(":nivel", $nivel);
	$insert->bindValue(":nome", $nome);
	 
	$busca = $pdo->prepare("SELECT * FROM clientes WHERE nome=?");
	$busca->execute(array($nome));
	 
	if ($busca->rowCount() == 0) {
	 
		$insert->execute();
	 
	}else{
	echo "<h1>Já existe!</h1>";
	}

} catch (Exception $e) {

	die( "Erro encontrado :". $e->getMessage() );

}
 
//echo var_dump($busca);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci, troque

} catch (Exception $e) {

por

} catch (PDOException $e) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que há um return $pdo no seu código? return irá interromper a execução.

If called from the global scope, then execution of the current script file is ended. If the current script file was included or required, then control is passed back to the calling file. Furthermore, if the current script file was included, then the value given to return will be returned as the value of the include call. If return is called from within the main script file, then script execution ends. If the current script file was named by the auto_prepend_file or auto_append_file configuration options in php.ini, then that script file's execution is ended.


Outro detalhe, sempre feche cursores de consulta. Existe um bug que, teoricamente não se aplica ao seu caso, exige o fechamento do cursor. Torne isso uma boa prática.

$busca->execute(array($nome));

$rowCount = $busca->rowCount();

$busca->closeCursor();
 
if (rowCount  == 0) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willians e Gabriel, muito obrigado pela ajuda, ontem eu lembrei que estou construindo o site usando o require no header e footer, sendo assim, chamei a conexão com o BD no header por meio do include o que resultou no funcionamento com a primeira ajuda do Willians, porém com o post no form e o $_POST não posta no BD. Verei com estas últimas orientações aprimoro o código, coloco para funcionar e prossigo com o site, o estranho que essas coisas básicas sempre funcionaram, fiz um que funciona por esta base, até no manual do PHP eu fui. Mas agradeço muito pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as modificações e com a dica do Gabriel, o form inseria no BD nomes repetidos (no caso usarei para CPF) pois o rowCount parecia não contar. Para aplicar o método, mandei o form postar para o arquivo post.php que é constituído do código abaixo, onde o mesmo não posta no BD e o var_dump exibe uma array vazia, o que significa que $_POST não está recebendo o nome. Segue o código:

 try {


            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            //$nivel = $_POST["nivel"];
            $nome = trim($_POST["nome"]);
            $insert = $pdo->prepare("INSERT INTO clientes (nome) VALUES (:nome)");
            //$insert->bindValue(":nivel", $nivel);
            $insert->bindValue(":nome", $nome);

            $busca = $pdo->prepare("SELECT * FROM clientes WHERE nome=?");
            $busca->execute(array($nome));

            if ($busca->rowCount() == 0) {

                $insert->execute();

            }else{
                echo "<h1>Já existe!</h1>";
            }

        } catch (PDOException $e) {

            die( "Erro encontrado :". $e->getMessage() );

        }

        var_dump($_POST);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou enlouquecendo! Utilizei um script antigo e funcional em servidor até hoje, rodou um dia bem, quando fui adaptá-lo ao meu novo projeto, parou novamente, voltei à usá-lo como estava e também parou, ao cadastrar nada insere no BD ou exibe o erro que as variáveis não foram definidas, tanto em servidor local como o da Hostgator. Já não sei o que fazer, mudei de WAMP para XAMPP...

 

Segue o código:

<?php
include"Login.class.php";
$startaction="";
$mensagem="";
if(isset($_POST["acao"])){
$acao=$_POST["acao"];
$startaction=1;
}
//MÉTODO DE CADASTRO
if($startaction==1){
if($acao=="cadastrar"){
$nome= utf8_decode(trim(ucwords($_POST["nome"])));
$nascimento=$_POST["nascimento"];
$batismo=$_POST["batismo"];
$cargo=utf8_decode(trim(ucwords($_POST["cargo"])));
$email=trim(strtolower($_POST["email"]));
$senha=sha1($_POST["senha"]);

if(empty($nome) || empty($email)|| empty($senha)){
$mensagem="Por favor. preencha todos os campos!";}
//TODOS OS CAMPOS PREENCHIDOS
else{
//E-MAIL VÁLIDO
if(filter_var($email,FILTER_VALIDATE_EMAIL))
{
//SENHA INVÁLIDA
if(strlen($senha)<8){
$mensagem="A senha deve ter no mínimo oito caracteres!";
}
//SENHA VÁLIDA
else{
//EXECUTA A CLASSE DO CADASTRO
//TRATAMENTO DAS VARIÁVEIS
$nome=($nome);
$nascimento=($nascimento);
$batismo=($batismo);
$cargo=($cargo);
$email=($email);
$senha=($senha);

//INSERÇÃO NO BANCO DE DADOS
$insertseguro=$pdo->prepare("INSERT INTO usuarios (nome, nascimento, batismo, cargo, email, senha)VALUES(:nome, :nascimento, :batismo, :cargo, :email, :senha)");
$insertseguro->bindValue(":nome",$nome,PDO::PARAM_STR);
$insertseguro->bindValue(":nascimento",$nascimento,PDO::PARAM_STR);
$insertseguro->bindValue(":batismo",$batismo,PDO::PARAM_STR);
$insertseguro->bindValue(":cargo",$cargo,PDO::PARAM_STR);
$insertseguro->bindValue(":email",$email,PDO::PARAM_STR);
$insertseguro->bindValue(":senha",$senha,PDO::PARAM_STR);
//Valida o cadastro
$validar=$pdo->prepare("SELECT * FROM usuarios WHERE email=?");
$validar->execute(array($email));
if($validar->rowCount() == 0){

//Executa o cadastro
$insertseguro->execute();
$mensagem="Dados cadastrado com sucesso!";
}
else{
$mensagem="Email e cargos existente! O administrador será notificado desta tentativa.";

} 
}
/*if(isset($insertseguro)){
$flash="Cadastro realizado com sucesso!";
}
else{
$flash="Houve um erro em nosso sistema, contacte o administrador!";
}*/
/*E-MAIL INVÁLIDO
else{
$mensagem="Digite seu e-mail corretamente!";
}*/
}
}
}
}


//MÉTODO DE LOGIN
/*if($startaction==1){
if($acao=="logar"){
//DADOS
$email=addslashes($_POST['email']);
$senha=addslashes(sha1($_POST['senha']));

if(empty($email) || empty($senha)){
$mensagem="Preencha todos os campos!";
}
else{
if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
$mensagem="Digite seu email corretamente!";
}
else{
//EXECUTA A BUSCA PELO USUÁRIO
$usuario= new usuario();
$usuario=$usuario->Logar($email,$senha);
}
}
}*/

//Variáveis de estilo
if(empty($mensagem)){
$display="display:none";
}
else{
$display="display:block";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Notice: Undefined index: nome in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 12

Notice: Undefined index: nascimento in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 13

Notice: Undefined index: batismo in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 14

Notice: Undefined index: cargo in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 15

Notice: Undefined index: email in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 16

Notice: Undefined index: senha in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 17

Compartilhar este post


Link para o post
Compartilhar em outros sites

Todos os erros informados são básicos da programação em PHP. Você pode encontrar sobre eles aqui: http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu algum ruim aqui em tudo então, pois a simplicidade abaixo, não substitui o valor padrão padrão.

<form method="post" action="test.php" enctype="multipart/form-data">

        <input type="hidden" name="nivel" value="1"/>
        <input type="text" id="nome" name="nome" placeholder="Insira o seu nome"/>
        <!--<input type="email" name="email" placeholder="Insira um email válido"/>
        <input type="password" name="senha" required="Você esqueceu da senha!" placeholder="Insira uma senha de 8 caracteres"/>-->

            <input type="submit" name="postar" value="Postar"/>

        </form>

            <?php

            $nome = isset($_POST["nome"])?$_POST["nome"]:"Aguardando...";
            echo "<h1>".$nome."</h1>";

            ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muda o Metodo de Validação e Verifique se o Form esta sendo enviado via post

Coloque o código de leitura de entradas e cadastro dentro do escopo REQUEST_METHOD abaixo:

Uma função para pegar o valor vindo de GETs ou POSTs já validando com ternário e forma de uso com a @var Batistmo

function getValue($key, $default_value = false)
{
        if (!isset($key) || empty($key) || !is_string($key))
            return false;
        $ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $default_value));

        if (is_string($ret) === true)
            $ret = urldecode(preg_replace('/((\%5C0+)|(\%00+))/i', '', urlencode($ret)));
        return !is_string($ret)? $ret : stripslashes($ret);
}




if($_SERVER['REQUEST_METHOD']=='POST'){

    // Pegar Post ou Get

    $batismo = getValue('batismo');

}

Pronto assim você já evita dores de cabeça!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Williams, eu não sou tão leigo e nem avançado, este código, eu nunca utilizei. Se eu adicionar esta function, basta eu ir digitando as variáveis à serem capturadas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim

 

veja que tem um ternario de POST ou GET

$ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $default_value));

Para pegar qualquer parâmetro da URL ou POST, use getValue ao inves de $_POST ou $_GET

$qualquer_coisa = getValue('qualquer_coisa');

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Williams, agradeço muito pela ajuda assim como os demais e de certo que suas instruções Williams, acrescentaram muito para com a minha experiência pois essas suas últimas postagens eu desconhecia, mas venho dizer que resolvi esses problemas de um modo que jamais imaginava, assim como os poucos desenvolvedores que conheço. Resolvi o problema mudando o XAMPP do HD secundário para o primário, isso fez com que até os códigos mais simples de POST funcionassem, incluindo também no servidor remoto. Verdade! Vão achar que é historinha ou mentira, mas não é! No servidor remoto só não funcionou o BD porque o PDO estava desabilitado.

 

Agradeço à todos pela dedicação e ajuda. Abraço! Deus os abençoe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu e use instalações manuais, assim você evita dores de cabeças como estas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Williams tudo bem, concordo, mas se for corelação ao XAMPP foi por mudar essa natureza que deu esse ruim, era para ser instalado no C: e eu escolhi o D: no caso de uma eventual formatação. Sei que tem como alterar a pasta das páginas mas no momento eu prefiro deixar quieto e dar continuidade ao projeto. kkkk Obrigadão por tudo!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

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