Jump to content
luismanoel12

Problema ao realizar um UPDATE com o PHP pdo mysql

Recommended Posts

Nessa página eu quero editar o perfil do usuário, para isso peço que ele informe um novo nome de usuário e novo email, o problema e que nada acontece, não mostra nenhum erro, e não faz o update. Já olhei e revisei o código e não achei o erro..

OBS: Sou novo aqui no fórum e no php, se puderam ajudar eu realmente agradeço!

--Form HTML--

<div id="fundo-perfil">
        <form method="POST">
            <label>Nome de Usuário</label><br>
            <input type="text" class="form-control" name="usuario" id="usuario" required="required" placeholder="<?php echo $_SESSION['usuario'] ?>" style="width: 100%;" > <br>
            <label>Email</label>
            <input type=" text" class="form-control" id="email" name="email" required="required" placeholder="<?php echo $_SESSION['email'] ?>" ><br><br>
            <input type="submit" value="Editar Perfil" class="btn btn-success" name="editar" id="deletar-perfil" >
            <hr style="background-color: white;">
            <a href="perfil.php" class="btn btn-danger" id="deletar-perfil">Cancelar</a><br>
            <p style="color: yellow; margin: 10px">Escolha um novo nome de usuário ou email valido.
            Ambos devem ser substituídos!
            </p>
        </form>
    </div>
--código php na mesma página do html--

if (isset($_POST['editar'])) {
    $usuario = addslashes($_POST['usuario']);
    $email = addslashes($_POST['email']);

    $u->conectar("site", "localhost", "root", "");

    if ($u->msgErro == "") {
        if ($u->alterarP($usuario, $email)) {
            ?>
            <div class="alert alert-success" role="alert" style="margin-bottom: 10px;">
                Perfil alterado com sucesso! faça login novamente para ver as mudanças.
            </div>
        <?php
        }
    } else {
        ?>
        <div class="alert alert-danger" role="alert" style="margin-bottom: 10px;">
        O perfil não pode ser alterado pois o nome de usuário ou email já se encontram cadastrados!       
    </div>
    <?php
    }
}

?>

 

--Método para alterar o perfil--

    public function alterarP($usuario, $email){
        global $pdo;

        //Verificar se o novo usuario ou email já existe
        $sql = $pdo->prepare("SELECT id FROM usuarios WHERE usuario = :usuario OR email = :email");
        $sql->bindValue(":usuario",$usuario);
        $sql->bindValue(":email",$email);
        $sql->execute();

        if($sql->rowCount() > 0){
            return false; 
        }else{
            $cmd = $pdo->prepare("UPDATE usuarios SET usuario = :usuario, email = :email WHERE usuario = :usuario");
            $cmd->bindValue(":usuario",$usuario);
            $cmd->bindValue(":email",$email);
            $cmd->execute();
            return true;
        }

    }

 

Share this post


Link to post
Share on other sites

@luismanoel12 Bom quando você tenta atualizar o usuário você seleciona o campo do usurário com o novo nome e não com o antigo.

 

$cmd = $pdo->prepare("UPDATE usuarios SET usuario = :usuario /* Aqui ele vai passar o valor do usuairo novo */, email = :email WHERE usuario = /* Aqui você tem que colocar o nome do usuário atual e não o nome de usuário novo */ ");
$cmd->bindValue(":usuario",$usuario); // valor com o nome de usuário novo
$cmd->bindValue(":email",$email);

 

Você tem que colocar o valor do usuário atual em where .

$cmd = $pdo->prepare("UPDATE usuarios SET usuario = :usuario, email = :email WHERE usuario = '".$_SESSION['usuario']."'; ");
$cmd->bindValue(":usuario",$usuario);
$cmd->bindValue(":email",$email);

 

Eu  não recomento a você utilizar o valor em session para fazer isso,. mas como teste ele pode servir.

Share this post


Link to post
Share on other sites
Em 05/08/2019 at 20:16, gabrielms disse:

@luismanoel12 Bom quando você tenta atualizar o usuário você seleciona o campo do usurário com o novo nome e não com o antigo.

 


$cmd = $pdo->prepare("UPDATE usuarios SET usuario = :usuario /* Aqui ele vai passar o valor do usuairo novo */, email = :email WHERE usuario = /* Aqui você tem que colocar o nome do usuário atual e não o nome de usuário novo */ ");
$cmd->bindValue(":usuario",$usuario); // valor com o nome de usuário novo
$cmd->bindValue(":email",$email);

 

Você tem que colocar o valor do usuário atual em where .


$cmd = $pdo->prepare("UPDATE usuarios SET usuario = :usuario, email = :email WHERE usuario = '".$_SESSION['usuario']."'; ");
$cmd->bindValue(":usuario",$usuario);
$cmd->bindValue(":email",$email);

 

Eu  não recomento a você utilizar o valor em session para fazer isso,. mas como teste ele pode servir.

Funcionou, muito obrigado!!

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

  • Similar Content

    • By Keber_Crato
      Boa noite galera!!  estou com dificuldades em conseguir o somatório de de dois campos de uma tabela e o somatório de um campo de outra tabela,
      segue assim:
      Tenho uma tabela chamada CID_TITULAR  e outra CID_COMPOSICAO. a tabela CID_TITULAR recebe os cadastro de um programa social e a tabela CID_COMPOSICAO o cadastros dos dependentes (filhos, parentes) TITULAR_COD = COMPOSICAO_COD_TITULAR (chave de ligação)
      tenho dois campos na CID_TITULAR de valores, são eles: TITULAR_RENDA e TITULAR_RENDA_MENSAL e na outra tabela CID_COMPOSICAO tenho um campo de valor COMPOSICAO_RENDA
      estão povoado assim:
       
      Na tabela CID_TITULAR nos campos TITULAR_RENDA (R$ 10.00) e TITULAR_RENDA_MENSAL (R$ 10.00) e na tabela CID_COMPOSICAO no campo COMPOSICAO_RENDA tenho 3 registros com os valores R$ 300.00, R$ 200.00 e R$ 100.00
      GOSTARIA QUE A SELEÇÃO FOSSE O VALOR DOS DOIS CAMPOS DA TABELA CID_TITULAR + O CAMPO DA OUTRA TABELA CID_COMPOSICAO
       
      NO CASO O SOMATÓRIO CORRETO SERIA R$ 620,00
      10,00 no campo TITULAR_RENDA
      10,00 no campo TITULAR_RENDA_MENSAL
      300,00 NO 1º REGISTRO no campo COMPOSICAO_RENDA
      200,00 NO 2º REGISTRO no campo COMPOSICAO_RENDA
      100,00 NO 3º REGISTRO no campo COMPOSICAO_RENDA
       
      TOTALIZANDO R$ 620,00
      O PROBLEMA É:
      Quando faço a seleção com inner join a resposta é R$ 660,00 e não 620,00. a seleção triplica o valor da primeira tabela devido ter três registros na tabela CID_COMPOSICAO
       
      TABELA CID_TITULAR
      CREATE TABLE `cid_titular` (
        `titular_cod` int(11) NOT NULL AUTO_INCREMENT,
        `titular_renda` float(10,2) DEFAULT NULL,
        `titular_renda_mensal` float(10,2) DEFAULT NULL,
        PRIMARY KEY (`titular_cod`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
       
      TABELA CID_COMPOSICAO
      CREATE TABLE `cid_composicao` (
        `composicao_cod` int(11) NOT NULL AUTO_INCREMENT,
        `composicao_cod_titular` int(11) DEFAULT NULL,
        `composicao_renda` float(10,2) DEFAULT NULL,
        PRIMARY KEY (`composicao_cod`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
       
       
      GOSTARIA MUITO DE AJUDA GALERA. OBRIGADO!!!!
       

    • By malufla79
      Boa tarde, estou com probleminha no phpmailer, o código abaixo funciona corretamente quando consigo enviar para um único e-mail, mas quando coloco a opção todos, ele só manda apenas para primeiro e-mail e não apresenta nenhum erro. Poderia me dar uma ajudinha? Obrigada
       
      Controle
      if ($_POST['filtro'] == 'todos') { // essa consulta pego a lista de e-mails cadastrado no meu banco de dados $usuarios->consultar("select * from mala_email"); $linha = $usuarios->Linha; $rs = $usuarios->Result; } if ($_POST['filtro'] == 'todos') { for ($i=0; $i<$linha; $i++) { $email = $rs[$i]['email']; $mensagem = $_POST['editor']; $util->EnviarEmaiLivre($email, utf8_decode($_POST['assunto']), $mensagem); } } else { $mensagem = $_POST['editor']; $util->EnviarEmaiLivre($_POST['email'], utf8_decode($_POST['assunto']), $mensagem); } Função
      function EnviarEmaiLivre($email, $assunto, $mensagem) { date_default_timezone_set('Etc/UTC'); require 'phpmailer/PHPMailerAutoload.php'; $hostSmtp = "mail.domino.com.br"; $smtpUser = "email@email.com.br"; $senhaSmtp = "********"; $mensagem = ' <p><img src="http://www.dominio.com.br/images/logodolugar.png" alt="Logo do Lugar" width="550"></p> '.$mensagem; //Create a new PHPMailer instance $mail = new PHPMailer; //Tell PHPMailer to use SMTP $mail->isSMTP(); //Enable SMTP debugging // 0 = off (for production use) // 1 = client messages // 2 = client and server messages $mail->SMTPDebug = 0; //Ask for HTML-friendly debug output $mail->Debugoutput = 'html'; //Set the hostname of the mail server $mail->Host = $hostSmtp; // use // if your network does not support SMTP over IPv6 //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission $mail->Port = 587; //Set the encryption system to use - ssl (deprecated) or tls $mail->SMTPSecure = 'tsl'; //Whether to use SMTP authentication $mail->SMTPAuth = true; //Username to use for SMTP authentication - use full email address for gmail $mail->Username = $smtpUser; //Password to use for SMTP authentication $mail->Password = $senhaSmtp; //Set who the message is to be sent from $mail->setFrom('email@email.com.br', 'E-mail do Lugar'); //Set who the message is to be sent to $mail->addAddress($email); //Set the subject line $mail->Subject = $assunto; //Replace the plain text body with one created manually $mail->Body = $mensagem; $mail->isHTML(true); if ($conteudoArquivo != '' && $arquivo != '') { //Attach an image file $mail->addAttachment('phpmailer/images/phpmailer_mini.png'); //Read an HTML message body from an external file, convert referenced images to embedded, //convert HTML into a basic plain-text alternative body $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); } if (!$mail->send()) { $retorno = false; } else { $retorno = true; } }  
       
    • By Leandro Volanick
      Boa tarde pessoal.
       
      Gostaria de uma ajuda em uma consulta sql, onde quero agrupar os todos produtos comprados pelo mesmo CPF, dentro de uma array. 
       
      Segue o que estou usando:
      $data=mysqli_query($mysqli, "SELECT xml.id, xml.xProd as produto, prod.id as iddoproduto, GROUP_CONCAT( prod.xProd ) FROM produtos AS prod LEFT JOIN xml as xml ON xml.xProd = prod.xProd GROUP BY xml.CPFdest"); while($info=mysqli_fetch_array($data)) echo '['.$info['iddoproduto'].'],'; No momento, o codigo está trazendo apenas 1 produto, quero que ele printe todos produtos que o CPFdest já comprou.
       
       
    • By Vítor Gonçalves
      Boa Tarde, gostaria se alguém poderia me ajudar!
      tenho um sistema desktop que é validado a cada 6 meses, quando termina essa validade ele pedi para renovar!
      - desejo criar um script em PHP  com a seguinte função:
      -pegar a senha gerada no sistema e enviar para o servidor web( hostinger server-sql) via php
      - o servidor gera e mostra uma contra senha  para ser copiada de volta.
      - ao colar a contra senha no campo "nova licença" no meu programa, ele compara com a que tá no banco de dados na hostinger se bate a mesma e libera o uso.
       
      - já vi isso em outro sistema mas não tive acesso aos scripts para ver como funciona.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.