Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Tworzenie zmiennej w pętli
KierowcaTaczki
post 3.09.2021, 16:43:26
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.12.2020

Ostrzeżenie: (0%)
-----


Witam, przychodzę do was z troszkę dziwnym pytaniem.
Mianowicie chciałbym stworzyć zmienną w php, która ma w sobie inną zmienną (lub jest zmieniana przy każdym wykonaniu pętli)
Przykład:

  1. $x = 1;
  2. do {
  3. $zmienna$x = $row["correct"]
  4. } while ($x <= 5);
  5.  
  6. echo "Zmienna z bazy #1: $zmienna1";
  7. echo "Zmienna z bazy #2: $zmienna2";
  8. echo "Zmienna z bazy #3: $zmienna3";
  9. echo "Zmienna z bazy #4: $zmienna4";
  10. echo "Zmienna z bazy #5: $zmienna5";


Output:
Zmienna z bazy #1: test1
Zmienna z bazy #2: test2
Zmienna z bazy #3: test3
Zmienna z bazy #4: test4
Zmienna z bazy #5: test5

Nie umiem tego inaczej wytłumaczyć, ale mam nadzieję, że każdy zrozumie.
Teraz pytanie - czy coś takiego jest możliwe do stworzenia w php?

Pozdrawiam
Go to the top of the page
+Quote Post
gornik
post 3.09.2021, 16:49:24
Post #2





Grupa: Zarejestrowani
Postów: 56
Pomógł: 9
Dołączył: 28.04.2010

Ostrzeżenie: (0%)
-----


O to chodzi?
  1. <?php
  2.  
  3. $zmienna1 = 'To jest zmienna 1 <Br />';
  4.  
  5. $zmienna2 = 'To jest zmienna 2 <br />';
  6.  
  7.  
  8.  
  9. for($i=1; $i<=2; $i++){
  10.  
  11. echo ${'zmienna' . $i};
  12.  
  13. }


--------------------
Zwiedzam świat i koduje.
Ubrania podróżnicze | Blog podróżniczy
Go to the top of the page
+Quote Post
KierowcaTaczki
post 3.09.2021, 16:58:36
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.12.2020

Ostrzeżenie: (0%)
-----


Cytat(gornik @ 3.09.2021, 17:49:24 ) *
O to chodzi?
  1. <?php
  2.  
  3. $zmienna1 = 'To jest zmienna 1 <Br />';
  4.  
  5. $zmienna2 = 'To jest zmienna 2 <br />';
  6.  
  7.  
  8.  
  9. for($i=1; $i<=2; $i++){
  10.  
  11. echo ${'zmienna' . $i};
  12.  
  13. }


W założeniu tak, lecz chodzi mi o to, żeby (przykładowo) $zmienna1 była definiowana w pętli. W moim przypadku musiałbym stworzyć około 2 tysięcy zmiennych co lekko mija się z celem :/
Go to the top of the page
+Quote Post
gornik
post 3.09.2021, 17:04:32
Post #4





Grupa: Zarejestrowani
Postów: 56
Pomógł: 9
Dołączył: 28.04.2010

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. for($i=1; $i<=2; $i++){
  4.  
  5. ${'zmienna' . $i} = 'jakas nowa wartość <br />';
  6.  
  7. }
  8.  
  9.  
  10. for($i=1; $i<=2; $i++){
  11.  
  12. echo ${'zmienna' . $i}
  13.  
  14. }

Więc podobnie, pytanie skąd pomysł na taki zabieg? Nie lepiej to wrzucać w tablice?

Ten post edytował gornik 3.09.2021, 17:05:16


--------------------
Zwiedzam świat i koduje.
Ubrania podróżnicze | Blog podróżniczy
Go to the top of the page
+Quote Post
KierowcaTaczki
post 3.09.2021, 17:58:47
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.12.2020

Ostrzeżenie: (0%)
-----


Cytat(gornik @ 3.09.2021, 18:04:32 ) *
  1. <?php
  2.  
  3. for($i=1; $i<=2; $i++){
  4.  
  5. ${'zmienna' . $i} = 'jakas nowa wartość <br />';
  6.  
  7. }
  8.  
  9.  
  10. for($i=1; $i<=2; $i++){
  11.  
  12. echo ${'zmienna' . $i}
  13.  
  14. }

Więc podobnie, pytanie skąd pomysł na taki zabieg? Nie lepiej to wrzucać w tablice?


Zapewne jest to lepsze rozwiązanie, lecz nie działam na własnym pomyśle, tylko staram się przerobić dostępny skrypt z internetu, aby pobierała / sprawdzała dane z bazy danych - https://webdevtrick.com/simple-quiz-in-php-source-code/

Co do propozycji kodu - jest mały problem. Tak zrobioną zmienną nie chce mi przesłać post'em.

  1. <form action="result.php" method="post" id="quiz">
  2.  
  3. <?php
  4. $servername = "localhost";
  5. $username = "user";
  6. $password = "pass";
  7. $dbname = "db";
  8.  
  9.  
  10. $x = 1;
  11. do {
  12. $conn = new mysqli($servername, $username, $password, $dbname);
  13. if ($conn->connect_error) {
  14. die("Connection failed: " . $conn->connect_error);
  15. }
  16.  
  17. $liczba = rand(1,1886);
  18.  
  19. $sql = "SELECT * FROM pelnalistapytanx WHERE ID = $liczba";
  20. $result = $conn->query($sql);
  21.  
  22. if ($result->num_rows > 0) {
  23. while($row = $result->fetch_assoc()) {
  24.  
  25. echo "<h2>(#".$row["ID"].") " .$row["Pytanie"]. "</h2>";
  26.  
  27. if($row["img"]!="0") {
  28. echo "<div class='one_question_quiz--img'>";
  29. echo "<img src='/src/img/quizy/".$row["img"].".jpg'>";
  30. echo "</div>";
  31. }
  32.  
  33. echo "<div class=''>";
  34. echo "<div>";
  35. echo "<input type='radio' name='question-".$x."-answers' id='question-".$x."-answers-A' value='A' />";
  36. echo "<label for='question-".$x."-answers-A'><b>A. </b>".$row["odpa"]."</label>";
  37. echo "</div>";
  38.  
  39. echo "<div>";
  40. echo "<input type='radio' name='question-".$x."-answers' id='question-".$x."-answers-B' value='B' />";
  41. echo "<label for='question-".$x."-answers-B'><b>B. </b>".$row["odpb"]."</label>";
  42. echo "</div>";
  43.  
  44. echo "<div>";
  45. echo "<input type='radio' name='question-".$x."-answers' id='question-".$x."-answers-C' value='C' />";
  46. echo "<label for='question-".$x."-answers-C'><b>C. </b>".$row["odpc"]."</label>";
  47. echo "</div>";
  48.  
  49. echo "<div>";
  50. echo "<input type='radio' name='question-".$x."-answers' id='question-".$x."-answers-D' value='D' />";
  51. echo "<label for='question-".$x."-answers-D'><b>D. </b>".$row["odpd"]."</label>";
  52. echo "</div>";
  53.  
  54. echo "</div>";
  55.  
  56. $poprawnaodp = $row["correct"];
  57. ${'zmienna' . $x} = $poprawnaodp;
  58. }
  59. }
  60. $conn->close();
  61. $x++;
  62. } while ($x <= 5);
  63. ?>
  64.  
  65. <input type="submit" value="Submit" class="submitbtn" />
  66.  
  67. </form>


result.php
  1. <?php
  2.  
  3. $x = 1;
  4. do {
  5. ${'answer' . $x} = $_POST["question-".$x."-answers"];
  6. echo ${'answer' . $x};
  7. echo "<br>";
  8.  
  9. ${'odptest' . $x} = $_POST["${'zmienna' . $x}"];
  10. echo ${'odptest' . $x};
  11. echo "<br>";
  12.  
  13. $x++;
  14. } while ($x <= 5);
  15. ?>


${'answer' . $x} = $_POST["question-".$x."-answers"]; <- Poprawnie się przesyła
${'odptest' . $x} = $_POST["${'zmienna' . $x}"]; <- Zwraca puste pole

Mógłbyś doradzić gdzie jest problem?
Go to the top of the page
+Quote Post
gornik
post 3.09.2021, 18:21:07
Post #6





Grupa: Zarejestrowani
Postów: 56
Pomógł: 9
Dołączył: 28.04.2010

Ostrzeżenie: (0%)
-----


Spróbuj tak:
  1. <form action="result.php" method="post" id="quiz">
  2.  
  3. <?php
  4. $servername = "localhost";
  5. $username = "user";
  6. $password = "pass";
  7. $dbname = "db";
  8.  
  9.  
  10. $x = 1;
  11. /* Ile pytań wybrać z bazy */
  12. $limit = 5;
  13. /* Przechowywanie poprawnych odp w tym pliku zapewne jest zbędne */
  14. $correctAnswers = [];
  15.  
  16.  
  17. $conn = new mysqli($servername, $username, $password, $dbname);
  18. if ($conn->connect_error) {
  19. die("Connection failed: " . $conn->connect_error);
  20. }
  21.  
  22. $sql = "SELECT * FROM pelnalistapytanx WHERE 1 ORDER BY RAND() LIMIT $limit";
  23. $result = $conn->query($sql);
  24.  
  25. if ($result->num_rows > 0) {
  26. while($row = $result->fetch_assoc()) {
  27.  
  28. echo "<h2>(#".$row["ID"].") " .$row["Pytanie"]. "</h2>";
  29.  
  30. if($row["img"]!="0") {
  31. echo "<div class='one_question_quiz--img'>";
  32. echo "<img src='/src/img/quizy/".$row["img"].".jpg'>";
  33. echo "</div>";
  34. }
  35.  
  36. echo "<div class=''>";
  37. echo "<div>";
  38. echo "<input type='radio' name='questions[{$x}][answer]' id='question-".$x."-answers-A' value='A' />";
  39. echo "<label for='question-".$x."-answers-A'><b>A. </b>".$row["odpa"]."</label>";
  40. echo "</div>";
  41.  
  42. echo "<div>";
  43. echo "<input type='radio' name='questions[{$x}][answer]' id='question-".$x."-answers-B' value='B' />";
  44. echo "<label for='question-".$x."-answers-B'><b>B. </b>".$row["odpb"]."</label>";
  45. echo "</div>";
  46.  
  47. echo "<div>";
  48. echo "<input type='radio' name='questions[{$x}][answer]' id='question-".$x."-answers-C' value='C' />";
  49. echo "<label for='question-".$x."-answers-C'><b>C. </b>".$row["odpc"]."</label>";
  50. echo "</div>";
  51.  
  52. echo "<div>";
  53. echo "<input type='radio' name='questions[{$x}][answer]' id='question-".$x."-answers-D' value='D' />";
  54. echo "<label for='question-".$x."-answers-D'><b>D. </b>".$row["odpd"]."</label>";
  55. echo "</div>";
  56. echo "<input type='hidden' name='questions[{$x}][id]' value='{$row['id']}'>";
  57.  
  58. echo "</div>";
  59. $x++;
  60. }
  61. }
  62. $conn->close();
  63.  
  64.  
  65. ?>
  66.  
  67. <input type="submit" value="Submit" class="submitbtn" />
  68.  
  69. </form>


result.php
  1. <?php
  2.  
  3. echo "<PRE>";
  4. print_r($_POST);
  5. echo "</PRE>";
  6.  
  7. /* Możesz to zapętlić */
  8. $answers = isset($_POST['questions']) ? $_POST['questions'] : [];
  9.  
  10. foreach($answers as $answer){
  11.  
  12. // jakaś czynność np. wybranie z bazy pytania itd.
  13.  
  14. }
  15.  
  16. ?>


Rozumiem, że chcesz po wypełnieniu quizu sprawdzić czy odpowiedź jest poprawna więc musisz połączyć w results.php na nowo z bazą i porównać przesłane wyniki.

Ten post edytował gornik 3.09.2021, 18:29:17


--------------------
Zwiedzam świat i koduje.
Ubrania podróżnicze | Blog podróżniczy
Go to the top of the page
+Quote Post
KierowcaTaczki
post 3.09.2021, 20:47:02
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.12.2020

Ostrzeżenie: (0%)
-----


Cytat(gornik @ 3.09.2021, 19:21:07 ) *
Spróbuj tak:
  1. <form action="result.php" method="post" id="quiz">
  2.  
  3. <?php
  4. $servername = "localhost";
  5. $username = "user";
  6. $password = "pass";
  7. $dbname = "db";
  8.  
  9.  
  10. $x = 1;
  11. /* Ile pytań wybrać z bazy */
  12. $limit = 5;
  13. /* Przechowywanie poprawnych odp w tym pliku zapewne jest zbędne */
  14. $correctAnswers = [];
  15.  
  16.  
  17. $conn = new mysqli($servername, $username, $password, $dbname);
  18. if ($conn->connect_error) {
  19. die("Connection failed: " . $conn->connect_error);
  20. }
  21.  
  22. $sql = "SELECT * FROM pelnalistapytanx WHERE 1 ORDER BY RAND() LIMIT $limit";
  23. $result = $conn->query($sql);
  24.  
  25. if ($result->num_rows > 0) {
  26. while($row = $result->fetch_assoc()) {
  27.  
  28. echo "<h2>(#".$row["ID"].") " .$row["Pytanie"]. "</h2>";
  29.  
  30. if($row["img"]!="0") {
  31. echo "<div class='one_question_quiz--img'>";
  32. echo "<img src='/src/img/quizy/".$row["img"].".jpg'>";
  33. echo "</div>";
  34. }
  35.  
  36. echo "<div class=''>";
  37. echo "<div>";
  38. echo "<input type='radio' name='questions[{$x}][answer]' id='question-".$x."-answers-A' value='A' />";
  39. echo "<label for='question-".$x."-answers-A'><b>A. </b>".$row["odpa"]."</label>";
  40. echo "</div>";
  41.  
  42. echo "<div>";
  43. echo "<input type='radio' name='questions[{$x}][answer]' id='question-".$x."-answers-B' value='B' />";
  44. echo "<label for='question-".$x."-answers-B'><b>B. </b>".$row["odpb"]."</label>";
  45. echo "</div>";
  46.  
  47. echo "<div>";
  48. echo "<input type='radio' name='questions[{$x}][answer]' id='question-".$x."-answers-C' value='C' />";
  49. echo "<label for='question-".$x."-answers-C'><b>C. </b>".$row["odpc"]."</label>";
  50. echo "</div>";
  51.  
  52. echo "<div>";
  53. echo "<input type='radio' name='questions[{$x}][answer]' id='question-".$x."-answers-D' value='D' />";
  54. echo "<label for='question-".$x."-answers-D'><b>D. </b>".$row["odpd"]."</label>";
  55. echo "</div>";
  56. echo "<input type='hidden' name='questions[{$x}][id]' value='{$row['id']}'>";
  57.  
  58. echo "</div>";
  59. $x++;
  60. }
  61. }
  62. $conn->close();
  63.  
  64.  
  65. ?>
  66.  
  67. <input type="submit" value="Submit" class="submitbtn" />
  68.  
  69. </form>


result.php
  1. <?php
  2.  
  3. echo "<PRE>";
  4. print_r($_POST);
  5. echo "</PRE>";
  6.  
  7. /* Możesz to zapętlić */
  8. $answers = isset($_POST['questions']) ? $_POST['questions'] : [];
  9.  
  10. foreach($answers as $answer){
  11.  
  12. // jakaś czynność np. wybranie z bazy pytania itd.
  13.  
  14. }
  15.  
  16. ?>


Rozumiem, że chcesz po wypełnieniu quizu sprawdzić czy odpowiedź jest poprawna więc musisz połączyć w results.php na nowo z bazą i porównać przesłane wyniki.



Dobra, bo teraz się troszkę zgubiłem :/
Mając array jak mogę teraz pobrać z niego np id, aby wykonać zapytanie o prawidłową odpowiedź?



Go to the top of the page
+Quote Post
gornik
post 3.09.2021, 21:24:26
Post #8





Grupa: Zarejestrowani
Postów: 56
Pomógł: 9
Dołączył: 28.04.2010

Ostrzeżenie: (0%)
-----


Podałe Ci example z foreach. Tutaj masz bardziej przybliżony
  1. $conn = new mysqli($servername, $username, $password, $dbname);
  2. if ($conn->connect_error) {
  3. die("Connection failed: " . $conn->connect_error);
  4. }
  5.  
  6. /* Pobierz odpowiedzi */
  7. $answers = isset($_POST['questions']) ? $_POST['questions'] : [];
  8.  
  9. /* Iteruj po odpowiedziach */
  10. foreach($answers as $answer){
  11.  
  12. /* Sprawdzanie czy pola zostały przesłanie, jesli nie to pomijamy do next */
  13. if(!array_key_exists('id', $answer) OR !array_key_exists('answer', $answer)){
  14. continue;
  15. }
  16. /* Pobranie danych odpowiedzi */
  17. $id = (int) $answer['id'];
  18. $qAnswer = $answer['answer'];
  19.  
  20. /* Tworzenie query */
  21. $query = "SELECT * FROM `pelnalistapytanx` WHERE id = '{$id}' LIMIT 1";
  22.  
  23. /* wywołaj zapytanie */
  24. $results = mapSingle( $conn->query($query) );
  25.  
  26. /* Sprawdzamy czy pytanie istnieje i jaka jest odpowiedź */
  27. if($results){
  28. if($results["correct"] == $qAnswer){
  29. // odpowiedź poprawna, wykonaj jakąś czynność...
  30. echo "Wynik dla odpowiedzi #{$id} jest poprawny <Br />";
  31. } else {
  32. // odpowiedź niepoprawna, wykonaj jakąś czynność...
  33. echo "Wynik dla odpowiedzi #{$id} jest błędny! <Br />";
  34. }
  35. }
  36.  
  37. }
  38.  
  39. /* Funkcja do mapowania wyników */
  40. function mapSingle($item){
  41. $results = [];
  42.  
  43. if($item == null OR !$item OR $item->num_rows <= 0)
  44. return $results;
  45. else
  46. return $item->fetch_assoc();
  47. }


Ten post edytował gornik 3.09.2021, 21:31:58


--------------------
Zwiedzam świat i koduje.
Ubrania podróżnicze | Blog podróżniczy
Go to the top of the page
+Quote Post
KierowcaTaczki
post 3.09.2021, 22:43:29
Post #9





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.12.2020

Ostrzeżenie: (0%)
-----


Cytat(gornik @ 3.09.2021, 22:24:26 ) *
Podałe Ci example z foreach. Tutaj masz bardziej przybliżony
  1. $conn = new mysqli($servername, $username, $password, $dbname);
  2. if ($conn->connect_error) {
  3. die("Connection failed: " . $conn->connect_error);
  4. }
  5.  
  6. /* Pobierz odpowiedzi */
  7. $answers = isset($_POST['questions']) ? $_POST['questions'] : [];
  8.  
  9. /* Iteruj po odpowiedziach */
  10. foreach($answers as $answer){
  11.  
  12. /* Sprawdzanie czy pola zostały przesłanie, jesli nie to pomijamy do next */
  13. if(!array_key_exists('id', $answer) OR !array_key_exists('answer', $answer)){
  14. continue;
  15. }
  16. /* Pobranie danych odpowiedzi */
  17. $id = (int) $answer['id'];
  18. $qAnswer = $answer['answer'];
  19.  
  20. /* Tworzenie query */
  21. $query = "SELECT * FROM `pelnalistapytanx` WHERE id = '{$id}' LIMIT 1";
  22.  
  23. /* wywołaj zapytanie */
  24. $results = mapSingle( $conn->query($query) );
  25.  
  26. /* Sprawdzamy czy pytanie istnieje i jaka jest odpowiedź */
  27. if($results){
  28. if($results["correct"] == $qAnswer){
  29. // odpowiedź poprawna, wykonaj jakąś czynność...
  30. echo "Wynik dla odpowiedzi #{$id} jest poprawny <Br />";
  31. } else {
  32. // odpowiedź niepoprawna, wykonaj jakąś czynność...
  33. echo "Wynik dla odpowiedzi #{$id} jest błędny! <Br />";
  34. }
  35. }
  36.  
  37. }
  38.  
  39. /* Funkcja do mapowania wyników */
  40. function mapSingle($item){
  41. $results = [];
  42.  
  43. if($item == null OR !$item OR $item->num_rows <= 0)
  44. return $results;
  45. else
  46. return $item->fetch_assoc();
  47. }


Wszystko pięknie działa! heart.gif
Dziękuję bardzo za pomoc i jestem Ci winien duże piwko!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 03:41