Visualizzazione risultati 1 fino 12 di 12

Discussione: controllo tra due tabelle

  1. #1
    provact non è connesso Utente giovane
    Data registrazione
    23-12-2009
    Messaggi
    40

    Predefinito controllo tra due tabelle

    Ciao ragazzi
    Parto con il presupposto che lo script funziona, ma ho un problema di "sfumatura".
    Cerco di farla breve: ho due tabelle (Utente - Chat).
    Nella tabella chat estrapolo il campo "Mittente" (ovvero colui che scrive in chat).

    Ho creato dunque la possibilità di SALVARE il contenuto della chat dalle 00:00 alle 23:59.
    Il problema di sfumatura di cui parlo avviene in questo momento, in quanto obiettivo mio è sì quello di far salvare il contenuto della chat ma solo se - tra i tantissimi record della stanza specifica (tipo 800 messaggi al giorno) - almeno uno è di $Login (il sito ha 10 "stanze").

    Ho agito in questo modo:

    Codice PHP:
    <?


    $MySql
    = "SELECT * FROM Mappa WHERE ID = $ID";
    $Result = mysql_query($MySql);
    $rs = mysql_fetch_array($Result);
    $NomeStanza = $rs[´Breve´];
    $rs -> close;

    echo
    "<center><h3><font color=´white´><b>Salva Stanza $NomeStanza</b></font></h3></center><hr>";

    $curdate = date(´Y-m-);
    $MySql = "SELECT * FROM Chat WHERE Stanza = $ID AND OraAzione <= blabla and OraAzione >= bla bla()";
    $Result = mysql_query($MySql);

    while (
    $rs = mysql_fetch_array($Result)) {
    $Mittente = $rs["Mittente"];
    if (
    $Mittente != $Login) {
    echo
    ´nun puoi vedé sta chat, ahò!´;
    } else {
    ###CODICE DEI LOG AUTORIZZATO###
    In questo modo il codice funziona tranquillamente, con una piccola problematica che cerco di schematizzare:

    - A e B scrivono nella chat ID 23 (Io sono loggato con B)
    - A scrive
    - B (Io) scrive
    - Clikko e i miei post li visualizzo
    - Quelli di A no (compare la scritta "nun puoi vedé sta chat, ahò!")

    La logica è giustissima (visualizzo solo quando $login == $mittente). Obiettivo mio, come già spiegato, è basato sull'if (se tra gli 800 risultati ALMENO 1 è $Login == $Mittente, allora mi fai vedere tutto).
    Mettendo l'if prima del ciclo while, il risultato dell'if è sempre "!=".

    Non so se sono stato chiaro.

  2. #2
    Guest

    Predefinito

    Non so se ho capito bene, ma qualcosa del genere potrebbe andare bene?

    Codice PHP:
    <?


    $MySql
    = "SELECT * FROM Mappa WHERE ID = $ID";
    $Result = mysql_query($MySql);
    $rs = mysql_fetch_array($Result);
    $NomeStanza = $rs[´Breve´];
    $rs -> close;

    echo
    "<center><h3><font color=´white´><b>Salva Stanza $NomeStanza</b></font></h3></center><hr>";

    $curdate = date(´Y-m-);
    $MySql = "SELECT * FROM Chat WHERE Stanza = $ID AND OraAzione <= blabla and OraAzione >= bla bla()";
    $Result = mysql_query($MySql);

    $query = mysql_num_rows(mysql_query("SELECT * FROM Chat WHERE Mittente = '$Login' "));
    while (
    $rs = mysql_fetch_array($Result)) {
    $Mittente = $rs["Mittente"];
    if(
    $query > 0){
    //mostro tutto
    }else{
    echo
    ´nun puoi vedé sta chat, ahò!´;
    }

    Così per ogni messaggio ti viene fuori "non puoi vedere", se vuoi che venga solo una volta metti
    Codice PHP:
    if($query > 0){
    while(
    blabla){
    blabla
    }
    }else{echo
    "Non puoi vedere";}
    Ultima modifica di competenzepertutti : 25-11-2015 alle ore 15.07.47

  3. #3
    provact non è connesso Utente giovane
    Data registrazione
    23-12-2009
    Messaggi
    40

    Predefinito

    Ti ringrazio per la risposta.
    Esattamente, hai centrato in pieno.
    Se in quell'ID $Mittente è == $Login almeno 1 volta ( > 0), può vedere il ciclo while; altrimenti no.
    E anche il tuo codice rispecchia pienamente (onestamente non avevo pensato al "mysql_num_rows"

    Attuandolo, tuttavia, il risultato è il medesimo.
    Mi stampa "nun puoi vedè ecc ecc".
    Ultima modifica di provact : 25-11-2015 alle ore 15.51.27

  4. #4
    Guest

    Predefinito

    Puoi mettere il codice che usi per creare $Login?

  5. #5
    provact non è connesso Utente giovane
    Data registrazione
    23-12-2009
    Messaggi
    40

    Predefinito

    In realtà la creazione di $Login avviene mediante una serie di incroci (nel codice qui sotto dopo session_start)

    All'interno di questo script nello specifico, valorizzo $Login in questo modo:

    Codice PHP:
    <? session_start();
    include (
    'inc/parametri.inc.php');
    include (
    'inc/controllo.php');
    include (
    'inc/open2.php');
    include (
    "inc/controlloesilio.php");

    function
    Tempo($tim) {
    return(
    strftime("%H:%M", strtotime($tim)));
    }


    $ID=$_GET['ID'];
    $Login=$_SESSION['Login'];

    include (
    'inc/header.html.inc.php');
    ?>
    Il tutto dovrebbe essere valorizzato correttamente perché - vado a deduzione - se io dovessi mettere:

    Codice PHP:
    if ($Mittente != $Login) {
    echo
    'niente'; } else {
    ## CODICE LOG ##
    }
    In questo caso io vedrei solo i miei scritti e non quelli di B (quelli di B vedrei "niente").
    Ultima modifica di provact : 25-11-2015 alle ore 19.48.45

  6. #6
    Guest

    Predefinito

    Mah......
    E sei sicuro che ci sia un record nel db con mittente=$Login? E che $Login contenga realmente ciò che vuoi?

  7. #7
    provact non è connesso Utente giovane
    Data registrazione
    23-12-2009
    Messaggi
    40

    Predefinito

    Guarda, tecnicamente sì.
    Cerco di spiegarti tramite immagini.

    1) Questa è la chat principale con due persone (io loggato con Lii)
    http://i68.tinypic.com/8yz8rm.jpg

    2) Salvando questa sessione, avendo io scritto, dovrei esser in grado di veder tutto. Invece con la tua soluzione, questo è il risultato:
    http://i63.tinypic.com/353avih.jpg

    3) Usando invece:
    Codice PHP:
    while ($rs = mysql_fetch_array($Result)) {
    $Mittente = $rs["Mittente"];
    if (
    $Mittente != $Login) {
    echo
    ´niente!´;
    } else {
    ###CODICE DEI LOG AUTORIZZATO###
    esce questo:
    http://i68.tinypic.com/x4rmdw.jpg

  8. #8
    Guest

    Predefinito

    Vedo solo la prima immagine

  9. #9
    provact non è connesso Utente giovane
    Data registrazione
    23-12-2009
    Messaggi
    40

    Predefinito

    Citazione Originalmente inviato da competenzepertutti Visualizza messaggio
    Vedo solo la prima immagine
    1)
    2)
    3)

  10. #10
    Guest

    Predefinito

    Significa che la query
    Codice PHP:
    $query = mysql_num_rows(mysql_query("SELECT * FROM Chat WHERE Mittente = '$Login' "));
    non trova records che hanno come mittente $Login...
    Quindi o il problema è in $Login che potrebbe non contenere le informazioni giuste, o un errore nel salvataggio delle informazioni nel database...
    Hai controllato con phpmyadmin se i dati vengono salvati correttamente?
    Controlla anche se il campo si chiama "Mittente", magari hai messo "mittente".

  11. #11
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Ciao, intanto devi rivedere l'intera struttura del database. Se una cosa non rispecchia tutto quello che si è prefissati allora non funziona :). A te piacerebbe mangiare la pasta un pò cruda? (la metafora è equivalente a "che lo script funziona"). In poche righe di codice vedo molti errori tra cui: l'apice per php e html è solo questo ', Se fai delle SELECT si chiama cerca stanza e non salva stanza,AND deve essere scritto in maiuscolo, i confronti maggiore uguale o minore uguale si fanno tra interi e non 2015-11-28 che è una stringa,questo codice non esiste
    Codice PHP:
    $rs -> close;
    credo che volevi utilizzare mysql_close ma devi utilizzarlo solo all'ultima SELECT e per la connessione a mysql non per $rs, in quel contesto visto che hai tanti dati puoi utilizzare mysql_ free_result. Posta solo il codice che estragga i dati per una comprensione ottimale. Dunque se a te piace la pasta cruda io ti porgo le mie scuse e ti dico che il codice è corretto!! Se vuoi essere aiutato mi devi permettere di farlo. ciao 'mbare ct.
    Ultima modifica di darbula : 28-11-2015 alle ore 11.44.53

  12. #12
    Guest

    Predefinito

    Ma scusa ehh, adesso non è per fare il cattivo ma mi dovresti spiegare che senso ha questo:

    Codice PHP:

    $Login
    =$_SESSION['Login'];
    Cosa stai cercando di fare??Parto dal presupposto che la query non funziona, ma non funziona secondo me per quell'$_SESSION['Login'] non è definito...hai definito il login da qualche parte e lo hai inserito nella Session?Quando l'utente fa il login e crei la session quali chiavi passi alla session?
    Per tagliare la testa al toro sotto quella riga scrivimi questo:

    Codice PHP:
    print'<pre>';var_dump($_SESSION);print'</pre>';
    C'è login come chiave dentro il var_dump?Se si che valore ottieni quando tu sei loggato?

    Hai scritto:

    In realtà la creazione di $Login avviene mediante una serie di incroci (nel codice qui sotto dopo session_start)

    All'interno di questo script nello specifico, valorizzo $Login in questo modo:

    Non puoi valorizzare una chiave in quel modo al massimo la valorizzera son

    Codice PHP:
    $_SESSION['Login']=$pincoPallo;
    quel modo di scrivere non ha senso se nella creazione di Sessione non hai immesso la chiave Login nell'array di sessione...La session è una struttura che crei tu....Comunque per vedere perchè un codice non funziona la cosa primaria è avere la sicurezza di quali variabili stai passando alla query...Quindi se non hai un debug nel IDE fa lo stesso ma devi fare dei print e vedere come sono valorizzate le tue variabili, io scommetto che quell'$_SESSION['Login'] non esiste...
    Qui non c'è un problema di query secondo me c'è un problema che non hai ben inteso cosa è una sessione e come si utilizza la sessione, la $_SESSION possiamo definirla una variabile di COMODO, non è come la $_SERVER ma è una variabile che unita a session_start() permette al programmatore di recuperare determinati dati dell'utente loggato per poi strutturare il codice in maniera consona a quel determinato login, tipo se è un utente o un amministratore qualsiasi cosa, ma sei tu che vai a crearti le variabili da inserire dentro la sessione...
    Ti faccio un esempio nel momento in cui un utente inserisce username e password e il PHP risponde OK lo user e la password esiste nella tabella utenti quindi puoi farlo entrare, in quell'istante io creo la Sessio e mi riprendo alcuni valori riferiti a quell'utente presente nel DB....Esempio sotto:

    Codice PHP:

    //------------------------VALORI DELL'UTENZA-----------
    //LA TABELLA UTENTI HA CAMPI USERNAME ID PROFILO E PASSWORD
    $user_browser = $_SERVER['HTTP_USER_AGENT'];//Anche se non lo metto nella SESSIONE ma lo impostiamo per la stringaLogin
    $idUtente=$id; //$id non è altro che l'id dell'utente recuperato nella BIND DELLA SELECT
    $profilo=$profilo; //$Profilo non è altro che il profilo utente salvato nella tabella utenti RECUPERATO SEMPRE NELLA BIND
    $username = $usernameDB; //COME ID E UTENTE USERNAME E' IL CAMPO USERNAME NELLA TABELLA UTENTI
    $stringaLogin = hash('md5', $password.$user_browser);//QUESTA E' una stringa di login ovviamente unica che creo per comodità che mi può servire dentro il software
    //------------------------------------------------------
    //Imposto un array che passero alla session
    $datiUtente = array('idUtente'=>$idUtente,
    'username'=>$usernameDB,
    'profilo'=>$profilo,
    'stringaLogin' => $stringaLogin);
    //La mia sessione si chiama dati utente ed è un array con 4 chiavi e 4 valori
    $_SESSION['datiUtente']=$datiUtente;

    $msg = "|";
    $msg .="OK";
    $msg = str_replace("\n", "", $msg);
    $msg = str_replace("\r", "", $msg);
    print
    $msg;
    exit;
    per accedere alla session scriveremo $_SESSION['datiUtente']['profilo'] oppure $datiUtente=$_SESSION['datiUtente'] e poi $datiUtente['profilo']....
    Tu come accedi a quel Login e che valore recupera dalla tabella?
    Ultima modifica di fractalcosmo : 06-12-2015 alle ore 02.50.04

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •