Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    26

    query update che non funziona

    I problemi non finiscono mai!
    Sto facendo una fatica immensa per portare avanti il progetto della mia tesi (da non programmatore!!!) e quando sembra che le cosa vadano bene viene fuori un problema magari stupido ma (data la stanchezza mentale) non riesco a risolvere!
    Dopo questo sfogo passiamo alle cose serie.
    Ho una tabella con una chiave primaria formata dall'unione di 3 campi.
    Il form in php deve aggiornarmi questa tabella

    I passaggi che ho fatto sono questi:
    1. il form passa l'id del record da aggiornare allo script
    2. Lo script recupera i nomi dei campi da aggiornare dal form :
    codice:
    $var = $_POST["nome_campo"];
    3. connessione al db
    4. trattamento delle stringhe da sovrascrivere (addslasheses, pg_escape_string ecc.)
    5. query (ve la posto tutta):
    Codice PHP:
    if($modifica pg_query($connection"UPDATE bibliografia SET url='$url', categoria='$categoria', titolo='$titolo', autore_principale='$autore', altri_autori='$altri_autori', anno='$anno', casa_editrice='$casa_editrice', luogo_pubblicazione='$luogo_pubblicazione', collocazione='$collocazione', isbn='$isbn', pagine_consultate='$pagine_consultate', note='$note', stato_libro='$stato_libro' WHERE id='$id'"))
       {echo 
    "";
            }else {die(
    "Errore nella query: " pg_last_error($connection));
       } 
    Ovviamente mi da errore: violazione della chiave primaria.

    Perché?
    Ho provato ad eliminare la chiave primaria ed ho notato che invece di aggiornare il record, me ne crea uno nuovo...non capisco perchè?
    Evidentemente mi sfugge l'errore

    grazie per l'aiuto

    -beppe-
    Dimentico tutto tranne quello che vorrei dimenticare

  2. #2
    Invece di usare la sintassi UPDATE prova ad usare REPLACE e più fruibile per quello che devi fare tu

  3. #3
    Non dici quali campi hai usato per stabilire la chiave primaria.

    Ma a prescindere tutto fai un errore grossolano nel momento che definisci una chiave primaria e poi vuoi modificarla. Per principio la chiave primaria e' il riferimento ad uno specifico record e quindi deve essere mai NULL e non deve essere modificata. Nella query utilizzi un id, bene, usa quello come chiave primaria e usa l'indice UNIQUE per i campi che devono essere univoci.

    L'uso di replace potrebbe non servire. il record viene identificato tramite la chiave primaria o unique e quindi cancellato e riscritto con un nuovo id primario perdendo i riferimenti con altre tabelle/record se questi riferimenti fossero presenti.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    26

    Re: query update che non funziona

    Non dici quali campi hai usato per stabilire la chiave primaria.
    Vero, chiedo scusa, i campi erano titolo, autore e isbn

    Ma a prescindere tutto fai un errore grossolano nel momento che definisci una chiave primaria e poi vuoi modificarla. Per principio la chiave primaria e' il riferimento ad uno specifico record e quindi deve essere mai NULL e non deve essere modificata. Nella query utilizzi un id, bene, usa quello come chiave primaria e usa l'indice UNIQUE per i campi che devono essere univoci.
    Ho seguito il tuo consiglio ... quando si è stanchi non bisognerebbe lavorare, appena letta la tua risposta mi è venuto in mente!!!

    Il problema, però, non è più questo ma un altro: ERROR: invalid input syntax for integer: ""
    Il mio unico campo integer è appunto l'id che però non ho chiesto di modificare
    la query è
    codice:
    UPDATE bibliografia SET url='$url', categoria='$categoria', titolo='$titolo', autore_principale='$autore', altri_autori='$altri_autori', anno='$anno', casa_editrice='$casa_editrice', luogo_pubblicazione='$luogo_pubblicazione', collocazione='$collocazione', isbn='$isbn', pagine_consultate='$pagine_consultate', note='$note', stato_libro='$stato_libro' WHERE id='$id'"
    Altra curiosità:
    nello schema del database i campi detti sopra sono chiavi univoche "non nulle", quindi non dovrebbe accettare valori nulli!
    Eppure se provo dal form a non inserire valori, i dati vengono salvati lo stesso.
    Se interrogo il database da riga di comando chiedendo di selezionarmi questi 3 campi "dove il valore dei campi IS NULL" non me li trova, nel senso che mi dice che non ci sono campi vuoti mentre li riconosce se la richiesta è where campo=''
    ???
    Non è un problema perchè ho messo un controllo direttamente nello script d'inserimento ma mi piacerebbe capire dove sbaglio!

    saluti

    -beppe-
    Dimentico tutto tranne quello che vorrei dimenticare

  5. #5
    NULL e' diverso da vuoto. Se setti un campo not null significa che non potra' assumere la condizione di null. In mancanza di dati o di NULL assumera' empty cioe vuoto se questo e' il default.... che e' poi quello che trovi con campo = ''

    l'errore che ti da la query e' dovuta all'uso di apici sul valore numerico. Se il campo e' numerico ed il settaggio di SQL-MODE e' strictly, non viene eseguito il CASTING automatico della stringa in numerico e quindi viene segnalato l'errore. Le apici sui valori contraddistinguono le stringhe.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    26
    Originariamente inviato da piero.mac
    NULL e' diverso da vuoto. Se setti un campo not null significa che non potra' assumere la condizione di null. In mancanza di dati o di NULL assumera' empty cioe vuoto se questo e' il default.... che e' poi quello che trovi con campo = ''

    l'errore che ti da la query e' dovuta all'uso di apici sul valore numerico. Se il campo e' numerico ed il settaggio di SQL-MODE e' strictly, non viene eseguito il CASTING automatico della stringa in numerico e quindi viene segnalato l'errore. Le apici sui valori contraddistinguono le stringhe.
    ...ho ancora tanto da imparare...grazie!
    Problema "quasi risolto", infatti ora l'id gli va bene ma mi da un errore sulla sintassi dei caratteri:
    "ERROR: syntax error at end of input at character 516"

    In teoria il form dovrebbe mandare allo script stringhe già "codificate" inquanto al primo inserimento ho processato tutti i valori:
    codice:
    if (get_magic_quotes_gpc()) {
    		//dati generali 
    		$compilatore = addslasheses ($compilatore);
                    $ecc ecc.....}
    
    $compilatore = pg_escape_string ($compilatore);
    ecc. ecc.
    Lo stesso tipo di errore me lo da sia che rifaccia lo stesso lavoro per i dati da modificare sia che non lo faccia...forse devo cambiare istruzione?

    Scusate se rompo

    -beppe-
    Dimentico tutto tranne quello che vorrei dimenticare

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.