Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][SQL] Wysyłanie danych do bazy SQL za pomocą pętli i zmiennej ze zmienną w nazwie
ellie098
post 13.06.2018, 19:03:31
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.06.2018

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


Witam serdecznie.
Potrzebuję pomocy z kodem odnośnie wysyłania danych do bazy SQL za pomocą pętli for i zmiennej w nazwie zmiennej.
Mam coś takiego i to nie działa:
  1. for($j=1; $j<=15; $j++)
  2. {
  3. $sql = "INSERT INTO odpowiedzi (Odpowiedz)
  4. VALUES ('${'zawartosc'.$i}[1]');";
  5. }

Zmienna ${'zawartosc'.$i}[1] powstaje w skutku wykonywania się pętli:
  1. for ($i=1; $i<=15; $i++)
  2. {
  3. ${'plik'.$i}[1] = fopen('pytanie_'.$i.'/odpowiedzi.txt','r');
  4. ${'zawartosc'.$i}[1] = fread(${'plik'.$i}[1], 8192);
  5. echo ${'zawartosc'.$i}[1]. "<hr>";
  6.  
  7. if(${'zawartosc'.$i}[1]=="True")
  8. {
  9. $poprawne+=1;
  10. }
  11. else if(${'zawartosc'.$i}[1]=="False")
  12. {
  13. $bledne+=1;
  14. }
  15. }
  16.  
  17. echo 'Poprawne odpowiedzi: '.$poprawne.'<hr>';
  18. echo 'Błędne odpowiedzi: '.$bledne.'<hr>';

Cały kod wygląda następująco:
  1.  
  2. <?php
  3.  
  4. error_reporting(E_ALL ^ E_NOTICE);
  5.  
  6. $poprawne=0;
  7. $bledne=0;
  8.  
  9. for ($i=1; $i<=15; $i++)
  10. {
  11. ${'plik'.$i}[1] = fopen('pytanie_'.$i.'/odpowiedzi.txt','r');
  12. ${'zawartosc'.$i}[1] = fread(${'plik'.$i}[1], 8192);
  13. echo ${'zawartosc'.$i}[1]. "<hr>";
  14.  
  15. if(${'zawartosc'.$i}[1]=="True")
  16. {
  17. $poprawne+=1;
  18. }
  19. else if(${'zawartosc'.$i}[1]=="False")
  20. {
  21. $bledne+=1;
  22. }
  23. }
  24.  
  25. echo 'Poprawne odpowiedzi: '.$poprawne.'<hr>';
  26. echo 'Błędne odpowiedzi: '.$bledne.'<hr>';
  27.  
  28. //Rozdzielenie części kodu
  29.  
  30. $imie = $_POST['imie'];
  31. $nazwisko = $_POST['nazwisko'];
  32.  
  33. $servername = "localhost";
  34. $username = "root";
  35. $password = "";
  36. $dbname = "$imie$nazwisko";
  37.  
  38. $conn = new mysqli($servername, $username, $password);
  39. if ($conn->connect_error) {
  40. die("Nie udało się połączyć: " . $conn->connect_error);
  41. }
  42. $sql = "CREATE DATABASE $imie$nazwisko";
  43. if ($conn->query($sql) === TRUE)
  44. {
  45. echo "Baza danych utworzona pomyślnie";
  46. }
  47. else
  48. {
  49. echo "Błąd tworzenia bazy danych: " . $conn->error;
  50. }
  51. $conn->close();
  52.  
  53. $conn = new mysqli($servername, $username, $password, $dbname);
  54. if ($conn->connect_error)
  55. {
  56. die("Nie udało się połączyć: " . $conn->connect_error);
  57. }
  58.  
  59. $sql = "CREATE TABLE odpowiedzi(id INT(2) UNSIGNED AUTO_INCREMENT PRIMARY KEY, Odpowiedz VARCHAR(50))";
  60.  
  61. if ($conn->query($sql) === TRUE)
  62. {
  63. echo "<br> Tabela utworzona poprawnie";
  64. }
  65. else
  66. {
  67. echo "<br> Błąd tworzenia tabeli: " . $conn->error;
  68. }
  69. $conn->close();
  70.  
  71. //Rozdzielenie części kodu
  72.  
  73. $conn = new mysqli($servername, $username, $password, $dbname);
  74. if ($conn->connect_error)
  75. {
  76. die("Nie udało się połączyć: " . $conn->connect_error);
  77. }
  78.  
  79. for($j=1; $j<=15; $j++)
  80. {
  81. $sql = "INSERT INTO odpowiedzi (Odpowiedz)
  82. VALUES ('${'zawartosc'.$i}[1]');";
  83. }
  84.  
  85. if ($conn->multi_query($sql) === TRUE)
  86. {
  87. echo "<br> Nowe rekordy utworzone pomyślnie";
  88. }
  89. else
  90. {
  91. echo "<br> Błąd: " . $sql . "<br>" . $conn->error;
  92. }
  93.  
  94. $conn->close();
  95.  
  96. ?>

Jest to tylko jedna z wielu podstron testu, w którym pytania i odpowiedzi są wyświetlane w losowej kolejności, wszystko działa, za wyjątkiem nieszczęsnego wysyłania danych do bazy SQL, gdyż w obecnej formie wymagało by to użycia cudzysłowu, w nim apostrofu i jeszcze trzeciego znaku o tej właściwości, ale takiego nie ma, bądź go nie znam. Proszę o pomoc.
Go to the top of the page
+Quote Post
Neutral
post 13.06.2018, 19:38:10
Post #2





Grupa: Zarejestrowani
Postów: 180
Pomógł: 24
Dołączył: 10.01.2016

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


  1. <?php
  2. for($j=1; $j<=15; $j++){
  3. $sql = "INSERT INTO odpowiedzi values ('".${'zawartosc'.$i}[0]."');";
  4. }
  5. ?>


Teraz robisz chyba zmienne zmiennych (variables variable) tak mi się wydaje. Zamiast pisać tak:
  1. ${'my_var4'} = 'x';

, możesz pisać tak:
  1. $my_var4 = 'x';

Poczytaj o różnicach.

http://php.net/manual/en/language.variables.variable.php

Nie wiem, czy nie lepiej byłoby w Twoim przypadku napisać to na tablicach, aniżeli tworzyć dynamicznie zmienne.

Ten post edytował Neutral 13.06.2018, 19:45:38
Go to the top of the page
+Quote Post
ellie098
post 13.06.2018, 19:59:27
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.06.2018

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


Cytat(Neutral @ 13.06.2018, 20:38:10 ) *
  1. <?php
  2. for($j=1; $j<=15; $j++){
  3. $sql = "INSERT INTO odpowiedzi values ('".${'zawartosc'.$i}[0]."');";
  4. }
  5. ?>


Teraz robisz chyba zmienne zmiennych (variables variable) tak mi się wydaje. Zamiast pisać tak:
  1. ${'my_var4'} = 'x';

, możesz pisać tak:
  1. $my_var4 = 'x';

Poczytaj o różnicach.

http://php.net/manual/en/language.variables.variable.php

Nie wiem, czy nie lepiej byłoby w Twoim przypadku napisać to na tablicach, aniżeli tworzyć dynamicznie zmienne.


Dzięki za radę, jestem w trzeciej klasie technikum i na lekcjach nie mieliśmy jeszcze PHP, tylko JavaScript, a postanowiłem stworzyć ten test na ocenę 6 i sam zacząłem się uczyć PHP więc wielu rzeczy jeszcze nie znam.
Obszedłem to trochę inną metodą, zamiast dodawać do bazy danych wartości poszczególnych odpowiedzi, dodaję po prostu liczbę poprawnych i błędnych, ale z ciekawości sprawdzę, czy to zadziała.
  1. $sql = "INSERT INTO odpowiedzi (Poprawnosc, Ilosc)
  2. VALUES ('Bledne', '$bledne'),('Poprawne', '$poprawne')";
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: 21.06.2018 - 19:19