Visualizzazione risultati 1 fino 13 di 13

Discussione: select e convivenza con input

  1. #1
    Guest

    Predefinito select e convivenza con input

    Ragazzi,

    Ho bisogno del vostro aiuto. La questione è questa. Ho un campo chiamato "occupazione". Questo campo come ben sapete è variabile, nel senso che di occupazione o come meglio credete impiego (è la stessa cosa) c'è ne sono a bizzeffe. Allora chiedevo una solozione rapida veloce semplice e concisa (di cui una parto l'ho ma non capisco perchè non va). Il campo occupazione come sudetto, appartiene ad una tabella utenti, non vorrei fare una tabella a posta per solo occupazione. E vorrei fare in questo modo. Quando la select è vuota non deve essere visibile (al momento), ci deve essere solo un campo di tipo testo chiamato "Inserire nuova occupazione". Una volta che ho inserito la nuova occupazione (scusate se ripeto sempre lo stesso termine), questa viene inserita nel db e poi memorizzata nella select. Una volta che pallo accedere per completare il profilo, si ritroverà con la select e a fianco alla select sempre il campo di testo. in modo tale che se non c'è la sua occupoazione, la può scrivere nel campo di testo che poi verrà inserita nella lista. In modo tale che il prossimo caio può trovaregià nella lista, il suo impiego. Oppure magari aggiungerlo. Ecosì via. Ovviamente, c'è una particolarità. Se ad esempio pallino inserisce "impiegato" e poi tizio inserire nel campo testo impiegato, ci dovrebbe essere un messaggio di allerta che avvisa che quell'occupazione è presente nella lista. Mi potete dare una mano per favore ???? Posto il codice che ho, credo solo che bisogna modificarlo unb pochino. In un programma che precdentemente avevo fatto funziona a dovere, perchè ci sono più tabelle. ma in questo nuovo non riesco a farlo funzionare alla stessa maniera.

    Questo l'originale

    Codice PHP:

    <?php
    $q
    =mysql_query("SELECT descrizione FROM tblcomponenti ORDER BY descrizione");
    $vuota=mysql_num_rows($q);
    if(
    $vuota > 0){//fa vedere la select solo se ci sono componenti e mostra solo il'input nuovocomponente, in pratica solo la prima volta
    echo "Componente: <select name=\"componente\">";
    echo
    "<option value=\"\">-seleziona-</option>";
    while(
    $riga=mysql_fetch_array($q)){
    echo
    "<option value=\"".$riga['descrizione']."\">".$riga['descrizione']."</option>";
    }
    //fine while
    echo "</select>";
    }
    //fine if vuota
    ?>
    Nuovo componente da inserire: <input type='text' name='nuovocomponente' />
    Questo modificato pe rl'altro programma che non va:

    Codice PHP:

    <?php
    $q
    =mysql_query("SELECT occupazione FROM occupazione ORDER BY occupazione");
    $vuota=mysql_num_rows($q);
    if(
    $vuota > 0){//fa vedere la select solo se ci sono componenti e mostra solo il'input nuovocomponente, in pratica solo la prima volta
    echo "Occupazione: <select name=\"occupazione\">";
    echo
    "<option value=\"\">-seleziona-</option>";
    while(
    $riga=mysql_fetch_array($q)){
    echo
    "<option value=\"".$riga['occupazione']."\">".$riga['occupazione']."</option>";
    }
    //fine while
    echo "</select>";
    }
    //fine if vuota
    ?>
    Nuova occupazione da inserire: <input type='text' name='nuovaoccupazione' />
    tenete presente che è solo in fase di aggiornamento profilo.

    Questo è l'aggiornamentoprofilo:

    Codice PHP:

    <?php
    session_start
    ();
    require_once(
    "connetti.php");

    echo
    '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';

    echo
    "<h1> Esecuzione in corso dell'aggiornameto profilo... </h1>";


    $datadinascita = $anno . "-" . $mese . "-" . $giorno;
    $citta = mysql_real_escape_string(strtolower(trim ($_POST['citta'])));
    $provincia = mysql_real_escape_string(strtolower(trim ($_POST['provincia'])));
    $anno_diploma = mysql_real_escape_string(strtolower(trim ($_POST['anno_diploma'])));
    $occupazione = mysql_real_escape_string(strtolower(trim ($_POST['nuovaoccupazione']))); ////piccola aggiunta che ho fatto ma credo che non serva a granchè

    $qry = "UPDATE utenti SET
    datadinascita='
    $datadinascita',
    citta='
    $citta',
    provincia='
    $provincia',
    anno_diploma='
    $anno_diploma',
    occupazione='
    $occupazione',
    occupazione='
    $nuovaoccupazione' //piccola aggiunta che ho fatto ma credo che non serva a granchè
    WHERE id = '"
    .$_SESSION['id']."'";

    echo
    $qry;

    if (
    mysql_query($qry)){
    echo
    "... Aggiornamento effettuato correttamente....";

    } else {
    echo
    " Errore: Non è stato possibile effettuare l'aggiornamento richiesto";


    }
    ?>
    Difatti quando vado nella select c'è solo un'impiego e non mi aggiorna il profilo. Spero in voi. Grazie.

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Il campo si chiama occupazione ma dall'altra parte vai solo a prendere $_POST['nuovaoccupazione']. Controlla i vari campi che vai a leggere.

  3. #3
    Guest

    Predefinito Ciao

    Si è vero, gli ho ricontrollati duecentomila volte. Mi sembrano che siano corretti. Cosa dovrei fare ??? Se per cortesia mi puoi segnalare dove sta l'errore, perchè ormai i campi li conosco a memoria. Quindi rivederli non mi risolverebbe il problema. Ma comunque c'è uno sbaglio ????

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Il campo nel codice html si chiama occupazione, mentre nel codice php leggi solo il campo $_POST['nuovaoccupazione'].

    Qualunque valore tu scriva nel campo occupazione va perso, perché lato php lo ignori. Devi leggere $_POST['occupazione'] invece di $_POST['nuovaoccupazione'].

  5. #5
    Guest

    Predefinito

    Ciao dreadnaut,

    In pratica dovrebbe essere così se non ho capito male:


    Codice PHP:

    $occupazione
    = mysql_real_escape_string(strtolower(trim ($_POST['occupazione'])));

    $qry = "UPDATE utenti SET
    datadinascita='
    $datadinascita',
    citta='
    $citta',
    provincia='
    $provincia',
    anno_diploma='
    $anno_diploma',
    occupazione='
    $occupazione'

    WHERE id = '"
    .$_SESSION['id']."'";

    edit:

    Allora io ho rifatto così, per favore correggetemi se sbaglio:

    Questo è il file index, da cui parte l'aggiornamento profilo. Quindi:

    index.php

    Codice PHP:


    //Occupazione

    $q=mysql_query("SELECT occupazione FROM utenti WORDER BY occupazione");
    $vuota=mysql_num_rows($q);
    if(
    $vuota > 0){//fa vedere la select solo se ci sono componenti e mostra solo il'input nuovocomponente, in pratica solo la prima volta
    echo "Occupazione: <select name=\"occupazione\">";
    echo
    "<option value=\"\">-seleziona-</option>";
    while(
    $riga=mysql_fetch_array($q)){
    echo
    "<option value=\"".$riga['occupazione']."\">".$riga['occupazione']."</option>";
    }
    //fine while
    echo "</select>";
    }
    //fine if vuota
    ?>
    Nuova occupazione da inserire: <input type='text' name='nuovaoccupazione' />

    <center> <br><br>

    <font face="Comic Sans MS">

    <!--<input type="submit" value="Aggiorna Profilo" />-->
    <input type="submit" name="aggiorna" value="Aggiorna Profilo" />
    <input type="button" onClick="window.location.href='logout.php';" value="Logout" />
    </center> </form>
    E il risultato che mi da di errore tanto pe riniziare è il seguente:

    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /volume1/web/utenti/provaaggiornaprofilo/index.php on line 43 Nuova occupazione da inserire:

    La riga 43 dovrebbe essere la seguente:

    Codice PHP:

    //Occupazione

    $q=mysql_query("SELECT occupazione FROM utenti WORDER BY occupazione");
    $vuota=mysql_num_rows($q);
    if(
    $vuota > 0){

    //e aseguire il codice che ho postato sopra
    Poi nell'aggiornaprofilo.php ho fatto in questo modo:

    Codice PHP:

    <?php
    session_start
    ();
    require_once(
    "connetti.php");

    echo
    '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';

    echo
    "<h1> Esecuzione in corso dell'aggiornameto profilo... </h1>";


    $datadinascita = $anno . "-" . $mese . "-" . $giorno;
    $citta = mysql_real_escape_string(strtolower(trim ($_POST['citta'])));
    $provincia = mysql_real_escape_string(strtolower(trim ($_POST['provincia'])));
    $anno_diploma = mysql_real_escape_string(strtolower(trim ($_POST['anno_diploma'])));
    $occupazione = mysql_real_escape_string(strtolower(trim ($_POST['occupazione'])));

    $qry = "UPDATE utenti SET
    datadinascita='
    $datadinascita',
    citta='
    $citta',
    provincia='
    $provincia',
    anno_diploma='
    $anno_diploma',
    occupazione='
    $occupazione'

    WHERE id = '"
    .$_SESSION['id']."'";

    echo
    $qry;

    if (
    mysql_query($qry)){
    echo
    "... Aggiornamento effettuato correttamente....";

    } else {
    echo
    " Errore: Non è stato possibile effettuare l'aggiornamento richiesto";


    }
    ?>
    E il risultato finale è il seguente:

    UPDATE utenti SET datadinascita='--', citta='', provincia='', anno_diploma='', occupazione='' WHERE id = '2'... Aggiornamento effettuato correttamente....

    Ovviamente vado a conmtrollare su phpmyadmin. e non risulta alcun aggiornamento. Dove sbaglio stavolta ??? Cos'è che non richiamo ???
    Ultima modifica di dreadnaut : 26-02-2013 alle ore 21.05.52 Motivo: usa il tasto Edita

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /volume1/web/utenti/provaaggiornaprofilo/index.php on line 43
    Se ottieni un booleano invece di un risultato dalla query mysql vuol dire che c'è un errore (vedi documentazione), e se guardi la query subito sopra alla linea 43 hai scritto "FROM utenti WORDER BY occupazione".
    Ultima modifica di dreadnaut : 26-02-2013 alle ore 19.59.40

  7. #7
    Guest

    Predefinito Ciao

    Ciao,

    Azz, non me n'ero accorto. Grazie per l'evidenziazione. Ma nel file che ti ho postatoi aggiornaprofilo, va bene come ho fatto ???? Oppure deve essere modificato ??? te lo riposto, forse non hai visto la modifica:

    aggiornaprofilo.php

    Codice PHP:

    <?php
    session_start
    ();
    require_once(
    "connetti.php");

    echo
    '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';

    echo
    "<h1> Esecuzione in corso dell'aggiornameto profilo... </h1>";


    $datadinascita = $anno . "-" . $mese . "-" . $giorno;
    $citta = mysql_real_escape_string(strtolower(trim ($_POST['citta'])));
    $provincia = mysql_real_escape_string(strtolower(trim ($_POST['provincia'])));
    $anno_diploma = mysql_real_escape_string(strtolower(trim ($_POST['anno_diploma'])));
    $occupazione = mysql_real_escape_string(strtolower(trim ($_POST['occupazione'])));

    $qry = "UPDATE utenti SET
    datadinascita='
    $datadinascita',
    citta='
    $citta',
    provincia='
    $provincia',
    anno_diploma='
    $anno_diploma',
    occupazione='
    $occupazione'

    WHERE id = '"
    .$_SESSION['id']."'";

    echo
    $qry;

    if (
    mysql_query($qry)){
    echo
    "... Aggiornamento effettuato correttamente....";

    } else {
    echo
    " Errore: Non è stato possibile effettuare l'aggiornamento richiesto";


    }
    ?>

  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Se funziona, va bene. Hai riprovato dopo aver corretto la query?

  9. #9
    Guest

    Predefinito Ciao

    Si, l'ho corretta e va, ma solo che c'è un mah. Innanzi tutto se l'inserisco nella text, me la prende nella select ma me la cambia con quella precedente, se invece la seleziono dalla select, non mi cambia un bel niente. E il risultato ristiamo a punto da capo. Non so s emi sono spiegato cosa intendo. Spero di si.

  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Citazione Originalmente inviato da fabiodefe Visualizza messaggio
    Innanzi tutto se l'inserisco nella text, me la prende nella select ma me la cambia con quella precedente, se invece la seleziono dalla select, non mi cambia un bel niente.
    Ehm... scusa ma non si capisce molto bene Cos'è che LA prende nella select? Non è che questa pagina è online da qualche parte e gli si può dare un'occhiata?

    Altrimenti: cos'hai davanti, quali passi fai, cosa ti aspetti e cosa succede invece?

  11. #11
    Guest

    Predefinito

    Ciao,

    Asp, forse ho trovato l'inghippo che all'inizio non avevo capito. Dammi tempo due secondini che spero di aver trovato la soluzione e ti rispondo a tutte le tue domande. purtroppo La pagina sta sul synology b(x gli amici nas) e posso accedere solo io. ma in caso posso rovare a metterla su altervista, in modo tale che gli dai un'occhiata. Ma ti saprò dire solo fra due sec. Quanto provo per bene una cosa. perodnami, ti lascio in sospeso pe run attimo.


    edit:

    Ciao,

    Siiiiiiiiiiiiiiiiiiiii è andataaaaaaaaaaaaaaaaaaaaaaaaaa. non avevo capito un *triceratopo* della modifiche mi avevano apportato. Scusa l'esperessione. Ma è segno di felicità. In pratica è ciò che voglio io. Ossia, tu hai una select (non ho capito il perchè si veda all'inizio in cui il db è vuoto, comunque....). Quello che non riuscivo a fare era l'aggiornamento del campo fatto dalla select. Prendeva solo l'aggiornamento effettuiato dalla text. Mi mancava un passaggio ch emi avevano fornito e che non avevo capito come inserirlo. E stasera grazie a te, l'ho capito :P Ti postio i codici per correttezza. visto che hai provato ad aiutarmi:

    index dove contiene la select:

    Codice PHP:

    //Occupazione

    $q=mysql_query("SELECT occupazione FROM utenti ORDER BY occupazione");
    $vuota=mysql_num_rows($q);
    if(
    $vuota > 0){//fa vedere la select solo se ci sono componenti e mostra solo il'input nuovocomponente, in pratica solo la prima volta
    echo "Occupazione: <select name=\"occupazione\">";
    echo
    "<option value=\"\">-seleziona-</option>";
    while(
    $riga=mysql_fetch_array($q)){
    echo
    "<option value=\"".$riga['occupazione']."\">".$riga['occupazione']."</option>";
    }
    //fine while
    echo "</select>";
    }
    //fine if vuota
    ?>
    Nuova occupazione da inserire: <input type='text' name='nuovaoccupazione' />

    <center> <br><br>

    <font face="Comic Sans MS">

    <!--<input type="submit" value="Aggiorna Profilo" />-->
    <input type="submit" name="aggiorna" value="Aggiorna Profilo" />
    <input type="button" onClick="window.location.href='logout.php';" value="Logout" />
    </center> </form>
    aggiornamentoprofilo.php (modificato inviatomi):

    Codice PHP:

    <?php
    session_start
    ();
    require_once(
    "connetti.php");

    echo
    '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';

    echo
    "<h1> Esecuzione in corso dell'aggiornameto profilo... </h1>";


    $datadinascita = $anno . "-" . $mese . "-" . $giorno;
    $citta = mysql_real_escape_string(strtolower(trim ($_POST['citta'])));
    $provincia = mysql_real_escape_string(strtolower(trim ($_POST['provincia'])));
    $anno_diploma = mysql_real_escape_string(strtolower(trim ($_POST['anno_diploma'])));

    //QUesta parte qua non andava nel file index.php, ma andava qua, nel file aggiornaprofilo.php Ma da come me l'avevano scritto non c'avevo capito na sega.

    if($_POST['occupazione']=="" && $_POST['nuovaoccupazione']==""){//l'utente non ha selezionato ne scritto
    $occupazione = "";//non essendo un campo obbligatorio puoi metterlo a vuoto
    //se fosse obbligatorio devi dare il messaggio di errore e tornare al form
    }elseif($_POST['occupazione']!="" && $_POST['nuovaoccupazione']==""){
    //l'utente ha selezionato dalla select un'occupazione e non ha scritto
    $occupazione = mysql_real_escape_string(strtolower(trim ($_POST['occupazione'])));
    }elseif(
    $_POST['occupazione']=="" && $_POST['nuovaoccupazione']!=""){
    $occupazione = mysql_real_escape_string(strtolower(trim ($_POST['nuovaoccupazione'])));
    //l'utente ha scritto una nuova occupazione quindi prima di inserirla devi verificare se per caso non esiste
    $q=mysql_query("SELECT occupazione FROM utenti WHERE occupazione='$occupazione'");
    if(
    mysql_num_rows($q) > 1){// a scritto una esistente
    $riga=mysql_fetch_array($q);
    $occupazione=$riga['occupazione'];
    }
    }else{
    //l'utente ha selezionato e anche scritto, scegli il valore della select
    $occupazione = mysql_real_escape_string(strtolower(trim ($_POST['occupazione'])));
    }

    $qry = "UPDATE utenti SET
    datadinascita='
    $datadinascita',
    citta='
    $citta',
    provincia='
    $provincia',
    anno_diploma='
    $anno_diploma',
    occupazione='
    $occupazione'

    WHERE id = '"
    .$_SESSION['id']."'";

    echo
    $qry;

    if (
    mysql_query($qry)){
    echo
    "... Aggiornamento effettuato correttamente....";

    } else {
    echo
    " Errore: Non è stato possibile effettuare l'aggiornamento richiesto";


    }
    ?>
    In pratica l'ultima parte dove c'è la query non avevo capito che andava messa nell'aggiornamentoprofilo. Ecco perchè non ci riuscivo. Se lo esegui con un qualsiasi banalissimo db che hai pronto capirai cosa intendevo fare. Grazie.
    Ultima modifica di dreadnaut : 26-02-2013 alle ore 21.05.12 Motivo: usa il tasto edita

  12. #12
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Ottimo, felice funzioni correttamente!

  13. #13
    Guest

    Predefinito Ciao

    Mi fa piacere. Grazie di avermi comunque aiutato. :P

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •