Stringhe: confrontare immissione con stringa d'esempio e costruire stringhe da più campi

Scar991

Utente Attivo
30 Apr 2012
167
0
0
Salve a tutti!
Sto costruendo un database per una biblioteca e sto effettuando la sua gestione tramite PHP.

Volevo fare in modo che i vari controlli 'blindassero' le varie possibilità di immissione, e tra questi volevo controllare l'inserimento del codice dei libri per l'aggiunta al database di nuovi volumi.

Il codice è formato per la maggior parte dei casi da un carattere alfabetico che ne rappresenta la categoria, da uno o più numeri che rappresentano l'ordine. Per intenderci:

A 58

Mi chiedevo se fosse possibile effettuare un confronto con una stringa generalizzata per fare in modo che siano tollerate solo immissioni di questo tipo, così che una stringa del tipo "pippo" fosse considerata errata dal sistema.

Stavo pensando di confrontare le varie sottostringhe ma non so se è il sistema più rapido.

Continuando a parlare di codici, questi vengono registrati nel database come

A 58/1-5

dove "/1-5" rappresenta il numero di volumi con quello stesso codice. I volumi sono inseriti separatamente in un altro campo del form (Un menu a tendina "Volumi" con numeri selezionabili).

Come posso fare per unificare la stringa in modo da inserirla nel campo 'codice' del mio database?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se devi verificare l'input alfabetico o numerico a alfanumerico dai un occhio a preg_match
http://it2.php.net/manual/en/function.preg-match.php
se, da quello che ho capito, vuoi dare un codice al volume es quello che hai scritto A 58/1-5
selezionata la categoria
il numero
e il volume
il codice completo puo risultare da
PHP:
<?php
//.....
//esempio
$categoria="A";
$numero="58";
$numero_volume="2";
$codice_volume="$categoria $numero/$numero_volume";//concatenamento delle stringhe
echo $codice_volume;//output => A 58/2
//....
?>
 

Scar991

Utente Attivo
30 Apr 2012
167
0
0
Grazie mille della risposta, borgo!

Ho un piccolissimo problema, l'inserimento dello spazio nella stringa!
Ho scritto la mia porzione di codice così:

PHP:
$Codice = $_POST['ADD_Codice'];
		$pattern = '/[A-Z]\H[0-9]{1,4}/';
		$cfr = preg_match($Codice, $pattern);
		
		if ($cfr != 1) {
			$err_cod = 'Inserire un codice valido!';
		
			$_SESSION['Errori'] = serialize($err_cod);
			
			$flag = 'false';
			
			$_SESSION['Flag'] = serialize($flag);

			echo "<meta http-equiv='Refresh' content='0; URL=URLPAG'>";

Dove \H dovrebbe essere il carattere che indica lo spazio...
Inoltre non so se il mio pattern è corretto per una struttura come quella che serve a me...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova con questo esempio, se vuoi aumentare il numero di lettere e/o cifre aumenta rispettivavemente il secodo numero N di
{1,N}

PHP:
<?php
$stringhe_prova=array('A 68', 'B 7', 'A58','d 37','z 99','8 bb', 'AA 58','U 888');
$pattern="/^[A-Z]{1,1}+ +[0-9]{1,2}$/";
foreach($stringhe_prova as $ch => $va){
	if(preg_match($pattern, $va)){
		echo "la stringa $va è valida<br />";
	}else{
		echo "la stringa $va NON è valida<br />";
	}
}
?>
 

Scar991

Utente Attivo
30 Apr 2012
167
0
0
C'è qualcosa che non va...

Ho assegnato il valore inserito come codice ad una variabile, ho usato il pattern che mi hai consigliato
Ho ciclato sul preg_match in questi modi differenti:

PHP:
$Codice = $_POST['ADD_Codice'];
$pattern = '/^[A-Z]{1,1}+ +[0-9]{1,4}$/';
$cfr = preg_match($Codice, $pattern);

// IN QUESTO CASO, HO POSTO $cfr NELL'IF SUCCESSIVO

PHP:
$Codice = $_POST['ADD_Codice'];
$pattern = '/^[A-Z]{1,1}+ +[0-9]{1,4}$/';
 if (preg_match($Codice, $pattern) [...]) {...}

// IN QUESTO CASO HO PARAGONATO IL PREG_MATCH A '1', '0', 1, 0, true, false, SIA CON "==" CHE CON "==="

Il risultato è sempre l'errore. Nel caso in cui metto 1 nel confronto del preg_match, invece, mi viene sempre data come vera.

Cosa c'è che non va?

Il codice 'completo'

PHP:
if (isset($_POST['VER:B_Codice']) && $_POST['VER:B_Codice'] == 'Verifica Codice') { 
	
		// Controllo che il campo sia pieno
		
		$Codice = $_POST['ADD_Codice'];
		$pattern = '/^[A-Z]{1,1}+ +[0-9]{1,4}$/';
		
		// QUESTO E' UNO DEI TENTATIVI

		if (preg_match($Codice, $pattern) == 0) {
			$err_cod = 'Inserire un codice valido!';
		
			$_SESSION['Errori'] = serialize($err_cod);
			
			$flag = false;
			
			$_SESSION['Flag'] = serialize($flag);

			echo "<meta http-equiv='Refresh' content='0; URL=/miapagina.php'>";	
	
		} else {
			
		$flag='true';
			$_SESSION['Flag'] = serialize($flag);
			$_SESSION['Codice'] = serialize ($_POST['ADD_Codice']);

			echo "<meta http-equiv='Refresh' content='0; URL=/miapagina.php'>"
		}
 

Scar991

Utente Attivo
30 Apr 2012
167
0
0
Perdonatemi se riapro la discussione, ma dato che il problema è simile ho creduto fosse meglio non aprirne altre...

In sostanza, oltre al già risolto problema della stringa "A 51" ora se n'è presentato un altro.
C'è la possibilità, infatti, che la stringa sia del tipo "A 51 bis".
Ho provato a fare un doppio confronto, con una preg_match che mi confronta la solita stringa "A 51" e un altro che mi confronta l'eventuale "A 51 bis".

Avevo in mente di strutturare il codice in modo che se uno dei due casi sia vero, allora la 'registrazione' avvenga correttamente, ma a quanto pare salto qualche passaggio...

PHP:
$Codice = strtoupper($_POST['ADD_Codice']);
		$pattern = '/^[A-Z]{1,1}+ +[0-9]{1,4}$/';
		$pattern2 = '/^[A-Z]{1,1} + + [0-9]{1,4} +  + [A-Z]{1,3}/';		
		if ((preg_match($pattern, $Codice) === 0)) // qui dovrei inserire l'altra condizione del tipo "(preg_match($pattern2, $Codice) === 0)" {
			$err_cod = 'Inserire un codice valido! (Esempio "A 58" o "A 58 bis")';
[....]
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova questo (ho tralasciato l'upper)
PHP:
<?php
$da_verificare=array('A 51','A 51 BIS','333', 'A51', 'A51 BISCH','AA 51');
$pat="/^[A-Z]{1,1}[ ]{1,1}[0-9]{1,4}[ ]{0,1}[A-Z]{0,3}$/"; 
foreach($da_verificare as $val){
	if(preg_match($pat,$val)){
		echo "codice $val giusto<br>";
	}else{
		echo "codice $val errato<br>";
	}
}
?>
output
codice A 51 giusto
codice A 51 BIS giusto
codice 333 errato
codice A51 errato
codice A51 BISCH errato
codice AA 51 errato

p.s.
un consiglio cercati un manuale che insegni a costruire i codici
 
Discussioni simili
Autore Titolo Forum Risposte Data
F confrontare due stringhe "numeriche" PHP 7
E [PHP] confrontare stringhe importate da csv PHP 19
N Confrontare due Stringhe PHP 2
G Confrontare due stringhe PHP 11
F confrontare due stringhe c Programmazione 0
A Confrontare 2 stringhe in JScript Classic ASP 0
MarcoGrazia Operatore IN e stringhe CSV PHP 3
Alex_70 Stringhe duplicate PHP 36
R Tradurre stringhe con php e google translator PHP 4
A Cercare un carattere uguale in due stringhe Java 5
P [PHP] Inserire stringhe in input(text),memorizzarle e stamparle in file successivo PHP 0
M [PHP] Stringhe con accento nel POST PHP 3
M [java] esercizio lunghezza array di stringhe Java 0
K [WordPress] editare stringhe di deafault WordPress 0
S [Javascript] [HTML] creare stringhe di riferimento da riutilizzare Javascript 5
B [Java] Stringhe binarie Java 0
venomina [MySQL] Stringhe vuote MySQL 0
E [PHP] Operazioni di confronto su stringhe PHP 26
G [PHP] Operazioni sulle stringhe PHP 2
D [Problema] Comparare stringhe Sviluppo app per Android 0
S stringhe con caratteri speciali PHP 3
A Problema con stringhe e numeri interi PHP 2
M Stringhe con caratteri non codificati (es. �) PHP 1
xone Filtrare e ripulire stringhe in input PHP 1
F Controllo tra due stringhe jQuery 5
K formattazione stringhe Javascript 1
K alcuni chiarimenti sul metodo di ricerca nelle stringhe o array Javascript 1
K problema di sintassi con le stringhe PHP 5
F spazi stringhe PHP 3
P Escludere stringhe contenute nei record da una select MySQL 3
M Estrapolare stringhe da una funzione PHP 7
M Dividere Stringhe per MySQL PHP 6
N Modifica valori stringhe di un altro file PHP 7
SolidSnake4 stringhe PHP 7
F programma con le stringhe in c!! Programmazione 0
N [PHP/MySQL] Problema inserimento stringhe ' or ', ' and ' PHP 2
L Problema concatenzione stringhe PHP 2
P Sostituzione stringhe sulla base di una tabella di conversione MySQL 2
catellostefano stringhe strane nell'header di template joomla Joomla 4
N variabili, stringhe e valori Javascript 4
A stringhe Classic ASP 2
F query con stringhe doppie Classic ASP 2
G Problema con le stringhe PHP 3
B concatenare stringhe nel document Javascript 1
S Php - Sostituzione Stringhe PHP 1
P Problema con apici nelle stringhe [era:Cambiare grandezza carattere con JavaScript] Javascript 3
F stringhe: sicurezza PHP 7
A confronto tra stringhe complesse, come fare???? PHP 1
M URGENTE: ORDINAMENTO LESSICOGRAFICO STRINGHE CON MERGESORT ricorsivo IN C (non C++) C/C++ 1
T Concatenazione stringhe Classic ASP 1

Discussioni simili