Problemi con array e file di testo

vodka

Utente Attivo
25 Giu 2010
128
0
0
in riferimento all'esercio nr.28 di questo link http://www.dia.unisa.it/~parente/TSW/eserciziP.shtml

non riesco a capire dove sbaglio nel terzo script
ora vi posto i tre script.
PHP:
<html>
	<head>
		<title>Elementi da inserire</title>
	</head>
	<FORM METHOD=POST ACTION="nomi.php" name="elementi">
		<TABLE border="3" width="350" height="60">
		<TR HEIGHT="10%"><TD>Numeri di elementi da inserire:</TD><TD><INPUT TYPE="text" NAME="elementi"></TD></TR>
		<TR align="center"><TD colspan="2"><INPUT TYPE="submit" VALUE="invia" name="invia"><INPUT TYPE="submit" value="Cancella" name="cancella"></TD></TR>
		</TABLE>
		
	</FORM>
e questo è tutto ok

questo è il secondo
PHP:
<FORM METHOD=POST ACTION="invianomi.php" name="invia">
<TABLE border="3" width="200" >
	<TR align="center"><TD COLSPAN="2"><B>Inserimento nomi</B></TD></TR>
		<?php
		$elemento=$_POST['elementi'];
		for ($i=1;$i<=($elemento);$i++)
		{
			echo"<TR><TD>Nome$i</TD><TD><INPUT TYPE=\"text\" NAME=\"nome".$i."\"></TD></TR>";	
		}
		
		?>
		<TR><TD ALIGN="CENTER" COLSPAN="2"><INPUT TYPE="submit" value="invia" name="invia"><INPUT TYPE="submit" value="cancella" name="cancella"></TD></TR>
</TABLE>
</FORM>
e anke qui credo sia tutto ok
e questo è il terzo
PHP:
<?php
			$element=$_POST['$elementi'];
			$nome=$_POST['nome1'];
			$nomi= array ("$nome");
			for ($i=1;$i<=($element);$i++)
			{
				$nome=$_POST["nome$i"];
				$nomi[]="$nome";
			}
			$scrivi_file=fopen("nomi.txt","w");
			for ($i=0;$i<count($nomi);$i++)
			{
				fwrite($scrivi_file,$nomi[$i]);
				$l= array (strlen($nomi[$i]));
			}
			fclose($scrivi_file);
			sort($l);
			
			for ($i=0;$i<count($l);$i++)
				print("$l");
?>
in questo script invece ho fatto un pò di confusione e non capiscocome riuscire a risolvere il problema come ad esempio il passaggio della variabile elementi dal secondo form l'ordinamento dell'array, vi ringrazio anticipatamente.
 

Grino

Nuovo Utente
12 Dic 2010
4
0
0
questo è il secondo
PHP:
<FORM METHOD=POST ACTION="invianomi.php" name="invia">
<TABLE border="3" width="200" >
	<TR align="center"><TD COLSPAN="2"><B>Inserimento nomi</B></TD></TR>
		<?php
		$elemento=$_POST['elementi'];
		for ($i=1;$i<=($elemento);$i++)
		{
			echo"<TR><TD>Nome$i</TD><TD><INPUT TYPE=\"text\" NAME=\"nome".$i."\"></TD></TR>";	
		}
		
		?>
		<TR><TD ALIGN="CENTER" COLSPAN="2"><INPUT TYPE="submit" value="invia" name="invia"><INPUT TYPE="submit" value="cancella" name="cancella"></TD></TR>
</TABLE>
</FORM>
e anke qui credo sia tutto ok
e questo è il terzo
PHP:
<?php
			$element=$_POST['$elementi'];
			$nome=$_POST['nome1'];
			$nomi= array ("$nome");
			for ($i=1;$i<=($element);$i++)
			{
				$nome=$_POST["nome$i"];
				$nomi[]="$nome";
			}
			$scrivi_file=fopen("nomi.txt","w");
			for ($i=0;$i<count($nomi);$i++)
			{
				fwrite($scrivi_file,$nomi[$i]);
				$l= array (strlen($nomi[$i]));
			}
			fclose($scrivi_file);
			sort($l);
			
			for ($i=0;$i<count($l);$i++)
				print("$l");
?>
in questo script invece ho fatto un pò di confusione e non capiscocome riuscire a risolvere il problema come ad esempio il passaggio della variabile elementi dal secondo form l'ordinamento dell'array, vi ringrazio anticipatamente.

Personalmente per quanto riguarda il secondo farei
PHP:
<FORM METHOD=POST ACTION="invianomi.php" name="invia">
<TABLE border="3" width="200" >
    <TR align="center"><TD COLSPAN="2"><B>Inserimento nomi</B></TD></TR>
        <?php        
        for ($i=0;$i<$_POST['elementi'];$i++)
        {
            echo"<TR><TD>Nome$i</TD><TD><INPUT TYPE=\"text\" NAME=\"nome[]"\"></TD></TR>";    
        }
        
        ?>
        <TR><TD ALIGN="CENTER" COLSPAN="2"><INPUT TYPE="submit" value="invia" name="invia"><INPUT TYPE="submit" value="cancella" name="cancella"></TD></TR>
</TABLE>
</FORM>

per il terzo hai
PHP:
<?php
            $nomi = $_POST['nome'];
            $l=array();
            $scrivi_file=fopen("nomi.txt","w");
            foreach ($nomi as $nome)
            {
                fwrite($scrivi_file,$nome);
                $l[]= strlen($nome);
            }
            fclose($scrivi_file);
            sort($l);
            
            print_r($l);
?>

Per finire ... ho corretto solo quanto più evidente sull'uso degli array e non ho testato gli script. In sostanza nel secondo faccio in modo che i nomi siano memotizzati in un array nella variabile $_POST['nome']. Un errore stava nel fatto che la variabile $l veniva reinizializzata ad ogni iterazione con un nuovo array contenente un solo elemento e non credo fosse quello che volevi. Comunque quello che visualizzi da $l è un array di numeri contenente le lunghezze delle stringhe, invece l'esercizio ti chiede di visualizzare il testo dal più lugngo al più corto.

:byebye:
 

vodka

Utente Attivo
25 Giu 2010
128
0
0
e si infatti nn sò come fare per ordinare le stringhe in base alla loro lunghezza, e poi per ciò ke mi hai suggerito mi dice variabile non definita nella prima istruzione e argomenti nn validi nel foreach
Mi suggerisci qlk altra soluzione?
 

Grino

Nuovo Utente
12 Dic 2010
4
0
0
Una soluzione all'esercizio potrebbe essere questa
Index.php
PHP:
<?php
//L'array delle pietanze viene memorizzato nella variabile di sessione che
//funge da banca dati
session_start();

if(!isset($_SESSION['pietanze']))
  $_SESSION['pietanze']=array();


//Eleborazione dell'interazione dell'utente
if(isset($_POST['operazione'])){
  switch ($_POST['operazione']) {
      //Gestione dell'aggiunta di una nuova pietanza all'elenco
      case 'Aggiungi':
        $_POST['pietanza']=strtolower(trim($_POST['pietanza']));
        if(!empty($_POST['pietanza']))
          $_SESSION['pietanze'][]=$_POST['pietanza'];
        break;
      //Gestione delle pietanze selezionate dall'elenco pietanze
      case 'Seleziona':
        $testofile="";  //Testo per il file
        $temp=array();  //Array ordinato secondo la lunghezza delle stringhe
        if(isset($_POST['pietanza']))
          //Scorro l'elenco delle pietanze selezionate
          foreach($_POST['pietanza'] as $pietanza){
            $testofile.="$pietanza\n";
            
            //Per ogni pietanza effettuo un insert sort in $temp[]
            for($i=0, $n=count($temp);$i<$n;$i++){
              if(strlen($pietanza)>strlen($temp[$i])){
                $t=$pietanza;
                $pietanza=$temp[$i];
                $temp[$i]=$t;
              }
            }
            $temp[]=$pietanza;
          }
        //Scrittura del file di testo
        file_put_contents("pietanze.txt", $testofile);
        break;
  }
}

?>


<!-- Visualizzazione interfaccia utente -->
<html>
  <head>
    <title>Esercizio 27</title>
  </head>
  <body>
    <!-- Modulo di aggiunta di una pietanza -->
    <form action="index.php" method="post" enctype="application/x-www-form-urlencoded">
      <fieldset>
        <legend>Aggiungi una pietanza</legend>
        <label for="pietanza">Nome Pietanza</label>
        <input type="text" id="pietanza" name="pietanza" />
        <input type="submit" name="operazione" value="Aggiungi" />
      </fieldset>
    </form>
    <!-- Modulo di selezione pietanze fra quelle aggiunte -->
    <form action="index.php" method="post" enctype="application/x-www-form-urlencoded">
      <fieldset>
        <legend>Seleziona i tuoi piatti preferiti</legend>
        <?php
          foreach($_SESSION['pietanze'] as $pietanza){
            $pietanza=htmlspecialchars($pietanza);
            $ID=uniqid();
            echo <<<END
            <input id="$ID" type="checkbox" name="pietanza[]" value="$pietanza" />
            <label for="$ID">$pietanza</label><br />
END;
          }
        ?>
        <input type="submit" name="operazione" value="Seleziona" />
      </fieldset>
    </form>
    <!-- Visualizzazione dell'array delle pietanze ordinato per la lunghezza del testo -->
    <pre>
    <?php
        if(isset($temp)) print_r($temp);
      ?>
    </pre>
  </body>
</html>

In alternativa all'insert sort puoi costruire nel ciclo un array avente per chiave il nome della pietanza e per valore la lunghezza della chiave. Quindi puoi utilizzare la funzione asort o arsort per ordina l'array preservando l'associazione con le chiavi. Quindi visualizzi il valore delle chiavi.
 
Ultima modifica:

vodka

Utente Attivo
25 Giu 2010
128
0
0
proprio non capisco come posso fare per inserire i nomi in un array salvarli in un file di testo e visualizzarli a video in base alla loro lunghezza sia nell'esercizio 27 che nell'es 28
Vi ringrazio se mi suggerite qlk
 
Discussioni simili
Autore Titolo Forum Risposte Data
S Problemi con gli array in javascript Java 2
H [RISOLTO] Problemi con gli array jQuery 4
A Problemi con move_uploaded_file PHP 2
M Problemi con la stampa dei valori in php PHP 1
L Problemi con il login PHP 2
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
Z problemi con foreach insert into PHP 10
B javascript per problemi con pdf e Safari Javascript 0
M Problemi con creazione maschere Presentati al Forum 1
M Problemi con query a più tabelle PHP 3
S Problemi delle funzioni eliminate con PHP e MySQL PHP 4
M Problemi con blog Grav Content Management System (CMS) 0
S incoerenza di stampa. problemi con il magenta Photoshop 3
A problemi con paypall Java 1
felino [Windows 8.1] Problemi con connessione WiFi Windows e Software 0
E [PHP] problemi nuova riga con fwrite su piattaforma android PHP 5
O [HTML] problemi con la regola "background-attachment: fixed" in EDGE HTML e CSS 0
M [PHP] Problemi con query unione PHP 11
M [PHP] Problemi con select PHP 6
ANDREA20 [HTML] problemi con il footer HTML e CSS 1
D [MS Access] problemi con inserimento campo in una maschera MS Access 6
M [PHP] Problemi con il riconoscimento login. PHP 21
A [WordPress] problemi con xampp WordPress 2
M Problemi con database Apache/2.4.37 (Win32) OpenSSL/1.1.1a PHP/7.3.1 PHP 6
S [PHP] problemi con le sessioni PHP 3
T [PHP] problemi con il browser PHP 0
Andrea_Ventura [HTML] Problemi con effetto hover HTML e CSS 5
M [PHP] Problemi con login facebook PHP 0
Andrea_Ventura [HTML] Problemi con visualizzazione Navigation Bar HTML e CSS 10
andreas88 Creare file .htaccess per risolvere alcuni problemi con il tester SEO SEO e Posizionamento 0
Eugene [Joomla] Problemi con modulo per strutture alberghiere JHotelreservation starter Joomla 6
F [PHP] Problemi di base con bot di telegram PHP 9
M [Photoshop] Problemi con importazione immagini trasparenti in indesign Photoshop 0
E [Photoshop] Problemi con dimensioni immagini Photoshop 12
G [HTML] Problemi con inserimento immagini HTML e CSS 7
L Problemi con Javascript e Mustache Javascript 0
G Invio Mail con PHPMailer, problemi SMTP PHP 7
A [Javascript] problemi con javascrip e posizione GPS html5 Javascript 6
D Due problemi con Photoshop... Photoshop 1
G Problemi con pagina online.php di una chat in php PHP 38
S Problemi con impostazioni php PHP 3
P Problemi con AndroidStudio Sviluppo app per Android 0
S Problemi con Dell Precision T5400 Windows e Software 2
F ciao, sono ferro e ho bisogno di aiuto per problemi con la mail di alice.it Presentati al Forum 1
S [PHP] Problemi con Login e pagina Utente PHP 5
Z problemi con swf e chrome o sistemi portatili Webdesign e Grafica 5
N Problemi connettività con Tp Link EAP 110 Reti LAN e Wireless 0
S [HTML] Problemi con Blueimp image gallery su Chrome e Firefox HTML e CSS 2
W [HTML] problemi con sito responsive Content Management System (CMS) 1
P problemi con nas o per chi conosce synology Altri Annunci 0

Discussioni simili