più opzioni a una ereg

avrei bisogno di settare questa ereg in modo che mi riconosca anche il -1, come posso fare?

if (!ereg("[0-9]{1,2}", $crediti))

{

echo "Crediti non validi!";

}

ho provato a utilizzare per la mia necessità lo zero, ma il db me lo riconosce come null e non riesco poi a ottenere ciò che voglio....

grazie

inviato 8 anni fa
gabar-el
X 0 X

1) potresi togliere la flag NOT NULL ai campi dove ti aspetti che sia presente un valore nullo.

Putroppo devo anche sconsigliarti questo metodo, perchè non è buona cosa avere valori null nel database (rendono difficile trovare gli errori quando il db diventa grandicello)

2) usare la funzione is_int() che ti dice se il numero è un intero, più performante perchè non utilizza il motore di parsing delle regex, e visto che -1 è un intero farà esattamente al caso tuo.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Ho visto che fai anche il controllo sulla lunghezza, in questo caso:

$crediti = 50;
$length = strlen($crediti);
if (! ($length > 0 && $length < 3 && is_int($crediti))) {
    echo 'Crediti non validi, meno di una cifra, più di due o non intero!!!';
}
risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ciao e grazie della risposta.

1) nn mi sembra di avere flag not null. e se me lo sconsigli come posso quindi risolvere?

2) grazie del consiglio, ma il mio problema al momento è che non riesco a dargli il -1, non sono molto pratico e non capisco se è un problema dato dal db o dal codice php.

dove hai visto che faccio un controllo sulla lunghezza? a me non sembra....

 :bye:

risposto 8 anni fa
gabar-el
X 0 X
"[0-9]{1,2}"

leggendo il pattern: un numero di uno o due caratteri compresi tra 0 e 9.

Il database quando crei un campo di tipo intero ti chiede sempre se può contenere o meno valori nulli, sta scritto nella struttura della tabella.

dare -1 su un campo int (integer) nel database è corretto, poichè -1 appartiene al dominio dei numeri interi (attento che il campo sia SIGNED).

 :bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

grazie, dipendeva proprio dal fatto che non era SIGNED.

cosa sta a indicare questa opzione (SIGNED)?

grazie ancora...

 :bye:

risposto 8 anni fa
gabar-el
X 0 X

SIGNED indica che i valori che saranno inseriti nel campo dovranno contenere anche un segno.

prima il campo era UNSIGNED ovvero accetava interi senza segno (quindi presumeva fossero tutti positivi), settando il campo come SIGNED il - che c'è davanti al numero effettivamente indica che il numero è negativo.

Purtroppo SIGNED riduce il range di numeri rappresentabili da quel campo (perchè un bit viene utilizzato per rappresentare il segno), ma non dovrebbe dare problemi nel 90% dei casi ^^.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

grazie mille della spiegazione!

 :bye:

risposto 8 anni fa
gabar-el
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda