Grzegorz Wiertelak

Grzegorz Wiertelak Student, Wyższa
Szkoła Informatyki w
Łodzi

Temat: MySQL][PHP]jak przejść z pliku tekstowego do bazy danych?

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

<?php
$pytania = file("test.txt");

$k5 = "Ocena bardzo dobra";
$k4 = "Ocena dobra";
$k3 = "Ocena dostateczna";
$k2 = "Ocena dopuszczajaca!";
$k1 = "Ocena niedostateczna";

$f = $_POST["f"];
$wyniki = $_POST["wyniki"];
srand((double)microtime()*1000000);

if ($wyniki>0) {
$ile = count($pytania); $dobre=0;
for ($o=0; $o<$ile ;$o++) if ($f[$o]==1) $dobre++;
$srednia = sprintf("%2d",($dobre/$ile)*100);
echo "<center>Poprawne odpowiedzi: $dobre z $ile. ";
echo "Zaliczone $srednia procent testu.<p>";
if ($srednia<25) echo $k1;
if ($srednia>=25 && $srednia<50) echo $k2;
if ($srednia>=50 && $srednia<75) echo $k3;
if ($srednia>=75 && $srednia<99) echo $k4;
if ($srednia==100) echo $k5;
echo "</center>";
echo "<center><input type=submit value=\" zakoncz \"script language=\"javascript\"onClick=\"zamknijOkno()\"></script></center>";

} else {
echo "<form action=\"index.php\" method=\"post\">";
echo "<input type=\"hidden\" name=\"wyniki\" value=\"1\" />";
$ile = count($pytania);
for($i=0;$i<$ile;$i++) {
$nr = array_rand($pytania);
$tmp = $pytania[$nr];
$pytania[$nr] = $pytania[count($pytania)-1];
$pytania[count($pytania)-1] = $tmp;
$pyt = explode("`", array_pop($pytania));
echo "<p><b>"; echo $i+1; echo ". $pyt[0] </b><br>";
for ($b=1;$b<=count($pyt)-1;$b++)
$odp[]="<input type=radio name=\"f[$i]\"
value=\"$b\" />$pyt[$b]<br />";
$ileodp=count($odp);
for($io=0;$io<$ileodp;$io++) {
$nr=array_rand($odp);
$tmp=$odp[$nr];
$odp[$nr]=$odp[count($odp)-1];
$odp[count($odp)-1]=$tmp;
echo array_pop($odp);
}
}
echo "<center><br><input type=submit value=\" sprawdz \" /></br></center></form>";

}
?>

pytania i odpowiedzi sa w pliku tekstowym

Stolica polski jest?`warszawa`krakow`gniezno`kalisz
2+2=?`4`2`3`5
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 tabela logowanie,

utworzylem nowa tabele osobno do testu

CREATE TABLE ` test (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`pytanie` VARCHAR(100) NOT NULL,
`odp1` VARCHAR(100) NOT NULL,
`odp2` VARCHAR(100) NOT NULL,
`odp3` VARCHAR(100) NOT NULL,
`odp4` VARCHAR(100) NOT NULL,
'wyniki' INT(10) NOT NULL,
`data` DATETIME NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARACTER SET latin1
COLLATE latin1_general_cs AUTO_INCREMENT=0;

i dalej tak napisalem skrypt dodajacy pytania do bazy / tabeli
insert.php

<?php
include 'db.php';

$sql="INSERT INTO test (pytanie, odpa, odpb, odpc, odpd)
VALUES
('$_POST[pytanie]','$_POST[odpa]','$_POST[odpb]','$_POST[odpc]','$_POST[odpd]')";

if (!mysql_query($sql,$polaczenie))
{
die('Error: ' . mysql_error());
}
echo "Dodano nowe pytanie";

mysql_close($polaczenie)
?>


i form dodajpytanie.php

<html>
<body>
Wprowadz nowe pytanie:<br/><br/>
<form action="insert.php" method="post">
pytanie: <input type="text" name="pytanie" /></br>
odpowiedz poprawna(a): <input type="text" name="odpa" /></br>
odp b: <input type="text" name="odpb" /></br>
odp c: <input type="text" name="odpc" /></br>
odp d: <input type="text" name="odpd" /></br>
<input type="submit" /></br>
</form>
</body>
</html>


z baza sie lacze tak
db.php


<?php

$mysql_host = 'localhost';
$mysql_login = 'root';
$mysql_haslo = '';
$mysql_baza = 'urzytkownicy';

$polaczenie = mysql_connect($mysql_host, $mysql_login, $mysql_haslo) or die('Błąd: nie udało się nawiązać połączenia z bazą danych.');

mysql_select_db($mysql_baza) or die('Błąd: nie udało się wybrać schematu bazy danych.');

?>


dodawanie dziala bardzo dobrze teraz chce aby skrypt pobieral losowe pytanie z bazy zmienial kolejnosc odp , sprawdzal i po rozwiazaniu testu wpisywal wynik i date w tabeli gdzie juz mam takie pola . 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 nie wiem czy dobrze kombinuje . Jestem poczatkujacy nie znam wszystkich funkcji ktore moge zastosowac wiec prosze o podpowiedz i pomoc jak to zrealizowac?

Temat: MySQL][PHP]jak przejść z pliku tekstowego do bazy danych?

Grzegorz Wiertelak:
$mysql_baza = 'urzytkownicy';
:O

Jestem poczatkujacy nie znam wszystkich funkcji ktore moge zastosowac wiec prosze o podpowiedz i pomoc jak to zrealizowac?
prostej odpowiedzi nie ma bo to podstawy podstaw baz danych
http://lmgtfy.com/?q=mysql+tutorial
oraz
http://dev.mysql.com/doc/refman/5.0/en/index.html
Jacek Dunikowski

Jacek Dunikowski Front-end Developer

Temat: MySQL][PHP]jak przejść z pliku tekstowego do bazy danych?

Wybieranie losowych rekordów z bazy danych:

 SELECT pytanie FROM test ORDER BY RAND() LIMIT 5 

5 - liczba pytań do wylosowania

..tak mi się wydaje że o to chodzi ;PJacek Dunikowski edytował(a) ten post dnia 02.02.11 o godzinie 20:53

konto usunięte

Temat: MySQL][PHP]jak przejść z pliku tekstowego do bazy danych?

Jacek Dunikowski:
Wybieranie losowych rekordów z bazy danych:

 SELECT pytanie FROM test ORDER BY RAND() LIMIT 5 

5 - liczba pytań do wylosowania

..tak mi się wydaje że o to chodzi ;P

a moze by tak nie uzywac RAND() na bazie, a?
Robert P.

Robert P. Senior PHP Developer

Temat: MySQL][PHP]jak przejść z pliku tekstowego do bazy danych?

Kolego robisz kilka poważnych błedów na samym początku przy strukturze i w kodzie.

Struktura dla pytań powinna być taka:

1. Questions
(id,question)
2. Answers
(id, answer,questions_id) gdzie questions_id to klucz obcy dla questions.id

to jest najbardziej banalny przykład struktury

i tutaj gdy chcesz podać pytanie NIE POWINIENEŚ ROBIĆ ORDER BY RAND() chyba że masz bardzo mało rekordów gdyż jest to bardzo wolne i nie optymalne. Podaje Ci tutaj linka jak się to powinno robić: http://blog.vokiel.com/mysql-rand-jak-pobrac-losowe-wi...

Do połączenia z bazą możesz użyć wielu narzędzi. W Twoim przypadku najlepiej użyć prostego mysql_connect() albo bardziej zaawansowanego PDO


<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}

?>

Przykład z php.net

połączenie ->http://nl3.php.net/manual/en/pdo.construct.php
zapytania ->http://nl3.php.net/manual/en/pdo.query.php
zapytania typu zwracające liczbe zmodyfikowanych wierszy http://nl3.php.net/manual/en/pdo.exec.php

Co więcej w bazie używaj UTF-8 jako kodowania i przy połaczeniu SET NAMES 'utf8'
silnik w zależności od potrzeb ale InnoDb ma więcej możliwości np. transakcje relacje itd.Robert P. edytował(a) ten post dnia 11.07.12 o godzinie 10:04

konto usunięte

Temat: MySQL][PHP]jak przejść z pliku tekstowego do bazy danych?

silnik w zależności od potrzeb ale MyIsam ma więcej możliwości np. transakcje relacje itd.

Nie chodziło Ci przypadkiem o InnoDB?
Robert P.

Robert P. Senior PHP Developer

Temat: MySQL][PHP]jak przejść z pliku tekstowego do bazy danych?

Oczywiście, że InnoDB :)



Wyślij zaproszenie do