array_search(), ora va, ora no!

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
Sul sito che sto creando, ci sono due tabelle correlate, ma nella seconda vanno inseriti dei valori solo se questi esistono :p altrimenti va saltata.
Ora tutti questi valori vengono da un form riempito da un utente, e una funzione di ricerca degli errori segnala errori e warning prima di dare il via alla creazione dei record.
fino a qui è normale procedura, ma c'è un ma!
Un po' di codice così mi spiego meglio: Fase 1 :p
PHP:
                    /**
                        *  La variabile $input è un array che contiene tutti i valori passati dal form, dopo aver verificato che i dati siano esatti e puliti da tentativi di injection
                        *  Ora vanno controllati quei dati che non possono essere false o vuoti.
                        */
                    $errNum = []; $errInd = [];  //  Array di comodo. si veda più avanti
                    foreach( $input as $nomeCampo => $valore )
                    {
                        switch( $nomeCampo )
                        {
                            //  Metto solo ciò che non funziona bene o che da strani errori e problemi, per semplificare lo script.

                            //  Dati indirizzo.
                            case 'azienda':
                            case 'cod_fiscale':
                            case 'p_iva':
                            case 'mansione':
                            case 'ufficio':
                            case 'via':
                            case 'cap':
                            case 'citta':
                            case 'provincia':
                                if ( $valore == false ) $valore = '';  //  Se si incontra un valore che è false, lo trasformo in una stringa vuota, mi semplificherà il salvataggio dei dati.
                                if ( empty($valore) === true ) 
                                         $errInd[$nomeCampo] = 'vuoto';  //  L'array indica un valore che dovrebbe esserci ma non c'è è vuoto.
                                else 
                                         $errInd[$nomeCampo] = 'pieno';  //  Bene. l'utente ha inserito un valore per questo campo.
                                break;
                           
                            //  Dati telefono
                            case 'telefono':
                            case 'telefono_ufficio':
                            case 'cellulare':
                            case 'cellulare_ufficio':
                            case 'fax':
                            case 'email':
                            case 'pec':
                            case 'email_ufficio':
                            case 'pec_ufficio':
                                if ( $valore == false ) $valore = '';  //  Come Sopra
                                if ( empty($valore) === true )
                                        $errNum[$nomeCampo] = 'vuoto'; 
                                else 
                                        $errNum[$nomeCampo] = 'pieno';
                                break;

                        }
                    }
                    var_dump( $errNum, $errInd );  //  In debugging verifico che cosa ho scritto e cosa risulta dal controllo errore.
                    // Controllo cosa c'è nei due array, se viene trovato anche una sola chiave a 'pieno' salto, altrimenti manderò un warning all'utente e non registrerò il dato.
                    if ( ( array_search( 'pieno', $errNum ) === false ) && ( array_search( 'pieno', $errInd ) === false ) )
                    {
                        $warning .= '<dt>Numeri e/o e-mail</dt><dd>Questi campi non sono obbligatori, ma inserirne almeno uno sarebbe utile.</dd>';
                    }
                    unset( $errNum ); //  Svuoto l'array $errNum che non mi serve più.

Qui finisce il controllo di quanto inserito e in allegato qui sotto c'è quanto evidenziato nel browser.
Clipboard01.jpg

Nei due array, almeno un campo è a pieno e la funzione array_search li trova, in questo modo non verrà presentato nessun warning e posso registrare quanto è stato passato.
Quindi codice della fase 2
PHP:
                    // Se non ci sono errori, salvo i dati.
                    if ( $errore === false && $warning === false )
                    {
                        $numeri = new CRUDNumeri();
                        
                            $input['id_ute'] = $datiSessione['id_ute'];
                            $input['id_num'] = $numeri->createNumero( $input );  //  Ritorna l'ID del tabella numeri da riportare nella tabella indirizzi.

                            //  Questo è il punto incriminato. Non c'è verso di fargli capire che c'è almeno un campo a pieno nell'array $arrInd.
                            if ( array_search( 'pieno', $errInd ) === false )
                            {
                                 //  Se c'è qualcosa tra gli indirizzi, li salva, ma non arriva mai fino a qui.
                                        echo '<p>Inserimento valori ( INPUT ):</p><pre>'; var_dump( $input ); echo '</pre>';
                                $indirizzi = new CRUDIndirizzi(); 
                                $indLastID = $indirizzi->createIndirizzo( $input );
                                unset( $indirizzi );
                            }
                                
                        unset( $obj );
                    }
Se vi state chiedendo perché ho scelto come valori pieno e vuoto, è perché non capendo il comportamento della funziona array_search() ho sostituito i valori true e false, penando che potevano dare dei problemi ( Illuso ).
In pratica, anche se l'array $errInd contiene almeno un campo a 'pieno', array_search() non sembra trovarlo e quindi salta a piè pari non registrando mai un indirizzo, ma nella fase di controllo lo trova senza problemi.
Ma non l'ho cancellato con unset(), il confronto è fatto esattamente come sopra e funziona ( sopra ) ma qui, niente.
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
si ho visto che sono uguali ma il secondo per funzionare deve essere opposto ( TRUE ) o sbaglio ?
Può essere che il sonno mi abbia reso le idee meno chiare e potresti aver ragione, ma alla fine ho risolto tagliando la testa al toro e visto che per ora funziona, lo lascio così.
In pratica ho evitato di mettere un valore a vuoto, se manca il dato nel POST, così ora l'array contiene dati solo se ci sono valori in POST.
In questo modo posso contare e vedere se l'array contiene qualchecosa, a quel punto vado oltre. Insomma uso la funzione count() al posto di array_search().
 
Discussioni simili
Autore Titolo Forum Risposte Data
otto9due Leggere valore da array multidimensionale a chiavi dinamiche PHP 1
M Passaggio variabili array php su un tasto jq PHP 3
M Somma inversa di Array C/C++ 2
MarcoGrazia Iterazione array PHP 5
N Passare array da php a javascript PHP 5
G Ordinare un array multidimensionale PHP 4
H Errore su array associativo PHP 1
K Array senza ripetizioni Presentati al Forum 4
A Gestione array multidimensionale PHP 6
otto9due Più chiavi in array con array_key_exists() PHP 0
M Array associativi php su 2 campi mysql PHP 10
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
L Sessione e array per utenti PHP 0
R Importazione csv su mysql tramite array PHP 2
elpirata Ricavare e stampare indirizzo ip da array associativo PHP 0
P Ciclare tra array di oggetti PHP 1
R Raggruppare valori array PHP 5
S Come conoscere la posizione di numeri in un array escludendo i doppioni PHP 4
D Popolare array PHP 8
R Includere elementi array fra apici PHP 1
P Array da foreach PHP 2
N Variabile di sessione è un array PHP7 PHP 3
R Scorporare array e recuperare record tabella PHP 10
A Contare gli elementi di un array PHP 13
A Importare array in mysql PHP 1
A Array di immagini Sviluppo app per Android 10
D Chiave unica in estrazione dati da array php PHP 0
D Spazio vuoto in un elemento di un array php PHP 2
S Come filtrare valori di un array PHP 4
mazman mysqli_query() mi ritorna un array vuoto anche se presente un record nella tabella PHP 13
A Non è un array e nemmeno un intero, che tipo di dato è? Javascript 1
max1974 PHP, Array Multidimensionale e Grafici PHP 22
S [PHP] Confrontare due array con valori quasi uguali PHP 2
MarcoGrazia [PHP] Unioni di due array con somma di valori PHP 6
R [PHP] Visualizzazione dati Array PHP 2
S [PHP] Eliminare doppioni array e rinumerare le posizioni PHP 2
M Importare - Manipolare Json Array Sviluppo app per Android 2
M [PHP] Problemi su inserimento array nel db PHP 7
M [PHP] Visualizzare un array partendo dal numero 1 e non 0 PHP 5
G [ASP] Ciclare i valori di 2 array Classic ASP 2
S [PHP] Estrarre elementi array su più variabili PHP 5
S [PHP] Estrarre dati tabella in diversi array PHP 2
max1974 [PHP] Raggruppare array PHP 4
A [PHP] Caricamento database in array PHP 11
G sql select con array in php PHP 1
L [Java] Aggiungere elementi ad array JSON Java 0
S [PHP] individuare chiave elemento array PHP 7
A [PHP] Script con array con numeri che iniziano per 00 PHP 2
Emix [Javascript] Somma con array input HTML Javascript 1

Discussioni simili