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
    Guest

    Predefinito

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


    Ciao!

  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
    Guest

    Predefinito

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


    ciao!

  5. #5
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    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
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    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
    Guest

    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!

  8. #8
    Guest

    Predefinito

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

  9. #9
    Guest

    Predefinito

    Per recuperare l'ultimo record inserito:

    SELECT * FROM tabella ORDER BY id DESC LIMIT 1


    ciao!

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

    Predefinito

    non dimentichiamo la funzione mysql_insert_id(), che ritorna l'id generato in auto-increment dall'ultima operazione eseguita, senza query aggiuntive

  11. #11
    Guest

    Predefinito

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

  12. #12
    Guest

    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!

  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
    Guest

    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!

  15. #15
    Guest

    Predefinito

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

  16. #16
    Guest

    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!

  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
    Guest

    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!

  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
    Guest

    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!

  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
    Guest

    Predefinito

    sì ;)


    ciao!

  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
    6,306

    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

  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
    Guest

    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!

  27. #27
    Guest

    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,954

    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
    22,686

    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
  •