Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    messaggio d’errore in caso di chiave duplicata

    Salve, ho creato un form per la registrazione al mio sito collegato ad un database. Funziona tutto come dovrebbe, però vorrei far visualizzare un messaggio personalizzato quando l'utente inserisce un valore del campo chiave già presente nel database.

    es se imposto il campo nome come chiave primaria e l'utente nel registrarsi inserisce un nome già esistente nel database appare questa stringaDuplicate entry 'carlo' for key 'tua_username' invece vorrei sostituirla con un messaggio personale...

    ho provato con questo codice ma non funziona
    $query = "INSERT INTO $tabella VALUES ('$xxx','$xxx','$xxx','$xxx','$xxx','$xxx','$xxx', '$xxx','$xxx','$xxx','$xxx')";
    mysql_query($query) or die(mysql_error());

    mysql_query($query);
    $error_num = mysql_errno();
    switch($error_num) {
    case 1062:
    echo 'errore';
    break; }

    come faccio?
    grazie

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    http://www.php.net/manual/en/function.mysql-errno.php

    Watch out! Although mysql_errno() supposedly returns the error number from the last MySQL function, if you don't specify a link identifier, it assumes the last link *opened*, NOT the last link *used*.

    That means you can actually have mysql_errno() blindly ignore the error caused by the last MySQL function if it didn't use the last opened link.
    Codice PHP:
    $conn mysql_connect('blablabla ...... ');
    $query mysql_query("query ..... ");
    switch(
    mysql_errno($conn)) {
      case 
    1062:
      echo 
    'valore duplicato';
      break;


  3. #3
    non va!

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non va non vuol dire niente.

    Hai tolto la segnalazione di errori di

    or die(mysql_error());

    e rimosso la doppia chiamata a mysql_query?

  5. #5
    Originariamente inviato da nicola75ss
    Non va non vuol dire niente.
    hai ragione scusa, allora provo ad essere più preciso

    Hai tolto la segnalazione di errori di

    or die(mysql_error());
    l'ho fatto ma cosi non mi da nessun messaggio di errore, neanche quello iniziale Duplicate entry '' for key '' anzi mi restituisce il risultato come se non ci fosse nessun problema però ovviamente non registra i dati nel DB

    e rimosso la doppia chiamata a mysql_query?
    si

    stavo provando a fare il tutto con un ciclo if (del tipo se il nome esiste blocca tutto) ma mi sto incartando

  6. #6
    Personalmente mi farei una query select di controllo preventiva. Se esiste gia' il valore do la segnalazione di errore come mi pare "else" faccio l'insert.

    Siamo d'accordo che darebbe un errore di dato duplicato ma non capisco perche' tentare di "provocare" l'errore quando questo si puo' evitare a priori.

    Usare come chiave primaria il nome non e' certamente una cosa consigliabile. Non e' certo la chiave ideale. E' un campo variabile, non e' numerico, ha un rapporto diretto con il contenuto. Tutte cose sbagliate determinando il valore di una chiave primaria.
    La tua protezione di unicita' dovrebbe essere fatta con chiave UNIQUE. Serve in special modo quando questa deve parare inserimenti diretti, non solo tramite uno script che si dovrebbe parare da se intendo dire .

    Questo modo di controllo preventivo vale anche per la portabilita' dello script. Eccoti una traccia:

    select count(*) from tabella where nome = '$nome'

    if count(*) == 1 ---> esiste
    else
    insert.....

    Fai anche prima ed in modo piu' pulito.

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

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.