Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]modyfikacja skryptu- zapisanie wyniku do bazy
Forum PHP.pl > Forum > Przedszkole
gregov0
Mam skrypt testu ktory losuje pytania z bazy a nastepnie sprawdza odp chcialbym teraz zrobic tak aby przed wyswietleniem testu pojawiłoo sie okno z zapytaniem o nazwisko a nakoniec zapisalo wynik w bazie obok podanego nazwiska , jak mam to rozwiązac ? Przykladowo tworze nowa tabele(wyniki) w niej dane pola dane osobowe|wynik to czy dopisywanie moze wygladac tak
  1. $wynik = "UPDATE wyniki SET wynik='.$w.' ";

jesli tak to jak to polaczyc z wpisanym nazwiskiem?
to moje skrypty
quiz.php
  1. <?php
  2. include ("db.php");
  3.  
  4. $wynik = mysql_query("select * from quiz ORDER BY RAND() LIMIT 3;");
  5. if (mysql_num_rows ($wynik)>0)
  6. {
  7. $i=1;
  8. echo '<form ENCTYPE="multipart/form-data" action="wynik.php" method="post" target="">';
  9. echo '<INPUT TYPE="hidden" name="id" value='.$id.'>';
  10. while($pytanie = mysql_fetch_array($wynik))
  11. {
  12. echo '<font face="Arial" size="3">'.$i.'.</font>';
  13. echo '<font face="Arial" size="3">'.$pytanie['pyt'].'</font><br>';
  14. echo '<font face="Arial" size="2"><input type="radio" name=p'.$pytanie['id'].' value="a" />'.$pytanie['odpa'].'<br></font>';
  15. echo '<font face="Arial" size="2"><input type="radio" name=p'.$pytanie['id'].' value="b" />'.$pytanie['odpb'].'<br></font>';
  16. echo '<font face="Arial" size="2"><input type="radio" name=p'.$pytanie['id'].' value="c" />'.$pytanie['odpc'].'<br></font>';
  17. echo '<font face="Arial" size="2"><input type="radio" name=p'.$pytanie['id'].' value="d" />'.$pytanie['odpd'].'<br></font>';
  18. echo '<br><hr>';
  19. $i++;
  20. }
  21. echo '<INPUT class=normalne TYPE="submit" VALUE="WYNIK">';
  22. echo '</form>';
  23. }
  24.  
  25. ?>
  26.  

a tak sprawdzam
  1. <?php
  2. include ("db.php");
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  6.  
  7. </head>
  8. <body>';
  9.  
  10. reset ($_POST);
  11. $w=0;
  12. while (list ($key, $val) = each ($_POST))
  13. {
  14. if (substr($key,0,1)=='p')
  15. {
  16. $wynik = mysql_query('select * from quiz where odppraw="'.$val.'" and id='.substr($key,1,6).';');
  17. if (mysql_num_rows ($wynik)==1)
  18. {
  19. $w++;
  20. }
  21.  
  22. }
  23.  
  24. }
  25.  
  26.  
  27. echo '<br>
  28. <table align="center" cellspacing="20" width="500">
  29. <tr >
  30. <td><center><font face="Arial" size="4" color="green">Twoja liczba poprawnych odpowiedzi to: '.$w.'</font></center></td>
  31. </tr>
  32.  
  33. </table> ';
  34.  
  35. echo '</body></html>';
  36.  
  37. ?>
Czarny86
Nie wiem czy dokładnie o to Ci chodzi.

  1. <?php
  2.  
  3. $nazwisko = $_POST['nazwisko'];
  4. $wynik = $_POST['wynik'];
  5.  
  6. include ('db.php');
  7.  
  8. mysql_connect($db_host,$db_user,$db_password);
  9. mysql_select_db($db_name) or die ("nie znaleziono bazy danych");
  10.  
  11. $wynik =mysql_query( "UPDATE wyniki SET wynik = '$wynik' WHERE osobowe='$nazwisko'");
  12.  
  13.  
  14. ?>
gorden
Do tego potrzebna nowa tabela:
  1. CREATE TABLE `odpowiedzi`(
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `nazwisko` char(100) NOT NULL,
  4. `numer_pytania` int(11) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. )


Po zakończeniu pisania tego testu pytasz o imie i po kliknięciu submit
  1. $nazwisko = $_POST['nazwisko'];
  2. $numer_pytania = $pytanie['id'];
  3. $query = mysql_query("SELECT `nazwisko`, `numer_pytania` FROM `odpowiedzi` WHERE `nazwisko`='$nazwisko' AND `numer_pytania`='$numer_pytania'");
  4. if($query == 0)
  5. mysql_query("INSERT INTO `odpowiedzi`(`id`,`nazwisko`,`numer_pytania`) VALUES ('', '$nazwisko', '$numer_pytania')");
  6. else echo $nazwisko." odpowiedział już na to pytanie.";
gregov0
Nadal niemoge sobie z tym poradzic , ma ktos inne pomysły?


Tabela z użytkownikami nazywa sie logowanie, no i tam przy odpowiednim użytkowniku powiniem byc zapisywany ostatni wynik.
Ale to nie działa:(

  1. <?php
  2. include ("db.php");
  3. if (isset($_SESSION['login']))
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7.  
  8. </head>
  9. <body>';
  10.  
  11. reset ($_POST);
  12. $w=0;
  13.  
  14. while (list ($key, $val) = each ($_POST))
  15. {
  16. if (substr($key,0,1)=='p')
  17. {
  18. $wynik = mysql_query('select * from quiz where odppraw="'.$val.'" and id='.substr($key,1,6).';');
  19. if (mysql_num_rows ($wynik)==1)
  20. {
  21. $w++;
  22. }
  23.  
  24. }
  25.  
  26. }
  27.  
  28.  
  29.  
  30. echo '<br>
  31. <table align="center" cellspacing="20" width="500">
  32. <tr >
  33. <td><center><font face="Arial" size="4" color="green">Twoja liczba poprawnych odpowiedzi to: '.$w.'</font></center></td>
  34. </tr>
  35.  
  36. </table> ';
  37.  
  38.  
  39. if ($w>0) {
  40. $k5 = "Ocena bardzo dobra";
  41. $k4 = "Ocena dobra";
  42. $k3 = "Ocena dostateczna";
  43. $k2 = "Ocena dopuszczajaca!";
  44. $k1 = "Ocena niedostateczna";
  45. $ilosc=2;
  46. $srednia = sprintf("%2d",($w/$ilosc)*100);
  47. echo '<center><font face="Arial" size="4" color="green">';
  48. echo 'Zaliczone '.$srednia.' procent testu.<p></font>';
  49. if ($srednia<25) echo $k1;
  50. if ($srednia>=25 && $srednia<50) echo $k2;
  51. if ($srednia>=50 && $srednia<75) echo $k3;
  52. if ($srednia>=75 && $srednia<99) echo $k4;
  53. if ($srednia==100) echo $k5;
  54. echo '</font></center>';
  55.  
  56. }
  57.  
  58. $login = $_SESSION['login'];
  59. $pkt = "UPDATE uzytkownik SET wynik='$w' where login = '$login' LIMIT 1;";
  60. $pkt = mysql_query($pkt);
  61. echo '</body></html>';
  62. ?>
screamart
Czegoś nie rozumiem. Piszesz, że tabela z użytkownikami nazywa się "logowanie" a update robisz na tablicy uzytkownik. Podaj strukturę tabel, które wykorzystujesz, dany użytkownik w ogóle znajduje się w bazie?
gregov0
sory moja pomylka tabela to uzytkownik.
a struktura wyglada tak
  1. CREATE TABLE `uzytkownik` (
  2. `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `imie` VARCHAR(100) NOT NULL,
  4. `nazwisko` VARCHAR(100) NOT NULL,
  5. `login` VARCHAR(30) NOT NULL,
  6. `haslo` VARCHAR(50) NOT NULL,
  7. `email` VARCHAR(100) NOT NULL,
  8. `wynik` INT(11),
  9. `data` DATETIME NOT NULL,
  10.  
  11.  
  12. PRIMARY KEY (`id`)
  13. )
  14. ENGINE=MyISAM DEFAULT CHARACTER SET latin1
  15. COLLATE latin1_general_cs AUTO_INCREMENT=0;
screamart
po wykonaniu funkcji mysql_query() dodaj



Będziesz wiedział, czy zapytanie wykonuje się poprawnie.
gregov0
gdy mam w takiej formie wywala mi bład $ptk ? Query was empty (1065)


  1. <?php
  2. include ("db.php");
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6.  
  7. </head>
  8. <body>';
  9.  
  10. reset ($_POST);
  11. $w=0;
  12.  
  13. while (list ($key, $val) = each ($_POST))
  14. {
  15. if (substr($key,0,1)=='p')
  16. {
  17. $wynik = mysql_query('select * from quiz where odppraw="'.$val.'" and id='.substr($key,1,6).';');
  18.  
  19. if (mysql_num_rows ($wynik)==1)
  20. {
  21. $w++;
  22. }
  23.  
  24. }
  25.  
  26. }
  27.  
  28.  
  29.  
  30. echo '<br>
  31. <table align="center" cellspacing="20" width="500">
  32. <tr >
  33. <td><center><font face="Arial" size="4" color="green">Twoja liczba poprawnych odpowiedzi to: '.$w.'</font></center></td>
  34. </tr>
  35.  
  36. </table> ';
  37.  
  38.  
  39. if ($w>0) {
  40. $k5 = "Ocena bardzo dobra";
  41. $k4 = "Ocena dobra";
  42. $k3 = "Ocena dostateczna";
  43. $k2 = "Ocena dopuszczajaca!";
  44. $k1 = "Ocena niedostateczna";
  45. $ilosc=2;
  46. $srednia = sprintf("%2d",($w/$ilosc)*100);
  47. echo '<center><font face="Arial" size="4" color="green">';
  48. echo 'Zaliczone '.$srednia.' procent testu.<p></font>';
  49. if ($srednia<25) echo $k1;
  50. if ($srednia>=25 && $srednia<50) echo $k2;
  51. if ($srednia>=50 && $srednia<75) echo $k3;
  52. if ($srednia>=75 && $srednia<99) echo $k4;
  53. if ($srednia==100) echo $k5;
  54. echo '</font></center>';
  55.  
  56. }
  57. if (isset($_SESSION['login']))
  58. $login = $_SESSION['login'];
  59. $pkt = "UPDATE uzytkownik SET wynik='$w' where login = '$login' LIMIT 1;";
  60. $pkt = mysql_query($pkt);
  61. if(!$mysql_results = mysql_query($ptk))
  62. {
  63. echo '<code>$ptk</code> ? '.mysql_error().' ('.mysql_errno().')';
  64. }
  65.  
  66.  
  67. echo '</body></html>';
  68. ?>
screamart
  1. #
  2. $pkt = mysql_query($pkt);
  3. #
  4. if(!$mysql_results = mysql_query($ptk))


literówka, przekazujesz ptk a query masz w pkt
gregov0
Cytat(screamart @ 17.02.2011, 18:19:28 ) *
  1. #
  2. $pkt = mysql_query($pkt);
  3. #
  4. if(!$mysql_results = mysql_query($ptk))


literówka, przekazujesz ptk a query masz w pkt
zmienilem i teraz mam taki bład $ptk → You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1 (1064)
screamart
U mnie Twoje zapytanie działa. Jako, że preferuję inny zapis przetestuj:

  1. mysql_query("UPDATE uzytkownik SET wynik=".$w." where login = \"".$login."\" LIMIT 1") or die(mysql_error());


LIMIT 1 chyba nie jest potrzebny, bo wątpie byś miał 2 osoby o jednym loginie.

Po drugie:

  1. if(!$mysql_results = mysql_query($ptk))
  2. {
  3. echo '<code>$ptk</code> ? '.mysql_error().' ('.mysql_errno().')';
  4. }


robisz przypisanie w IFie?
gregov0
no tak błedu niema , ale nie zapisuje wyniku w tabeli
screamart
"wyechuj" sobie $login, może jest pusty
gregov0
no nie wyswietla
kurcze jak mam ja to zrobic . dla kogos bardziej zaaaansowanego to jest raczej proste
chce pprostu zeby wynik(ilosc zdobytych ptk i srednia testu) zostala zapisana w bazie . kombinuje na ruzne sposoby niewiem czy mam utworzyc nowa tabelke
screamart
Chciałbym pomóc ale atakujesz samymi pytaniami. Wniosek taki, że masz albo spartoloną sesję albo użytkownik nie jest zalogowany

Zamień:
  1. if (isset($_SESSION['login']))

na:
  1. if (!empty($_SESSION['login']))


Wtedy będziesz wiedział czy masz w ogóle komu przypisać wynik.
gregov0
przebraszam za te pytania.
zamieniłem ale nadal mam to samo czyli po rozwiazaniu testu wyswietla mi sie ilosc uzyskanych ptk , srednia i ocena . nic wiecej
screamart
wpsominałem o

  1. if (isset($_SESSION['login']))


W kodzie masz 2 takie wiersze. Drugi jest istotny, gdyż w przypadku FALSE przypisanie do $login nie następuje. Dla testu proszę zastosować takie zapytanie:

  1. mysql_query("UPDATE uzytkownik SET wynik=".$w." where login = \"".$_SESSION['login']."\" LIMIT 1") or die(mysql_error());


gregov0
gdy zmienie to zapytanie wywala bład
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\mojewypociny1\stronaost\test\wynik.php on line 22
tu cały kod
  1. <?php
  2. include ("db.php");
  3. if (!empty($_SESSION['login']))
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7.  
  8. </head>
  9. <body>';
  10.  
  11. reset ($_POST);
  12. $w=0;
  13.  
  14. while (list ($key, $val) = each ($_POST))
  15. {
  16. if (substr($key,0,1)=='p')
  17. {
  18. $wynik = mysql_query("UPDATE uzytkownik SET wynik=".$w." where login = \"".$_SESSION['login']."\" LIMIT 1") or die(mysql_error());
  19.  
  20.  
  21. if (mysql_num_rows ($wynik)==1)
  22. {
  23. $w++;
  24. }
  25.  
  26. }
  27.  
  28. }
  29.  
  30.  
  31.  
  32. echo '<br>
  33. <table align="center" cellspacing="20" width="500">
  34. <tr >
  35. <td><center><font face="Arial" size="4" color="green">Twoja liczba poprawnych odpowiedzi to: '.$w.'</font></center></td>
  36. </tr>
  37.  
  38. </table> ';
  39.  
  40.  
  41. if ($w>0) {
  42. $k5 = "Ocena bardzo dobra";
  43. $k4 = "Ocena dobra";
  44. $k3 = "Ocena dostateczna";
  45. $k2 = "Ocena dopuszczajaca!";
  46. $k1 = "Ocena niedostateczna";
  47. $ilosc=2;
  48. $srednia = sprintf("%2d",($w/$ilosc)*100);
  49. echo '<center><font face="Arial" size="4" color="green">';
  50. echo 'Zaliczone '.$srednia.' procent testu.<p></font>';
  51. if ($srednia<25) echo $k1;
  52. if ($srednia>=25 && $srednia<50) echo $k2;
  53. if ($srednia>=50 && $srednia<75) echo $k3;
  54. if ($srednia>=75 && $srednia<99) echo $k4;
  55. if ($srednia==100) echo $k5;
  56. echo '</font></center>';
  57.  
  58. }
  59. if (!empty($_SESSION['login']))
  60. $login = $_SESSION['login'];
  61. mysql_query("UPDATE uzytkownik SET wynik=".$w." where login = \"".$login."\" LIMIT 1") or die(mysql_error());
  62.  
  63. echo $login;
  64.  
  65.  
  66. echo '</body></html>';
  67. ?>
screamart

nie dotyczy Twojego zapytania, które było problemem. Stosujesz je przy wyniku, coś się zmieniło?

  1. $wynik = mysql_query("UPDATE uzytkownik SET wynik=".$w." where login = \"".$_SESSION['login']."\" LIMIT 1") or die(mysql_error());
  2. if (mysql_num_rows ($wynik)==1)
  3. {
  4. $w++;
  5. }
  6. }


Co chcesz tutaj zrobić? Nie widzę w sensu w aktualizowaniu wyniku w bazie po każdym, pytaniu chyba że taki jest cel. To zapytanie istotne było na końcu.
gregov0
sory
  1. <?php
  2. include ("db.php");
  3. if (!empty($_SESSION['login']))
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7.  
  8. </head>
  9. <body>';
  10.  
  11. reset ($_POST);
  12. $w=0;
  13.  
  14. while (list ($key, $val) = each ($_POST))
  15. {
  16. if (substr($key,0,1)=='p')
  17. {
  18. $wynik = mysql_query('select * from quiz where odppraw="'.$val.'" and id='.substr($key,1,6).';');
  19.  
  20. if (mysql_num_rows ($wynik)==1)
  21. {
  22. $w++;
  23. }
  24.  
  25. }
  26.  
  27. }
  28.  
  29.  
  30.  
  31. echo '<br>
  32. <table align="center" cellspacing="20" width="500">
  33. <tr >
  34. <td><center><font face="Arial" size="4" color="green">Twoja liczba poprawnych odpowiedzi to: '.$w.'</font></center></td>
  35. </tr>
  36.  
  37. </table> ';
  38.  
  39.  
  40. if ($w>0) {
  41. $k5 = "Ocena bardzo dobra";
  42. $k4 = "Ocena dobra";
  43. $k3 = "Ocena dostateczna";
  44. $k2 = "Ocena dopuszczajaca!";
  45. $k1 = "Ocena niedostateczna";
  46. $ilosc=2;
  47. $srednia = sprintf("%2d",($w/$ilosc)*100);
  48. echo '<center><font face="Arial" size="4" color="green">';
  49. echo 'Zaliczone '.$srednia.' procent testu.<p></font>';
  50. if ($srednia<25) echo $k1;
  51. if ($srednia>=25 && $srednia<50) echo $k2;
  52. if ($srednia>=50 && $srednia<75) echo $k3;
  53. if ($srednia>=75 && $srednia<99) echo $k4;
  54. if ($srednia==100) echo $k5;
  55. echo '</font></center>';
  56.  
  57. }
  58. if (!empty($_SESSION['login']))
  59. $login = $_SESSION['login'];
  60. mysql_query("UPDATE uzytkownik SET wynik=".$w." where login = \"".$_SESSION['login']\" LIMIT 1") or die(mysql_error());
  61.  
  62. echo $login;
  63.  
  64.  
  65. echo '</body></html>';
  66. ?>
screamart
Co tym razem nie tak?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.