Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    JOIN non funziona [PHP/SQL]?

    Buon giorno a tutti, il mio problema è:
    devo verificare in due tabelle DatiCliente e LoginCLiente se l'utente esiste.
    DatiCliente ha tra tutti i campi id_DatiCliente e Login
    LoginCliente ha tra tutti i campi Id_LoginCliente e id_DatiCliente

    ho fatto una JOIN cosi:
    $verificaLogin=$_POST[login];
    $Risultato = mysql_query
    ("SELECT DatiCliente.id_DatiCliente,
    DatiCliente.login as log,
    LoginCliente.id_DatiCliente
    FROM (DatiCliente LEFT JOIN LoginCliente ON
    DatiCliente.id_DatiCliente = LoginCliente.id_DatiCliente)
    where DatiCliente.login ='$verificaLogin'");


    echo $Risultato."
    ";

    while (mysql_fetch_row($Risultato)) {

    //qui confronta la stringa passata per ogni riga presente
    //nel campo login della tabella interessata LoginCliente
    $login_db = mysql_result($Risultato,'log') or die("Non riesco a capire su quale tabella cercare!!");
    echo $login_db."
    ";
    }

    Vi dico da subito che eseguita la JOIN su un db Access funziona qui non capisco perchè,
    $login_db mi restituisce il valore dell'ID invece che l'effettivo valore del campo 'log' che
    è una stringa, la login appunto.

    Sapete dirmi per favore qual'è il problema?
    Grazie a tutti....

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Poco chiara la parte dopo la query.

    vediamo: Aggiungi le apici qui sotto

    $verificaLogin=$_POST['login'];

    Perchè devi passare tutto il db, quando dovresti avere identificato lo user con la JOIN?

    Nella SELECT ai due campi con lo stesso nome. Dovresti usare un alias per il dato estratto.

    In $risultato hai l'identificativo della risorsa (resource #) a che ti serve stamparlo?

    Dopo farei così:
    codice:
    if(mysql_num_rows($risultato) == 1) 
      {
      $row = mysql_fetch_assoc($Risultato);
      $login_db = $row['log'];
      echo "
    $login_db
    "; 
      } 
         elseif(mysql_num_rows() > 1) 
         {
         echo "sono troppi";
         } 
            else {
            echo "Dati assenti dal db";
            }
    Con beneficio di aver capito il tuo problema.

  3. #3
    come hai fatto te... mi da lo stesso problema... non riesce
    sia con l'IF che con il WHILE è uguale...

    a me sembra strano.. però mi sorge un dubbio...ed è questo:

    in Access ho relazionato le due tabelle manualmente nella Tabella LoginCliente dove ho i campi che mi interessano Id_LoginCliente e Id_DatiCliente,dove il primo è una Chiave Primaria,il secondo è una Chiave Esterna... ma in MYSQL ho capito solo come si mette la chiave Primaria ma non so come si mette la Chiave esterna e come si relazionano manualmente due Tabelle...

    E' possibile che il mal funzionamento della JOIN sia dovuto a questo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    La relazione la fai con la JOIN:

    ON D.id_DatiCliente = L.id_DatiCliente

    codice:
    $verificaLogin=$_POST['login'];
    $Risultato = mysql_query(
    "SELECT D.id_DatiCliente,
    D.login as log,
    L.id_DatiCliente
    FROM DatiCliente AS D
    LEFT JOIN LoginCliente AS L
    ON D.id_DatiCliente = L.id_DatiCliente
    where D.login ='$verificaLogin'")
    OR DIE(mysql_error());
    
    if(mysql_num_rows($Risultato) == 1)
      {
      $row = mysql_fetch_assoc($Risultato);
      $login_db = $row['log'];
      echo "
    $login_db
    "; 
      } 
         elseif(mysql_num_rows() > 1) 
         {
         echo "sono troppi";
         } 
            else {
            echo "Dati assenti dal db";
            }
    Questo deve funzionare. Prima avevo messo $risultato con l a r minuscola.

    Qualcosa deve stampare. posta cosa stampa con copia e incolla.

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Codice PHP:
    $verificaLogin=$_POST[login]; 
    $Risultato mysql_query 
    ("SELECT DatiCliente.id_DatiCliente, 
    DatiCliente.login as log, 
    LoginCliente.id_DatiCliente 
    FROM (DatiCliente LEFT JOIN LoginCliente ON 
    DatiCliente.id_DatiCliente = LoginCliente.id_DatiCliente) 
    where DatiCliente.login ='
    $verificaLogin'") or die(mysql_error()); 

    while (
    $riga mysql_fetch_assoc($Risultato)) { 

    //qui confronta la stringa passata per ogni riga presente 
    //nel campo login della tabella interessata LoginCliente 
    $login_db $riga['log']);
    echo 
    $login_db."
    "


    Così dovrebbe funzionare, ma non ha un gran senso lo stesso, perché stampi un campo che deve essere sempre uguale, visto che l'hai messo nella where

  6. #6
    vi ringrazio... soltanto che mi avete dato l'idea che bastava cambiare e mettere al posto dello zero l'uno oppure inserire !=0 :
    prima cosi nn funzionava
    -->if ((strcmp($verificaLogin, $login_db)) == 0) {

    adesso cosi funziona
    --> if ((strcmp($verificaLogin, $login_db)) == 1) {
    oppure
    --> if ((strcmp($verificaLogin, $login_db)) != 0) {


    while (mysql_fetch_row($Risultato)) {
    //qui confronta la stringa passata per ogni riga presente
    //nel campo login della tabella interessata LoginCliente
    $login_db = mysql_result($Risultato,'log') or die("Non riesco a capire su quale tabella cercare!!");

    if ((strcmp($verificaLogin, $login_db)) == 1°) {
    // se trova qualcosa setta la variabile a true
    $esiste_utente = true;
    }
    }

    Vi ringrazio per la vostra cortesia ciao ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.