Ir para conteúdo


- - - - -

[Resolvido] Problema com Select


  • Por favor inicie sessão para responder
30 respostas a este tópico

#1 PF2G

PF2G

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 17 de Agosto de 2012 - 14:44

Boas,

Eu estou a fazer a listagem dos automoveis do utilizador, e na edição faço uma box popup, mas nao consigo por a info nas input text:

listagem dos automoveis (matricula e apolice)
Código (PHP):
<?php
          $cod_car;
          $select_id="SELECT * FROM civil_users WHERE nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."'";
          $query_id=mysql_query($select_id, $connect) or die(mysql_error());
          $id=mysql_fetch_assoc($query_id);
         
          $select_car="SELECT * FROM cars WHERE id_owner='".$id['id_user']."'";
          $query_car=mysql_query($select_car, $connect) or die(mysql_error());
          $car=mysql_fetch_assoc($query_car);
         ?>
       
         <table class="car_info">
         <?php     
          if($row_car=mysql_num_rows($query_car)!=0){
          do{
         ?>
          <tr>
           <td align="left">
            Matrícula:
           </td>
         
           <td width="10px"></td>
         
           <td align="right">
            <label> <?php echo $car['matricula_car']; ?> </label>
           </td>
           <td>
            <a href="#login-box" class="login-window">
                 <input class="button_edit" name="edit_car" type="submit" value="Editar"/>
            </a>
           </td>
          </tr>
         
          <tr height="10px"></tr>
         
          <tr>
           <td align="left">
            Apólice:
           </td>
         
           <td width="10px"></td>
         
           <td align="right">
            <label> <?php echo $car['apolice_seg']; ?> </label>
           </td>
         
          </tr>
          <tr>
         
           <td align="right" colspan="3">
            <label > <?php echo $car['id_car']; ?></label>
           </td>
         
          </tr>
         
          <tr height="35px"></tr>
          <?php
           }while($car=mysql_fetch_assoc($query_car));
          }
          ?>
         </table>

box popup
Código (PHP):
<?php
                        $select_id_user="SELECT * FROM civil_users WHERE nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."'";
                        $query_id_user=mysql_query($select_id_user, $connect) or die(mysql_error());
                        $id_user=mysql_fetch_assoc($query_id_user);
                       
                        $select_car_id="SELECT * FROM cars WHERE id_owner='".$id['id_user']."'";
                        $query_car_id=mysql_query($select_car_id, $connect) or die(mysql_error());
                        $car_id=mysql_fetch_assoc($query_car_id);
                    ?>
                   
                <!-- hidden inline form -->
                    <div id="login-box" class="login-popup">
                    <a href="#" class="close"><img src="images/close_pop.png" class="btn_close" title="Close Window" alt="Close" /></a>    
                      <form method="post" class="signin" action="edit_car.php">
                            <fieldset class="textbox">
                                <label class="username">
                                    <span>Matrícula:<?php echo $car_id['id_car']; ?></span>
                                    <input type="text" id="username" name="matricula_info" value="<?php echo $car_id['matricula_car'] ?>" />
                                </label>
                               
                                <label class="password">
                                    <span>Apólice:</span>
                                    <input type="text" id="password" name="apolice_info" value="<?php echo $car_id['apolice_seg'] ?>" />
                                </label>
                               
                                <input class="button" type="submit" name="edit_car_info" value="Editar"/>
                            </fieldset>
                      </form>

Alguem me pode ajudar, sff?

Obrigado,
PF2G

#2 joaocasta

joaocasta

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 444 mensagens

Publicado 17 de Agosto de 2012 - 14:52

Código (PHP):
<label class="username">
<span>Matrícula:<?php echo $car_id['id_car']; ?></span>
<input type="text" id="username" name="matricula_info" value="<?php echo $car_id['matricula_car'] ?>" />
</label>
                                                               
<label class="password">
<span>Apólice:</span>
<input type="text" id="password" name="apolice_info" value="<?php echo $car_id['apolice_seg'] ?>" />
</label>

PF2G nao sei se reparaste mas esqueceste-te de colocar ";" em todos os echos que fizeste...
e podias usar um while aqui Código (PHP):
[color=#000088]$car_id[/color]=mysql_fetch_assoc($query_car_id);
ve se resolve...

Editado por joaocasta, 17 de Agosto de 2012 - 14:55.


#3 PF2G

PF2G

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 17 de Agosto de 2012 - 14:55

Não resolve nada  :S

#4 pikax

pikax

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2497 mensagens

Publicado 17 de Agosto de 2012 - 16:06

onde e' que o $id esta' declarado?

                       $select_id_user="SELECT * FROM civil_users WHERE nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."'";
                        $query_id_user=mysql_query($select_id_user, $connect) or die(mysql_error());
                        $id_user=mysql_fetch_assoc($query_id_user);
                      
                        $select_car_id="SELECT * FROM cars WHERE id_owner='".$id['id_user']."'";
                        $query_car_id=mysql_query($select_car_id, $connect) or die(mysql_error());
                        $car_id=mysql_fetch_assoc($query_car_id);

#5 PF2G

PF2G

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 17 de Agosto de 2012 - 16:12

Ver Mensagempikax, em 17 de Agosto de 2012 - 16:06, disse:

onde e' que o $id esta' declarado?

   $select_id_user="SELECT * FROM civil_users WHERE nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."'";
$query_id_user=mysql_query($select_id_user, $connect) or die(mysql_error());
$id_user=mysql_fetch_assoc($query_id_user);
  
$select_car_id="SELECT * FROM cars WHERE id_owner='".$id['id_user']."'";
$query_car_id=mysql_query($select_car_id, $connect) or die(mysql_error());
$car_id=mysql_fetch_assoc($query_car_id);

É $id_user, ok.

Mas continua a dar a mesma coisa, aparece a info do 2º registo em todos...

#6 pikax

pikax

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2497 mensagens

Publicado 17 de Agosto de 2012 - 16:16

Ver MensagemPF2G, em 17 de Agosto de 2012 - 16:12, disse:


Mas continua a dar a mesma coisa, aparece a info do 2º registo em todos...
como assim?

#7 PF2G

PF2G

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 17 de Agosto de 2012 - 16:19

Código (PHP):
<?php
          $query_id_user=mysql_query("SELECT * FROM civil_users WHERE nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."'", $connect) or die(mysql_error());
          $id_user=mysql_fetch_array($query_id_user);
         
          $query_car_id=mysql_query("SELECT * FROM cars WHERE id_owner='".$id_user['id_user']."'", $connect) or die(mysql_error());
          $car_id=mysql_fetch_assoc($query_car_id);
         
          $query_infocar=mysql_query("SELECT * FROM cars WHERE id_car='".$car_id['id_car']."'", $connect) or die(mysql_error());
          $infocar=mysql_fetch_assoc($query_car_id);
         ?>
       
    <!-- hidden inline form -->
         <div id="login-box" class="login-popup">
         <a href="#" class="close"><img src="images/close_pop.png" class="btn_close" title="Close Window" alt="Close" /></a>
           <form method="post" class="signin" action="edit_car.php">
           <fieldset class="textbox">
            <label class="username">
                 <span>Matrícula:<?php echo $infocar['id_car']; ?></span>
                 <input type="text" id="username" name="matricula_info" value="<?php echo $infocar['matricula_car']; ?>" />
            </label>
           
            <label class="password">
                 <span>Apólice:</span>
                 <input type="text" id="password" name="apolice_info" value="<?php echo $infocar['apolice_seg']; ?>" />
            </label>
           
            <input class="button" type="submit" name="edit_car_info" value="Editar"/>
           </fieldset>
           </form>
         </div>

Tenho aqui 3 registos.

Se eu quiser editar qualquer que seja aparece-me a info do 2º registo.

#8 pikax

pikax

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2497 mensagens

Publicado 17 de Agosto de 2012 - 16:23

$query_car_id=mysql_query("SELECT * FROM cars WHERE id_owner='".$id_user['id_user']."'", $connect) or die(mysql_error());
          $car_id=mysql_fetch_assoc($query_car_id);
        
          $query_infocar=mysql_query("SELECT * FROM cars WHERE id_car='".$car_id['id_car']."'", $connect) or die(mysql_error());
          $infocar=mysql_fetch_assoc($query_car_id);

Isto vai muito provavelmente dar o mesmo resultado, acho que tens demasiadas querys e tem que ver que a a 1 query pode returnar varios valores, mas tu so' estas a apanhar o primeiro registo.

#9 PF2G

PF2G

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 17 de Agosto de 2012 - 16:36

Ja tentei só mexer com esta:
Código (PHP):
$query_car_id=mysql_query("SELECT * FROM cars WHERE id_owner='".$id_user['id_user']."'", $connect) or die(mysql_error());
                  $car_id=mysql_fetch_assoc($query_car_id);

Mas não estou a ver como consigo o id_carro

#10 joaocasta

joaocasta

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 444 mensagens

Publicado 17 de Agosto de 2012 - 16:38

acho q podes fazer dois where.

#11 pikax

pikax

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2497 mensagens

Publicado 17 de Agosto de 2012 - 16:38

Código (PHP):
$query_car_id=mysql_query("SELECT * FROM cars WHERE id_owner='".$id_user['id_user']."'", $connect) or die(mysql_error()));
$row = mysql_fetch_row($query_car_id);
$carid = $row["id_car"];


#12 PF2G

PF2G

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 17 de Agosto de 2012 - 16:47

Não aparece nada. E se fizer:
Código (PHP):
<?php
          $query_id_user=mysql_query("SELECT * FROM civil_users WHERE nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."'", $connect) or die(mysql_error());
          $id_user=mysql_fetch_array($query_id_user);
         
          $query_car_id=mysql_query("SELECT * FROM cars WHERE id_owner='".$id_user['id_user']."'", $connect) or die(mysql_error());
          $row = mysql_fetch_array($query_car_id);
          $car_id = $row["id_car"];
         ?>

Dá-me a mesma treta mas é a info do 1º registo

#13 pikax

pikax

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2497 mensagens

Publicado 17 de Agosto de 2012 - 16:55

Código (PHP):
$result = mysql_query("SELECT c.* FROM cars c,civil_users cu WHERE (nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."') AND c.id_owner = cu.nif_user");

while($row = mysql_fetch_row($result))
{
  echo "<h1>".$row["id_car"]."</h1>"; //imprime o id_car
  print_r($row); //imprime todos os campos
  echo "<br><br><br>"; //explicito!

  //codigo para mostrar os registos...
}
 


EDIT: corrigir erros no codigo

Editado por pikax, 17 de Agosto de 2012 - 17:08.


#14 PF2G

PF2G

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 17 de Agosto de 2012 - 17:04

Ei man que complicação. Dá a mesma

#15 pikax

pikax

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 2497 mensagens

Publicado 17 de Agosto de 2012 - 17:10

Ver MensagemPF2G, em 17 de Agosto de 2012 - 17:04, disse:

Ei man que complicação. Dá a mesma

Complicacao???? Complicacao era o que estavas a fazer.

Era melhor usar joins, mas previ que ainda te ia confundir mais...

Se fizeste copy&paste do meu codigo e nao te apareceu nenhum erro,  e' melhor activares os erros no PHP, o codigo tinha uns erros, experimenta agr:

Ver Mensagempikax, em 17 de Agosto de 2012 - 16:55, disse:

Código (PHP):
$result = mysql_query("SELECT c.* FROM cars c,civil_users cu WHERE (nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."') AND c.id_owner = cu.nif_user");

while($row = mysql_fetch_row($result))
{
  echo "<h1>".$row["id_car"]."</h1>"; //imprime o id_car
  print_r($row); //imprime todos os campos
  echo "<br><br><br>"; //explicito!

  //codigo para mostrar os registos...
}
 


EDIT: corrigir erros no codigo


#16 yoda

yoda

    Stack Overflow

  • Moderador
  • PipPipPipPipPipPipPip
  • 5520 mensagens

Publicado 17 de Agosto de 2012 - 19:14

Ver Mensagemjoaocasta, em 17 de Agosto de 2012 - 14:52, disse:

PF2G nao sei se reparaste mas esqueceste-te de colocar ";" em todos os echos que fizeste...

Não é mandatório.

@PF2G,

Analisa bem a tua dúvida, porque ninguém te vai dar a solução pronta a usar. Até agora não tens participado muito a tentar resolvê-la, pelo que me parece (copiar e colar código não é resolver).

#17 taviroquai

taviroquai

    Unsigned User

  • Membro
  • PipPipPipPipPipPip
  • 1627 mensagens

Publicado 18 de Agosto de 2012 - 00:57

Ver MensagemPF2G, em 17 de Agosto de 2012 - 16:19, disse:

Código (PHP):
<?php
          $query_id_user=mysql_query("SELECT * FROM civil_users WHERE nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."'", $connect) or die(mysql_error());
          $id_user=mysql_fetch_array($query_id_user);

          $query_car_id=mysql_query("SELECT * FROM cars WHERE id_owner='".$id_user['id_user']."'", $connect) or die(mysql_error());
          $car_id=mysql_fetch_assoc($query_car_id);

          $query_infocar=mysql_query("SELECT * FROM cars WHERE id_car='".$car_id['id_car']."'", $connect) or die(mysql_error());
          $infocar=mysql_fetch_assoc($query_car_id);
         ?>

        <!-- hidden inline form -->
         <div id="login-box" class="login-popup">
         <a href="#" class="close"><img src="images/close_pop.png" class="btn_close" title="Close Window" alt="Close" /></a>
           <form method="post" class="signin" action="edit_car.php">
           <fieldset class="textbox">
                <label class="username">
                 <span>Matrícula:<?php echo $infocar['id_car']; ?></span>
                 <input type="text" id="username" name="matricula_info" value="<?php echo $infocar['matricula_car']; ?>" />
                </label>

                <label class="password">
                 <span>Apólice:</span>
                 <input type="text" id="password" name="apolice_info" value="<?php echo $infocar['apolice_seg']; ?>" />
                </label>

                <input class="button" type="submit" name="edit_car_info" value="Editar"/>
           </fieldset>
           </form>
         </div>

Tenho aqui 3 registos.

Se eu quiser editar qualquer que seja aparece-me a info do 2º registo.

Vários problemas:

1. Não vejo código que indica o envio da identificação do carro quando clicas no "editar". Envias os dados por Ajax? Estás a enviar correctamente? Já viste no firebug?
2. também não vejo onde recebes o POST/GET da identificação do carro que envias-te no ponto 1
3. Claro, tens 3 registos mas só estás a obter 1 registo com $infocar=mysql_fetch_assoc($query_car_id);

Ver MensagemPF2G, em 17 de Agosto de 2012 - 16:47, disse:

Código (PHP):
<?php
          $query_id_user=mysql_query("SELECT * FROM civil_users WHERE nif_user='".$_SESSION['username']."' OR email_user='".$_SESSION['username']."'", $connect) or die(mysql_error());
          $id_user=mysql_fetch_array($query_id_user);

          $query_car_id=mysql_query("SELECT * FROM cars WHERE id_owner='".$id_user['id_user']."'", $connect) or die(mysql_error());
          $row = mysql_fetch_array($query_car_id);
          $car_id = $row["id_car"];
         ?>

4. nif = username ? email = username ? Isto está correcto?
5. Adiciona LIMIT 1 na 1º query onde procuras pelo utilizador (só para o caso de teres mais utilizadores que satisfação a condição WHERE
6. é aqui que supostamente deves selecionar (falta a coluna no WHERE) o carro com base na identificação que enviaste no ponto 1

Corrigi isso tudo!

Editado por taviroquai, 18 de Agosto de 2012 - 01:03.


#18 PF2G

PF2G

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 18 de Agosto de 2012 - 09:36

Ver Mensagemtaviroquai, em 18 de Agosto de 2012 - 00:57, disse:

Vários problemas:

1. Não vejo código que indica o envio da identificação do carro quando clicas no "editar". Envias os dados por Ajax? Estás a enviar correctamente? Já viste no firebug?
2. também não vejo onde recebes o POST/GET da identificação do carro que envias-te no ponto 1
3. Claro, tens 3 registos mas só estás a obter 1 registo com $infocar=mysql_fetch_assoc($query_car_id);



4. nif = username ? email = username ? Isto está correcto?
5. Adiciona LIMIT 1 na 1º query onde procuras pelo utilizador (só para o caso de teres mais utilizadores que satisfação a condição WHERE
6. é aqui que supostamente deves selecionar (falta a coluna no WHERE) o carro com base na identificação que enviaste no ponto 1

Corrigi isso tudo!

E usar o GET foi a primeira que experimentei, mas dá barraca por causa disto:
Código (PHP):
<td>
            <a href="#login-box" class="login-window">
                 <input class="button_edit" name="edit_car"  type="submit" value="Editar" />
            </a>
           </td>

Se eu acrescentar o GET não me dá nada.

E sim nif = username ? email = username está correto, por que o $_SESSION ou é o nif ou o email.

#19 joaocasta

joaocasta

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 444 mensagens

Publicado 18 de Agosto de 2012 - 10:04

Porque nao colocar um form?

#20 PF2G

PF2G

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 18 de Agosto de 2012 - 12:32

Não joaocosta.

O que eu tenho de fazer e peço que alguem me ajude, pois nao estou ver maneira, é fazer o GET sem que dê problemas com o form popup.

A maneira como fiz foi
Código (PHP):
<a href="?matr=<?php echo $car['matricula'] ?>#login-box">
(...)