Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG: Storico dei requisiti #13

Open
fedsib opened this issue Mar 13, 2017 · 8 comments
Open

BUG: Storico dei requisiti #13

fedsib opened this issue Mar 13, 2017 · 8 comments

Comments

@fedsib
Copy link

fedsib commented Mar 13, 2017

Lo storico dei requisiti non viene visualizzato se gli username hanno una lunghezza > di 4 caratteri.
Le modifiche vengono salvate correttamente nella tabella ReqTracking ma lo username viene troncato a 4 caratteri, risultando quindi differente se esso è di dimensione maggiore. Quindi le query di visualizzazione falliscono e i risultati non vengono mostrati.

@MarcoPasqualini
Copy link

Uhm.. non so se capisco bene il problema.
Però dando una occhiata veloce risulta che il codice sql per la tabella ReqTracking (PragmaDB/SQL/DDL/Creation.sql) risulta:

CREATE TABLE ReqTracking (
    IdTrack     VARCHAR(10) PRIMARY KEY,
    Descrizione VARCHAR(10000) NOT NULL,
    Tipo        ENUM('Funzionale','Vincolo','Qualita','Prestazionale') NOT NULL,
    Importanza  ENUM('Obbligatorio','Desiderabile','Facoltativo') NOT NULL,
    Padre       INT(5),
    Stato       BOOL DEFAULT '0' NOT NULL,
    Implementato    BOOL DEFAULT '0' NOT NULL,
    Fonte       INT(5) NOT NULL,
    CodAuto     INT(5) NOT NULL,
    Utente      VARCHAR(4) NOT NULL,
    Time        DATETIME,
    Soddisfatto    BOOL  DEFAULT  '0'  NOT NULL,
    FOREIGN KEY (CodAuto) REFERENCES Requisiti(CodAuto)
                ON DELETE CASCADE
                ON UPDATE CASCADE
) ENGINE=InnoDB;

Quindi ogni inserimento nel campo Utente è limitato a 4 caratteri, e le stringhe più lunghe vengono troncate (se non sbaglio).
Ripeto, forse non ho ben capito il problema.

@fedsib
Copy link
Author

fedsib commented Mar 13, 2017

Grazie Marco, ma purtroppo mi ero scordato di fare il push di questa commit. Purtroppo il problema non sta qui, perché nel database sul server AWS la tabella ha i 10 caratteri corretti.
Il problema però è quello. La stringa da qualche parte viene troncata, purtroppo non c'è un minimo di documentazione e col flusso mi perdo.

Partendo dal file PragmaDB\PHP\Requisiti\modificarequisito.php
Se tutto va bene, arriviamo in riga 232 e chiamiamo la procedura SQL modifyrequisito, passandogli lo user in riga 256:

				else{
					$query="CALL modifyRequisito('$id','$descf',";
					if($tipof==$old_tipof){
						$query=$query."null,";
					}
					else{
						$query=$query."$tipof,";
					}
					if($importanzaf==$old_importanzaf){
						$query=$query."null,";
					}
					else{
						$query=$query."$importanzaf,";
					}
					if($padref==$old_padref){
						$query=$query."0,";
					}
					else{
						if($padref=="N/D"){
							$query=$query."null,";
						}
						else{
							$query=$query."'$padref',";
						}
					}
					$query=$query."'$statof','$implementatof','$soddisfattof','$fontef','$_SESSION[user]','$secondari_modificati',";
					if($modifica_uc==false){
						$query=$query."null)";
					}
					else{
						$query=$query."'$ucf')";
					}
					$query=mysql_query($query,$conn) or fail("Query fallita: ".mysql_error($conn));
					$title="Requisito Modificato";
					startpage_builder($title);
echo<<<END

			<div id="content" class="alerts">
				<h2>Operazione effettuata</h2>
				<p>Il requisito è stato modificato con successo.</p>
				<p><a class="link-color-pers" href="$absurl/Requisiti/requisiti.php">Torna a Requisiti</a>.</p>
END;
}

Tale procedura è in:
PragmaDB\SQL\procedure\Requisiti\r_modify.sql e qui succede il delirio.

In pratica, partendo dallo user corretto: "fedsib" verrà salvato nella tabella ReqTracking "feds" trimmato a 4 caratteri. Le funzioni di visualizzazione cercheranno quindi feds nella tabella degli utenti e non essendo presente, non visualizzeranno nulla (perché ritorna 0 risultati).

@sirfoga
Copy link

sirfoga commented Mar 14, 2017

Premessa: ho dato un'occhiata veloce, non fidarti troppo. Sicuro che non ci sia qualche strana funzione PHP che prenda l'input, lo trim a 4 caratteri e dopo lo cerchi nella tabella? Oppure che, quando inserisce l'utente, ne fa già il trim?
Sembra impossibile che gli utenti vengano salvati già trimmed .. nel file sql c'è esplicitamente scritto Utente VARCHAR(10) NOT NULL ...

@shoooe
Copy link

shoooe commented Mar 14, 2017

Quindi è risolto? Se no, riuscite a darmi un'immagine database che riproduce il problema?

@fedsib
Copy link
Author

fedsib commented Mar 14, 2017

Si, lo username utente viene salvato nella tabella ReqTracking come già trimmato a 4 caratteri. L'errore sta qui, dovrebbe tagliarlo a 10. Dove verrà troncato però? Qui il mistero

@shoooe
Copy link

shoooe commented Mar 14, 2017

@fedsib Quindi per riprodurre il problema installo PragmaDB e provo ad aggiungere un utente con username > 4 caratteri?

@fedsib
Copy link
Author

fedsib commented Mar 14, 2017

@Jefffrey E poi inserisci qualche requisito e provi a modificarlo. Vedrai che le modifiche non appariranno in visualizza storico.

@ghost
Copy link

ghost commented Mar 15, 2017

Ci do un'occhiata anche io

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants