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: 272

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
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
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
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
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
multumesc mult, functioneaza perfect

MarPlo
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
:) la un click distanta si am scapat de o variabila. Multumesc foarte mult, foarte simpla aceasta varianta.

sterica
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
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
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
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