Scheda progress

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
Buongiorno a tutti,

quello che vorrei ottenere e' complicato, cerchero' di spiegarmi bene con un esempio

ho un database con tabella actor con questi campi
nome
performer_aka
birthday
ecc..
totale 10 (ma sono di piu')

vorrei che venga visualizzato un progress nella scheda actor in base ai campi compilati,
se sono
10 visualizza 100% (completa),
5 visualizza 50% (incompleta)
zero o 1 (con nome) visualizza 1% (vuota)

e' possibile ottenere questo e come?

Grazie
 
Prova con questo codice COMPLETO E FUNZIONANTE....
PHP:
/**
* Created by phpS
* User: macus_adi
* Project Name: _zutils
* File: EntityCheck.php
* Path: EntityCheck
* Date: 31/05/2020
* Time: 11:31
*/

namespace Libraries;


class EntityCheck {

   public $data=[];

   public function __construct($data=[]) {
      $this->data=$data;
   }

   public static function factoryEntityCheck($data=[]){
      return (new self($data))->__init__()->data;
   }
   public function __init__(){
      foreach ($this->data as $k=>$v){
         $this->data[$k]['percentage']=$this->checkPercentage($k);
         $this->getText($this->data[$k]);
      }
      return $this;
   }

   private function checkPercentage($k){
      $in=0;
      foreach ($this->data[$k] as $items)(null!==$items || trim($items)!='')?$in++:null;
      return round(($in/count(array_keys($this->data[$k])))*100);
   }

   private function getText(&$data){
      ($data['percentage']==100)?$data['text_percentage']='completa':null;
      ($data['percentage']<=1 && !isset($data['text_percentage']))?$data['text_percentage']='(vuota)':$data['text_percentage']='(incompleta)';
   }

}

Per richiamarla basta questo codice FACILE DA COPIARE....
PHP:
print_r(\Libraries\EntityCheck::factoryEntityCheck($estrazione_database));

Naturalmente l'ho scritto in php perchè ti trovi qui altrimenti se lo vuoi live (lato client) è da implementare in js...
 
Ultima modifica:
macus_adi grazie ma non funziona :(

PHP:
Fatal error: Namespace declaration statement has to be the very first statement in the script in E:\OpenServer\domains\localhost\cinema\members\cinema.php on line 2

ti ricordo che ho Mysql 5.6 + Php 5.6

ho testato una soluzione alternativa che funziona a meta' (senza conteggio campi)

se funziona la posto

che tipo di campo devo impostare per inserire il valore 100?

in decimal massimo 65
 
ti ricordo che ho Mysql 5.6 + Php 5.6
Non ho effettuato query, e quel tipo di errore è dato dal fatto che hai copiato questo codice in una pagina già scritta e non l'hai messo (come logica vuole) nella directory Libraries.

Riassumendo tu mi stai dicendo che la libreria non funziona perchè tu hai copiato il codice in modo errato, in questo scenario non posso farci nulla...
Letteralmente tradotto l'errore: "L'istruzione di dichiarazione dello spazio dei nomi deve essere la prima istruzione nello script",

Per eliminare dubbi, e diminuire la complessità, elimina la linea del "namespace" e nel richiamare la classe usa questo
PHP:
EntityCheck::factoryEntityCheck($estrazione_database)

che tipo di campo devo impostare per inserire il valore 100?
float!
 
vorrei visualizzare il valore da 1 a 100

in mysql ho creato un campo decimal 65,0 ma non restituisce il valore 100,
il valore 1 viene invece visualizzato
 
float(8,2) mi cambia il valore da 100 a 100.00
a me serve il valore 100 se no non funziona
 
impostato (integer)100.00


sshot-0.png


progress_profileint(100)88


sshot-1.png




progress_profileint(100)89

qui non funziona :(

sshot-2.png


codice:

PHP:
<?php
   
require_once("connetti.php");

$progress = $row['progress_profile'];

$actor_id = $_GET["id"];
$query = mysql_query ("SELECT * FROM actor  WHERE actor_id=". $actor_id, $db);

$row = mysql_fetch_array ($query);




?>
   

<p class="bioheading">Profile Completed Progess</p><div class="progress">
% Profile Completed
<div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $progress; ?>%;"><?php echo $progress; ?>
</div>
</div>
 
risolto il mistero :) fixato con questo

PHP:
<?php echo $progress . '% Profile Completed'; ?>


sshot-3.png


questa soluzione pero' non e' ottimale, si dovrebbe adesso andaread inserire manualmente per ogni scheda il valore nel campo progress_profile
:rolleyes:

l'ideale sarebbe calcolare i campi vuoti della scheda ed inserire in automatico la percentuale da 1 a 100 nel campo progress_profile,

ma come!
:rolleyes:
 
Ultima modifica:
l'ideale sarebbe calcolare i campi vuoti della scheda ed inserire in automatico la percentuale da 1 a 100 nel campo progress_profile,

($data['percentage']==100)?$data['text_percentage']='completa':null; ($data['percentage']<=1 && !isset($data['text_percentage']))?$data['text_percentage']='(vuota)':$data['text_percentage']='(incompleta)';
PONI POCA attenzione ai suggerimenti, e mi chiedo il motivo per cui scrivi...
 
PONI POCA attenzione ai suggerimenti, e mi chiedo il motivo per cui scrivi...

macus_adi

quello di prima (che non funziona) e' questo e' un altro codice, cerchi di aiutarmi ma senza successo, perche' inserire codice che non capisco? :rolleyes:

dove inserire questo e dove cambiare? e' tanto difficile aiutare con la soluzione completa?

non sono un mago come te, abbi pieta' :( di noi comuni mortali
 
perche' inserire codice che non capisco?
La lib che ho mandato è di una semplicità disarmante, in quanto scritta MALE appositamente per farti capire...

Se hai problemi forse è arrivato il caso di IMPARARE, EVITANDO DI FARE IL PAPPAGALLO (inteso come copia/incolla)...

L'aiuto arriva ma...
dove inserire questo e dove cambiare?
É una libreria, quindi va nella directory libraries....

e' tanto difficile aiutare con la soluzione completa?
Si, qui si chiede una mano, se vuoi il codice completo forse è arrivato il momento di mettere le mani nel portafoglio, altrimenti impara le basi di programmazione e le cose diventeranno più facili e gestibili tramite aiuti esterni...

Leggi il regolamento
6) GLI UTENTI DEL FORUM NON SONO VEGGENTI E NON SONO I TUOI SCHIAVI!

Gli utenti di questo forum sono sempre felici di poter aiutare qualcuno a risolvere le proprie problematiche, tuttavia è bene precisare che:
  • Nessuno può aiutarti a risolvere il tuo problema se tu non lo sai spiegare! Cerca di essere preciso e dettagliato nei tuoi interventi e riceverai in cambio risposte migliori e più pertinenti.
  • Nessuno farà il lavoro al posto tuo: siamo qui per aiutarti e non per fare le cose al posto tuo!!!
  • Nessuno è obbligato a risponderti: cerca di essere gentile ed educato e ricordati che quando qualcuno ti risponde lo fa per aiutarti e lo sta facendo GRATIS!

Detto questo, penso possa bastare... Buona domenica.
Staff chiedo scusa, ma non potevo evitare....
 
Ultima modifica:
macus_adi
smetti di rispondere ai miei post, :mad::mad::mad::mad::mad:

nessuno ti ha obbligato a venire qui e cercare di aiutarmi stando alle tue regole e imponendomi di studiare i tuoi codici che capisci solo tu (NON NE HO BISOGNO)

non ti permetto piu' di insultarmi, e' la seconda volta che offendi, ed e' la seconda volta che tiri in ballo la questione soldi,
se c'e' qualcuno che dovrebbe leggere il regolamento quello sei TU,


se ti senti superiore agli altri allora vai ad aiutare quelli del tuo livello.


Max 1 spero che intervieni tu

prendete esempio da Tommy03 e marino51
 
non ti permetto piu' di insultarmi,
?? dove scusami....
e' la seconda volta che offendi
Quando...?

ed e' la seconda volta che tiri in ballo la questione soldi


prendete esempio da Tommy03 e marino51
Cosa che normalmente si tira in ballo quando qualcuno NON CAPISCE....
infatti leggi qui,:

DI SOLDI NON NE HO MAI CHIESTI, E MI RENDO CONTO CHE L'ITALIANO (SI PROPRIO COSì) NON LO COMPRENDI....

se vuoi il codice completo forse è arrivato il momento di mettere le mani nel portafoglio
QUESTA NON É UNA RICHIESTA DI SOLDI, IN QUANTO NON HO NULLA DI TUO, SEMMAI SEI TU CHE PRETENDI QUALCOSA SE PROPRIO FACCIAMO I SIGNORI CON LA PUZZA SOTTO IL NASO...

RIPETO COME IN ALTRI POST, CERCA DI CAPIRE L?ITALIANO, QUI NESSUNO CHIEDE SOLDI

QUI CHIARIMENTO IN MERITO....
_Snap_domenica 31 maggio 2020_15h51m50s_002_.png


Vorrei capire in che modo ho offeso la tua persona, perchè parlo/scrivo e comprendo bene l'ITALIANO....

Detto questo, Manca un pezzo all'img che riporto volentieri:
Continua con il tuo lavoro forse è meglio...
Prima di dire come si alza un muro mi rapporto sempre a chi ho davanti senza la presunzione di sapere chissà cosa su un qualcosa che esula dalla mia sfera di competenza...

Non è la prima volta che interpreti male le parole, già con marino l'hai fatto ed ora con me...

Buona giornata.

Buona giornata, e scusate.
 
proseguo con il mio quesito,
spero che qualcuno mi risolva il problema del calcolo dei campi vuoti per inserire la percentuale automaticamente
:rolleyes:

intanto ho inserito il colore in base al progresso della barra :)


1_progressbar.png



51_progressbar.png


100_progressbar.png
 
Ultima modifica:
ti ho preparato una funzione che puoi posizionare dove vuoi,
lavora fornendo actor_id, restituisce la percentuale ed il n umero dei campi controllati e quanti ok
PHP:
<?php
$set['script'] = $_SERVER['PHP_SELF'];
$set['log']    = false;
$set['mySql']  = true;

require_once 'cineteca.include';


$actor_id = 206;
$result = actorUpdateLevel($actor_id);
echo $actor_id." : il completamento é pari a ".$result[0]." %, su ".$result[1]." campi controllati, ".$result[2]." hanno informazioni presenti<br />";


function actorUpdateLevel($actor_id)
{
    global $conn, $set;

    $career_status = array( 1 => 'Active', 2 => 'Retired', 3 => 'Dead' );
    $eye_color     = array( 1 => 'Blue',   2 => 'Brown',   3 => 'Green', 4 => 'Grey', 5 => 'Hazel' );

    $textFields    = array( "nome", "performer_aka", "foto", "foto_info", "website", "birthday", "height", "biografia" );
    $specFields    = array( "career_status", "eye_color", "died" );

    $sql = "SELECT nome, performer_aka, foto, foto_info, website, career_status, birthday, died, eye_color, height, biografia"
         . " FROM actor WHERE actor_id=" . $actor_id;

    $result = $conn->query($sql);
    if ( !$result ) { die("ERRORE : aggiornaDB, errore nella query, " . $conn->error); }

    if($set['mySql']) { $dati = $result->fetch_all(MYSQLI_ASSOC);  $result->free(); }
    else              { $dati = $conn->queryS($sql); }

    $row = $dati[0];

    $cc  = 0;  // conta i controlli fatti
    $ok  = 0;  // conta i valori presenti

    foreach ($row as $key => $value)
    {
        if ( in_array($key, $textFields) ) { $cc++; if ( !empty($value) )                   $ok++; } else
        if ( $key   == "eye_color" )       { $cc++; if ( in_array($value, $eye_color) )     $ok++; } else
        if ( $key   == "career_status" )   { $cc++; if ( in_array($value, $career_status) ) $ok++;
        if ( $value == "Dead" )            { $cc++; if ( !empty($row["died"]) )             $ok++; } }
        // echo $key." - ".$value." - ".$cc." - ".$ok."<br />";
    }
    $p = round(100 * $ok / $cc, 1);  // calcola la percentuale con 1 decimale
    return array($p, $cc, $ok);
}
?>

questi due risultati cambiando career_status

1590951429534.png


1590951461879.png
 
  • Like
Reactions: Alex_70
ciao marino :) buonasera

sto leggendo il codice, se ho capito bene devo inserire $result[0] in progress_profile

adesso provo

grazie :), come sempre gentile e disponibile
 
Ultima modifica:

Discussioni simili