Visualizzazione risultati 1 fino 8 di 8

Discussione: Ciclo di un array con azioni diverse

  1. #1
    Guest

    Exclamation Ciclo di un array con azioni diverse

    Salve a tutti, intanto chiedo scusa per il titolo ma non sapevo come scriverlo in maniera efficace.
    Venendo al dunque, io ho la necessità di fare un'azione diversa a seconda del valore di alcune variabili, mi spiego meglio:

    - Ho 10 varabili salvate su db che rappresentano id unici,
    - Di queste variabili mi basta sapere se il valore è uguale o maggiore di zero,
    - Se il valore di queste variabili è uguale a zero devo mostrare una determinata immagine (una X rossa),
    - Se il valore è invece maggiore di zero devo mostrare un'altra immagine (un TICK verde seguito dal valore della variabile),

    presumo si tratti di un ciclo ma non riesco proprio a venirne fuori , idee?

    Grazie anticipatamente

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,651

    Predefinito

    Dipende se usi mysqli, pdo o sqlite.

    Con mysqli:

    Codice PHP:
    $mysqli = new mysqli('localhost', 'gbtchiaravalle','', 'my_gbtchiaravalle');

    if (
    mysqli_connect_errno())
    echo
    'errore di connessione: '.mysqli_connect_error();

    $result = $mysqli->query('SELECT * FROM tabella');

    while(
    $row = $result->fetch_array())
    {
    if(
    $row['colonna_tabella'] == 0)
    echo
    '<img src="immagine_rossa.png">';
    else
    #if($row['colonna_tabella'] > 0)
    echo '<img src="immagine_verde.png">';
    #else
    #echo 'Numero negativo...';
    }
    Commentato con cancelletto se devi gestire anche i numeri negativi

    Ciao!
    Ultima modifica di alemoppo : 25-11-2013 alle ore 02.47.43

  3. #3
    Guest

    Predefinito

    Ciao, grazie per la risposta! ;) era più o meno quello che cercavo ma c'è un problema: i 10 id sono salvati in campi diversi ad esempio id1, id2, id3 etc, quindi per poterli ciclare tutti devo mettere un altro ciclo dentro il while?

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    In teoria, si.
    Se vuoi una mano, posta lo schema della relazione (tabella); giusto per capire quanti campi ha la tabella e il nome di ogni campo.

  5. #5
    Guest

    Predefinito

    Eccomi, scusate il ritardo nella risposta.
    Allora io ho questa tabella "creazione_clan" e i campi sono:

    -id
    -nome_clan
    -id_membro1
    -id_membro2 (etc fino a 10)
    -confirm_membro1
    -confirm_membro2 (etc fino a 10)
    -id_capoclan

    il mio obbiettivo è questo: il clan può essere creato solo ci sono altri 10 membri(id_membro1-10) che hanno dato la loro conferma(confirm_membro1-10) quindi vorrei mostrare un TICK VERDE se l'invito al membro è stato invitato e quest'ultimo ha accettato, una X ROSSA nel caso in cui o il campo id_membro1-10 non è stato settato(e quindi mostrare un input per settarlo) o nel caso in cui il campo id_membro1-10 è stato settato ma il membro in questione non ha dato la sua conferma(quindi il cambio confirm_membro1-10 è uguale a zero) e quindi mostrare di nuovo l'input per cambiare membro. Una volta che tutti i campi sono settati correttamente settare una flag (ad esempio $controlli_campi uguale 1) e quindi dare l'occasione al capo clan di finire la creazione del clan.
    Ora un mio amico mi ha aiutato un pochino ma solo in parte:

    Codice PHP:
    <?
    echo "<pre>";
    for(
    $k=1;$k<=10;$k++){
    $n[]="id_membro".$k;
    }
    $nome=implode(", ",$n);//risulta: nome1, nome2,....nome10
    $query="SELECT $nome FROM creazione_clan WHERE id_capoclan = $id";
    var_dump($query);//come viene la query
    $ris=mysql_query($query);
    if(
    $ris){
    while(
    $riga =mysql_fetch_assoc($ris)){
    $id=$riga['$nome'];
    unset(
    $riga['$nome']);//elimino $riga['id'] per non trovarla in $letto[$id]
    $letto[$id]=$riga;
    }
    }else{
    echo
    "errore";
    }
    var_dump($letto);//questo per veder come viene l'array $letto
    foreach($letto as $ch_0 => $val_ar){
    foreach(
    $val_ar as $ch_cam =>$val){
    if(
    $val == 0){
    echo
    "$ch_0) $ch_cam: <img src=\"X_rossa.jpg\"><br />";
    }else{
    echo
    "$ch_0) $ch_cam: <img src=\"X_verde.jpg\"><br />";
    }
    }
    }
    echo
    "</pre>";
    ?>
    questo mostra correttamente X ROSSA e TICK VERDE ma non riesco ad implementare il controllo del campi confirm_membro1-10 e di conseguenza settare il flag ($controlli_campi = 1) per poter andare avanti.

    Idee?
    Spero di essere stato chiaro nella spiegazione!
    Ultima modifica di gbtchiaravalle : 27-11-2013 alle ore 15.43.41

  6. #6
    Guest

    Predefinito

    Dopo una settimana senza risposta, tra un aiuto e un altro di amici (che non possono aiutarmi sempre), si è arrivati a questo codice:
    Codice PHP:
    <?
    require('db_config.php');

    echo
    "<pre>";
    for(
    $k=1;$k<=10;$k++){
    $n[]="id_membro".$k;
    $c[]="confirm_membro".$k;
    }
    $nome=implode(", ",$n);
    $conferma=implode(", ",$c);
    $query="SELECT id, $nome, $conferma FROM creazione_clan WHERE id_capoclan = 6";
    var_dump($query);
    $ris=mysql_query($query);
    var_dump(mysql_num_rows($ris));
    if(
    mysql_num_rows($ris) > 0){
    while(
    $riga =mysql_fetch_array($ris)){
    var_dump($riga);
    $id=$riga['id'];
    for(
    $k=1;$k<=10;$k++){
    $nom="id_membro".$k;
    $con="confirm_membro".$k;
    $la[]=$riga[$nom]."*".$riga[$con];
    var_dump($la);
    }
    $letto[$id]=implode("|",$la);
    }
    }else{
    echo
    "errore";
    }
    var_dump($letto);
    foreach(
    $letto as $id => $val){
    $membro=explode("|",$val);
    foreach(
    $membro as $c => $val_1){
    $dati=explode("|",$val_1);
    if(
    $dati[0] == 0 && $dati[1] != 1){
    $val_confirm[$id]=0;
    echo
    "$id: <img src=\"X_rossa.jpg\"><br />";
    }else{
    $val_confirm[$id]=1;
    echo
    "$id: ".$dati[0]."<img src=\"X_verde.jpg\"><br />";
    }
    }
    }
    var_dump($dati[1]);
    echo
    "</pre>";
    ?>
    funziona più o meno come dovrebbe tranne per un piccolo particolare: lo script mostra un tick verde a prescindere dal valore di confirm_membro1-10 e infatti nella parte di codice " if($dati[0] == 0 && $dati[1] != 1){" confirm_membro1-10 è rappresentato da $dati[1] ma con il var_dump si vede che risulta NULL quindi è per quello che viene ignorato, idee a riguardo?
    P.S: nel codice sono sparsi qua e là var_dump proprio per aiutare a trovare gli errori.
    Grazie anticipatamente

  7. #7
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,651

    Predefinito

    Non capisco il senso di effettuare l'explode() due volte con lo stesso separatore!

    Mi spiego:
    Mettiamo che $letto sia:
    Codice:
    primo|secondo|terzo|quarto|quinto|...
    .
    Dopo:
    Codice PHP:
    $membro=explode("|",$val);
    $membro sarà:
    Codice:
    Array('primo', 'secondo', 'terzo', 'quarto', 'quinto', '...')
    Poi, con il foreach prendi ogni elemento e rieffettui l'explode con "|":
    Codice PHP:
    foreach($membro as $c => $val_1){
    $dati=explode("|",$val_1);
    $val_1 non contiene il carattere "|", perché lo hai ricavato facendo l'explode proprio grazie a quel carattere. Quindi $dati[1] non so come lo hai pensato.

    Ciao!
    Ultima modifica di alemoppo : 03-12-2013 alle ore 13.49.05

  8. #8
    Guest

    Predefinito

    Premetto che i su questo codice ci ho capito ben poco(infatti per questo ho chiesto aiuto a destra e sinistra), dopo quello che mi hai scritto come dovrei modificare il codice in modo che funzioni? $dati[1] dovrebbe corrispondere al valore di confirm_membro1-10...

Regole di scrittura

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