Problema con doppia colonna

di il
4 risposte

Problema con doppia colonna

Salve a tutti. 

Premetto che non sono un esperto per quanto riguarda la programmazione PHP ma nemmeno uno alle prime armi. Ho un grosso problema con una parte di codice che proprio non riesco a capire dove sia l'errore… 

Di seguito riporto la parte di codice. 

In pratica il problema è che quando vasca A è 1 o 2 o 3 o 4 non viene visualizzato la seconda, vascaB per intenderci, mentre se vasca A = 5 e vasca B = 5 allora vengono visualizzate entrambe altrimenti solo e soltanto la vasca A. Spero di essermi spiegato il meglio possibile.

Ringrazio tutti in anticipo per l'aiuto! 

nd-color: #ff0000; border-style:solid; border-color:#000000; border-width:2px;\">
								   		<h1 style=\"color:black; text-align: center;\">PIENO</h1>
							   		</div>  	
							");
						if($vascaB == 1 || $vascaB == 2) 
							echo("
							    	<div style=\"padding:10px; background-color: #008000; border-style:solid; border-color:#000000; border-width:2px;\">
								   		<h1 style=\"color:black; text-align: center;\">DISP.LE</h1>
							   		</div>  	
							");
						if($vascaB == 3 || $vascaB == 4) 
							echo("
							    	<div style=\"padding:10px; background-color: #ffff00; border-style:solid; border-color:#000000; border-width:2px;\">
								   		<h1 style=\"color:black; text-align: center;\">Q.PIENO</h1>
							   		</div>  
							");
						if($vascaB == 5) 
							echo("
							    	<div style=\"padding:10px; background-color: #ff0000; border-style:solid; border-color:#000000; border-width:2px;\">
								   		<h1 style=\"color:black; text-align: center;\">PIENO</h1>
							   		</div>  
							");
								
						echo("	
								</div>
								<div style=\"clear:both;\"></div>
							</div>
						</div>");
						
					}

				
				}

4 Risposte

  • Re: Problema con doppia colonna

    https://www.php.net/manual/en/control-structures.alternative-syntax.php il codice originale utilizza sintassi alternativa o tavolta chiamata a blocchi?

    Nel codice manca vascaA il dato originale, cosa significa non viene visualizzato? Se cambi l'output in non markup HTML almeno le var_dump($variabili); sono con i valori attesi?

    La mia seconda ipotesi è che ti aspetti codice HTML (markup HTML) però non è conforme che per difetto è il non vedere.

    Nb* per motivi di compatibilità e legacy ooccorre utilizzare le parentesi graffe tra statement
  • Re: Problema con doppia colonna

    30/12/2022 - Hormus ha scritto:


    Nel codice manca vascaA il dato originale, cosa significa non viene visualizzato? Se cambi l'output in non markup HTML almeno le var_dump($variabili); sono con i valori attesi?

    Grazie della risposta. Purtroppo non mi ha copiato correttamente il codice.

    $vascaA = (int)($decimale);
    $vascaB = ($decimale - $vascaA)*10;
    
    						//<div class=\"split2\">");
    
    						echo("
    
    						<div class=\"card\">
    
    							<img class=\"card__image\"src=\"img/eko.png\" alt=\"EkoMacchina\">
    
    							<div class=\"card__copy\">
    
    								<h3> $nomeEkoRaccoglitore </h3>
    
    								<hr>
    
    								<h4>EkoRaccoglitore Ekoplastic ID MACCHINA : $idEkoRaccoglitore</h4>
    
    								<h4>Posizione EkoRaccoglitore : $indirizzoEkoRaccoglitore</h4>
    
    								<h4>Totale materiale raccolto : $totaleMaterialeRaccoltoEkoRaccoglitore</h4>
    
    								<h4>Temperatura sistema : $temperaturaEkoRaccoglitore</h4>
    
    								<hr>
    
    								<h2>STATO VASCHE</h2>
    
    								<h4>$statoAttuale - A: $vascaA - B: $vascaB</h4>
    
    								<div class=\"split2\">");
    
    						if($vascaA == 1 || $vascaA == 2)
    
    							echo("<div style=\"padding:10px; background-color: #008000; border-style:solid; border-color:#000000; border-width:2px;\">
    
    								   		<h1 style=\"color:black; text-align: center;\">DISP.LE</h1>
    
    							   	</div>");
    
    						if($vascaA == 3 || $vascaA == 4)
    
    							echo("<div style=\"padding:10px; background-color: #ffff00; border-style:solid; border-color:#000000; border-width:2px;\">
    
    								   		<h1 style=\"color:black; text-align: center;\">Q.PIENO</h1>
    
    							   	</div>");
    
    						if($vascaA == 5)
    
    							echo("<div style=\"padding:10px; background-color: #ff0000; border-style:solid; border-color:#000000; border-width:2px;\">
    
    								   		<h1 style=\"color:black; text-align: center;\">PIENO</h1>
    
    							   	</div>");
    
    						if($vascaB == 1 || $vascaB == 2)
    
    							echo("<div style=\"padding:10px; background-color: #008000; border-style:solid; border-color:#000000; border-width:2px;\">
    
    								   		<h1 style=\"color:black; text-align: center;\">DISP.LE</h1>
    
    							   	</div>");
    
    						if($vascaB == 3 || $vascaB == 4)
    
    							echo("<div style=\"padding:10px; background-color: #ffff00; border-style:solid; border-color:#000000; border-width:2px;\">
    
    								   		<h1 style=\"color:black; text-align: center;\">Q.PIENO</h1>
    
    							   	</div>");
    
    						if($vascaB == 5) 
    
    							echo("<div style=\"padding:10px; background-color: #ff0000; border-style:solid; border-color:#000000; border-width:2px;\">
    
    								   		<h1 style=\"color:black; text-align: center;\">PIENO</h1>
    
    							   	</div>");
    
    						
    
    						echo("</div>
    
    								<div style=\"clear:both;\"></div>
    
    							</div>
    
    						</div>");
    
    					}
    
    				}

    Il problema è che quando ho vascaA e vascaB entrambi = a 5 allora funziona, mentre per gli altri valori visualizzo solo e soltanto il div della vasca A.

    Ho controllato che i valori di vascaA e vascaB siano corretti e lo sono, ho provato a fare una sorta di debug inserendo un echo su ogni if, ho provato a dividere gli if doppi ( quelli con l'operatore || per intenderci), ho provato ad inserire gli if tra parentesi graffe, ma ho sempre lo stesso errore.

    Ho fatto anche un echo del valore di vascaB dopo gli if della vascaA e il valore è corretto… io vermente non so più dove sbattere la testa!!!

    Qualche idea?!?

  • Re: Problema con doppia colonna

    RISOLTO!!! 

    Ora spiego il problema però voglio capire il motivo. 

    Questa è la dichiarazione di vascaA e vascaB :

    $decimale = $valoreStatoAttuale/10;
    $vascaA = (int)($decimale);
    $vascaB = (int)(($decimale - $vascaA)*10);

    io avevo messo vascaB senza il cast (int) all'inizio, però quando andavo a stampare il valore di vascaB ottenevo comunque un intero, detto questo però come mai quando avevo vascaB = 5 non avevo errore? 

    <div class="card">
    							<img class="card__image"src="img/eko.png" alt="EkoMacchina">
    							<div class="card__copy">
    								<h3> EKOMACCHINA DI PROVA </h3>
    								<hr>
    								<h4>EkoRaccoglitore Ekoplastic ID MACCHINA : 1</h4>
    								<h4>Posizione EkoRaccoglitore : VIA ROMA</h4>
    								<h4>Totale materiale raccolto : 20216</h4>
    								<h4>Temperatura sistema : 0</h4>
    								<hr>
    								<h2>STATO VASCHE</h2>
    								<h4>A in riempimento B ultimo riempimento - A: 2 - B: 4</h4>
    								<div class="split2"><div style="padding:10px; background-color: #008000; border-style:solid; border-color:#000000; border-width:2px;">
    								   		<h1 style="color:black; text-align: center;">DISP.LE</h1>
    							   	</div></div>
    						<div style="clear:both;"></div>
    							</div>
    						</div>
    						
    						<div class="card">
    							<img class="card__image"src="img/eko.png" alt="EkoMacchina">
    							<div class="card__copy">
    								<h3> TEST CASA </h3>
    								<hr>
    								<h4>EkoRaccoglitore Ekoplastic ID MACCHINA : 2</h4>
    								<h4>Posizione EkoRaccoglitore : VIA XXX</h4>
    								<h4>Totale materiale raccolto : 865</h4>
    								<h4>Temperatura sistema : 0</h4>
    								<hr>
    								<h2>STATO VASCHE</h2>
    								<h4>A quasi pieno B pieno - A: 3 - B: 5</h4>
    								<div class="split2"><div style="padding:10px; background-color: #ffff00; border-style:solid; border-color:#000000; border-width:2px;">
    								   		<h1 style="color:black; text-align: center;">Q.PIENO</h1>
    							   	</div><div style="padding:10px; background-color: #ff0000; border-style:solid; border-color:#000000; border-width:2px;">
    								   		<h1 style="color:black; text-align: center;">PIENO</h1>
    							   	</div></div>
    						<div style="clear:both;"></div>
    							</div>
    						</div>

    Questo è il codice html della pagina che viene generata, nella prima card ho il problema, mentre nella seconda no, perchè vascaB è uguale a 5.

    Qualcuno può aiutarmi a capire?

    Grazie a tutti!!!

  • Re: Problema con doppia colonna

    PHP è un linguaggio a tipizzazione debole, non occorre dichiarare esplicitamente il tipo come in C#, C++

    La funzione var_dump mostra anche il tipo float mentre echo converte in stringa sebbene il tipo è float.

    Solitamente il float è con perdita di precisione eccetto casi speciali lo zero dopo il punto decimale è considerato non significativo, il cast esplicito (int) trasforma la parte intera di un float.

    Inoltre il cast tipo int è applicato prima, ad esempio var_dump((int) ((1.15) * (10))); // 11 uso tra parentesi tonde per una probabile distinzione numerica negativa corretta e il cast int va applicato dopo la moltiplicazione. var_dump((int) (1.15) * (10)); //10

    Se con più operazioni avrei legato il cast int con ulteriori parentesi tonde

    <?php
    
    $vascaA = 4.0;
    if($vascaA == 1 || $vascaA == 2) {
    var_dump($vascaA);
    }
    if($vascaA == 3 || $vascaA == 4) {
    var_dump($vascaA);
    echo $vascaA;
    }
    ?>
Devi accedere o registrarti per scrivere nel forum
4 risposte