Pulsante per compilare una form php in automatico con dati presi da un db

  • Creatore Discussione Creatore Discussione Akram
  • Data di inizio Data di inizio

Akram

Nuovo Utente
20 Feb 2013
4
0
0
ciao,

cerco di spiegarmi, ho fatto da poco il mio primo sito php, è una raccolta di film, quindi i dati del db sono ID, titolo, categoria,cast, trama.. etc..
per identificare un record ho bisogno dell'id e categoria.

Nella sezione amministrativa, c'è una form update tipo post per aggiornare e quindi modificare i dati nel mio db, e devo compilare manualmente l'id, titolo,categoria.. etc
Ho gestito tutte le possibili combinazioni di inserimento es: solo id, categoria e titolo... trama.. etc, però per esempio per modificare la trama, devo reinserirla tutta (copia e incolla), ed è qui che mi è venuta l'idea di inserire un pulsante per compilare in automatico tutti i moduli del form una volta che ho inserito a mano le chiavi id e categoria.

Quindi avrei bisogno di un pulsante che mi compila i moduli senza fare il submit ma restando nella stessa pagina compilata. Ho in mente di passare delle variabili in sessione, usare javascript, addirittura di mettere delle insert nascoste per inserire in una tabella temporanea l'id e categoria e fare il refresh della pagina... ho provato e riprovato senza esito.

Sapete indicarmi una facile soluzione? mi potete postare anche una bozza del codice?
Grazie
 
ciao
non so se ho capito bene, ma potresti fare così
prima del form con cui modifichi fai in querry select al db where id e categoria in modo da estarre i dati che ti servono poi fai il form per uppare
es.
PHP:
<form action="Pinco_pallo" method="post">
<input name="testo" type="text" value="<?php echo $riga['nome_campo'];?>">
<textarea name="trama" cols="" rows=""><?php echo $riga['trama'];?></textarea>
<!-- eccetera -->
</form>
al submit ricevi turri i $_POST e fai l'uppaggio di tutti i campi, se in un campo es trama non hai modificato quanto ti appare nella textarea (quindi valore texarea= valore del campo) php non uppa quel campo
spero di essere stato chiaro, se no posta
 
ciao
non so se ho capito bene, ma potresti fare così
prima del form con cui modifichi fai in querry select al db where id e categoria in modo da estarre i dati che ti servono poi fai il form per uppare
es.
PHP:
<form action="Pinco_pallo" method="post">
<input name="testo" type="text" value="<?php echo $riga['nome_campo'];?>">
<textarea name="trama" cols="" rows=""><?php echo $riga['trama'];?></textarea>
<!-- eccetera -->
</form>
al submit ricevi turri i $_POST e fai l'uppaggio di tutti i campi, se in un campo es trama non hai modificato quanto ti appare nella textarea (quindi valore texarea= valore del campo) php non uppa quel campo
spero di essere stato chiaro, se no posta


intanto grazie per la risposta,

però è piu complesso di quello che sembra..
io devo compilare i campi prendendo(come dici giustamente tu) i dati da una semplice select al db, però nel where id=.. l'id non ce l'ho subito, se non dopo averlo inserito manualmente insieme alla categoria negli appositi moduli del form, e dopo con il pulsante (e quindi con il comando onClick=.. richiamando una funzione) faccio compilare in automatico i restanti moduli (trama compresa).
Quindi il submit ancora non lo tocco, e i $_POST li prendo in un'altra pagina risultato, dove li elaboro e faccio l'update. Mi serve di aggiornare la stessa pagina prima del submit (forse serve anche un refresh, calcolando che il php agisce lato server, giusto? )
Non so proprio come fare..


Metto il mio codice di seguito del form (è rozzo sono alle prime armi :)..è venuto un casino con gli spazi.. )
La pagina del post = update_film.php non la posto perchè non serve qui..
Da notare il button "Compilazione automatica" alla fine, è li che vorrei far richiamare la funzione che mi compila i moduli.. ho lasciato momentaneamente location.reload(true) per aggiornare la pagina, ma manca il resto del codice per compilare i campi che non so..

qualche consiglio?


PHP:
                                <table border="1" width="800" id="admin_update" align="left">
				<tr align="left">
				<td colspan="6"  width="700" align="left">
				<span style='color:#900;font-size:20px'>Aggiornamento Film</span>
				</td>
				
				</tr>
				
                
				<tr align="left">
				<td width="50" align="left">
				<span >ID</span>
				</td>
				<td width="300" align="left"> 
				<span >Titolo</span>
				</td>
				<td width="110" align="left"> 
				<span >Categoria</span>
				</td>
				<td width="50" align="left"> 
				<span >Anno</span>
				</td>
				<td align="left"> 
				</td>
				<td  align="right">  
				</td>
				</tr>
				
				
				<form action="admin/update_film.php" enctype="multipart/form-data" name="update_film" method="post" id="update_film" target="popup"
				onsubmit="window.open('','popup','width=480,height=250,resizable=no,scrollbars=yes, location=no');">
				<tr align="left">
				<td width="50" align="left"> 
				<input size="4" type="text" maxlength="4" id="id2" name="id2" value="<?php echo $_POST['id2']; ?>" />
				</td>
				
				<td width="300" align="left"> 
				<input size="45" type="text" maxlength="45" id="tit2" name="tit2" value="<?php echo $_POST['tit2']; ?>" />
				</td>
				<td width="110" align="left"> 
				<select name="cat2" id="cat2"  <?php echo $_POST['cat2']; ?>>
				<option selected></option>
				<option>Animazione</option>
				<option>Avventura</option>
				<option>Azione</option>
				<option>Commedia</option>
				<option>Drammatico</option>
				<option>Fantascienza</option>
				<option>Fantasy</option>
				<option>Guerra</option>
				<option>Horror</option>
				<option>Musical</option>
				<option>Poliziesco</option>
				<option>SerieTv</option>
				<option>Storico</option>
				<option>Thriller</option>
				<option>Western</option>
                                <option>Prova</option>
				
				</select>
				</td>
				<td width="50" align="left"> 
				<input size="4" type="text" maxlength="4" id="anno2" name="anno2" value="<?php echo $_POST['anno2']; ?>" />
				</td>
				<td width="50" align="left"> 
				<input type="file" name="uploadfile2" id="uploadfile2"  size="6"  />
				</td>
				<td align="right"> 
                                 <input type="submit" value="Aggiorna"  />
				</td>
                
				</tr>
				
				
                
                <tr align="left">
                
                <td colspan="2" width="350"  align="left"> 
				<textarea  cols="30" rows="3" title="Cast2"     id="cast2" name="cast2" value="<?php echo $_POST['cast2']; ?>" >Inserisci il Cast</textarea>
                
				</td>
                 <td colspan="3" width="350" align="left"> 
				<textarea  cols="30" rows="3" title="Trama2"   id="trama2" name="trama2" value="<?php echo $_POST['trama2']; ?>">Inserisci la Trama</textarea>
				</td>
                
                <td  width="50"  align="left"> 
                <input type="reset" value="Reset" />
               
                </td>
		                     
                </tr>
                
                <tr align="left">
                <td colspan="6"   align="right"> 
				<input type="button" name="check_update" id="check_update"  size="6" value="Compilazione automatica" 
                onClick="location.reload(true);" ></input>
               
				</td>
                
                </tr>
                
                </form >
                
                
                
				<br>
		 
               
				<tr align='left'>
				<td colspan="6"  width='800' align='left'>
				<span style='color:#900;font-size:20px'>--------------------------------------------------------------------------------------------------------------</span>
				</td></tr>
				</table>
 
Quello che ti consiglio è di usare AJAX, PHP e jQuery per recuperare dinamicamente le informazioni.

Ti serve un form strutturato più o meno così:
HTML:
<!DOCTYPE html>
<html lang="it">
    <head>
        <meta charset="utf-8">
        <title>Compilazione automatica</title>
    </head>

    <body>
        <form action="#" method="post">
            <div>
                <label>ID:</label>
                <input type="text" name="id" id="id">
            </div>

            <div>
                <label>Titolo:</label>
                <input type="text" name="title" id="title">
            </div>

            <div>
                <label>Categoria:</label>
                <input type="text" name="category" id="category">
            </div>

            <div>
                <label>Anno:</label>
                <input type="text" name="year" id="year">
            </div>

            <div>
                <button type="submit">Invia</button>
                <button id="autofill">Compilazione automatica</button>
            </div>
        </form>

        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script>
        $(function() {
            $("#autofill").click(function() {
                $.getJSON("autofill.php", {
                    'id': $("#id").val()
                }, function(data) {
                    if (data.result == 'success') {
                        $("#title").val(data.info.title);
                        $("#category").val(data.info.category);
                        $("#year").val(data.info.year);
                    } else if (data.result == 'not-found') {
                        alert("ID non trovato.")
                    } else if (data.result == 'error') {
                        alert("Errore interno.");
                    }
                });
            });
        });
        </script>
    </body>
</html>
E un file PHP per il recupero dei dati:
PHP:
<?php
$id = isset($_POST['id']) ? trim($_POST['id']) : 0;

try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
} catch (PDOException $e) {
    die(json_encode(array(
        'result' => 'error',
    )));
}

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stm = $pdo->prepare('SELECT title, category, year FROM tabella WHERE id = ?');

try {
    $stm->execute(array($id));
} catch (PDOException $e) {
    die(json_encode(array(
        'result' => 'error',
    )));
}

if ($stm->rowCount() == 0) {
    die(json_encode(array(
        'result' => 'not-found',
    )));
}

$data = $stm->fetch();

echo json_encode(array(
    'result' => 'success',
    'info'   => $data,
));

Per qualche informazione in più vedi:
 
Quello che ti consiglio è di usare AJAX, PHP e jQuery per recuperare dinamicamente le informazioni.

Ti serve un form strutturato più o meno così:
HTML:
<!DOCTYPE html>
<html lang="it">
    <head>
        <meta charset="utf-8">
        <title>Compilazione automatica</title>
    </head>

    <body>
        <form action="#" method="post">
            <div>
                <label>ID:</label>
                <input type="text" name="id" id="id">
            </div>

            <div>
                <label>Titolo:</label>
                <input type="text" name="title" id="title">
            </div>

            <div>
                <label>Categoria:</label>
                <input type="text" name="category" id="category">
            </div>

            <div>
                <label>Anno:</label>
                <input type="text" name="year" id="year">
            </div>

            <div>
                <button type="submit">Invia</button>
                <button id="autofill">Compilazione automatica</button>
            </div>
        </form>

        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script>
        $(function() {
            $("#autofill").click(function() {
                $.getJSON("autofill.php", {
                    'id': $("#id").val()
                }, function(data) {
                    if (data.result == 'success') {
                        $("#title").val(data.info.title);
                        $("#category").val(data.info.category);
                        $("#year").val(data.info.year);
                    } else if (data.result == 'not-found') {
                        alert("ID non trovato.")
                    } else if (data.result == 'error') {
                        alert("Errore interno.");
                    }
                });
            });
        });
        </script>
    </body>
</html>
E un file PHP per il recupero dei dati:
PHP:
<?php
$id = isset($_POST['id']) ? trim($_POST['id']) : 0;

try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
} catch (PDOException $e) {
    die(json_encode(array(
        'result' => 'error',
    )));
}

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stm = $pdo->prepare('SELECT title, category, year FROM tabella WHERE id = ?');

try {
    $stm->execute(array($id));
} catch (PDOException $e) {
    die(json_encode(array(
        'result' => 'error',
    )));
}

if ($stm->rowCount() == 0) {
    die(json_encode(array(
        'result' => 'not-found',
    )));
}

$data = $stm->fetch();

echo json_encode(array(
    'result' => 'success',
    'info'   => $data,
));

Per qualche informazione in più vedi:



mmm.... io ho già un form che mi rimanda ad un'altra pagina tramite submit in post.. il mio bottone per compilare il resto dei campi dei moduli si trova all'interno del form.. mi sta venendo un'idea, è possibile far diventare il bottone di compilazione automatica come submit di un altro form annidato all'interno? 2 form 1 dentro l'altro, il bottone per compilare i dati dei moduli, e l'invia per il submit finale che rimanda ad un'altra pagina... come posso metterli insieme? mi sembra piu semplice cosi..

un'altra cosa che avevo omesso , nella stessa pagina sono presenti vari form, uno diverso dall'altro a se stanti, che rimandano ad altre pagine diverse. uno per l'insert, per l'update, delete..etc..
 
L'unico modo per fare quello che chiedi senza ricaricare la pagina è usare Ajax, ergo la soluzione che ho proposto io.

Se invece ti va bene anche che la pagina venga ricaricata, allora sì, basta creare due form. Nel primo ci sarà esclusivamente il campo ID e, all'invio, valorizzerai anche i campi del secondo form con nome, titolo e categoria. Qualcosa di simile a questo:
PHP:
<?php
$id = isset($_POST['id']) ? trim($_POST['id']) : 0;

// di default tutti i campi sono vuoti
$data = array(
    'campo1' => '',
);

if ($id !== 0) {
    // recupera i dati relativi all'ID e salvali in $data
    // ...
}
?>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
    <div>
        <label for="id">ID:</label>
        <input type="text" name="id" id="id" />
    </div>

    <div>
        <button type="submit">Valorizza campi</button>
    </div>
</form>

<form action="#" method="post">
    <div>
        <label for="campo1">Campo 1:</label>
        <input type="text" name="campo1" id="campo1" value="<?php echo $data['campo1']; ?>" />
    </div>

    <div>
        <button type="submit">Invia</button>
    </div>
</form>
 
Grazie a tutti siete stati molto preziosi con i suggerimenti...ho risolto da solo poi, vi dico come cosi se a qualcuno serve può prendere spunto.

Bisogna creare 2 pulsanti tipo submit (nessun doppio form) ed ad ognuni di essi bisogna far gestire action diverse con il comando onclick..

codice pulsante compilazione automatica (per aggiornare la stessa pagina passando gli $_POST[] che mi servono ):
HTML:
<input name="check_update" type="submit" onclick="this.form.action='amministrazione.php';this.form.target='_self'"  value="Compilazione automatica" />

codice pulsante submit principale per fare il mio update una volta che ho gestito tutti i parametri $_POST[] che ho preso dal primo refresh(mi manda ad un'altra pagina per gestire i parametri facendo un update, e mi apre un popup di conferma o errore):
HTML:
  <input type="submit" onclick="window.open('','popup','width=480,height=250,resizable=no,scrollbars=yes, location=no');" value="Aggiorna"  />

mentre nella form action lascio questo :
HTML:
<form action="admin/update_film.php" enctype="multipart/form-data" name="update_film" method="post" id="update_film" target="popup">

Da notare che gli onclick bisogna metterli solo esclusivamente nei bottoni submit(ovviamente nel mio caso, altrimenti mi apriva una pagina bianca quando cliccavo sulla compilazione automatica)
E il tasto reset va editato, bisogna creare un funzione onclick per settare a "" tutti i moduli, o come questo :
HTML:
<input type="button" onclick="document.update_film.cast2.value='Inserisci il Cast';document.update_film.trama2.value='Inserisci la Trama';
                document.update_film.anno2.value='';document.update_film.cat2.value='';document.update_film.tit2.value='';document.update_film.id2.value='';
                document.update_film.uploadfile2.value='';" value="Reset" />



Vi posto tutto il codice, grazie a tutti:

PHP:
<!--
                  ***************************     TABELLA UPDATE     ***********************************           
                -->
               

				
                <?php
				require 'connect.php';
				if ( isset($_POST['id2'])&& isset($_POST['cat2']) && ($_POST['id2']!="")  && ($_POST['cat2']!="")   ){
					//echo "<br>query pronta<br>";
					
					$id_update=$_POST['id2'];
					$cat_update=$_POST['cat2'];
				
					$ricevuta_update = mysql_query("SELECT ID , Titolo, Categoria, Datains, Anno, Locandina, Cast, Trama FROM $cat_update WHERE ID='$id_update'");
					
					while ($row = mysql_fetch_array($ricevuta_update, MYSQL_BOTH)) {
						$titolo2 = $row[1];
						$_POST['anno2']= $row[4];
						$cast2=$row[6];
						$trama2=$row[7];
								
						//gestisco gli apostrofi
						$titolo2=stripslashes($titolo2);
						$cast2=stripslashes($cast2);
						$trama2=stripslashes($trama2);
						
						
						if ($row[3] < "2013-02-10 00:00:01") {
							//gestisco gli accenti
							$titolo2 =  HtmlEntities($titolo2); 
							$cast2 = HtmlEntities($cast2); 
							$trama2 = HtmlEntities($trama2);
						
						}
			
						$_POST['tit2']=$titolo2;
						$_POST['cast2']=$cast2;
						$_POST['trama2']=$trama2;
			
				
					}
					
					
				}
				
				
				
				?>
           
                
                
                
                <table border="1" width="800" id="admin_update" align="left">
				<tr align="left">
				<td colspan="6"  width="700" align="left">
				<span style='color:#900;font-size:20px'>Aggiornamento Film</span>
				</td>
				
				</tr>
				
                
				<tr align="left">
				<td width="50" align="left">
				<span >ID</span>
				</td>
				<td width="300" align="left"> 
				<span >Titolo</span>
				</td>
				<td width="110" align="left"> 
				<span >Categoria</span>
				</td>
				<td width="50" align="left"> 
				<span >Anno</span>
				</td>
				<td align="left"> 
				</td>
				<td  align="right">  
				</td>
				</tr>
				
				
				<form action="admin/update_film.php" enctype="multipart/form-data" name="update_film" method="post" id="update_film" target="popup"
				>
				<tr align="left">
				<td width="50" align="left"> 
				<input size="4" type="text" maxlength="4" id="id2" name="id2" value="<?php echo $_POST['id2']; ?>" />
				</td>
				
				<td width="300" align="left"> 
				<input size="45" type="text" maxlength="45" id="tit2" name="tit2" value="<?php echo $_POST['tit2']; ?>" />
				</td>
				<td width="110" align="left"> 
				<select name="cat2" id="cat2"  <?php echo $_POST['cat2']; ?>>
				<option selected></option>
				<option  <?php if (($_POST['cat2'])=="Animazione") {?> selected <?php }?> >Animazione</option>
				<option  <?php if (($_POST['cat2'])=="Avventura") {?> selected <?php }?> >Avventura</option>
				<option  <?php if (($_POST['cat2'])=="Azione") {?> selected <?php }?> >Azione</option>
				<option  <?php if (($_POST['cat2'])=="Commedia") {?> selected <?php }?> >Commedia</option>
				<option  <?php if (($_POST['cat2'])=="Drammatico") {?> selected <?php }?> >Drammatico</option>
				<option  <?php if (($_POST['cat2'])=="Fantascienza") {?> selected <?php }?> >Fantascienza</option>
				<option  <?php if (($_POST['cat2'])=="Fantasy") {?> selected <?php }?> >Fantasy</option>
				<option  <?php if (($_POST['cat2'])=="Guerra") {?> selected <?php }?> >Guerra</option>
				<option  <?php if (($_POST['cat2'])=="Horror") {?> selected <?php }?> >Horror</option>
				<option  <?php if (($_POST['cat2'])=="Musical") {?> selected <?php }?> >Musical</option>
				<option  <?php if (($_POST['cat2'])=="Poliziesco") {?> selected <?php }?> >Poliziesco</option>
				<option  <?php if (($_POST['cat2'])=="SerieTv") {?> selected <?php }?> >SerieTv</option>
				<option  <?php if (($_POST['cat2'])=="Storico") {?> selected <?php }?> >Storico</option>
				<option  <?php if (($_POST['cat2'])=="Thriller") {?> selected <?php }?> >Thriller</option>
				<option  <?php if (($_POST['cat2'])=="Western") {?> selected <?php }?> >Western</option>
                <option  <?php if (($_POST['cat2'])=="Prova") {?> selected <?php }?> >Prova</option>
				
				</select>
				</td>
				<td width="50" align="left"> 
				<input size="4" type="text" maxlength="4" id="anno2" name="anno2" value="<?php echo $_POST['anno2']; ?>" />
				</td>
				<td width="50" align="left"> 
				<input type="file" name="uploadfile2" id="uploadfile2"  size="6"  />
				</td>
				<td align="right"> 
                 <input type="submit" onclick="window.open('','popup','width=480,height=250,resizable=no,scrollbars=yes, location=no');" value="Aggiorna"  />
				</td>
                
				</tr>
				
				
                
                <tr align="left">
                
                <td colspan="2" width="350"  align="left"> 
				<textarea  cols="30" rows="3" title="Cast2"     id="cast2" name="cast2" value="<?php echo $_POST['cast2']; ?>" ><?php if (isset($_POST['cast2']))
				{echo $_POST['cast2'];}else { echo "Inserisci il Cast";} ?></textarea>
                
				</td>
                 <td colspan="3" width="350" align="left"> 
				<textarea  cols="30" rows="3" title="Trama2"   id="trama2" name="trama2" value="<?php echo $_POST['trama2']; ?>" ><?php if (isset($_POST['trama2']))
				{echo $_POST['trama2'];}else { echo "Inserisci la Trama";} ?></textarea>
				</td>
                
                <td  width="50"  align="left"> 
                <input type="button" onclick="document.update_film.cast2.value='Inserisci il Cast';document.update_film.trama2.value='Inserisci la Trama';
                document.update_film.anno2.value='';document.update_film.cat2.value='';document.update_film.tit2.value='';document.update_film.id2.value='';
                document.update_film.uploadfile2.value='';" value="Reset" />
               
                </td>
		                     
                </tr>
            
                
          		<!--Pulsante Compilazione automatica -->
                <tr align="left">
                <td colspan="6"   align="right"> 
				<input name="check_update" type="submit" onclick="this.form.action='amministrazione.php';this.form.target='_self'"  value="Compilazione automatica" />
               
				</td>
                
                </tr>
                
                </form>
               
           
                
				<br>
		 
               
				<tr align='left'>
				<td colspan="6"  width='800' align='left'>
				<span style='color:#900;font-size:20px'>--------------------------------------------------------------------------------------------------------------</span>
				</td></tr>
				</table>
 

Discussioni simili