preluare valori din while separat, in functie de id

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

preluare valori din while separat, in functie de id

Salutare,

Intampin cateva probleme un cu while si anume:
While-ul de mai jos imi returneaza valorile intr-un tabel ce este pozitionat intr-o pagina ce contine un navigator si cateva paragrafe.

Cod: Selectaţi tot

if ($result_personal->num_rows > 0) {
  // afiseaza datele din fiecare rand din $result_personal
  while($row = $result_personal->fetch_assoc()) {
  	$tbl_chest .= "<tr><td><input type='hidden' name='id_personal[". $row['ID'] ."]' value='". $row["ID"]."'>" . $row['NUME'] . ' ' . $row['PRENUME'] . '</td>';

	$tbl_chest .= "<td><select name='nota_intr_1[". $row['ID'] ."]' required autocomplete='off' ><option value='' disabled selected>nota</option>";
        for($i=1; $i<=10; $i++){ 
            $tbl_chest .= "<option value='$i'>$i</option>\n";
        };
        $tbl_chest .= "</select></td>";
.....
Tabelul din acest while arata cam asa si este un chestionar anonim:

Cod: Selectaţi tot

+------+--------------+--------------+--------------+
| NUME | INTREBAREA 1 | INTREBAREA 2 | INTREBAREA 3 |
+------+--------------+--------------+--------------+
| ION  |     NOTA     |     NOTA     |     NOTA     |
| NICU |     NOTA     |     NOTA     |     NOTA     |
+------+--------------+--------------+--------------+
si se intinde pe 30 de randuri si 7 coloane pentru intrebari
Sub tabel este un buton de submit care imi trimite valorile intr-o tabela.

Utilizatorul care acceseaza pagina web si apasa butonul de submit ii se aloca un ID_ANONIM. Ca sa fac acest lucru am creat o tabela iar la apasarea butonului de submit se incrementeaza ultima valoare din tabel:

Cod: Selectaţi tot

//selectez ultima valoare a contorului
	if(isset($button_vot)) {
		$sql = "SELECT MAX(CONTOR) AS CONTOR FROM chestionar_contor";
		$result = $conn->query($sql);
		$row = $result->fetch_assoc();
		$nr_contor = ++$row["CONTOR"]; //variabila care contine numarul acordat unui utilizator
		$sql2 = "INSERT INTO chestionar_contor (CONTOR) VALUES ('$nr_contor')";
		$conn->query($sql2);
	}
//close selectez ultima valoare a contorului
Tabela unde sunt stocate valorile arata cam asa (pentru a scurta tabelul am redus id-ul intrebari la 3):

Cod: Selectaţi tot

+----+-----------+-------------+--------------+------+
| ID | ID_ANONIM | ID_PERSONAL | ID_INTREBARE | NOTA |
+----+-----------+-------------+--------------+------+
| 1  |    1      |      80     |       1      |  10  |
| 2  |    1      |      80     |       2      |  10  |
| 3  |    1      |      80     |       3      |  10  |
| 4  |    1      |      74     |       1      |  10  |
| 5  |    1      |      74     |       2      |  10  |
| 7  |    1      |      74     |       3      |  10  |
| 8  |    1      |      60     |       1      |  8   |
| 9  |    1      |      60     |       2      |  9   |
| 10 |    1      |      60     |       3      |  10  |
| 11 |    2      |      80     |       1      |  2   |
| 12 |    2      |      80     |       2      |  2   |
| 13 |    2      |      80     |       3      |  5   |
+----+-----------+-------------+--------------+------+
Cu tabelul generat de while intampin probleme, fiind foarte multi useri si foarte multe selecturi pagina se incarca foarte greu, insa uneori mai intampin o problema atunci cand se apasa butonul de submit nu se trimit valorile in tabela, dar se incrementeaza id-ul anonim alocat celui care a incercat sa voteaze (inca nu imi dau seama de ce patesc asa ceva).

Pentru a evita functionarea greoaie a paginii, m-am gandit ca ar fi mai sigur sa aduc un singur user la chestionat iar la apasarea butonul de submit sa trimita valorile in tabela dar sa imi aduca urmatorul user pentru a fi chestionat.
Insa nu stiu cum as putea sa aduc din acel while numai un singur user si sa il aduc pe urmatorul dupa ce a fost chestionar, dar sa acord si acel ID_ANONIM pentru cel care voteaza.

Multumesc!

MarPlo Mesaje: 4343
Salut
Problema e cam complicat de rezolvat si nu e de domeniul unui forum, e necesar sa poti face teste cu tot scriptul ca sa ajungi la o solutie buna.
Probabil trebuie rescris mult din script; un Select cu randurile doar de la id user care vrei, si un alt Select care sa returneze urmatorul id, care sa fie adaugat in tabela si trimis cu Submit pentru urmatorul Select.

sterica Mesaje: 285
Intradevar este destul de complicat, insa mai sus am expus rezultatul final la care doresc sa ajung. Sunt constient ca trebuie sa fac pasi mici pentru a ajunge la rezultatul dorit.
Vreau sa incep prin a incerca sa aduc valorile din while pe rand si dupa aceea voi vedea cum pot aloca un ID_ANONIM (ma gandesc sa apelez la superglobala $_SERVER['SERVER_ADDR'];).

O sa incerc cu un exemplu mic:

Cod: Selectaţi tot

CREATE DATABASE `db_test`;
USE `db_test`;

CREATE TABLE `test` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NUME` varchar(255) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

INSERT INTO `test` (`NUME`)
VALUES ("Popescu"), ("Ionescu"), ("Vasilescu"), ("Niculescu");
index.php

Cod: Selectaţi tot

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "db_test";

$conn = new mysqli ($servername, $username, $password, $dbname);
if (!$conn) {
	die ("Connection failed: " . mysqli_connect_error ());
}

$nume = null;
$sql = "SELECT * FROM test ";
$result = $conn->query($sql);


if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $nume .= $row['NUME']. '<br />';
  }
}
else {
  echo "Nu sunt valori in tabela";
}

?>

<form action="" method="POST">
	<?php echo $nume; ?>
	<input type="submit" name="submit" value="next >>">
</form>
In acest exemplu imi sunt afisate toate valorile din tabela, cum pot face sa le aduc pe rand prin apasarea butonului submit.

Multumesc!

MarPlo Mesaje: 4343
Poate vrei ceva gen paginare, pentru asta vezi scriptul de la pagina: https://marplo.net/php-mysql/clasa-p ... -php
Totusi, ca sa-l adaptezi la ce vrei, necesita sa-i faci modificari.
- Poti modifica codul din metoda getLinks() din acea clasa ca in loc de link-urile de paginare sa returneze doar un buton submit pentru next.

- Similar, dar cam vechi (bun pt. studiu) e si scriptul de la: https://marplo.net/php-mysql/paginare-s.php

Subiecte similare