Filtre las variables de publicación e imprima un currículum para cada combinación

Me gusta a continuación:

<form name="crea">
        <table class="table table-striped table-bordered table-condensed">
            <thead>
                <tr>
                    <th>Articolo</th>
                    <th>Pellame</th>
                    <th>Colore</th>
                    <th>Fondo</th>
                    <th>Taglia</th>
                    <th>Quantit&agrave;</th>
                    <th>+/-</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        <input type="text" name="articolo[]" class="input-small" />
                    </td>
                    <td>
                        <select name="pellame[]" class="input-medium">
                            <option value="nabuk">Nabuk</option>
                            <option value="vitello">Vitello</option>
                            <option value="capretto">Capretto</option>
                        </select>
                    </td>
                    <td>
                        <select name="colore[]" class="input-medium">
                            <option value="nero">Nero</option>
                            <option value="blu">Blu</option>
                            <option value="rosso">Rosso</option>
                            <option value="bianco">Bianco</option>
                            <option value="argento">Argento</option>
                            <option value="platino">Platino</option>
                            <option value="bronzo">Bronzo</option>
                            <option value="tortora">Tortora</option>
                        </select>
                     </td>
                    <td>
                        <select name="fondo[]" class="input-medium">
                            <option value="gomma">Gomma</option>
                            <option value="cuoio">Cuoio</option>
                            <option value="sughero">Sughero</option>
                        </select>
                    </td>
                    <td>
                        <select name="taglia[]" class="input-mini">
                            <option value="35">35</option>
                            <option value="36">36</option>
                            <option value="37">37</option>
                            <option value="38">38</option>
                            <option value="39">39</option>
                            <option value="40">40</option>
                            <option value="41">41</option>
                            <option value="42">42</option>
                            <option value="43">43</option>
                            <option value="44">44</option>
                            <option value="45">45</option>
                            <option value="46">46</option>
                            <option value="47">47</option>
                        </select>
                    </td>
                    <td>
                        <input type="number" min="1" max="200" name="qnt[]" step="1" value="1" class="input-mini"/>
                    </td>
                    <td></td>
                </tr>
            </tbody>

        </table>
                <input type="submit" class="btn btn-primary" name="genera" value="Genera" />

    </form>

y envío este formulario en ajax (jquery.post). En el lado del servidor, PHP recibe datos y necesito imprimir un resumen del formulario enviado. Por ejemplo, son las entradas de los usuarios (por fila):

ART1 - nabuk - nero - gomma - 35 - 1

ART1 - nabuk - nero - gomma - 39 - 5

ART1 - nabuk - nero - gomma - 40 - 9

ART1 - nabuk - nero - gomma - 45 - 1

ART1 - nabuk - rosso - gomma - 38 - 1

ART1 - nabuk - rosso - gomma - 38 - 1

ART1 - nabuk - nero - gomma - 38 - 1

ART1 - vitello - azul - gomma - 38 - 1

ART1 - vitello - azul - gomma - 40 - 1

ART561 - nabuk - nero - gomma - 40 - 1

el currículum se filtrará por los primeros 4 campos, por ejemplo:

ART1 - nabuk  - nero - gomma

                                                            35->1
                                                            39->5
                                                            40->9
                                                            45->1 

otro currículum será:

ART1 - vitello - blu - gomma 

                                                            38->1
                                                            40->1

por lo que 4 campos son los criterios de filtrado, y el otro son los datos comunes de cada regla filtrada. la tabla se expande/reduce dinámicamente en altura con javascript, y mi problema es cómo filtrar como ejemplos los datos de publicación enviados a PHP. Entonces escribirlos en un archivo, no es un problema...

Los currículums se imprimirán en un archivo PDF (esto no es un problema). He probado con el ciclo foreach, pero no se como hacer la seleccion de criterios... creo que es muy dificil. (el programa no tiene base de datos)

¿alguien puede ayudarme? Muchas gracias

preguntado el 12 de junio de 12 a las 11:06

1 Respuestas

Creo que entiendo lo que estás tratando de hacer. Agregar todos los datos de la publicación de la manera correcta a una matriz y luego usar array_multisort debería encargarse de su filtrado, ordenando los currículums en forma ascendente.

Creo que lo siguiente debería funcionar para obtener su resultado. Tenga en cuenta que realmente debería agregar una acción a su etiqueta de formulario (action="mypage.php") y probablemente method="post" también. Buena suerte. Vea abajo. Espero que esto ayude.

Para facilitar el uso, supuse que también desea su salida en una tabla, pero esto se cambia fácilmente a una cadena para su PDF o lo que sea.

//if all post variables are at least set...
if(isset($_POST['articolo']) && $_POST['articolo']!=''
    && isset($_POST['pellame']) && $_POST['pellame']!=''
    && isset($_POST['colore']) && $_POST['colore']!=''
    && isset($_POST['fondo']) && $_POST['fondo']!=''
    && isset($_POST['taglia']) && $_POST['taglia']!=''
    && isset($_POST['qnt']) && $_POST['qnt']!=''){

//resumes array
$resumes = array();

//Loop through each post row (based on the articolo), if all the same keys are set for the required post we have
// a valid resume.
foreach($_POST['articolo'] as $key=>$value){
    if(isset($_POST['articolo'][$key]) && $_POST['articolo'][$key]!=''
        && isset($_POST['pellame'][$key]) && $_POST['pellame'][$key]!=''
        && isset($_POST['colore'][$key]) && $_POST['colore'][$key]!=''
        && isset($_POST['fondo'][$key]) && $_POST['fondo'][$key]!=''
        && isset($_POST['taglia'][$key]) && $_POST['taglia'][$key]!=''
        && isset($_POST['qnt'][$key]) && $_POST['qnt'][$key]!=''){
        $resumes[] = array('articolo'=>$_POST['articolo'][$key],
            'pellame'=>$_POST['pellame'][$key],
            'colore'=>$_POST['colore'][$key],
            'fondo'=>$_POST['fondo'][$key],
            'taglia'=>$_POST['taglia'][$key],
            'qnt'=>$_POST['qnt'][$key]);
    }
}

//Multi sort our resumes array ASCENDING for each key.
array_multisort($resumes);

//set up our "current" article to start with, the details are blank so we print the first details always.
$current['articolo'] = '';
$current['pellame'] = '';
$current['colore'] = '';
$current['fondo'] = '';

//start output
echo '<table>';

//loop through the resumes
foreach($resumes as $thisResume){

    //Print this row
    echo '<tr><td>';
    //If this resume is of a different type (any of the keys/filters) then print the info, otherwise it's the
    // same as above so don't bother.
    if($thisResume['articolo']!=$current['articolo']
            || $thisResume['pellame']!=$current['pellame']
            || $thisResume['colore']!=$current['colore']
            || $thisResume['fondo']!=$current['fondo']){
        echo htmlentities($thisResume['articolo']
                .' - '.$thisResume['pellame']
                .' - '.$thisResume['colore']
                .' - '.$thisResume['fondo']);

    }
    //Echo the resume specific quantity info.
    echo '</td><td>'.htmlentities($thisResume['taglia']
                .' -> '.$thisResume['qnt']).'</td></tr>';

    //Update our current array info which stores the resume attributes for comparison of next resume.
    $current['articolo'] = $thisResume['articolo'];
    $current['pellame'] = $thisResume['pellame'];
    $current['colore'] = $thisResume['colore'];
    $current['fondo'] = $thisResume['fondo'];
}
//end output
echo '</table>';
}
?>

Respondido el 13 de junio de 12 a las 09:06

si funciona, lo intentare brutalmente, pero mañana lo comprobare mejor. No entiendo qué hace "isset($_POST['pellame'][$key]{0}"... verifique si la variable está configurada y?!?! - user1432059

Sí, verifique que esté configurado y no en blanco de una sola vez. - Andrés Nicholson

mmmm... no entiendo "$_POST['pellame'][$key]{0}"... exactamente [key]{0} ¡¿qué haces?! Gracias - usuario1432059

También puede usar (isset($_POST['pellame'][$key]) && $_POST['pellame'][$key]!=''), es el enfoque más común para ser justo. - Andrés Nicholson

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.