Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Keyren
    Registrato dal
    Aug 2012
    Messaggi
    64

    Formattazione valori in un array

    salve a tutti,non so quanto sia corretto il titolo,ma non so cosa metterexD allora sto lavorando sul modulo RMA,ma sono bloccato su un punto,ovvero far si che durante il controllo dei dati inseriti nel modulo,appaia l'errore nel caso l'utente inserisca 2 prodotti in quanto è possibile aprire un RMA per prodotto.Faccio un banale esempio per intenderci,io ho confermato un ordine acquistando 4 unità del prodotto1 e 3 unità del prodotto2 quando mi arriva la merce a casa mi accorgo che 3 unità del prodotto1 non funzionano(che sfigaxD) così avvio il modulo RMA inserendo tre volte il prodotto1 insieme al codice e relativa descrizione del difetto e clicco invia e quì arrivano i problemi xD
    Queste sono le variabili trasformate in array nella form del modulo( ho inserito nella form name="Cod[]" )
    Codice PHP:
    if(isset($_POST['Cod'])) $C $_POST['Cod'];
     if(isset(
    $_POST['Prd'])) $P $_POST['Prd'];
     if(isset(
    $_POST['Qnt'])) $Q $_POST['Qnt']; 
    if(isset(
    $_POST['DD'])) $DD $_POST['DD'];
    $Codice ''//inizializzo codice che serve più in basso 
    finquì tutto tranquillo(come minimo se non sapevo fare questoxD) salto i vari controlli di data,nomi ecc..perchè inutili e passo direttamente al controllo per verificare se sono stati selezionati più prodotti,faccio prima il controllo sul codice prodotto

    Codice PHP:
    $conta count($C); //Conto quanti valori ci sono nell'array $C che contiene i codici dei prodotti
    if($DD != ''){ //Escludo i valori vuoti dell'array
     
    For($I 0;$I<= count($DD)-1;$I++){ //Eseguo un for valido per tutti gli array
    $VC $C[$I]; 
    if(
    $VC != ''){ 
    $Codice .= "'".$VC."'"//Aggiungo a $Codice l'array stampato con gli apici ottenendo 'Cod1' 'Cod2' ecc..
    // Quì ho dovuto fare questo controllo perchè se nella form digito più prodotti il risultato è 'Cod1','Cod2',ecc.. ,ma se il prodotto è uno solo riscontro un errore nella query perchè il risultato che ottengo è 'Cod1', 
     
    if($conta 1){
     
    $Codice.=','
    }else{
     
    $Codice.=" "

    }
     } 
     
    $SelectC QuerySemplice("SELECT DISTINCT count(CodiceProdotto) as CodiceProdotto FROM articoli WHERE CodiceProdotto IN({$Codice})"); 
    while(
    $rt mysql_fetch_assoc($SelectC)){
     
    $ContaCod $rt['CodiceProdotto']; 
     } 
    if(
    $ContaCod 1){ //Se maggiore di 1 allora sono stati selezionati più di un prodotto
    echo "Errore puoi richiedere un RMA per prodotto [url='ModuloRMA.php']Riprova[/url]
    "

    exit(); 

    if(
    $ContaCod == 0){ Se uguale a 0 c'è qualche errore di battitura del codice 
    echo "Errore COD: Prodotto non presente in fattura [url='
    ModuloRMA.php']Riprova[/url]
    ";
     exit(); 


    il problema principale sta nel fatto che la variabile $conta risulta sempre 1 anche se seleziono più prodotti,e per tanto la query da errore perchè l'array viene formattato male, e se seleziono più di 2 prodotti ottengo questo risultato 'Cod1','Cod2' 'Cod3' ecc..(la virgola viene stampata solo nei primi 2).Attualmente funziona solo se digito nel modulo un solo prodotto.Oddio lo so è un pò un casino^^' ho commentato in più punti per cercare di essere il più chiaro possibile,se non capite qualcosa basta chiedere,grazie in anticipo

  2. #2
    Comincia col sostituire tutta la prima parte (ciclo for):

    Codice PHP:
    $conta count($C); //Conto quanti valori ci sono nell'array $C che contiene i codici dei prodotti
    if($DD != ''){ //Escludo i valori vuoti dell'array
     
    For($I 0;$I<= count($DD)-1;$I++){ //Eseguo un for valido per tutti gli array
    $VC $C[$I]; 
    if(
    $VC != ''){ 
    $Codice .= "'".$VC."'"//Aggiungo a $Codice l'array stampato con gli apici ottenendo 'Cod1' 'Cod2' ecc..
    // Quì ho dovuto fare questo controllo perchè se nella form digito più prodotti il risultato è 'Cod1','Cod2',ecc.. ,ma se il prodotto è uno solo riscontro un errore nella query perchè il risultato che ottengo è 'Cod1', 
     
    if($conta 1){
     
    $Codice.=','
    }else{
     
    $Codice.=" "

    }
     } 
    con:

    Codice PHP:
    $Codice "'".implode("','"$C)."'"
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it L'avatar di Keyren
    Registrato dal
    Aug 2012
    Messaggi
    64
    Wow bel comando cioè come funziona?
    Codice PHP:
    $Codice "'".implode("','"$C)."'"
    da quel che ho capito serve per aggiungere valori?
    Cmq ottengo il seguente risultato: 'KNBFHN','','','','','','','','','' ,ma nonostante i campi vuoti la query risponde a dovere=D,grazie sembra funzionare per ora magari faccio qualche altra prova,anche perchè il ciclo for che ho eliminato si estendeva per tutto il codice visto che più in basso facevo il controllo sui prodotti ^^ se mi serve altro scrivo quì grazie ancora oltre ad avermi aiutato,mi hai anche "allungato" la vita riducendo la linee di codice da scrivere xD

  4. #4
    Se hai problemi di campi vuoti o NULL nell'array puoi risolvere semplicemente modificando il codice che ti ho postato così:

    Codice PHP:
    $Codice "'".implode("','"array_filter($C))."'"
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it L'avatar di Keyren
    Registrato dal
    Aug 2012
    Messaggi
    64
    ok grazie ancora^^, senti visto che comunque si tratta di array vorrei farti un'altra domanda inerente al problema,senza aprire un altro topic.Sto creando una serie di funzioni,per ottimizzare il mio lavoro,questa è la funziona per il comando mysql per l'insert
    Codice PHP:
    function QueryInsert($Tabella,$Campi,$Valori){ 
    require_once 
    'Connessione.php'
    For(
    $I 0;$I<= count($Campi)-1;$I++){ 
    $C $Campi[$I]; 
    $V $Valori[$I]; 
    $Insert QuerySemplice("INSERT INTO {$Tabella}({$C}) VALUES('{$V}')"); 

    }; 
    mentre questa è la linea di codice che uso per richimarla,nello specifico voglio inserire nella tabella utenti,nei campi Username,Password,Mail i dati UtenteProva,123 e mail@prova.it,funziona tutto,solo che mi inserisce i dati in righe diverse,tipo riga 1 inserisce l'username,nella riga 2 la password e così via, il problema stà sicuramente nel ciclo for che ripete l'insert per 3 volte(in questo caso),ho provato ad usare il comando implode,ma niente al massimo ottengo tutti e tre i valori inseriti tipo in username mi ritrovo utenteprova123email@prova.it,nella riga sotto nel campo password la stessa cosa ecc..

    Codice PHP:
    QueryInsert('utenti',array('Username','Password','Mail'),array('UtenteProva',md5(123),'mail@prova.it')); 
    Come ho detto non ho aperto un altro topic perchè visto che stiamo parlando di array,mi è sembrato inutile,in caso contrario chiedo scusa in anticipo =D

  6. #6
    Codice PHP:
    function QueryInsert($Tabella$Campi$Valori) {
        require_once 
    'Connessione.php';
        
    $fields implode(", "$Campi);
        
    $values "'".implode("', '"$Valori)."'";
        
    $Insert QuerySemplice("INSERT INTO {$Tabella} ({$fields}) VALUES ({$values})");

    Ovviamente tale soluzione funziona solo con campi di tipo varchar (in quanto inserisce sempre gli apici nei valori da inserire e non effettua verifiche sulla correttezza e sulla congruenza dei valori inseriti negli array passati come parametro.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it L'avatar di Keyren
    Registrato dal
    Aug 2012
    Messaggi
    64
    Grazie funziona(ero così vicino alla soluzione XD)cmq non ho capito una cosa,in che senso funziona sono con i campi varchar?Ho provato questa funzione inserendo 2 valori uno di tipo INT e uno Varchar e non ha dato errori,forse ho capito io male?^^'

  8. #8
    Originariamente inviato da Keyren
    Grazie funziona(ero così vicino alla soluzione XD)cmq non ho capito una cosa,in che senso funziona sono con i campi varchar?Ho provato questa funzione inserendo 2 valori uno di tipo INT e uno Varchar e non ha dato errori,forse ho capito io male?^^'
    Alla funzione puoi passare anche valori interi, ma la insert funzionerà solamente se nel DB essi sono dichiarati di tipo varchar.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it L'avatar di Keyren
    Registrato dal
    Aug 2012
    Messaggi
    64
    eh no ho appunto provato a inserire in database un valore int in un campo di tipo int (nel caso specifico l'ID del fornitore) e non ha dato problemi °_°

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.