Problema valori goale din form la php

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
sterica
Mesaje: 272

Problema valori goale din form la php

am inceput sa reporduc codul pe care m-ai ajutat sa il creez ca sa il poti intelege si am o nelamurire:

Cod: Selectaţi tot

<form id='form_tbl' action='include/value.inc.php' method="POST"><input type="hidden" name="intrebare" value="1">
      <?php
        $sql = "SELECT NUME, PRENUME, TIP, ID
            FROM personal
            WHERE TIP <> 'Inactiv'
            ORDER BY NUME ASC";

        $result = $conn->query($sql);
        echo "<table><tr><th>NUME</th><th>NOTA</th><th>SUGESTII</th></tr>";
        while($row = $result->fetch_assoc()) {
          echo "<tr><td><input type='hidden' name ='id_personal[". $row['ID'] ."]' value='". $row["ID"]."'>" . $row["NUME"]. ' '. $row["PRENUME"]. "</td>";
          echo "<td><select name='nota_pers[". $row['ID'] ."]' autocomplete='off'><option disabled selected>nota</option>";
          for($i=1; $i<=10; $i++){ 
            echo "<option value='$i'>$i</option>\n";
          };
          echo "</select></td>";
          echo "<td><textarea name='sugestie[". $row['ID'] "]' form='form_tbl' maxlength='200' autocomplete='off' placeholder='Lasa sugestia ta aici...'></textarea></td></tr>";
        }
        echo '</table><button>NEXT ></button>';
      ?>
      </form>
iar fisierul value.inc.php:

Cod: Selectaţi tot

<?php
$insert_str = null;
$nota_pers = $_POST ['nota_pers'];
$intrebare = $_POST ['intrebare'];
$sugestie = $_POST ['sugestie']; //preaia valorile din textarea

foreach ($sugestie as $key2 => $value2) {
	echo $value2. ', ';
}
echo '<pre>'.print_r($nota_pers, true).'</pre><br>' ;
echo '<pre>'.print_r($sugestie, true).'</pre><br>' ;
?>
print_r ($nota_pers), in genereaza un array corect:

Cod: Selectaţi tot

Array
(
    [55] => 6
    [29] => 2
)
pirnt_r ($sugestie), imi genereaza un array care imi da batai de cap si din care nu reusesc sa scot doar valorile completate in textarea:

Cod: Selectaţi tot

Array
(
    [80] => 
    [82] => 
    [98] => 
    [50] => 
    [99] => 
    [79] => 
    [78] => 
    [103] => 
    [84] => 
    [62] => 
    [55] => text1
    [29] => text2
)
foreach-ul imi returneaza:

Cod: Selectaţi tot

, , , , , , , , , , text1, text2,
nu inteleg de ce in primul array imi sunt generate doar valorile care contin valori din <select> iar in al doilea array imi sunt generate toate valorile chiar si cele care nu contin valori in textarea.

Multumesc!

MarPlo
La elementul <select>, deoarece primul <option> are "disabled", daca nu e selectata vreo optiune, ramane "disabled" pentru formular si nu transmmite ce e disabled.
Elementul <input> de tip "text", sau <textarea>, transmite valoarea care e in el (daca nu are "disabled") cand formularul e trimis, deci goala daca nu e completat cu ceva.
- Poti sa aplici array_filter() ca sa stergi elementele goale din array.
Ex.:

Cod: Selectaţi tot

$_POST ['sugestie'] =['e1', '', '', '', 78, 'abc'];

//remove empty items
$_POST ['sugestie'] = array_filter($_POST ['sugestie']);

//test
var_export($_POST ['sugestie']); // array(0=>'e1', 4=>78, 5=>'abc')

sterica
functioneaza perfect, multumesc mult de ajutor!

Subiecte similare