Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]jak przejść z pliku tekstowego do bazy danych?
gregov0
post
Post #1





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 14.01.2011
Skąd: Kalisz

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


Witam. Mam problem i nie wiem od czego zacząć. Mam skrypt do prowadzenia testu-quizu oparty na pliku tekstowym, a chciałbym aby takowy działał przy pomocy bazy MySql.

  1. <?php
  2. $pytania = file("test.txt");
  3.  
  4. $k5 = "Ocena bardzo dobra";
  5. $k4 = "Ocena dobra";
  6. $k3 = "Ocena dostateczna";
  7. $k2 = "Ocena dopuszczajaca!";
  8. $k1 = "Ocena niedostateczna";
  9.  
  10. $f = $_POST["f"];
  11. $wyniki = $_POST["wyniki"];
  12. srand((double)microtime()*1000000);
  13.  
  14. if ($wyniki>0) {
  15. $ile = count($pytania); $dobre=0;
  16. for ($o=0; $o<$ile ;$o++) if ($f[$o]==1) $dobre++;
  17. $srednia = sprintf("%2d",($dobre/$ile)*100);
  18. echo "<center>Poprawne odpowiedzi: $dobre z $ile. ";
  19. echo "Zaliczone $srednia procent testu.<p>";
  20. if ($srednia<25) echo $k1;
  21. if ($srednia>=25 && $srednia<50) echo $k2;
  22. if ($srednia>=50 && $srednia<75) echo $k3;
  23. if ($srednia>=75 && $srednia<99) echo $k4;
  24. if ($srednia==100) echo $k5;
  25. echo "</center>";
  26. echo "<center><input type=submit value=\" zakoncz \"script language=\"javascript\"onClick=\"zamknijOkno()\"></script></center>";
  27.  
  28.  
  29. } else {
  30. echo "<form action=\"index.php\" method=\"post\">";
  31. echo "<input type=\"hidden\" name=\"wyniki\" value=\"1\" />";
  32. $ile = count($pytania);
  33. for($i=0;$i<$ile;$i++) {
  34. $nr = array_rand($pytania);
  35. $tmp = $pytania[$nr];
  36. $pytania[$nr] = $pytania[count($pytania)-1];
  37. $pytania[count($pytania)-1] = $tmp;
  38. $pyt = explode("`", array_pop($pytania));
  39. echo "<p><b>"; echo $i+1; echo ". $pyt[0] </b><br>";
  40. for ($b=1;$b<=count($pyt)-1;$b++)
  41. $odp[]="<input type=radio name=\"f[$i]\"
  42. value=\"$b\" />$pyt[$b]<br />";
  43. $ileodp=count($odp);
  44. for($io=0;$io<$ileodp;$io++) {
  45. $nr=array_rand($odp);
  46. $tmp=$odp[$nr];
  47. $odp[$nr]=$odp[count($odp)-1];
  48. $odp[count($odp)-1]=$tmp;
  49. echo array_pop($odp);
  50. }
  51. }
  52. echo "<center><br><input type=submit value=\" sprawdz \" /></br></center></form>";
  53.  
  54. }
  55. ?>

pytania i odpowiedzi sa w pliku tekstowym

  1. Stolica polski jest?`warszawa`krakow`gniezno`kalisz
  2. 2+2=?`4`2`3`5
  3. 4+8=?`12`10`23`3

gdzie poprawna odpowiedź jest zaraz za pytaniem, pytania i odpowiedzi są oddzielane znacznikiem " ' " .

Moze mi ktos podpowiedziec jak ma wyglądać kod php który się połączy z bazą i wyciagnie pytania i odpowiedzi tak aby się zintegrował z pozostałym kodem w skrypcie. Dodam jeszce ze test bedzie umieszczony na mojej stronie na ktorej mam juz zastosowane logowanie i rejestracje . Mam tez do tego logowania baze danch z jedna tabela, i teraz niewiem czy utworzyc nowa tabele osobno do testu czy opierac sie na tej samej poniewaz głownym zal witryny jest to ze przykladowa osoba wchodzi na strone loguje sie rozwiazuje test i po rozwiazaniu wynik zapisuje sie do bazy .
Prosze o podpowiedz i pomoc jak to zrealizowac?

Pozdrawiam.
Go to the top of the page
+Quote Post
Daiquiri
post
Post #2





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Wypadałoby zbudować strukturę tabel w bazie, która odpowiadałaby temu, co masz w plikach tekstowych. Możesz zrobić to na wiele sposobów, np.
zbudować tabelę test a w niej pola pytanie, odp1, odp2, odp3, odp4. Oczywiście będziesz zobligowany do dokonania pewnych zmian w skrypcie, który uwzględniłby wczytywanie pytań z bazy, a nie z pliku itd.
Go to the top of the page
+Quote Post
gregov0
post
Post #3





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 14.01.2011
Skąd: Kalisz

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


Cytat(Daiquiri @ 26.01.2011, 20:00:42 ) *
Wypadałoby zbudować strukturę tabel w bazie, która odpowiadałaby temu, co masz w plikach tekstowych. Możesz zrobić to na wiele sposobów, np.
zbudować tabelę test a w niej pola pytanie, odp1, odp2, odp3, odp4. Oczywiście będziesz zobligowany do dokonania pewnych zmian w skrypcie, który uwzględniłby wczytywanie pytań z bazy, a nie z pliku itd.

tak wiem jak zbudowac tabele ale czy moglbys mi wlasnie powiadziec lub nakierowac mnie jak dokonac tych zmian w skrypcie?
Go to the top of the page
+Quote Post
Daiquiri
post
Post #4





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Mogę, jeżeli pokażesz, że znasz chociaż podstawy zapytań do bazy. Spróbuj sam, wrzuć poprawiony kod - zobaczymy co Ci nie działa smile.gif.
Go to the top of the page
+Quote Post
gregov0
post
Post #5





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 14.01.2011
Skąd: Kalisz

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


Cytat(Daiquiri @ 27.01.2011, 10:13:03 ) *
Mogę, jeżeli pokażesz, że znasz chociaż podstawy zapytań do bazy. Spróbuj sam, wrzuć poprawiony kod - zobaczymy co Ci nie działa smile.gif.

ok nie znam sie zabardzo na php ale zrobilem tak tworze tabele
  1. CREATE TABLE ` test (
  2. `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `pytanie` VARCHAR(100) NOT NULL,
  4. `odp1` VARCHAR(100) NOT NULL,
  5. `odp2` VARCHAR(100) NOT NULL,
  6. `odp3` VARCHAR(100) NOT NULL,
  7. `odp4` VARCHAR(100) NOT NULL,
  8. 'wyniki' INT(10) NOT NULL,
  9. `DATA` DATETIME NOT NULL,
  10. PRIMARY KEY (`id`)
  11. )
  12. ENGINE=MyISAM DEFAULT CHARACTER SET latin1
  13. COLLATE latin1_general_cs AUTO_INCREMENT=0;

i tak zaczolem modifikowac kod wiem ze to jest zle sad.gif niewiem jek to ugrysc
  1. <?php
  2. if (!isset($_SESSION['login'])) {
  3.  
  4.  
  5.  
  6. include 'db.php';
  7. $tabela = 'test';
  8.  
  9. $pytania = $_POST["pytanie"];
  10. $odpowiedzi = $_POST["odp1"] $_POST["odp2"] $_POST["odp3"] $_POST["odp4"] ;
  11. }
  12.  
  13. $k5 = "Ocena bardzo dobra";
  14. $k4 = "Ocena dobra";
  15. $k3 = "Ocena dostateczna";
  16. $k2 = "Ocena dopuszczajaca!";
  17. $k1 = "Ocena niedostateczna";
  18.  
  19. $f = $_POST["pytania"];
  20. $wyniki = $_POST["wyniki"];
  21. srand((double)microtime()*1000000);
  22.  
  23. if ($wyniki>0) {
  24. $ile = count($pytania); $dobre=0;
  25. for ($o=0; $o<$ile ;$o++) if ($f[$o]==1) $dobre++;
  26. $srednia = sprintf("%2d",($dobre/$ile)*100);
  27. echo "<center>Poprawne odpowiedzi: $dobre z $ile. ";
  28. echo "Zaliczone $srednia procent testu.<p>";
  29. if ($srednia<25) echo $k1;
  30. if ($srednia>=25 && $srednia<50) echo $k2;
  31. if ($srednia>=50 && $srednia<75) echo $k3;
  32. if ($srednia>=75 && $srednia<99) echo $k4;
  33. if ($srednia==100) echo $k5;
  34. echo "</center>";
  35. echo "<center><input type=submit value=\" zakoncz \"script language=\"javascript\"onClick=\"zamknijOkno()\"></script></center>";
  36.  
  37.  
  38. } else {
  39. echo "<form action=\"index.php\" method=\"post\">";
  40. echo "<input type=\"hidden\" name=\"wyniki\" value=\"1\" />";
  41. $ile = count($pytania);
  42. for($i=0;$i<$ile;$i++) {
  43. $nr = array_rand($pytania);
  44. $tmp = $pytania[$nr];
  45. $pytania[$nr] = $pytania[count($pytania)-1];
  46. $pytania[count($pytania)-1] = $tmp;
  47. $pyt = explode("`", array_pop($pytania));
  48. echo "<p><b>"; echo $i+1; echo ". $pyt[0] </b><br>";
  49. for ($b=1;$b<=count($pyt)-1;$b++)
  50. $odp[]="<input type=radio name=\"f[$i]\"
  51. value=\"$b\" />$pyt[$b]<br />";
  52. $ileodp=count($odp);
  53. for($io=0;$io<$ileodp;$io++) {
  54. $nr=array_rand($odp);
  55. $tmp=$odp[$nr];
  56. $odp[$nr]=$odp[count($odp)-1];
  57. $odp[count($odp)-1]=$tmp;
  58. echo array_pop($odp);
  59. }
  60. }
  61. echo "<center><br><input type=submit value=\" sprawdz \" /></br></center></form>";
  62.  
  63. }
  64. ?>


Ten post edytował gregov0 27.01.2011, 11:28:15
Go to the top of the page
+Quote Post
Daiquiri
post
Post #6





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




OK, zróbmy inaczej smile.gif. Napisz co chcesz konkretnie zrobić i będziemy walczyć krok po kroku. Masz już te pytania w bazie? Bo rozumiem, że chcesz je wczytywać/losować w bazie?
Go to the top of the page
+Quote Post
gregov0
post
Post #7





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 14.01.2011
Skąd: Kalisz

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


ok jesli ma byc od poczatku to mysle ze lepsza opcja bedzie pisanie na priv bo troszke pisania bedzie a niechce wklejak ton htmla na forum
utworzylem baze urzytkownicy
w niej tabele
test
  1. CREATE TABLE `test`(
  2. `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `pytanie` VARCHAR(1000) NOT NULL,
  4. `odpa` VARCHAR(1000) NOT NULL,
  5. `odpb` VARCHAR(1000) NOT NULL,
  6. `odpc` VARCHAR(1000) NOT NULL,
  7. `odpd` VARCHAR(1000) NOT NULL,
  8. `wyniki` INT(10) NOT NULL,
  9. `data` DATETIME NOT NULL,
  10. PRIMARY KEY (`id`)
  11. )
  12. ENGINE=MyISAM DEFAULT CHARACTER SET latin1
  13. COLLATE latin1_general_cs AUTO_INCREMENT=0;

i dalej tak napisalem skrypt dodajacy pytania do bazy / tabeli
insert.php
  1. <?php
  2. include 'db.php';
  3.  
  4. $sql="INSERT INTO test (pytanie, odpa, odpb, odpc, odpd)
  5. VALUES
  6. ('$_POST[pytanie]','$_POST[odpa]','$_POST[odpb]','$_POST[odpc]','$_POST[odpd]')";
  7.  
  8. if (!mysql_query($sql,$polaczenie))
  9. {
  10. die('Error: ' . mysql_error());
  11. }
  12. echo "Dodano nowe pytanie";
  13.  
  14. mysql_close($polaczenie)
  15. ?>

i form dodajpytanie.php
  1. <html>
  2. <body>
  3. Wprowadz nowe pytanie:<br/><br/>
  4. <form action="insert.php" method="post">
  5. pytanie: <input type="text" name="pytanie" /></br>
  6. odpowiedz poprawna(a): <input type="text" name="odpa" /></br>
  7. odp b: <input type="text" name="odpb" /></br>
  8. odp c: <input type="text" name="odpc" /></br>
  9. odp d: <input type="text" name="odpd" /></br>
  10. <input type="submit" /></br>
  11. </form>
  12. </body>
  13. </html>

z baza sie lacze tak
db.php
  1. <?php
  2.  
  3. $mysql_host = 'localhost';
  4. $mysql_login = 'root';
  5. $mysql_haslo = '';
  6. $mysql_baza = 'urzytkownicy';
  7.  
  8. $polaczenie = mysql_connect($mysql_host, $mysql_login, $mysql_haslo) or die('Bł?d: nie udało się nawi?zać poł?czenia z baz? danych.');
  9.  
  10. mysql_select_db($mysql_baza) or die('Bł?d: nie udało się wybrać schematu bazy danych.');
  11.  
  12. ?>


dodawanie dziala bardzo dobrze teraz chce aby skrypt pobieral losowe pytanie z bazy zmienial kolejnosc odp , sprawdzal ipo rozwiazaniu testu wpisywal wynik i date w bazie gdzie juz mam takie pola . Tylko musi tez laczyc sie z moja druga tabela w ktorej mam nazwiska urzytkownikow chyba ze moge rozwiazac to w ten sposob ze dodam kolejna tabele np wyniki i przed wyswietleniem pytan wyswietli sie komunikat z prosba o podanie nazwiska a po zakonczeniu testu nazwisko i wynik zapisza sie w tej tabeli . kurcze niewiem czy dobrze kombinuje . Jestem poczatkujacy nieznam wszystkich funkcji ktore moge zastosowac wiec prosze o pomoc
/edit sory za bl ort

Ten post edytował gregov0 27.01.2011, 14:15:29
Go to the top of the page
+Quote Post
emajl22
post
Post #8





Grupa: Zarejestrowani
Postów: 273
Pomógł: 21
Dołączył: 28.11.2010

Ostrzeżenie: (10%)
X----


Pobieranie losowego rekordu z bazy to bardzo prosta sprawa. Poczytaj o RAND() i LIMIT w mysql.


--------------------
Go to the top of the page
+Quote Post
gregov0
post
Post #9





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 14.01.2011
Skąd: Kalisz

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


Cytat(emajl22 @ 27.01.2011, 14:22:31 ) *
Pobieranie losowego rekordu z bazy to bardzo prosta sprawa. Poczytaj o RAND() i LIMIT w mysql.

no ok o to chodzi?
  1. SELECT * FROM test ORDER BY RAND(), ID LIMIT 10

ale co dalej jak to zastosowac co tego skryptu?
Go to the top of the page
+Quote Post
PanGuzol
post
Post #10





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Wyniki najlepiej zapisuj w tabeli z użytkownikami. Skoro masz działające logowanie to zakładam, że masz zapisane w sesji id/login/nazwisko więc nie musisz o nie pytać.

Jak zastosować do skryptu?
mysql_query
korzystasz z tej funkcji oraz potem mysql_fetch_assoc w miejscu gdzie wcześniej pobierałeś pytania z pliku.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
gregov0
post
Post #11





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 14.01.2011
Skąd: Kalisz

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


nierozumiem jak ja mam to zastosowac zrobilem tak ale nie dziala bo jest zle
  1. <?php
  2. include 'db.php';
  3. $tabela = 'test';
  4.  
  5. $pytania = mysql_query("SELECT * FROM $tabela ORDER BY RAND(), ID LIMIT 10");
  6.  
  7. if ($row = mysql_fetch_assoc($pytania)) {
  8. echo $row["pytanie"];
  9. echo $row["odpa"];
  10. echo $row["odpb"];
  11. echo $row["odpc"];
  12. echo $row["odpd"];
  13. }
  14.  
  15. mysql_free_result($pytania);
  16.  
  17.  
  18. $k5 = "Ocena bardzo dobra";
  19. $k4 = "Ocena dobra";
  20. $k3 = "Ocena dostateczna";
  21. $k2 = "Ocena dopuszczajaca!";
  22. $k1 = "Ocena niedostateczna";
  23.  
  24. $f = $_POST["f"];
  25. $wyniki = $_POST["wyniki"];
  26. srand((double)microtime()*1000000);
  27.  
  28. if ($wyniki>0) {
  29. $ile = count($pytania); $dobre=0;
  30. for ($o=0; $o<$ile ;$o++) if ($f[$o]==1) $dobre++;
  31. $srednia = sprintf("%2d",($dobre/$ile)*100);
  32. echo "<center>Poprawne odpowiedzi: $dobre z $ile. ";
  33. echo "Zaliczone $srednia procent testu.<p>";
  34. if ($srednia<25) echo $k1;
  35. if ($srednia>=25 && $srednia<50) echo $k2;
  36. if ($srednia>=50 && $srednia<75) echo $k3;
  37. if ($srednia>=75 && $srednia<99) echo $k4;
  38. if ($srednia==100) echo $k5;
  39. echo "</center>";
  40. echo "<center><input type=submit value=\" zakoncz \"script language=\"javascript\"onClick=\"zamknijOkno()\"></script></center>";
  41.  
  42.  
  43. } else {
  44. echo "<form action=\"index.php\" method=\"post\">";
  45. echo "<input type=\"hidden\" name=\"wyniki\" value=\"1\" />";
  46. $ile = count($pytania);
  47. for($i=0;$i<$ile;$i++) {
  48. $nr = array_rand($pytania);
  49. $tmp = $pytania[$nr];
  50. $pytania[$nr] = $pytania[count($pytania)-1];
  51. $pytania[count($pytania)-1] = $tmp;
  52. $pyt = explode("`", array_pop($pytania));
  53. echo "<p><b>"; echo $i+1; echo ". $pyt[0] </b><br>";
  54. for ($b=1;$b<=count($pyt)-1;$b++)
  55. $odp[]="<input type=radio name=\"f[$i]\"
  56. value=\"$b\" />$pyt[$b]<br />";
  57. $ileodp=count($odp);
  58. for($io=0;$io<$ileodp;$io++) {
  59. $nr=array_rand($odp);
  60. $tmp=$odp[$nr];
  61. $odp[$nr]=$odp[count($odp)-1];
  62. $odp[count($odp)-1]=$tmp;
  63. echo array_pop($odp);
  64. }
  65. }
  66. echo "<center><br><input type=submit value=\" sprawdz \" /></br></center></form>";
  67.  
  68. }
  69. ?>


Przepraszam za spam ale nadal niemoge sobie z tym poradzic

Cytat(PanGuzol @ 27.01.2011, 17:42:32 ) *
Wyniki najlepiej zapisuj w tabeli z użytkownikami. Skoro masz działające logowanie to zakładam, że masz zapisane w sesji id/login/nazwisko więc nie musisz o nie pytać.

Jak zastosować do skryptu?
mysql_query
korzystasz z tej funkcji oraz potem mysql_fetch_assoc w miejscu gdzie wcześniej pobierałeś pytania z pliku.

w esji mam zapisane login i haslo
dalej nie rozumiem jak to mam rozwiazac
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 Aktualny czas: 19.08.2025 - 04:27