Jump to content
Marcos Anibal Lemes

mysql_fetch_assoc x mysqli_fetch_assoc

Recommended Posts

Essa rotina funcionava perfeitamente, depois que atualizei o código para mysqli_fetch_assoc não funciona mais, o código conta todos as linhas do BD, mas só pega o primeiro usúario referenciado pelo e-mail, as outras linhas  ele não pega o e-mail e grava os dados do primeiro usuário no BD. Resumindo o código não está associando os dados dos outros e-mails..


    $usuarios = mysql_query("SELECT * FROM $t_cartao");
    $contar = mysql_num_rows($usuarios);

    for($b=0; $b<$contar; $b++){
    $resEmail = mysql_fetch_assoc($usuarios);
    $email = $resEmail['email'];

    $sql = mysql_query("SELECT * FROM $t_cartao WHERE email = '$email'");
    while($rs = mysql_fetch_array($sql)){

***********************************************************************************

 

  

Esta não quer funcionar, o código conta todos as linhas do BD, mas só pega o primeiro usúario
referenciado pelo e-mail, as outras linhas  ele não pega o e-mail e grava os dados do primeiro
usuário no BD. Resumindo o código não está associando os dados dos outros e-mails..

<?
    $usuarios = "SELECT * FROM $t_cartao";
    $res = mysqli_query($conexao, $usuarios);
    $contar = mysqli_num_rows($res);
    
    for($b=0; $b<$contar; $b++){
    $resEmail = mysqli_fetch_assoc($res);
    $email = $resEmail['email'];

    
    $sql = "SELECT * FROM $t_cartao WHERE email = '$email'";
    $res = mysqli_query($conexao, $sql);
    while($rs = mysqli_fetch_array($res)){
    
    $nome = $rs['nome'];
    $sexo = $rs['sexo'];
    $serie = $rs['serie'];
    $data_nasc = $rs['datanasc'];
    $data_resp = $rs['data_resp'];
    $rq01 = $rs['rq01'];
    $rq02 = $rs['rq02'];
    $rq03 = $rs['rq03'];
    $rq04 = $rs['rq04'];
    $rq05 = $rs['rq05'];
    $rq06 = $rs['rq06'];
    $rq07 = $rs['rq07'];
    $rq08 = $rs['rq08'];
    $rq09 = $rs['rq09'];
    $rq10 = $rs['rq10'];
    $rq11 = $rs['rq11'];
    $rq12 = $rs['rq12'];
    $rq13 = $rs['rq13'];
    $rq14 = $rs['rq14'];
    $rq15 = $rs['rq15'];
    $rq16 = $rs['rq16'];
    $rq17 = $rs['rq17'];
    $rq18 = $rs['rq18'];
    $rq19 = $rs['rq19'];
    $rq20 = $rs['rq20'];
    }
    
    $sql = "SELECT * FROM $t_gabarito";
    $res = mysqli_query($conexao, $sql);
    while($gq = mysqli_fetch_array($res)){
    
    $data_gabarito = $gq['data_gabarito'];
    $gq01 = $gq['gq01'];
    $gq02 = $gq['gq02'];
    $gq03 = $gq['gq03'];
    $gq04 = $gq['gq04'];
    $gq05 = $gq['gq05'];
    $gq06 = $gq['gq06'];
    $gq07 = $gq['gq07'];
    $gq08 = $gq['gq08'];
    $gq09 = $gq['gq09'];
    $gq10 = $gq['gq10'];
    $gq11 = $gq['gq11'];
    $gq12 = $gq['gq12'];
    $gq13 = $gq['gq13'];
    $gq14 = $gq['gq14'];
    $gq15 = $gq['gq15'];
    $gq16 = $gq['gq16'];
    $gq17 = $gq['gq17'];
    $gq18 = $gq['gq18'];
    $gq19 = $gq['gq19'];
    $gq20 = $gq['gq20'];
    
    }
    
    $pontos = 0;
    $erros = 0;
    
    if($rq01 == $gq01){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq02 == $gq02){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq03 == $gq03){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq04 == $gq04){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq05 == $gq05){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq06 == $gq06){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq07 == $gq07){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq08 == $gq08){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq09 == $gq09){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq10 == $gq10){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq11 == $gq11){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq12 == $gq12){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq13 == $gq13){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq14 == $gq14){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq15 == $gq15){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq16 == $gq16){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq17 == $gq17){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq18 == $gq18){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq19 == $gq19){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    if($rq20 == $gq20){
    $pontos = $pontos + 1;
    }else{
    $erros = $erros + 1;
    }
    
    $pontos = $pontos;
    $erros = $erros;
    
    $sql_grav = $conexao->query("INSERT INTO $t_pontuacao (email, data_resp, pontos, erros,
serie, sexo, nome, datanasc) VALUES ('$email', '$data_resp', '$pontos', '$erros', '$serie', '$sexo',
'$nome', '$data_nasc')");
    
}

Share this post


Link to post
Share on other sites

Olá!
Ative a exibição de erros com error_reporting(E_ALL); 
php.net/error_reporting

 

E verifique também se houve alguma falha ao executar as queries

... mysqli_query($seuLink, $suaQuery) or die(mysqli_error($seuLink));

Ou na forma OO (quer é mais elegante)

... $sqli->query($suaQuery) or die($sqli->error);

php.net/mysqli_error

 

Assim, se houve algum erro na executação de alguma query, o sr.  vai saber qual foi.

Share this post


Link to post
Share on other sites

Boa tarde, o código não tem mensagem de erro nenhuma, o problema é na associação, antes ele associava através do mysql_fetch_assoc a variável $email com a variável $usuario, desta forma ele lia todos os usuário da tabela, porém com o uso do mysqli_fetch_assoc ele lê apenas o primeiro usuários (e-mail do usuário) da tabela, faz o loop através do comando (for) e como encontra 4 registro na tabela o código preenche os outros registros da outra tabela com as mesmas informações do primeiro usuário deixando o email em branco.

 

 

 

pontuacao.jpg

Share this post


Link to post
Share on other sites
19 horas atrás, Marcos Anibal Lemes disse:

$res = mysqli_query($conexao, $sql);

Neste ponto, o código está sobrepondo o resultado do select:

 

19 horas atrás, Marcos Anibal Lemes disse:

 $usuarios = "SELECT * FROM $t_cartao";

 

Então na próxima execução do conteúdo do laço, o valor buscado será do segundo select, ao invés do primeiro.
Tente utilizar variáveis diferentes dentro do for, mantendo assim o conteúdo do primeiro select na variável $res

Share this post


Link to post
Share on other sites

Bom dia, mateus.teixeira,

 

Refiz o código e o erro realmente era nos select com o mesmo nome. Após colocar nomes diferentes nas variáveis dos select tudo funcionou perfeitamente..

 

Obrigado pela ajuda do fórum.

 

 

 

 

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 opl12
      Olá Mestres
       
      Estou testando enviar email pelo PHP,
       
      No windows 10 Instalei o Xampp, e fiz as configurações abaixo: 
      Configurei o arquivo php.ini com:  sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
       
      configurei o arquivo sendmail.ini com: smtp_server=smtp.gmail.com
      smtp_port=587
      auth_username= meu_email@gmail.com
      auth_password= minha_senha_do_email
       
       
      Pelo código php não retorna em erro, apenas diz que foi enviado com sucesso. 
      mas o email nunca chega hahahahah nem está no lixo eletônico
       
      Sabem se falta algo?

       
       
       
       
    • By alexandre_xto
      Bom dia amigos, este é meu primeiro post, espero que consiga lhes passar meu problema
      Eu possuo várias imagens de vários tamanhos e dimensões.
      De cada uma quero realizar uma copia quadrada.
      por exemplo, se a imagem  tiver 800x600 quero criar uma 800x800, esse 200 a mais de lagura quero que fique branco sem esticar as fotos.
      Se tenho uma foto 300x600 quero que ela fique com 600x600.
      O Script deve identificar se ela é mais alta ou mais baixa e criar uma cópia baseando-se no que for maior e deve fazer isso sem distorcer a imagem.
      Se for colocado uma 1500x300 ela deve sair 1500x1500, a diferença de 1200 a mais deve ser branca.

    • By RodrigoWD3
      Boa tarde pessoal estou com uma dúvida, seguinte estou criando uma pagina de blog para teste de url amigável ja configurei o .htaccess  , o banco de dados , as postagem com slugs , o problema e que só consigo exibir a noticia completa quando ha uma categoria exemplo .
       
      O site exibe assim :  meusite.com.br/noticias/post-da-noticia/   
      Queria desse jeito: meusite.com.br/post-da-noticia/
       
      porem não queria exibir a categoria noticias, pois os posts vão esta na index
      vou colocar o código da index, acredito que a configuração seja nela
       
      INDEX.PHP
      <?php include "admin/conexao.php"; require_once("include/header.php"); @$url = $_GET['url']; $urlE = explode('/',$url); @$arquivo = $urlE['0']; @$post = $urlE['1']; $paginas = array('empresa','noticias','categoria','contato'); if(isset($post) && $post != ''){ include "single.php"; }elseif(isset($arquivo) && in_array($arquivo, $paginas)){ include "$arquivo.php"; }elseif(isset($arquivo) && $arquivo == ''){ include "home.php"; }else{ include "categoria.php"; } require_once("include/footer.php"); ?>  
    • By opl12
      Olá Mestres
      Podem dar uma direção?
      Estou apanhando em algo que aparentemente é fácil
      Preciso: 
                  *Tenho um Banco de Dados com as Colunas: Id, nome, password, data, nivel             ... na coluna "nivel" tem duas informações ou é "staff" ou é "operacao"               *no 1º Select ele vai validar se o usuário e a senha estão corretos conforme no Banco de Dados do PhpMyAdmin             pelas variáveis $nome e $password               *no 2º Select ele valida o nível de acesso, se é "staff" ou "operacao"             se o $nome pertencer a um "staff".. então abre o "Site A"... se pertencer a um "operacao" vai para o "Site B"  
      <!DOCTYPE html> <html lang="pt-br"> <head> <title>Comprovar Usuário</title> <meta charset="utf-8"> </head> <body> <?php try { $base=new PDO("mysql:host=localhost;dbname=painel","root",""); $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // ....... select para validar login e senha se estão ok $sql="SELECT * FROM login WHERE nome= :nome AND password= :password"; $resultado=$base->prepare($sql); $nome=($_POST["nome"]); $password=($_POST["password"]); $resultado->bindValue(":nome",$nome); $resultado->bindValue(":password",$password); $resultado->execute(); $numero_registro=$resultado->rowCount(); //Validar Camada de Nível $sql2="SELECT * FROM login WHERE name= :nome AND nivel = 'staff'"; $resultado2=$base2->prepare($sql2); $nome=($_POST["nome"]); $resultado2->bindValue(":nome",$nome); $resultado2->execute(); $numero_registro2=$resultado2->rowCount(); if($numero_registro!=0) { //echo "<h1>Logado com Sucesso</h1>"; ...Se Login e Senha estão ok, então abre a página session_start(); $_SESSION["usuario"] = $_POST["nome"]; header("Location:reports.php"); }else { echo "Senha incorreta, favor verificar! <br><br>"; echo '<a href="index.php">Clique aqui para tentar novamente!</a>'; //header("Location:index.php"); } }catch(Exception $e) { die("Error" . $e->getMessage()); } ?> </body> </html>  
    • By opl12
      Olá Mestres,
      Não achei um tópico com este assunto
       
      No Código abaixo, eu dou um echo e me retorna o valor de um array,
      *que é o resultado de um SELECT feito no Banco de Dados PhpMyAdmin
      *no banco tenho a tabela LOGIN, com as colunas: Nome, Password, Nivel
       
      no PHP eu carrego as variáveis $nome e $password
      com isso eu faço um select com uma condição na coluna "nivel" .. para me trazer apenas o resultado onde consta a palavra "staff" na coluna "nivel"
       
      ao dar um echo:
      echo $key.": ".$value."<br>";  
      o PHP me retorna:
      nome: jeferson
      password: 123
      nivel: staff
       
      ***a pergunta:
      Tem como eu gravar o resultado da coluna "nivel" ( que neste caso é "staff" ) em uma variável?? ao ponto de dar um echo e aparecer apenas a palavra "staff" ?
       
      Se puderem me ajudar, já agradeço
       
      <!DOCTYPE html> <html lang="pt-br"> <head> <title>Comprovar Usuário</title> <meta charset="utf-8"> </head> <body> <?php $nome = "jeferson"; $password = "123"; try { $base=new PDO("mysql:host=localhost;dbname=painel","root",""); $base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql="SELECT nome, password, nivel FROM login WHERE nome= :nome AND password= :password"; $resultado=$base->prepare($sql); $resultado->bindValue(":nome",$nome); $resultado->bindValue(":password",$password); $resultado->execute(); $result = $resultado->fetch(PDO::FETCH_ASSOC); foreach ($result as $key => $value) { echo $key.": ".$value."<br>"; } }catch(Exception $e) { die("Error" . $e->getMessage()); } ?> </body> </html>  
       
       
       
×

Important Information

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