Introducere ID si nota selectata din html in baza de date

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

Introducere ID si nota selectata din html in baza de date

Salutare,

Am urmatoarea baza de date:
personal

Cod: Selectaţi tot

+------+-----------+------------+
|  ID  |    NUME   |   PRENUME  |
+------+-----------+------------+
|  1   | POPESCU   |     Nicu   |
|  2   | IONESCU   |     ION    |
+------+-----------+------------+
Valorile din baza de date vreau sa il intrduc intr-un tabel de forma aceasta:

Cod: Selectaţi tot

<table>
      <tr>
        <th>Numele angajatului</th>
        <th>Nota acordata</th>
      </tr>
        <?php include"query_tbl_personal.php"; ?>
    </table>
Ca sa aduc valorile in tabel am procedat in felul urmator:

Cod: Selectaţi tot

.....
$sql = "SELECT NUME, PRENUME, TIP, ID
		    FROM personal
....
if ($result->num_rows > 0) {
	while($row = $result->fetch_assoc()) {
		$nota = 10;
			echo "<tr><td>" $row["NUME"]. ' '. $row["PRENUME"]. "<br/></td>";
			echo "<td>";
			echo "<select autocomplete='off'>
					<option disabled selected>-- Alege nota --</option>";
						for( $i = 1; $i <= $nota; $i++ ) {
						echo "<option value='$i'>$i</option>\n";
							};
			echo "</select></td></tr>";
		}
}
...
Dupa ce aleg din select nota dorita pentru fiecare persoana vreau ca toate notele sa le trimit intr-o tabela:
Am butonul de submit:

Cod: Selectaţi tot

<form action="insert_value_mysqli.php" method="POST">
      <input type="submit" name="insert" value="Submit">
    </form>
tabelul unde vreau sa trimit valorile este de forma aceasta:

Cod: Selectaţi tot

+----+-------------+------+
| ID | ID_PERSONAL | NOTA |
+----+-------------+------+
| 1  |     1       |   7  |
| 2  |     2       |   9  |
+----+-------------+------+
Nu stiu cum pot adauga td-urilor un atribut cu ID-ul personalului si notelor ca ulterior sa le pod aduce in tabelul dorit.

Multumesc!

MarPlo Mesaje:4343
Salut
Se poate face cu javascript /ajax, sau cu html si php care e putin mai usor.
Metoda ar fi asa:
1. La fiecare <select> din coloanele tabelului html se adauga un atribut "name" de tip array care sa contina id-ul:

Cod: Selectaţi tot

echo "<select name='id_nota[". $row['ID'] ."]' autocomplete='off'> ...";
2. Tot acel tabel html il incadrezi in formularul de trimitere, ca sa ai <select>-urile in <form>:

Cod: Selectaţi tot

<form action="insert_value_mysqli.php" method="POST">
<table> ... </table>
<input type="submit" name="insert" value="Submit">
</form>
3. La trimiterea formularului, scriptul php din "insert_value_mysqli.php" va primi un array 2-dimensional de forma:

Cod: Selectaţi tot

$_POST['id_nota'] =[id1=>nota, id2=>nota, ...];
4. Se parcurge acest array si se definesc valorile pentru Insert:

Cod: Selectaţi tot

if(isset($_POST['id_nota']) && is_array($_POST['id_nota'])){
  $insert =[];  //array with values to insert (id, nota)
  foreach($_POST['id_nota'] as $id=>$nota) $insert[] ='('. $id .', '. $nota .')';
  $sql ="INSERT INTO table_name (ID_PERSONAL, NOTA) VALUES ". implode(',', $insert);
  //...
  echo $sql; //for debug
}

sterica Mesaje:285
Functioneaza perfect, insa va trebui sa mai studiez logica din spatele codului. Vreau sa mai adaug o variabila, si anume

Cod: Selectaţi tot

$today = date("Y-m-d H:i:s");
pe care vreau sa o pun in:

Cod: Selectaţi tot

$sql ="INSERT INTO table_name (ID_PERSONAL, NOTA, DATA_NOTARII) VALUES ". implode(',', $insert);
Multumesc!

sterica Mesaje:285
Ma invart in jurul codului si nu reusesc sa mai adaug o variabila a caror valori sa le introduc in BD.
Am incercat in modul acesta, insa imi introduce numai o singura valoare in BD

Cod: Selectaţi tot

if(isset($_POST['id_nota']) && is_array($_POST['id_nota'])){
      // get values form input text and number
      $insert = [];  //array with values to insert (id, nota)
      $today = date("Y-m-d H:i:s");
      foreach($_POST['id_nota'] as $id=>$nota) $insert[] ='('. $id .', '. $nota .')';
      // mysql query to insert data
      $sql = "INSERT INTO chestionar_sterica (ID_PERSONAL,NOTA, TIME_DATA) VALUES ('$id', '$nota', '$today')";
Am adaugat variabila aici, dar tot nu functioneaza

Cod: Selectaţi tot

$insert[] ='('. $id .', '. $nota .', '.$today')';
 $sql = "INSERT INTO chestionar_sterica (ID_PERSONAL,NOTA, TIME_DATA) VALUES";.implode(',', $insert);
 
Cum pot adauga datele din variabila $today pentru fiecare valoare introdusa in bd?

Multumesc!

MarPlo Mesaje:4343
Ai gasit bine cu se face, doar ca acea valoare ce trebuie adaugata, fiind un sir, la VALUES pt. SQL sa fie intre ghilimele.
Incearca asa:

Cod: Selectaţi tot

$insert[] ='('. $id .', '. $nota .", '". $today ."')";

sterica Mesaje:285
multumesc mult, functioneaza perfect

MarPlo Mesaje:4343
O varianta mai simpla si profesionala e sa definesti coloana TIME_DATA cu setare:

Cod: Selectaţi tot

... DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Astfel, se va adauga automat data si timpul in acea coloana, la Insert sau Update, fara sa o mai specifici in codul php.

sterica Mesaje:285
:) la un click distanta si am scapat de o variabila. Multumesc foarte mult, foarte simpla aceasta varianta.

sterica Mesaje:285
Am mai adaugat o variabila

Cod: Selectaţi tot

$insert[] ='('. $id .', '. $nota .", '". $intrebarea ."', '" . $sugestie ."')";
este o variabila de tip input ce va contine text.

Cod: Selectaţi tot

if($num_rows >0){
  $tabels ='<table class="t_note">';
  $n2 = ceil($num_rows /2); //for half of rows
  $nr =0;
  while($row = $result->fetch_assoc()){
    //ends 1st table and creates 2nd table, if index $nr=$n2
    if($nr == $n2) $tabels .='</table><table class="t_note">';

    $nota = 10;
    $tabels .="<tr><td>" .$row["NUME"]. ' '. $row["PRENUME"]. "<br/></td><td>";
    $tabels .="<select class='nota' name='id_nota[". $row['ID'] ."]' autocomplete='off'><option disabled selected>-- Alege nota --</option>";
    for($i=1; $i<=$nota; $i++) $tabels .="<option value='$i'>$i</option>\n";
    $tabels .="</select></td>";
		$tabels .="<td><input type='text' name='sugestie'></td></tr>";
    $nr++;
  }
  $tabels .='</table>';
}
echo $tabels;
Imi sunt introduse toate celelalte valori mai putin cele aferente varabilei sugestie, imi lasa spatiul gol in tabela. Am incercat ceva in genul:

Cod: Selectaţi tot

$tabels .="<td><input type='text' name='sugestie[". $row['ID'] ."]'></td></tr>";
iar in tabela in coloana SUGESTII imi este trecut Array.
Unde gresesc de nu imi sunt introduse valorile corect?
Multumesc!

MarPlo Mesaje:4343
Nu stiu sigur. Poti aplica un:

Cod: Selectaţi tot

var_export($_POST['sugestie']);
inainte de Insert, ca sa vezi ce contine acea variabila de la formular.
Incearca asa:

Cod: Selectaţi tot

foreach($_POST['id_nota'] as $id=>$nota) $insert[] ='('. $id .', '. $nota .", '". $intrebarea ."', '" . $_POST['sugestie'][$id] ."')";

sterica Mesaje:285
Nu vrea nici cum. Sunt generate 40 de inputuri de forma aceasta

Cod: Selectaţi tot

<td><input type='text' name='sugestie'></td>
ar putea fi o problema ca am 40 de name-uri egale cu sugestie?

MarPlo Mesaje:4343
La codul php dat in raspunsul anterior, inputul sa fie de forma:

Cod: Selectaţi tot

<input type='text' name='sugestie[". $row['ID'] ."]'>
Mai multe input-uri cu acelasi nume se transmit sub forma de array, iar in php li-se preiau valorile prin parcurgere cu for() /foreach().

Subiecte similare