Vai al contenuto

trasferimento dati tramite combo_box in php


lupin3

Messaggi raccomandati

Ciao a tutti,sono un neofita autodidatta del php...

desideravo capire come funzionano le combobox(si chiamano così???)immagine18mv.png

spiego in breve l'utilizzo che ne vorrei fare, tramite una pagina vorrei aggiornare una tabella di un db fatto in mysql,questa tabella ha 2 valori che sono chiavi secondarie che s riferiscono agli ID di altre 2 tabelle,quindi nella pagina,anzichè dover inserire l'id di riferimento volevo comparisse una lista con i nomi relativi agli id, una volta compilati i campi quindi viene chiamata la pagina di update che mi inserisce i valori nel db...

Io la combobox l'ho così strutturata :

</tr>
<tr>
    <td>*NOME*</td>
    <td><Select style="width:200px" id=select2 name="IdN">
    <option value="">Scegli</option>
<?php
    
    $result = mysql_query("select IdN,NOME  from TABELLA1", $connection);
    
    while ($row = mysql_fetch_array($result))
    {
     ?>
      <OPTION value=<?php $row["IdN"] ?> ><?php print"{$row["NOME"]}"?>
     <?php
    }
?>

</Select></td>
</tr>

e questa la pagina di update :

<?php

require "db.inc";

if (!empty($_GET["IdN"])&&
      .......altre campi...)
{
    if(!($connection = @ mysql_connect('localhost', 'USER', 'PW')))
       die("could not connect to database");
     $IdN = mysqlclean($_GET, "IdN", 50, $connection);
     ........ altri campi....
    
    if(!mysql_select_db("DATABASE",$connection))
       showerror();
    
    $query = "Insert into TABELLA2 values 
              (NULL, $IdN, ....ALTRI CAMPI)";
    
    if(!(@mysql_query ($query, $connection)))
    showerror();
    header("location:../tabella2.php");
}

else

header("location:../tabella1.php");

?>

A me non supera il primo controllo e quindi mi redirige nuovamente alla pagina per l'inserimento dati,il valora che non viene "preso"

è l'id selezionato dalla combo...qualche suggerimento?

grazie mille a tutti :gira:

Link al commento
Condividi su altri siti

la tua query così come l'hai scritta non estrae l'ID ma solo il nome ... e siccome la pagina dell'update la prima cosa che fa è ridirigerti se non hai valorizzato l'ID ....

comincia con


$result = mysql_query("select  IdN , NOME  from TABELLA1", $connection);

daltra parte se stai usando $_GET significa che passi i dati in Querystring ... per cui nella barra dell'indirizzo dovresti vederlo se l'ID viaggia oppure è a null ... ammesso che non ti faccia il redirect troppo velocemente :lol:

Narsil Bearer Blog : Destinati a Frantumarsi

"Metal ! Will Stand Tall !!!"

Link al commento
Condividi su altri siti

la tua query così come l'hai scritta non estrae l'ID ma solo il nome ... e siccome la pagina dell'update la prima cosa che fa è ridirigerti se non hai valorizzato l'ID ....

comincia con


$result = mysql_query("select  IdN , NOME  from TABELLA1", $connection);

daltra parte se stai usando $_GET significa che passi i dati in Querystring ... per cui nella barra dell'indirizzo dovresti vederlo se l'ID viaggia oppure è a null ... ammesso che non ti faccia il redirect troppo velocemente :lol:

[/b]

hai ragione,ma purtroppo questo è un errore commesso nel copiare il codice,nella query l'id viene estratto ma poi non risulta correttamente associato.

Link al commento
Condividi su altri siti

hai ragione,ma purtroppo questo è un errore commesso nel copiare il codice,nella query l'id viene estratto ma poi non risulta correttamente associato.

[/b]

lo so che forse è un "sega" mentale ...

ma io di solito le scrivo così

$_GET['IdN']

con gli apici singoli intendo ... ora non posso testartela al volo ...

Narsil Bearer Blog : Destinati a Frantumarsi

"Metal ! Will Stand Tall !!!"

Link al commento
Condividi su altri siti

ok te l'ho testato ... a me funziona l'unica cosa è che non hai scritto il codice per intero ...

qui

if (!empty($_GET["IdN"])

ipotizzando non ci siano altri campi di manca un parentesi di chiusura ... così

if (!empty($_GET["IdN"])) 

se invece hai un altro campo fai così

if ((!empty($_GET['IdN'])) && (!empty($_GET['campo'])))

Narsil Bearer Blog : Destinati a Frantumarsi

"Metal ! Will Stand Tall !!!"

Link al commento
Condividi su altri siti

Ciao Ra, inatnto grazie mille per le risposte...alla fine ho cambiato soluzione optando per questa

$result = mysql_query("select IdN,Nome from TABELLA1", $connection);
    while($row = mysql_fetch_array($result)){

    echo " <option value=\"$row[idN]\">$row[NOME]</option>\n";    
    }    
    

e con quest i valori vengono inviati correttamente, ora però mi da un errore di sintassi sql in quanto richiede gli apici ' ' vicino a IdN

qui

 $query = "Insert into TABELLA2 values 
              (NULL, $IdN, ....ALTRI CAMPI)";

diventerebbe

il problema è che se metto gli apici poi i valori restano a 0 perchè IdN è di tipo int e probabilmente con gli apici lo riconosce come text :? ...

comunque con la soluzione che volevo utilizzare all'inizio non ne sono venuto fuori, il valore IdN resava sempre vuoto :ciao: ho controllato la sintassi ed è corretta momentaneamente sono arrivato alla conclusione che l'errore sia qui

<OPTION value=<?php $row["IdN"] ?> ><?php print"{$row["NOME"]}"?>

ancora grazie per la pazienza :(

Link al commento
Condividi su altri siti

comunque con la soluzione che volevo utilizzare all'inizio non ne sono venuto fuori, il valore IdN resava sempre vuoto :ciao: ho controllato la sintassi ed è corretta momentaneamente sono arrivato alla conclusione che l'errore sia qui

<OPTION value=<?php $row["IdN"] ?> ><?php print"{$row["NOME"]}"?>

ancora grazie per la pazienza :(

[/b]

Per forza ... dentro il value dell'option tu non scrivi il valore della variabile, vedi quel print ( io userei echo come hai fatto dopo ma va bene lo stesso ) che c'è nel seecondo pezzo di codice PHP ? dovevi fare più o meno così

<OPTION value=<? echo $row["IdN"] ?> ><? echo "{$row["NOME"]}" ?></option>

Per la query non credo sia quello l'errore se l'ID è un campo numerico gli apici non ci vanno altrmenti ti va in errore ... ma qui servirebbe aver bene la QUery completa e la struttura della tabella.

Comunque ti do due dritte di carattere generale ... all'inizio sforzati di scrivere a MANO le cose ... non ti limitare a copia e incolla di parti di codice preso chissà in quale tutorial ... o meglio va benissimo purchè ti sforzi di ri-scrivertelo cercando di capire la soluzione adottata dall'esempio ... inoltre ... quando come nel tuo esempio non ti passava i dati prova sempre la strada del visualizza sorgente pagina ... secondo me per come l'avevi strutturata tu avresti visto subito che l'option della tua combobox aveva value="" infatti quando fai visualizza sorgente pagina non vedi il codice PHP che hai scritto tu ma vedi (passami il termine) la traduzione in HTML e come si dice in genere la "risoluzione" delle variabili .. nel tuo caso se vuoi tramite PHP scrivere a video il valore di una variabile ipotetia $variabile ... dovrai usare l'istruzione

<? echo $variabile ?>

... oppure

<? print $variabile ?>

sulle differenze tra echo e print ti linko in questi ameni luoghi ... http://it.php.net/echo http://it.php.net/print

Se hai notato l'esempio due che hai utilizzato usa una soluzione diversa ma simile ... ossia non alterna codice HTML a porzioni di codice PHP ma fa fare tutto a PHP facendo scrivere a video tutta la riga HTML necessaria all'option della combobox

echo " <option value=\"$row[idN]\">$row[NOME]</option>\n";    

Narsil Bearer Blog : Destinati a Frantumarsi

"Metal ! Will Stand Tall !!!"

Link al commento
Condividi su altri siti

<div class='quotetop'>QUOTE("Ra")</div>

Per forza ... dentro il value dell'option tu non scrivi il valore della variabile[/b]
:ciao: capito

<div class='quotetop'>QUOTE("Ra")</div>

Comunque ti do due dritte di carattere generale ... all'inizio sforzati di scrivere a MANO le cose ... [/b]

ti do ragione, in realtà il codice che ho postato all'inizio è un rimaneggiamento di alcune pagine che avevo fatto in .ASP che avevo studato un paio di anni fa, ed ho preso spunto da alcuni lavori per le prove che sto facendo in PHP...

Per quel che iguarda l'errore di sintasi mysql...beh la tablella l'ho così cotruita:

<div class='sqltop'>SQL</div><div class='sqlmain'>create table Tabella

-> (IdTabella int not null auto_increment primary key,

-> Nome varchar(15),

-> Cognome varchar(15),

-> IdS int not null references Tabella2(IdS)

-> )type=InnoDB; </div>

volendo essere completi questa è una parte della Tabella2

<div class='sqltop'>SQL</div><div class='sqlmain'>create table Tabella2

-> (IdS int not null auto_increment primary key,

-> Nome varchar(15),

-> )type=InnoDB; </div>

e la query di insert è

$query = "insert into Tabella values 
              (NULL, '{$Nome}', '{$Cognome}',$IdS) ";

questa query l'avevo provata inserendo i dati passandoli tramite un banalissimo campo di testo

<tr>
    <td>IdS</td>
    <td><input type="text" name="IdS" size=15></td>
</tr>

ed andava, ora non funziona più in nessuna maniera e mi da questo errore al momento dell'inserimento

Error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

al momento mi sfugge quale possa essere l'errore in quanto ha funzionato correttamente fino a 2 giogrni fa...sicuramente ho fatto qalche cacchio di modifica(tipo cancellare qualcosa) ma proprio non becco l'errore :?

in questi momenti mi sento un vero imbeXXlle perchè so che quasi sicuramente è un errore del menga ma proprio non lo becco :lol:

Link al commento
Condividi su altri siti

Non ho molto tempo ma la tua query mi pare dovrebbe somigliare ad una cosa così

INSERT INTO `tabella` VALUES (
'', '$nome', '$cognome',$ids
);

non ha senso mettere NULL alla colonna idTabella che hai creato NOT NULL e auto increment per di più ...

Narsil Bearer Blog : Destinati a Frantumarsi

"Metal ! Will Stand Tall !!!"

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...