Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Problema nel passaggio delle variabili

    Ho cominciato a studiare il php e ho problemi nel far andare queste due pagine:

    questa è la pagina prova.htm

    codice:
    <html>
    	<head>
    	</head>
    	<body>
    		<form action="prova.php" method="post">
    			Numero1<input name="w1">
    
    			Numero2<input name="w2">
    
    			<input type="submit">
    			<input type="reset">
    		</form> 
    	</body>
    </html>
    questa invece prova.php

    codice:
    <html>
    	<head>
    	</head>
    	<body>
    		<?php
    			$w3=$w1+$w2;
    			echo "La somma tra $w1 e $w2 &egrave; $w3"; 
    		?>
    	</body>
    </html>
    Carico la pagina prova.htm da localhost, scrivo due numeri e premo invia, ma visualizzo "La somma tra e è 0".

    Non riesco a capire dove sbaglio.

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Devi usare l'array $_POST per recuperare le variabili inviate da un form tramite metodo post.

    http://www.php.net/manual/en/reserve...ables.post.php


    Quindi la parte dello script da modificare diventa:
    Codice PHP:
    <?php
                $w3 
    $_POST['w1'] + $_POST['w2'];
                echo 
    "La somma tra {$_POST['w1']} e {$_POST['w2']} è $w3"
    ?>
    Ciao
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  3. #3
    Grazie, adesso funziona.

    Ma come mai nel comando echo l'array POST va tra parentesi graffe?

  4. #4
    Le parentesi graffe che inglobano una variabile servono per far capire allo script che quanto compreso tra le parentesi è tutta una variabile.
    Se non le avessi usate, avresti dovuto scrivere:
    Codice PHP:
     echo "La somma tra ".$_POST['w1']." e ".$_POST['w2']." è $w3"
    Questo perché gli apici avrebbero potuto generare fraintendimenti allo script stesso, e per è necessario estrarre le variabili dalla stringa e concatenarcele.

    Aggiungo solo una cosa al tuo script: per rendere compatibili le form con tutti i browser in circolazione, e per evitare che con alcuni browser si possano perdere le variabili nel passaggio tra una pagina e l'altra, ti consiglio di utilizzare alcuni accorgimenti:

    [list=1][*]utilizza sia l'attributo NAME sia quello ID negli input[*]utilizza sempre l'attributo enctype nel tag FORM[*]definisci sempre il tipo di input che vuoi visualizzare[/list=1]

    Ti riscrivo la form con i miei consigli:
    Codice PHP:
    <html>
    <
    head>
       <
    title>xxxxx</title>
    </
    head>
        
    <
    body>
       <
    form action="prova.php" enctype="multipart/form-data" method="post">
           
    Numero1 <input type="text" id="w1" name="w1" />

           
    Numero2 <input type="text" id="w2" name="w2" />

           <
    input type="submit" value="Invia" />
           <
    input type="reset" value="Resetta" />
       </
    form
    </
    body>
    </
    html
    L'enctype che ho usato io è più consigliabile per form complesse (dove magari permetti l'inserimento anche di file), ma è per farti capire.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Grazie per i consigli.

    Sapete dirmi come mai questa pagina non funziona? Inserendo tutti i dati e premendo "Invia" non mi visualizza nulla, neanche il messaggio d'errore.

    codice:
    <html>
    	<head>
    		<link rel="stylesheet" type="text/css" href="stile.css" />
    	</head>
    	<body>
    		<?php
    			if($POST_['inviato'])
    			{
    				$db=mysql_connect("localhost", "egidio", "password");
    				$query="insert Dischi values('";
    				$query.=$POST_['produttore']."','";
    				$query.=$POST_['tipo']."','";
    				$query.=$POST_['mb']."','";
    				$query.=$POST_['prezzo']."','";
    				$query.=$POST_['numero']."','";
    				$query.=$POST_['data']."','";
    				$query.=$POST_['produttore']."');";
    				mysql_db_query("prova",$query);
    				$controllo=mysql_affected_rows();
    				if($controllo>0)
    				{
    					echo "Record inserito con successo.";
    				}
    				else
    				{
    					echo "&Egrave; stato commesso un errore.";
    				}
    				mysql_close($db);
    			}
    		?>
    		<form action="prova.php" method="post">
    			
    
    Immettete un record completo e inviate il form:</p>
    			<table>
    			<tr><td>Produttore</td><td><input name="produttore"></td></tr>
    			<tr><td>Tipo</td><td><input name="tipo"></td></tr>
    			<tr><td>MB</td><td><input name="mb"></td></tr>
    			<tr><td>Prezzo</td><td><input name="prezzo"></td></tr>
    			<tr><td>Numero articolo</td><td><input name="numero"></td></tr>
    			<tr><td>Data prima ordinazione</td><td><input name="data"></td></tr>
    			</table>
    			
    
    <input type="submit" name="inviato"><input type="reset"></p>
    		</form>
    	</body>
    </html>

  6. #6
    Non ho controllato bene lo script, ma mi sembra ci sia un errore nella sintassi della query.

    Tu hai scritto:
    Codice PHP:
    $query="insert Dischi values('"
    Invece di:
    Codice PHP:
    $query="INSERT INTO Dischi VALUES ('"
    Usa sempre il DIE comunque, nell'esecuzione di una query: ti fornisce spiegazioni utilissime.

    Codice PHP:
    mysql_db_query("prova",$query) OR DIE ("Errore numero: ".mysql_errno()." - Descrizione: ".mysql_error()); 
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Grazie per la risposta immediata. Sei gentilissimo.

  8. #8
    Ho corretto il codice seguendo i tuoi consigli ma ancora non funziona.

    codice:
    <html>
    	<head>
    		<link rel="stylesheet" type="text/css" href="stile.css" />
    	</head>
    	<body>
    		<?php
    			if($POST_['inviato'])
    			{
    				$db=mysql_connect("localhost", "egidio", "taranto1989");
    				$query="INSERT INTO Dischi VALUES('";
    				$query.=$POST_['produttore']."','";
    				$query.=$POST_['tipo']."','";
    				$query.=$POST_['mb']."','";
    				$query.=$POST_['prezzo']."','";
    				$query.=$POST_['numero']."','";
    				$query.=$POST_['data']."','";
    				$query.=$POST_['produttore']."');";
    				mysql_db_query("prova",$query) OR DIE ("Errore numero: ".mysql_errno()." - Descrizione: ".mysql_error());
    				$controllo=mysql_affected_rows();
    				if($controllo>0)
    				{
    					echo "Record inserito con successo.";
    				}
    				else
    				{
    					echo "&Egrave; stato commesso un errore.";
    				}
    				mysql_close($db);
    			}
    		?>
    		<form action="prova.php" method="post">
    			
    
    Immettete un record completo e inviate il form:</p>
    			<table>
    			<tr><td>Produttore</td><td><input name="produttore"></td></tr>
    			<tr><td>Tipo</td><td><input name="tipo"></td></tr>
    			<tr><td>MB</td><td><input name="mb"></td></tr>
    			<tr><td>Prezzo</td><td><input name="prezzo"></td></tr>
    			<tr><td>Numero articolo</td><td><input name="numero"></td></tr>
    			<tr><td>Data prima ordinazione</td><td><input name="data"></td></tr>
    			</table>
    			
    
    <input type="submit" name="inviato"><input type="reset"></p>
    		</form>
    	</body>
    </html>
    Secondo me c'è un'errore nella variabile $POST_['inviato'] solo che non so quale è.

  9. #9
    Controllando bene il tuo script, mi sembra di potere dire che c'è un errore di fondo: se vuoi risolvere con una sola pagina di script, devi creare un controllo sulla pressione del pulsante o meno.
    Se il pulsante non è premuto, devi andare a stampare la form, altrimenti passi alla comunicazione con il DB.

    Quindi fai come segue:
    Codice PHP:
    // recuperi la variabile collegata al pulsante di submit
    // se premuto ne imposti il valore a TRUE, altrimenti a FALSE
    (!isset($_POST['inviato'])) ? $check TRUE $check FALSE;

    // esegui un controllo sul contenuto della variabile
    // per capire quale parte dello script stampare a video
    if (!$check) {
          
    // stampi la form
    } else {
          
    // processi i dati inviati dalla form

    Fino a qui capisci il meccanismo??
    OK, andiamo oltre!

    Per rendere lo script compatibile con tutti i browser in circolazione, per ogni campo input inserisci non solo l'attributo NAME ma anche quello ID, che dovranno essere valorizzati con lo stesso nome di variabile.
    codice:
    <form action="prova.php" method="post">
       
    
    Immettete un record completo e inviate il form:</p>
       <table>
         <tr>
           <td>Produttore</td>
           <td><input id="produttore" name="produttore"></td>
         </tr>
         <tr>
           <td>Tipo</td>
           <td><input id="tipo" name="tipo"></td>
         </tr>
         <tr>
           <td>MB</td>
           <td><input id="mb" name="mb"></td>
         </tr>
         <tr>
           <td>Prezzo</td>
           <td><input id="prezzo" name="prezzo"></td>
         </tr>
         <tr>
           <td>Numero articolo</td>
           <td><input id="numero" name="numero"></td>
         </tr>
         <tr>
           <td>Data prima ordinazione</td>
           <td><input id="data" name="data"></td>
         </tr>
    </table>
         
    
    
          <input type="submit" id="inviato" name="inviato" value="Invia" />
          <input type="reset" value="Cancella" />
         </p>
    </form>
    Ricordati poi che per form complesse, è sempre consigliato usare l'enctype, sennò si perdono i dati senza saperlo.
    codice:
    <form action="prova.php" method="post" encytpe="multipart/form-data">
    Come secondo consiglio, poi ti dico: nella seconda parte dello script, prima di andarti ad impelagare con la query, fai sempre un controllo che tutte le variabili siano valorizzate.
    Per farlo basta una semplice ECHO:
    Codice PHP:
    } else {
          
    // processi i dati inviati dalla form
    echo $_POST['produttore']."
    "
    ;
    echo 
    $_POST['tipo']."
    "
    ;
    echo 
    $_POST['mb']."
    "
    ;
    echo 
    $_POST['prezzo']."
    "
    ;
    echo 
    $_POST['numero']."
    "
    ;
    echo 
    $_POST['data']."
    "
    ;

    Devo dirti che però avevi anche sbagliato la sintassi dell'array.
    Si scrive $_POST e non $POST_ come avevi scritto te.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  10. #10
    Grazie a tutti per le risposte.

    Ho un problema che non riesco a risolvere con Apache2.

    Ho questo file eseguibile.php

    codice:
    <html>
    <head>
    </head>
    <body>
    <?php
    	// Include il file che contine la classe database_mysql
    	include "funzioni_mysql.php"
    	
    	// Crea un'istanza della classe
    	$database = new database_mysql();
    	
    	// Verifica della non connessione
    	/*if (!$database->connesso())
    	{*/
    		echo "
    
    Non si è connessi.</p>";
    	//}
    ?>
    </body>
    </html>
    Ma quando lo apro nel server locale non mi visualizza nulla. Anche il codice sorgente della pagina risulta completamente vuoto.

    Sapreste dirmi come mai?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.