Visualizzazione risultati 1 fino 29 di 29

Discussione: [PHP/MySQL] Recuperare ultimo ID da una tabella

  1. #1
    Guest

    Post [PHP/MySQL] Recuperare ultimo ID da una tabella

    Ciao a tutti, volevo chiedervi come recuperare un ID da una tabella..vi spiego cosa mi serve:
    Sto creando uno script per me x aggiungere news sul mio sito...ma come posso fare a recuperare l'ultimo ID dell'ultima news?
    ho provato a fare:
    Codice PHP:
    $id mysql_query("SELECT id FROM news"); 
    Ma spuntano tutti!..io voglio solo l'ultimo...
    Grazie 1000..ciao Davide! ^^
    PS...avevo fatto una ricerca...ma avevo trovato una funzione che forse faceva al caso mio...ma non so usarla! xd

  2. #2
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    Ma tu vuoi recuperare l'ultimo record inserito, il prossimo ID o l'id del record appena inserito tramite INSERT?


    Ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  3. #3
    Guest

    Predefinito

    Allora io siccome devo aggiungere una news devo recuperare il record(id) nella tabella, per dopo aumentarlo di 1 (es. 45->46)...
    Ciao! ^^

  4. #4
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    Tutto questo diventerebbe automatico se usassi un campo ID auto-increment ;)


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  5. #5
    L'avatar di saitfainder
    saitfainder non  connesso Snir Stff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Se, per un qualche motivo, non vuoi usare un campo autoincrement...

    Codice PHP:
    $id mysql_query("SELECT MAX(id) FROM news"); 
    Per ricorda che cos facendo, se inserisci una riga, la cancelli e ne inserisci un'altra quest'ultima avr lo stesso ID della prima.


    una mia peculiarit distorcere la verit e inventarne di nuove.
    I tuoi orientamenti hanno su di me un effetto prossimo allo zero.


  6. #6
    L'avatar di programmazioned
    programmazioned non  connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    431

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Tutto questo diventerebbe automatico se usassi un campo ID auto-increment ;)


    ciao!
    E a quel punto ti basterebbe effettuare una query:

    SHOW TABLE STATUS LIKE nometabella
    La colonna "Auto_increment" restituita conterr il valore del prossimo autoindex.

    Altra soluzione quella di prendere il record con il campo id con il valore pi alto:

    SELECT id FROM nometabella ORDER BY id DESC LIMIT 0,1
    estrarne il valore del campo Id ed incrementarlo di un'unit.
    Ultima modifica di programmazioned : 10-06-2008 alle ore 13.16.57

  7. #7
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    E a quel punto ti basterebbe effettuare una query:

    La colonna "Auto_increment" restituita conterr il valore del prossimo autoindex.
    Non servirebbe nulla di tutto questo, poich, essendo appunto autoincrement, si incrementa automaticamente, senza recuperare nulla.

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    Altra soluzione quella di prendere l'ultimo record inserito:

    estrarne il valore del campo Id ed incrementarlo di un'unit.
    che appunto quello di cui si parlava...


    Ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  8. #8
    Guest

    Predefinito

    Infatti auto-increment il campo..ma come faccio??
    Ciao! ^^

  9. #9
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    Per recuperare l'ultimo record inserito:

    SELECT * FROM tabella ORDER BY id DESC LIMIT 1


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

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

    Predefinito

    non dimentichiamo la funzione mysql_insert_id(), che ritorna l'id generato in auto-increment dall'ultima operazione eseguita, senza query aggiuntive
    chezDreadnaut
    "Un <BR/> impuro, punto."
    "I <P>&nbsp;</P> non hanno diritto di esistere."

  11. #11
    Guest

    Predefinito

    ...tradotto dreadnaut? ^^...
    Edit: e per usarlo??
    Ultima modifica di sIM : 10-06-2008 alle ore 13.39.07

  12. #12
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    Se tu inserisci un record tramite mysql_query, e nella tabella in cui operi presente un auto-increment, con la funzione php mysql_insert_id() ti restituisce automaticamente l'id appena memorizzato.

    Ma se ho capito bene, non quello che chiedevi tu.


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  13. #13
    Guest

    Predefinito

    Cmq..io ho provato cos:
    Codice PHP:
    $idquery mysql_query("SELECT id FROM news ORDER BY id DESC LIMIT 1");
    $id mysql_fetch_row($idquery);
    $id+; 
    e dopo quando devo andarci mi spunta pagina bianca!:
    Codice PHP:
    <html>
    <head>
    <title>Prova News</title>
    <style>
    body { background-color: #000; color: #fff; }
    </style>
    </head>
    <body>
    <?php

    $act 
    $_GET['act'];

    $cons mysql_connect("mysql4.netsons.org""davide""mypass");
            
    mysql_select_db("davide"$cons)

    switch(
    $act) {
    // ***********************************************
    case "login":

    if(isset(
    $_POST['login'])) {

    $user $_POST['username'];
    $username "davide";
    $pass $_POST['password'];
    $password "1234";

    if(
    $user == "" OR $pass == "") {
    echo 
    "<b>Errore</b>: Ci sono campi vuoti...";
    } else {

    if(
    $user == $username && $pass == $password) {
    /******** STRUTTURA DATABASE  ********
    news = id - title - text - date - author - time
    ********/
    ?>
    <table>
    <form name="news" action="?act=news">
    <tr><td>Titolo:</td><td><input type="text" name="title" /></td></tr>
    <tr><td>Testo:</td><td><textarea name="text"></textarea></td></tr>
    <tr><td><input type="submit" name="aggiungi" value="Aggiungi &raquo;" /></td><td><input type="reset" name="resetbis" value="Reset" /></td></tr>
    </form>
    </table>
    <?php
    }
    }
    }
    break;
    // ***********************************************
    case "news":

    if(isset(
    $_POST['aggiungi'])) {

    $title $_POST['title'];
    $text $_POST['text'];

    if(
    $title == "" OR $text == "") {
    echo 
    "<b>Errore</b>: Ci sono campi vuoti...";
    }else {

    $idquery mysql_query("SELECT id FROM news ORDER BY id DESC LIMIT 1");
    $id mysql_fetch_row($idquery);

    $date date("d/m/Y");
    $author "davide";
    $time date("H:i");

    $inserisci mysql_query("INSERT TO news(id,title,text,date,author,time) VALUES('".$id+."','$title','$text','$date','$author','$time)");

    if(
    $inserisci) {

    echo 
    "<p align=\"center\"><b>News Inserita!</b></p><hr /><b>ID</b>: $id<br /><b>Titolo</b>: $title<hr />$text<hr /><b>Data</b>: $date<br /><b>Autore</b>: $author<br /><b>Ora</b>: $time";
    } else {
    echo 
    "<b>Errore</b>: News non aggiunta...";
    }
    }
    }
    break;
    // ***********************************************
    default:
    ?>
    <table>
    <form name="login" action="?act=login">
    <tr><td>Username:</td><td><input type="text" name="username" /></td></tr>
    <tr><td>Password:</td><td><input type="password" name="password" /></td></tr>
    <tr><td><input type="submit" name="login" value="Login &raquo;" /></td><td><input type="reset" name="reset" value="Reset" /></tr>
    </form>
    </table>
    <?php
    break;
    // ***********************************************
    }
    mysql_close($cons);
    ?>
    </body>
    </html>

  14. #14
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    Ma tu vuoi modificare esclusivamente l'ultima news inserita??
    Non si capisce bene cosa vuoi fare!
    A parte che la query di inserimento sbagliata...

    Ricapitolando:
    vuoi modificare una news gi memorizzata?
    vuoi memorizzare una nuova news con un id consecutivo a quelli gi memorizzati?
    altro??


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  15. #15
    Guest

    Predefinito

    Voglio inserire una nuova news... ^^
    E' semplice...dopo perch la query sbagliata??
    Ciao! ^^

  16. #16
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    Allora non ti serve sapere qual' l'ultimo id inserito, poich sar mysql stesso ad aumentare l'id che andrai ad inserire!
    Esegui la query senza specificare il campo id.


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  17. #17
    Guest

    Predefinito

    Ho modificato un po tutto..ma sempre pagina bianca! :(
    Codice PHP:
    <html>
    <head>
    <title>Prova News</title>
    <style>
    body { background-color: #000; color: #fff; }
    </style>
    </head>
    <body>
    <?php

    $act 
    $_GET['act'];

    $cons mysql_connect("mysql4.netsons.org""davide""mypass");
            
    mysql_select_db("davide"$cons)

    switch(
    $act) {
    // ***********************************************
    case "login":

    if(isset(
    $_POST['login'])) {

    $user $_POST['username'];
    $username "davide";
    $pass $_POST['password'];
    $password "2606";

    if(
    $user == "" OR $pass == "") {
    echo 
    "<b>Errore</b>: Ci sono campi vuoti...";
    } else {

    if(
    $user == $username && $pass == $password) {
    /******** STRUTTURA DATABASE  ********
    news = id - title - text - date - author - time
    ********/
    ?>
    <table>
    <form name="news" action="?act=news">
    <tr><td>Titolo:</td><td><input type="text" name="title" /></td></tr>
    <tr><td>Testo:</td><td><textarea name="text"></textarea></td></tr>
    <tr><td><input type="submit" name="aggiungi" value="Aggiungi &raquo;" /></td><td><input type="reset" name="resetbis" value="Reset" /></td></tr>
    </form>
    </table>
    <?php
    }
    }
    }
    break;
    // ***********************************************
    case "news":

    if(isset(
    $_POST['aggiungi'])) {

    $title $_POST['title'];
    $text $_POST['text'];

    if(
    $title == "" OR $text == "") {
    echo 
    "<b>Errore</b>: Ci sono campi vuoti...";
    }else {

    /* TOGLIAMO ID, VISTO CHE E' AUTO-INCREMENT */
    /*$idquery = mysql_query("SELECT id FROM news ORDER BY id DESC LIMIT 1");
    $id = mysql_fetch_row($idquery);*/

    $text str_replace("<""&lt;"$text);
    $text str_replace(">""&gt;"$text);

    $date date("d/m/Y");
    $author "davide";
    $time date("H:i");

    $inserisci mysql_query("INSERT TO news(id,title,text,date,author,time) VALUES('','$title','$text','$date','$author','$time)");

    if(
    $inserisci) {

    echo 
    "<p align=\"center\"><b>News Inserita!</b></p><hr /><b>ID</b>: $id<br /><b>Titolo</b>: $title<hr />$text<hr /><b>Data</b>: $date<br /><b>Autore</b>: $author<br /><b>Ora</b>: $time";
    } else {
    echo 
    "<b>Errore</b>: News non aggiunta...";
    }
    }
    }
    break;
    // ***********************************************
    default:
    ?>
    <table>
    <form name="login" action="?act=login">
    <tr><td>Username:</td><td><input type="text" name="username" /></td></tr>
    <tr><td>Password:</td><td><input type="password" name="password" /></td></tr>
    <tr><td><input type="submit" name="login" value="Login &raquo;" /></td><td><input type="reset" name="reset" value="Reset" /></tr>
    </form>
    </table>
    <?php
    break;
    // ***********************************************
    }
    mysql_close($cons);
    ?>
    </body>
    </html>

  18. #18
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    Non mi metto a controllare ogni tag e ogni riga di ci che hai postato, ma ti correggo la query:

    $inserisci = mysql_query("INSERT INTO news(title,text,date,author,time) VALUES('$title','$text','$date','$author','$time)" );


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  19. #19
    Guest

    Predefinito

    Non capisco il perch non si inserisce..cosa sbaglio?
    Codice PHP:
    $inserisci mysql_query("INSERT INTO news(title,text,date,author,time) VALUES('$title','$text','$date','$author','$time)");

    if(!
    $inserisci) {
    echo 
    "<b>Errore</b>: News non aggiunta...";

    else {
    echo 
    "<h1 align=\"center\"><b>News Inserita!</b></h1><hr /><b>Titolo</b>: $title<br /><b>Data</b>: $date<br /><b>Autore</b>: $author<br /><b>Ora</b>: $time<hr />$text<hr />";

    Ciao! ^^ ...e Grazie!

  20. #20
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    prima del punto e virgola finale del mysql_query aggiungi: or die(mysql_error())

    Oppure incolla la query in phpmyadmin.

    AH, ho visto ora: metti uno spazio tra news e la parentesi seguente, stessa cosa per VALUES(


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  21. #21
    L'avatar di seneca
    seneca non  connesso Super Moderatore
    Data registrazione
    18-12-2004
    Residenza
    la Citt Eterna
    Messaggi
    8,376

    Predefinito

    nota a margine: ti sei ricordato di aggiungere tra gli attributi del campo id AUTO_INCREMENT?


    -- Aut Roma Aut Nihil!

  22. #22
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    s ;)


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  23. #23
    L'avatar di seneca
    seneca non  connesso Super Moderatore
    Data registrazione
    18-12-2004
    Residenza
    la Citt Eterna
    Messaggi
    8,376

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    A posto! Nel rileggere tutto, mi son perso quel passaggio


    -- Aut Roma Aut Nihil!

  24. #24
    L'avatar di dreadnaut
    dreadnaut non  connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    5,889

    Predefinito

    manca un apice singolo in fondo alla query, per chiudere $time
    Inoltre, io passerei tutti quei campi attraverso mysql_real_escape_string(), in modo da essere sicuri che il contenuto delle variabili non disturbi la query.

    Quando le query non funzionano, sempre bene controllare il risultato di mysql_error(), che restituisce il testo del messaggio di errore dell'ultima operazione effettuata.
    Ultima modifica di dreadnaut : 10-06-2008 alle ore 17.08.48
    chezDreadnaut
    "Un <BR/> impuro, punto."
    "I <P>&nbsp;</P> non hanno diritto di esistere."

  25. #25
    Guest

    Predefinito

    Ma da quel che ho visto io mysql_real_escape_string fa pi fatica di mysql_query...anche perch deve passare x pi funzioni...invece con mysql_query molto pi semplice..
    Ciao! ^^

  26. #26
    L'avatar di debug
    debug non  connesso Amministratore del forum
    Data registrazione
    27-01-2004
    Messaggi
    16,872

    Predefinito

    Ma guarda che sono due funzioni completamente diverse!
    L'una non esclude l'altra, e anzi, mysql_real_escape_string o quelle similari dovrebbero essere sempre usate prima di richiamare la funzione mysql_query.


    ciao!
    [ debug ]



    Non rispondo a messaggi privati su argomenti tecnici. Per queste cose esiste il forum!

  27. #27
    Data registrazione
    24-10-2017
    Messaggi
    10

    Predefinito

    ciao a tutti, so che una discussione vecchia, ma avrei lo stesso problema solo che io dovrei fare una registrazione di alcuni associati e vorrei inserire in automatico il numero di tessera progressivo oppure inserire una cella adiacente dove mi visualizza il numero di ID che nel database autoincrement ma che nel modulo non mi viene visualizzato, come posso risolvere? il file php che controlla il form questo:
    Codice PHP:
    session_start();
    $user = $_SESSION['utente'];
    $langanagrins = $_SESSION['lingua'];
    $paginaanagrins = "insanagrins.inc";
    $linguaanagrins = ($langanagrins.$paginaanagrins);
    include($linguaanagrins);

    if ($user == 'admin') {

    include('./top.inc');
    include('./menu.inc');

        include ('./dati_db.inc');
        mysql_connect("$host", "$username", "$password")or die("cannot connect");
        mysql_select_db("$db_name")or die("cannot select DB");

    ?>

          <center><h2><? echo $Lpresentazioneangrins?></h2>
    <small><? echo $Lsuggerimento?></small></center>
    <br>
    <!--Visualizza il numero di tessere -->
    <table><tr><td>
    <form action='./stampa_soci.php' method='POST' target='_blank'>
    <button name='ordine' type='submit' value="ntessera"><? echo $Ltessere?></button>
    </form></td>
    <td><form action='./Scheda_regioni.php' method='POST'>
    <button name='Regioni' type='submit' value="regioni">Regioni</button></form></td>
    <td><form action='./Scheda_province.php' method='POST'>
    <button name='Province' type='submit' value="Province">Province</button></form></td>
    <td><form action='./Scheda_comuni.php' method='POST'>
    <button name='Comuni' type='submit' value="comuni">Comuni</button></form></td></tr>
    </table>

          <form action='./conf_dati_ins.php' method='POST' enctype="multipart/form-data">
            <table align='center' border='0' width='60%'>
              <tbody>
                <tr>
                    <td width='150'><font color="red"><? echo $Lntessera?></td>
                  <td><input name='ntessera' size='5' type='text' required='not'>
                   <br><small><sub><i><? echo $Listntessera?></small></i></sub></td>
                </tr>
    <?php include('./DatiComuni.inc'); ?>
                <tr>
                  <td width='150'><font color="red"><?echo $Ltipoassociato?> *:</td>
                  <td><select name="materia" >
       <option value="" selected="selected"><? echo $Ltipoassociato?> </option>

    <?php
    $query 
    "SELECT materia FROM tb_materia";
     
    $rs=mysql_query($query)
    or die(
    "<b>Errore:</b> Impossibile eseguire la query della Combo");

    while (
    $row=mysql_fetch_row($rs))
    {
    echo 
    "<option>" .$row["0"]. "</option>";

    }
    mysql_close();
    ?>

      </select></td>
                </tr>
                <tr>
                  <td colspan='2' align='center'>
                  <input value=<? echo $Linvia?> type='submit' <? echo($limit); ?>></td>
                </tr>
              </tbody>
            </table>
            <br>
          </form>
    <?php
    include('./menusx.inc');
    echo 
    $Lhelpanagrins;
    include(
    './botton.inc');
    } else {
    header('Location: Rip_database.php');
    }
    ?>
    il database si presenta cosi:
    1 ntessera varchar(60) latin1_swedish_ci No Nessuno
    2 id_anagrafe int(9) No Nessuno AUTO_INCREMENT
    3 nome varchar(150) latin1_swedish_ci S NULL
    4 cognome varchar(25) latin1_swedish_ci S NULL
    5 indirizzo varchar(40) latin1_swedish_ci S NULL
    6 cap varchar(55) latin1_swedish_ci S NULL
    7 citta varchar(25) latin1_swedish_ci S NULL
    8 provincia varchar(25) latin1_swedish_ci S NULL
    9 tel varchar(10) latin1_swedish_ci S NULL
    10 tel2 varchar(10) latin1_swedish_ci S NULL
    11 datan varchar(10) latin1_swedish_ci S NULL
    12 classe varchar(25) latin1_swedish_ci S NULL
    13 nomerif varchar(25) latin1_swedish_ci S NULL
    14 materia varchar(25) latin1_swedish_ci S NULL
    15 mansione varchar(25) latin1_swedish_ci S NULL
    16 email varchar(30) latin1_swedish_ci S NULL
    17 tipologia varchar(5) latin1_swedish_ci S NULL
    18 note varchar(150) latin1_swedish_ci S NULL
    19 immagine varchar(100) latin1_swedish_ci S NULL
    20 associato varchar(2) latin1_swedish_ci S NULL
    io vorrei fare aumentare in modo automatico e progressivo il "ntessera" se lo imposto come autoincrement direttamente dal database ma mi da errore, quindi vorrei unire o inserire una cella dove visualizza il valore del database id_anagrafe.... chi mi aiuta? premetto che non ho molta dimestichezza con php o mysql quindi per favore siate chiari...

  28. #28
    mzanella non  connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,069

    Predefinito

    Il campo ntessera di tipo VARCHAR, dunque una stringa di testo, per questo non pu avere l'attributo AUTO_INCREMENT. Quale dovrebbe essere, ad esempio, il successivo del valore "AC879L"?

    Puoi, invece, mostrare il valore di id_anagrafe. Quello che non mi chiaro quale valore intendi mostrare in quella pagina: la tabella contiene un id_anagrafe per ogni elemento inserito in essa, tu a quale sei interessato?

    PS: La prossima volta apri una nuova discussione, questa non solo vecchia di 10 anni, ma tratta anche un argomento diverso

  29. #29
    L'avatar di alemoppo
    alemoppo non  connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    10,834

    Predefinito

    Chiudo.
    Se hai ancora il problema, apri una nuova discussione come indicato da mzanella.

    Ciao!

Regole di scrittura

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