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 10 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 10 anni fa
Andrea Turso
Andrea Turso
96
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 10 anni fa
Andrea Turso
Andrea Turso
96
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 10 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 10 anni fa
Andrea Turso
Andrea Turso
96
X 0 X

grazie, dipendeva proprio dal fatto che non era SIGNED.

cosa sta a indicare questa opzione (SIGNED)?

grazie ancora...

 :bye:

risposto 10 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 10 anni fa
Andrea Turso
Andrea Turso
96
X 0 X

grazie mille della spiegazione!

 :bye:

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