Vai al contenuto

Ricerca PHP - MySQL ed inserimento record


magomac

Messaggi raccomandati

Ciao a tutti!!!!!

Premetto che sono veramente un neofita di php!!!!!

Vi spiego il mio problema:

devo creare un sistema per la gestione di una regata di vela.

La parte iscrizioni deve funzionare così:

da un modulo, da un menù a tendina, si seleziona la classe (le opzioni sono 4), poi si deve inserire (sempre dallo stesso modulo) il numero velico e successivamente Nome, Numero di tessera e Circolo Velico.

Tutti questi dati devono andare a creare un nuovo record su una tabella di MySQL a seconda della classe scelta: CIOE' CI DEVE ESSERE UNA TABELLA PER OGNI CLASSE.

E questo è il primo problema.

il secondo è questo:

sul mio database mysql ho importato una tabella contentente Nome, Numero di Tessera e Circolo di tutti i tesserati alla federazione.

Devo far si che, durante la compilazione del modulo precedente, digitando il numero di tessera si compilino automaticamente i campi del nome e del circolo velico.

Per quel che mi riguarda la ricerca del campo può anche essere effettuata un pop-up che poi rimanda i dati al modulo, l'importante è che funzioni!!!!!!

Mi sapete aiutare???? Grazie è abbastanza urgente.

P.S. Come editor uso Dreamweaver 8 scrivendo il codice php manualmente....

Link al commento
Condividi su altri siti

  • Risposte 100
  • Creato
  • Ultima Risposta

è possibile farlo su due pagine o con il ricaricamento della solita pagina?

http://www.officina-creativa.net (community di designer e creativi)

http://www.kiaz.it (chiara salvatore 's personal site... tradotto: il mio piccolo sitino ancora non del tutto "maturo" :-p )

MACBOOKPRO 15" - IPOD NANO 4GB

Link al commento
Condividi su altri siti

beh, allora a me è venuto in mente questa cosa (premetto che non sono una grande esperta...)

nella prima pagina fai selezionare la classe, il numero velico e il numero di tessera...

nella seconda pagina (in cui avrai passato i valori del form) selezioni i dati nome e circolo velico in base al numero di tessera con una query select where numerotessera = 1234566...

(se poi non capisci ti scrivo il codice per bene... è che devo fare veloce perché sto andando a pranzo...)

e chiedi conferma dei dati. Una volta confermati i dati, in base alla classe selezionata fai l'insert...

il nome della tabella nella query deve essere una variabile... prima della query fai un if else o uno switch della variabile classe e in base a quello decidi quale sarà la tabella in cui inserire i dati..

http://www.officina-creativa.net (community di designer e creativi)

http://www.kiaz.it (chiara salvatore 's personal site... tradotto: il mio piccolo sitino ancora non del tutto "maturo" :-p )

MACBOOKPRO 15" - IPOD NANO 4GB

Link al commento
Condividi su altri siti

Ciao a tutti!!!!!

Tutti questi dati devono andare a creare un nuovo record su una tabella di MySQL a seconda della classe scelta: CIOE' CI DEVE ESSERE UNA TABELLA PER OGNI CLASSE.

No, non è obbligatorio fare come dici tu. Puoi anche usare una sola tabella in cui è previsto un campo Classe di tipo enumerativo e poi filtrare i dati tramite questo valore.

Se invece vuoi per forza usare una tabella per ogni classe, è sufficiente che nel php di elaborazione dei dati ricevuti inserisci il codice che seleziona la tabella giusta sulla base della classe prescelta (metodo più veloce e conveniente se il numero di classi è basso).

Non ho capito però in che cosa consiste il tuo problema:

- non sai come impostare la sequenza di inserimento dei dati?

- non sai come si scrive il codice php per leggere il valore scelto dal menu a tendina?

- non sai come si scrive il codice php per scegliere la tabella in base all'input?

- non sai come si scrive il codice php per inserire una riga in una tabella MySQL?

Devo far si che, durante la compilazione del modulo precedente, digitando il numero di tessera si compilino automaticamente i campi del nome e del circolo velico.

Il "durante" non è un approccio corretto anche perché non mette al riparo da errori di battuta e perché rende difficile individuare il trigger esatto per eseguire la ricerca nel database. Molto meglio un approccio a due pagine, in cui nella prima si chiede di inserire il numero di tessera e nella seconda vengono presentati i dati ricavati dalla query basata sul numero di tessera. In questo modo puoi eseguire anche un controllo migliore sul dato inserito dall'atleta. Sconsiglio di usare finestre di popup per questa operazione.

Serve aiuto? Posso darti una mano in

Webmasters - Aiuto Software - Da Windows a Mac

Mappa Utenti ItaliaMac

[[miao]]

Link al commento
Condividi su altri siti

beh, allora a me è venuto in mente questa cosa (premetto che non sono una grande esperta...)

nella prima pagina fai selezionare la classe, il numero velico e il numero di tessera...

nella seconda pagina (in cui avrai passato i valori del form) selezioni i dati nome e circolo velico in base al numero di tessera con una query select where numerotessera = 1234566...

(se poi non capisci ti scrivo il codice per bene... è che devo fare veloce perché sto andando a pranzo...)

e chiedi conferma dei dati. Una volta confermati i dati, in base alla classe selezionata fai l'insert...

il nome della tabella nella query deve essere una variabile... prima della query fai un if else o uno switch della variabile classe e in base a quello decidi quale sarà la tabella in cui inserire i dati..

E' proprio questo!!!!

Grazie mille!!!!!!!!!!!!!!!

Se però quando hai tempo riuscissi a scrivermi il codice (quello della seconda pagina, la prima basta fare un form con metodo post e azione il nome della seconda pagina, vero?) mi faresti un favore immenso.

Grazie mille!!!!!!!

P.S.

Ti do un po' di dati penso necessari per la scrittura del codice

indirizzo del database: localhost

user: root

pasw: root

database: cnc_gestioneregate

tabella contenente l'elenco dei tesserati: tesserati

se ti serve altro chiedi pure.

grazie

Link al commento
Condividi su altri siti

No, non è vero quello che dici. Non è necessario seguire questo approccio: puoi anche usare una sola tabella in cui è previsto un campo Classe di tipo enumerativo e poi filtrare i dati tramite questo valore.

Se invece vuoi per forza usare una tabella per ogni classe, è sufficiente che nel php di elaborazione dei dati ricevuti inserisci il codice che seleziona la tabella giusta sulla base della classe prescelta (metodo più veloce e conveniente se il numero di classi è basso).

Non ho capito però in che cosa consiste il tuo problema:

- non sai come si scrive il codice php per leggere il valore scelto dal menu a tendina?

- non sai come si scrive il codice php per scegliere la tabella?

- non sai come si scrive il codice php per inserire una riga in una tabella MySQL?

Il "durante" non è un approccio corretto anche perché non mette al riparo da errori di battuta e perché rende difficile individuare il trigger esatto per eseguire la ricerca nel database. Molto meglio un approccio a due pagine, in cui nella prima si chiede di inserire il numero di tessera e nella seconda vengono presentati i dati ricavati dalla query basata sul numero di tessera. In questo modo puoi eseguire anche un controllo migliore sul dato inserito dall'atleta. Sconsiglio di usare finestre di popup per questa operazione.

I miei problemi sono i seguenti:

- non so come si scrive il codice php per scegliere la tabella?

- non so come fare selezionare nome e circolo facendo la ricerca sul database tesserati partnedo dal numero di tessera

Grazie mille a tutti!

Ciao

Link al commento
Condividi su altri siti

nel form html con il menu a tendina devi individuare il parametro, es. classe, tramite il tag html "id" e/o "name":

<select id="classe" name="classe">

<option value="LASER">Laser</option>

<option value="STAR">Star</option>

<option value="740">740</option>

</select>

il codice php di elaborazione sarà qualcosa di questo tipo:

$classeScelta = $_POST['classe']; // legge il valore dalla form

switch ($classeScelta) {

case "LASER":

$tabellaClasse="tabellaLaser"; // qui ci va il nome della tabella MySQL corrispondente

break;

case "STAR":

$tabellaClasse="tabellaStar";

break;

case "740":

$tabellaClasse="tabella740";

break;

default:

echo "valore non valido";

break;

}

Per il secondo problema (ma è proprio l'ABC di MySQL!): supponiamo che nel db dei tesserati la tabella che contiene l'elenco si chiami elencoTesserati e che nella tabella ci siano i campi "nome", "circolo" e "tessera". Il php da scrivere sarà una cosa del tipo:

$numeroTessera = $_POST['numeroTessera']; // legge i dati dal form

$ricerca = mysql_query ("select nome,circolo from elencoTesserati where tessera='$numeroTessera'") or die "Impossibile accedere al db";

$risultato = mysql_fetch_object($ricerca);

$nomeAtleta = $risultato->nome;

$circoloVelico = $risultato->circolo;

Ma prima di lanciarti in queste cose, visto il livello delle domande che stai facendo, ti suggerirei di studiare almeno l'ABC di MySQL e di php perché queste sono proprio le operazioni di base che più di base non si può :rolleyes:

Serve aiuto? Posso darti una mano in

Webmasters - Aiuto Software - Da Windows a Mac

Mappa Utenti ItaliaMac

[[miao]]

Link al commento
Condividi su altri siti

Allora, ho fatto tutto.

Prima di creare il codice per l'inserimento record nel database, però, ho provato, nella seconda pagina, a dargli l'istruzione print per verificare se i dati erano giusti. Resta cmq qualche problema perchè non funziona! Cioè dopo aver inserito i dati nella prima pagina e aver premuto su prosegui appare una pagina vuota, penso quindi che ci sia un errore nel codice, ma non lo trovo!

Mi date ancora una mano?

Grazie!

CODICE DELLA PRIMA PAGINA (ACQUISIZIONE DATI)

<body>
<div align="center">
 <table width="760" border="0" align="center">
   <tr>
     <td><div align="center"><img src="img/testata-gif.gif" alt="testata gestione regate" width="760" height="248" /></div></td>
   </tr>
   <tr>
     <td><p align="center" class="titolipagina">
       <p align="center"><span class="titolipagina">AGGIUNGI UN ISCRITTO </span><br />
         <span class="sottotitoli">INSERISCI LA CLASSE ED IL NUMERO DI TESSERA F.I.V.</span> </p>
       <form id="form1" name="form1" method="post" action="aggiungi_iscritto2.php">
         <table width="38%" border="0" align="center" cellspacing="5">
           <tr>
             <td width="36%" class="testo_form">Classe:</td>
             <td width="64%"><label>
               <select name="select" class="testo_dentrocampo">
                 <option value="standard">Laser Standard</option>
                 <option value="radial_masc">Laser Radial M</option>
                 <option value="radial_femm">Laser Radial F</option>
                 <option value="quattro_sette">Laser 4.7</option>
               </select>
             </label></td>
           </tr>
           <tr>
             <td class="testo_form">Num. Velico: </td>
             <td><label>
               <input name="textfield" type="text" size="10" />
             </label></td>
           </tr>
           <tr>
             <td class="testo_form">Tessera FIV: </td>
             <td><label>
               <input name="tesserafiv" type="text" class="testo_dentrocampo" id="tesserafiv" size="8" />
             </label></td>
           </tr>
         </table>
               <br />
               <table width="42%" border="0" align="center">
                 <tr>
                   <td width="155"><div align="center">
                       <label>
                       <input type="submit" name="Submit" value="Prosegui " />
                       </label>
                   </div></td>
                   <td width="154"><div align="center">
                       <label>
                       <input type="reset" name="Submit2" value="Annulla " />
                       </label>
                   </div></td>
                 </tr>
               </table>
               <p align="center">
                 <label></label>
                 <label></label>
               </p>
               </form>
       </table>
</body>

[b]CODICE DELLA SECONDA PAGINA (ELABORAZIONE)[/b]
<body>
<div align="center">
 <table width="760" border="0" align="center">
   <tr>
     <td><div align="center"><img src="img/testata-gif.gif" alt="testata gestione regate" width="760" height="248" /></div></td>
   </tr>
   <tr>
     <td><p align="center" class="titolipagina">
       <p align="center"><span class="titolipagina">AGGIUNGI UN ISCRITTO </span><br />
         <span class="sottotitoli">VERIFICA I DATI REGISTRATI  </span> </p>
       <p align="center"><?php

	$host = 'localhost';
	$user = 'root';
	$password = 'root';
	$database = 'cnc_gestioneregate';

	$db = mysql_connect($host, $user, $password)
	          or die ("Impossibile connettersi al server $host");

	      mysql_select_db($_database, $db)
		      or die ("Impossibile connettersi al databse $database");


          $classeScelta = $_POST['classe'];
		  switch ($classeScelta) {

		  case "standard":
		  $tabellaClasse="standard";
		  break;

		  case "radial_masc":
		  $tabellaClasse="radial_masc";
		  break;

		  case "radial_femm":
		  $tabellaClasse="radial_femm";
		  break;

		  case "quattro_sette":
		  $tabellaClasse="quattro_sette";
		  break;

		  default:
		  echo "Valore Classe non valido. Riprova";
		  break;
		  }

		  $numerofiv = $_POST['tesserafiv'];

		  $ricerca = mysql_query ("select nome, circolo from tesserati where fiv='$numerofiv'") or die "Impossibile accedere al database";
		  $risultato = mysql_fetch_object($ricerca);
		  $nome = $risultato->nome;
		  $circolo = $risultato->circolo;

		  print("Questa è una prova perchè non scrive un record comunque nome del tesserato $nome e nome del circolo $circolo"); 
		  ?>

       </p>
     </table>
</body>

Grazie ancora

Link al commento
Condividi su altri siti

Il tuo errore consiste nell'uso errato dei valori "name='....'" nei campi delle form che non corrispondono al nome dei parametri che passi a php.

Mi spiego:

se tu scrivi nel codice della prima pagina:

<select name="select" class="testo_dentrocampo">

in realtà hai definito un parametro di nome "select" (name="select", appunto) che PHP può leggere tramite l'operatore $_POST. PHP però deve chiamare il parametro usando all'interno di $_POST esattamente lo stesso nome che gli hai dato tu nella prima pagina.

invece nel codice della seconda pagina tu tenti di far leggere a PHP tramite $_POST il valore di un parametro di nome "classe" che non hai definito da nessuna parte nella prima pagina.

il codice corretto da scrivere nella prima pagina è il seguente:

<select name="classe" class="testo_dentrocampo">

<option value="standard">Laser Standard</option>

<option value="radial_masc">Laser Radial M</option>

<option value="radial_femm">Laser Radial F</option>

<option value="quattro_sette">Laser 4.7</option>

</select>

In questo modo nella seconda pagina quando esegui l'istruzione $classeScelta=$_POST['classe'] PHP riesce a leggere il valore corretto.

Occhio inoltre che c'è anche un altro errore nel tuo codice della seconda pagina:

se per identificate il database usi un nome variabile senza underscore "_", ossia se scrivi:

$database = 'cnc_gestioneregate';

poi qualche riga più sotto devi utilizzare lo stesso identico nome della variabile

mysql_select_db($database, $db)

e non

mysql_select_db($_database, $db)

Serve aiuto? Posso darti una mano in

Webmasters - Aiuto Software - Da Windows a Mac

Mappa Utenti ItaliaMac

[[miao]]

Link al commento
Condividi su altri siti

ma dove stai testando il tuo codice, sul tuo computer in locale o sul server web su cui hai l'acconto?

nel primo caso devi verificare se il tuo webserver locale è configurato correttamente per gestire php e mysql (che devi ovviamente avere installati e abilitati nel file di configurazione del webserver)

nel secondo caso, per l'accesso al database devi usare come user e password i valori che ti ha comunicato il provider (che dubito ti conceda di collegarti come 'root'-'root')

prova anche a sostituire print("....") con echo "..." - non cambia molto in realtà - e a inserire altre righe di stampa intermedie, per esempio

$classeScelta = $_POST['classe'];

echo "Valore ricevuto dalla prima pagina: $classeScelta <br>";

e nella prima pagina togli i tag <label> e </label> che usati così non hanno significato :ghghgh:

Serve aiuto? Posso darti una mano in

Webmasters - Aiuto Software - Da Windows a Mac

Mappa Utenti ItaliaMac

[[miao]]

Link al commento
Condividi su altri siti

Guarda: io ho provato ma continua a non funzionare!!!!!!!!!

Nel file che trovi linkato al fondo del post ci sono le due pagine, quando hai tempo magari guardale da lì che è senz'altro molto più chiaro di ricopiare su italiamac.

Ovviamente tu non vedrai font (manca il css) e immagini e soprattutto a te non potrà funzionare perchè non hai il database però per controllare il codice penso ti sia più comodo.

GRAZIE ANCORA DI TUTTO!

Ciao ciao magomac

http://www.percorsipsi.com/altro/andrea/paginephp.zip

Link al commento
Condividi su altri siti

vero! però il database funziona (la prima pagina di quel programma è una pagina di login che va a prendere user e pasw in una tabella del database quindi.......)

E' vero che non ne so molto di php ma....

Ho provato con Safari, Firefox, Camino e Opera: tutti lo stesso risultato

Link al commento
Condividi su altri siti

Ciao,

ho fatto ancora due prove: ho provato a mettere provvisoriamente come seconda pagina solo un'istruzione:

<?php

print("hai inserito classe $_REQUEST[classe] , Numero velico $_REQUEST[velico] e tessera federale $_REQUEST[tesserafiv] . Speriamo che funzioni ");

?>

e così mi ha riportato i dati che ho inserito prima, perfettamente!

A questo punto ho copiato questa istruzione e l'ho inserita al fondo della seconda pagina originaria ma niente! L'output è stata una pagina vuota.

Significa che l'errore è nella parte precedente...... io però continuo a non trovarlo!!

Link al commento
Condividi su altri siti

non ho ancora avuto tempo di guardare il tuo codice, ma in assenza di un tool di debugger ti suggerisco di fare questa prova: scrivi una riga del tipo

print ("Fino a qua ci arrivo");

e inseriscila nel codice php "incriminato" prima dopo la prima istruzione e provi, poi dopo la seconda istruzione e riprovi e così via, fino a trovare il punto in cui si blocca il tutto.

altra possibilità: prova a riutilizzare come seconda pagina il codice a un'istruzione che hai usato sopra ma usa $_POST al posto di $_REQUEST e vedi cosa succede - se ti viene fuori la pagina bianca potrebbe essere una questione o di configurazione del php o di versione del php

Serve aiuto? Posso darti una mano in

Webmasters - Aiuto Software - Da Windows a Mac

Mappa Utenti ItaliaMac

[[miao]]

Link al commento
Condividi su altri siti

Allora ho provato ad inserire print ("Fino a qua ci arrivo"); in vari punti ANCHE ALL'INIZIO subito dopo <?php ma non me ne stampa nemmeno uno, sempre pagina bianca!

Ho provato invece a fare la seconda pagina solo così (come mi hai indicato):

<body>

<div align="center">

<table width="760" border="0" align="center">

<tr>

<td><div align="center"><img src="img/testata-gif.gif" alt="gestione regate" width="760" height="248" /></div></td>

</tr>

<tr>

<td><p align="center" class="titolipagina">

<p align="center"><span class="titolipagina">AGGIUNGI UN ISCRITTO </span><br />

<span class="sottotitoli">VERIFICA I DATI REGISTRATI </span> </p>

<p align="center"><?php

print(" Allora hai inserito $_POST[classe] e $_POST[velico] e $_POST[tesserafiv] ");

?>

</p>

</table>

</body>

e funziona! mi riporta i dati che ho scritto.......

Grazie ciao

Link al commento
Condividi su altri siti

prova a togliere o meglio a commentare le istruzioni di accesso al db (comprese quelle iniziali di apertura della connessione e di scelta del db) e vedi cosa succede

Serve aiuto? Posso darti una mano in

Webmasters - Aiuto Software - Da Windows a Mac

Mappa Utenti ItaliaMac

[[miao]]

Link al commento
Condividi su altri siti

lo scopo di questa manovra non è quello di far funzionare la cosa ma di individuare il punto che manda tutto in tilt. in questo modo puoi vedere se l'inghippo che impedisce la visualizzazione della pagina è legato a quelle istruzioni oppure no.

se eliminando le istruzioni in cui richiami le funzioni mysql non vedi più comparire una pagina non bianca (visto che nel resto del php ci sono altre istruzioni di stampa) allora vuol dire che l'inghippo sta in quelle righe e almeno hai isolato il punto su cui devi intervenire per far funzionare il tutto alla fine.

Serve aiuto? Posso darti una mano in

Webmasters - Aiuto Software - Da Windows a Mac

Mappa Utenti ItaliaMac

[[miao]]

Link al commento
Condividi su altri siti

Aspettando risposta in relazione al grosso problema della ricerca fiv ho iniziato a sviluppare il modulo per l'inserimento manuale, utile nel caso che fallisca la ricerca a partire dal numero fiv.

Qui bisogna inserire manualmente tutti i dati.

Ho fatto un form, e nella pagina dopo mi fa vedere il riepilogo in modo che l'utente possa confermarli.

Il problema è: come faccio a far si che l'inserimento dei dati nel db avvenga solo dopo che l'utente abbia confermato i dati?

Link al commento
Condividi su altri siti

Il problema è: come faccio a far si che l'inserimento dei dati nel db avvenga solo dopo che l'utente abbia confermato i dati?

Allora la sequenza che puoi usare è questa:

Pagina 1 (che puoi nominare anche .html, non serve .php visto che non c'è php coinvolto): form di inserimento dei dati, premendo "invio" si va alla

Pagina 2 (quella che ancora non ti funziona :baby: ): form di presentazione dei dati e di richiesta di conferma, premendo "conferma" si va alla

Pagina 3 (quella che ancora ti manca): PHP, contiene il codice che esegue l'inserimento effettivo nel database e poi presenta il messaggio di eventuale conferma/errore.

Per passare dalla pagina 2 alla pagina 3 i dati puoi usare questo trucco: dato che alla fine della pagina 2 devi inserire un form per gestire il tasto "Conferma", tramite lo stesso form passi in modalità "hidden" i dati da inserire nel db, per esempio:

<form name="conferma" action="pagina3.php" method="post">

<input type="hidden" name="tesserafiv" value="<?php echo $tesserafiv; ?>" />

<input type="hidden" ecc. > per ogni altro parametro da passare

<input type="submit" value="Conferma i dati" />

</form>

Nella pagina 3 poi estrai i dati tramite il solito metodo $_POST e li usi per la query di inserimento in mysql.

Serve aiuto? Posso darti una mano in

Webmasters - Aiuto Software - Da Windows a Mac

Mappa Utenti ItaliaMac

[[miao]]

Link al commento
Condividi su altri siti

perfetto, questo mi è di grande aiuto! Così finisco la parte di inserimento manuale.

Per l'inserimento nel database, nella pagina 3, posso usare questo parametro:?

$query = "insert into $classe" .  "NOME, FIV, CIRCOLO, VELICO" . " VALUES ('" . $_POST['nome'] . "','". $_POST['tesserafiv'] . "','".$_POST['circolo'] . "','".$_POST[''velico'] . "')";
if (!mysql_query($query, $db))
{
print("errore");
}
else
{
print("ok");
}
mysql_close($db);

?????

Cmq adx provo, mentre per la pagina due dell'automatico avendo visto che il problema sta nella parte finale, quella della ricerca sul database del numero fiv, hai quale idea di come potrei scriverla in altri modi?

Grazie ancora di tutto

Ciao

Link al commento
Condividi su altri siti

PROBLEMA PAGINA 2 RISOLTO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ho provato a fare qualche ricerca sul web di codici per le ricerche, poi ho fatto un mix tra quelo che ho trovato e tra il codice che mi hai dato tu e.... FUNZIONA!!!!!!

Quqato è il codice che ho usato:

  
		  $numeroTessera = $_POST['tesserafiv'];

$query = 'SELECT NOME, CIRCOLO FROM ' . tesserati. ' WHERE ' . $numeroTessera . ' = ' . FIV . ' LIMIT 1;';   $risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );
while ($riga = mysql_fetch_object($risultato)) {
  $nomeottenuto=$riga->NOME;
  $circoloottenuto=$riga->CIRCOLO;
}

print("$nomeottenuto e $circoloottenuto");

Grazie di tutto.... Adesso faccio l'inserimento nel database, SPERO DI NON AVER PROBLEMI

Ciao ciao

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.


×
×
  • Crea Nuovo...