Visualizzazione risultati 1 fino 14 di 14

Discussione: Problema, operazione per ogni utente

  1. #1
    Guest

    Predefinito Problema, operazione per ogni utente

    Ciao,
    ho bisogno di eseguire un operazione per ogni utente da diverse tabelle del db:
    Codice PHP:
    $query = "SELECT * FROM utenti";
    $result = mysql_query($query);
    while (
    $array = mysql_fetch_array($result)) {

    $username = $array[1]; // lista utenti, se non inserisco il secondo while all' interno me li marca tutti.. (es, 1234)

    $query = "SELECT * FROM tabella WHERE username='$username'";
    $result = mysql_query($query);
    while (
    $array = mysql_fetch_array($result)) {
    $valore = $array[1]; //valore per ogni utente
    echo "$valore";

    }

    }
    Il problema é che esegue lo script solo per il primo utente della tabella,...

    in teoria nel while l' operazione non dovrebbe essere fatta a ciclo per ogni utente???

    Grazie dell' aiuto, ciaooo

  2. #2
    Guest

    Predefinito

    Ma guarda che ti basta solo una query:

    UPDATE tabella SET colonna='nuovovalore'


    Ciao!

  3. #3
    Guest

    Predefinito

    Codice PHP:
    $query = "SELECT * FROM utenti";
    $result = mysql_query($query);
    while (
    $array = mysql_fetch_array($result)) {

    $username = $array[1]; // lista utenti, se non inserisco il secondo while all' interno me li marca tutti.. (es, 1234)

    $query = "SELECT * FROM risorse WHERE username='$username'";
    $result = mysql_query($query);
    while (
    $array = mysql_fetch_array($result)) {

    $metallo = $array[1];

    $query = "SELECT * FROM infrastrutture WHERE username='$username'";
    $result = mysql_query($query);
    while (
    $array = mysql_fetch_array($result)) {
    $ind_metallo = $array[2];
    }

    $add_metallo = $ind_metallo * 20 + 10;
    $metallotot = $metallo + $add_metallo;
    echo
    "$metallotot";

    }

    $query = "UPDATE risorse SET metallo='$metallotot' WHERE username='$username'";
    if (
    mysql_query($query)) {

    }

    }
    Vorrei che questa operazione venga fatta per ogni utente, ma non capisco il perche viene effettuata solo con il primo della tabella!
    Mi sai aiutare?

  4. #4
    Guest

    Predefinito

    Se ho capito bene l'operazione matematica che vuoi fare:

    Codice PHP:
    mysql_query("UPDATE risorse SET metallo=(metallo*20)+10 WHERE username='$username'");
    (moltiplico il metallo attuale per 20 e aggiungo 10)


    Ciao!

  5. #5
    Guest

    Predefinito

    si, ma voglio che si aggiorni per ogni utenti per ogni dato che ricavo dal secondo while....

  6. #6
    L'avatar di Luffio
    Luffio non è connesso Utente attivo
    Data registrazione
    02-07-2006
    Messaggi
    439

    Predefinito

    Può darsi che l'errore sia negli while. Mi chiedo perchè metti un while nell'altro, visto che sono indipendenti e che quello interno viene eseguito un numero NxN volte anzichè N volte...
    L'errore è che hai dato lo stesso nome "array" a due variabili diverse inglobate. Cambia nome a una delle due.
    Luffio Web Site, Luffio's personal site
    Age Of Empires GIF, sito per la creazione di GIF animate di Age of Empires
    Clan italiano di Age of Empires The Conquerors, uno dei più vecchi ancora attivi

  7. #7
    Guest

    Predefinito

    Non è un errore di sintassi ma di precedura.

    Codice PHP:
    $query = "SELECT * FROM infrastrutture WHERE username='$username'";
    $result = mysql_query($query);
    while (
    $array = mysql_fetch_array($result)) {
    mysql_query("UPDATE risorse SET metallo=(".$array[2]."*20)+10 WHERE username='$username'");
    }

    Ciao!

  8. #8
    Guest

    Predefinito

    ok, modificato, ma va sempre solo per il primo utente:

    Codice PHP:
    $query = "SELECT * FROM utenti";
    $result = mysql_query($query);
    while (
    $array = mysql_fetch_array($result)) {

    $username = $array[1];

    $query = "SELECT * FROM risorse WHERE username='$username'";
    $result = mysql_query($query);
    while (
    $array = mysql_fetch_array($result)) {

    $metallo = $array[1];
    }

    $query = "SELECT * FROM infrastrutture WHERE username='$username'";
    $result = mysql_query($query);
    while (
    $array = mysql_fetch_array($result)) {
    mysql_query("UPDATE risorse SET metallo=$metallo + (".$array[2]."*20)+10 WHERE username='$username'");
    }


    }

  9. #9
    Guest

    Predefinito

    AH, ma tu non passi lo username come variabile?

    Allora prova così:
    Codice PHP:
    $q=mysql_query("SELECT u.*,r.* FROM utenti AS u
    LEFT JOIN risorse AS r ON u.username=r=username"
    );
    while(
    $arr=mysql_fetch_assoc($q)){
    mysql_query("UPDATE risorse SET metallo=metallo + (".$arr['metallo']."*20)+10 WHERE username='".$arr['username']."'");
    }

    Ciao!

  10. #10
    Guest

    Predefinito

    mi da errore:

    mysql_fetch_assoc(): supplied argument is not a valid MySQL...


    come mai? non capisco perche poi hai messo questo:

    $q=mysql_query("SELECT u.*,r.* FROM utenti AS u LEFT JOIN risorse AS r ON u.username=r=username");

    in poche parole, cosa significa? se me lo spieghi forse riesco a risolvere... grazie dell'aiuto....

  11. #11
    Guest

    Predefinito

    Ops, sostituisci r=username con r.username

    Quella è una semplice query con un JOIN al suo interno, in modo, per così dire, da incrociare le due tabelle facendo combaciare i record di una con i record dell'altra in base ad un parametro (in questo caso il campo username, comune ad entrambe).


    Ciao!

  12. #12
    Guest

    Predefinito

    si puo associare anche una terza tabella?

  13. #13
    Guest

    Predefinito

    Se serve ed è possibile, sì.


    Ciao!

  14. #14
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Stai sbagliando ad usare le istruzioni PHP per interrogare il database, nel senso che stai "riciclando" le variabili $query, $result e $array all'interno del ciclo più interno. Ne consegue che, tornando all'inizio del ciclo esterno, queste non conterranno più i riferimenti di partenza, ma quelli ottenuti nell'ultima iterazione.

    Soluzione: ti basta modificare i nomi di queste variabili all'interno del ciclo (ad esempio $query1, $result1 e $array1)...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

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