Problema recupero dati da file [era: help script php]

  • Creatore Discussione Creatore Discussione turillo
  • Data di inizio Data di inizio

turillo

Utente Attivo
23 Apr 2012
47
0
0
salve a tutti, mi sono appena iscritto ma utilizzo molto questo sito di mr.webmaster
perchè lo trovo molto utile per quanto riguarda i consigli sugli script ed in generale
sulla programmazione web.

ecco qui il mio problema: sto costruendo uno script che da un file legge delle stringhe
e mi costruisce un form con delle checkbox i cui valori sono riferiti a ciò che trovo dal file.
poi cliccando su un submit sotto il form c'è un div in cui viene caricato il contenuto a seconda
delle checkbox selezionate, solo che ho un problema: ogni riga del file la trasformo in array con
la funzione explode e vorrei fare in modo che se nell'array c'è un valore - lo sostituisco con uno spazio vuoto,
solo che non funziona con tutti, in alcuni lo sostituisce ma in altri no.

ecco qui il codice:
Codice:
<?php

$file=fopen('esempio.txt','r');

if(!$file) { // controllo se il file è aperto correttamente

echo "Errore, impossibile aprire il file";

}
echo "<html><head>";
echo "<style type='text/css'>";
echo "#checkcontainer {
       width: 600px;
	   height: 250px;
	   background: #C0C0C0; }
	  #form {
	   width: 100%;
	   height: 100%;
	  }
	  .item {
	   width: 100px;
	   height: 50px;
	  }
	  .submit {
	   display: block;
	   position: relative;
	   top: 20px;
	   left: 0px;	  
	  }
	  #showgraph {
	   width: 600px;
	   height: 250px;
	   background: #808080;
	   margin: 20px 0px;
	  }";
echo "</style>";

echo "</head><body>";

echo "<h2>Clicca sulla casella per tracciare il grafico del relativo algoritmo</h2>";

echo "<div id='checkcontainer'>"; // checkcontainer

echo "<form id='form' method='post' action='index.php'>";

while(!feof($file)) {

$stringa = fgets($file);
$a = explode('	',$stringa);
// $righe=count(file('genome.txt')); // numero righe totali
$per_riga=5;

if($inserite < $per_riga) {
echo "<span class='item'>";
echo "<input type='checkbox' name='alg[".$a[0]."]' value='$a[0]'/> ".$a[0]."";
echo "</span>";
$inserite=$inserite+1;
}
else {
echo "</br>";
$inserite=0;
}

}

echo "<input class='submit' type='submit' value='Mostra'>";
echo "</form>";
echo "</div>"; // checkcontainer
echo "<div id='showgraph'>"; // showgraph
if(sizeof($_POST['alg'])>0) {


foreach($_POST['alg'] as $algoritmo) {

$file=fopen('esempio.txt','r');

if(!$file) { // controllo se il file è aperto correttamente

echo "Errore, impossibile aprire il file";

}

while(!feof($file)) {
			
$riga=fgets($file);
$array = explode('	',$riga);

if($algoritmo == $array[0]) {
			
for($i=1;$i<count($array);$i++) {

if($array[$i]=='-') { // se trovo - lo sostituisco con un valore vuoto

echo "NULL	";

}
else {
						
echo $array[$i]."	";

}
						
}

echo "</br>";
			
}
		
		
} 
}
}
else { 
	// non mostro nulla 
}
echo "</div>"; // showgraph
echo "</body>";
fclose($file);

?>

in questo caso sostituisco a - la stringa NULL.

la struttura del file è questa

nome val val
nome val val

con una tab orizzontale tra i valori.

vi inserisco lo stamp di quello che viene, in cui si vede la pagina php e il file txt
Vedi l'allegato 1218

spero possiate aiutarmi

turillo
 
Ciao,
devo ammettere che man mano che leggevo/modificavo il tuo codice mi sono perso

se ho capito cosa vuoi fare (non credo) puoi provare cosi:

PHP:
<?php

$file = fopen('esempio.txt', 'r');

if (!$file) { // controllo se il file è aperto correttamente
    echo "Errore, impossibile aprire il file";
}
echo "<html><head>";
echo "<style type='text/css'>";
echo "#checkcontainer {
       width: 600px;
	   height: 250px;
	   background: #C0C0C0; }
	  #form {
	   width: 100%;
	   height: 100%;
	  }
	  .item {
	   width: 100px;
	   height: 50px;
	  }
	  .submit {
	   display: block;
	   position: relative;
	   top: 20px;
	   left: 0px;	  
	  }
	  #showgraph {
	   width: 600px;
	   height: 250px;
	   background: #808080;
	   margin: 20px 0px;
	  }";
echo "</style>";

echo "</head><body>";

echo "<h2>Clicca sulla casella per tracciare il grafico del relativo algoritmo</h2>";

echo "<div id='checkcontainer'>"; // checkcontainer
// richiamo la stessa pagina con PHP_SELF
echo "<form id='form' method='post' action='" . $_SERVER['PHP_SELF'] . "'>";
$riga = 1;
while (!feof($file)) {
    $stringa = fgets($file);
    $stringa = str_replace(" ", ";", $stringa);

    $a = explode(';', $stringa);

    echo "<span class='item'>";
    echo "<input";
    if (isset($_POST['alg' . $riga]) && $_POST['alg' . $riga] == $a[0]) {
        echo " checked='checked'";
    }
    echo " type='checkbox' name='alg" . $riga . "' value='$a[0]'/> " . $a[0] . "";
    echo "</span>";
    $riga++;
}
echo "<input class='submit' type='submit' value='Mostra'>";
echo "</form>";
echo "</div>"; // checkcontainer
echo "<div id='showgraph'>"; // showgraph
//
//verifico che sia settato il post
if (isset($_POST)) {
    foreach ($_POST as $key => $valore) {
        $file = fopen('esempio.txt', 'r');
        if (!$file) { // controllo se il file è aperto correttamente
            echo "Errore, impossibile aprire il file";
        }
        while (!feof($file)) {
            $riga = fgets($file);
            $riga = str_replace(" ", ";", trim($riga));
            $array = explode(';', $riga);

            if ($_POST[$key] == $array[0]) {
                foreach ($array as $value) {
                    if (!empty($value) && $value != "-") {
                        echo $value . "<br/>";
                    }
                }
            }
        }
        fclose($file);
    }
}
echo "</div>"; // showgraph
echo "</body>";
?>

credo di aver modificato parecchio e ho commentato poco
se hai bisogno chiedi

Intanto copialo e incollalo e vedi se piu o meno è quello che vuoi fare

PS: cambia il titolo della discussione con qualcosa di più apprpriato in modo che si capisca di cosa stiamo parlando

ciao
 
scusa se il titolo del topic non era preciso, ti ringrazio per il tuo contributo.

copiando e avviando il tuo codice purtroppo non funziona.

però forse adesso ti spiego meglio: quando io estraggo la riga dal file con fgets la trasformo in un array
con explode. quindi adesso ho un array in cui ogni cella contiene un pezzo della riga del file che ho estrapolato
considerando come carattere di "taglio" la tabulazione.

il problema è che quando devo tirar fuori i dati dall'array non è detto che ci sia un numero(come hai visto nell'immagine)
e quindi se trovo il simbolo '-' lo sostituisco con null solo che quando faccio il controllo con if($array[$i]=='-') non lo sostituisce
a tutti ma solo ad alcuni. la porzione di codice che è riferita al problema è questa

Codice:
foreach($_POST['alg'] as $algoritmo) {

$file=fopen('esempio.txt','r');

if(!$file) { // controllo se il file è aperto correttamente

echo "Errore, impossibile aprire il file";

}

while(!feof($file)) {
			
$riga=fgets($file);
$array = explode('	',$riga);

if($algoritmo == $array[0]) {
			
for($i=1;$i<count($array);$i++) {

if($array[$i]=='-') { // se trovo - lo sostituisco con un valore vuoto

echo "NULL	";

}
else {
						
echo $array[$i]."	";

}
						
}

echo "</br>";
			
}
		
		
} 
}

non so se sono stato più chiaro, spero di si.
 
Non lo sostituisce a uno o a piu variabili? (Ho una mezza ipotesi ma mi serve saperlo)

Inoltre per i molteplici echo piuttosto lunghi all'inizio potresti usare <<<EOF per facilitarti la vita ;)
 
Ultima modifica:
diciamo che mi sono accorto che la sostituzione avviene solo se la '-' si trova dentro l'array
per quanto riguarda le righe del file che non sono l'ultima, dove invece la '-' viene sostituita
in ogni occorrenza.

mi sto dannando, possibilmente è una cavolata:crying:
 
ciao
Non lo sostituisce a uno o a piu variabili? (Ho una mezza ipotesi ma mi serve saperlo)

Inoltre per i molteplici echo piuttosto lunghi all'inizio potresti usare <<<EOF per facilitarti la vita ;)
per la precisione: usa la sintassi heredoc, al posto di <<<EOF si può scrivere <<<PINCO e alla fine (prima colonna) PINCO;
 
copiando e avviando il tuo codice purtroppo non funziona.

a me in locale funzionava:

es.png

non so però se è quello che volevi fare

Ora mi rileggo con calma la discussione
 
ragazzi ho risolto il problema!!!

praticamente quando estraggo la riga con fgets($file) invece di convertirlo subito in array con explode
prima gli tolgo gli spazi a inizio e fine stringa con trim(fgets($file)) ;)

vi ringrazio tanto per i vostri consigli e contributi
 

Discussioni simili