Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Dodawanie rekordów
Forum PHP.pl > Forum > Przedszkole
bemol
Mam taki pliczek:

add_ciekawostki.php
  1. <?php
  2. include('connection.php');
  3.  
  4. $autor = $_POST['autor'];
  5. $tresc = $_POST['tresc'];
  6.  
  7. $sql_conn = mysql_connect(SERWER, ADMIN, PASS)
  8. or die('Brak połšczenia z serwerem MySQL.');
  9. @mysql_select_db(DATEBASE) 
  10. or die('Błšd wyboru bazy danych.');
  11.  
  12. $add = "INSERT INTO `ciekawostki` (`id`, `data`, `autor`, `tresc`) VALUES ('', 'Now()', '$autor', '$tresc')";
  13. $query = mysql_query($add);
  14.  
  15. echo '
  16. <FORM action="show.php" method="POST">
  17. <TABLE>
  18. <TR>
  19. <TD>Autor:</TD>
  20. <TD><INPUT name="autor" maxlenght="30"></TD>
  21. </TR>
  22. <TR>
  23. <TD>Treść:</TD>
  24. <TD><TEXTAREA cols="30" rows="8" name="tresc"></TEXTAREA></TD>
  25. </TR>
  26. <TR>
  27. <TD>&nbsp;</TD>
  28. <TD><INPUT type="submit" value="Dodaj"></TD>
  29. </TR>
  30. </TABLE>
  31. </FORM>
  32. ';
  33.  
  34. ?>


Niestety, gdy sprawdzę baze danych wygląda to tak:
id-----data--------autor--------tresc---------ocena
4---0000-00-00----------------------------------0

Wiem że zrobiłem coś źle tylko nie wiem co :/
kresh
napisałeś:
Mam taki pliczek: add_ciekawostki.php

a w formularzu dałeś:
  1. <FORM action="show.php" method="POST">


Więc nie ma prawa działać, bo dodawanie rekordu realizujesz w pliku add_ciekawostki.php
  1. <?php
  2. include('connection.php');
  3.  
  4. $autor = $_POST['autor'];
  5. $tresc = $_POST['tresc'];
  6.  
  7. $sql_conn = mysql_connect(SERWER, ADMIN, PASS)
  8. or die('Brak połšczenia z serwerem MySQL.');
  9. @mysql_select_db(DATEBASE) 
  10. or die('Błšd wyboru bazy danych.');
  11.  
  12. $add = "INSERT INTO `ciekawostki` (`id`, `data`, `autor`, `tresc`) VALUES ('', 'Now()', '$autor', '$tresc')";
  13. $query = mysql_query($add);
  14. ?>


A formularz wysyłasz do pliku show.php, więc albo zmień action w formularzu na add_ciekawostki.php albo przenieś realizację dodawania nowego rekordu do show.php.

I jeszcze jedna uwaga odnośnie zapytania do bazy.

  1. INSERT INTO `ciekawostki` (`id`, `data`, `autor`, `tresc`) VALUES ('', 'Now()', '$autor', '$tresc')


W tej postaci do bazy nie zapisze Ci się data. Usuń apostrofy które obejmują Now() i wszystko powinno chulać.

  1. INSERT INTO `ciekawostki` (`id`, `data`, `autor`, `tresc`) VALUES ('', Now(), '$autor', '$tresc')
bemol
Dzieki wszystko ok, a teraz mam taki problem. Jak zrobić oceny dla ciekawostek?

Mam taki plik:

show.php
  1. <?php
  2. $losowy = rand(1, 60);
  3.  
  4. $plik = file_get_contents("TXT/$losowy.txt");
  5.  
  6. echo $plik;
  7. echo "<br /><br /><br />";
  8. echo "<center>";
  9. echo "<table>";
  10. echo "<tr>";
  11. echo "<td align=center>Oceń ciekawostkę:</td>";
  12. echo "</tr>";
  13. echo "<tr>";
  14. echo "<td align=center> 1 | 2 | 3 | 4 | 5 </td>";
  15. echo "</tr>";
  16. echo "</table>";
  17. echo "</center>";
  18. ?>


W bazie danych mam stworzone pole `ocena`.

Jak to powiązać i jak zrobić, żeby ocena była średnią wszystkich ocen?
Czy muszę zrobić nową tabele w bazie danych, osobną dla ocen?
Sokal
Możesz zrobić tak:
* pole suma ocen
* pole ilosc ocen

A później dzielić sume przez ilość i masz średnią arytmetyczną winksmiley.jpg

Albo zrobic inną tabelę i tam robić AVG()
bemol
Teraz mój plik wygląda tak:

show.php
  1. <?php
  2. echo '<style type="text/css" media="all">@import "add_style.css";</style>';
  3.  
  4. $losowy = rand(1, 60);
  5.  
  6. $plik = file_get_contents("TXT/$losowy.txt");
  7.  
  8. echo $plik;
  9. echo "<br /><br /><br />";
  10. echo "<center>";
  11. echo "<table>";
  12. echo "<tr>";
  13. echo "<td align=center>Oceń ciekawostkę:</td>";
  14. echo "</tr>";
  15. echo "<tr>";
  16. echo "<td align=center><FORM action=show.php method=POST><button name=ocena type=submit>1</button><button name=ocena type=submit>2</button><button name=ocena type=submit>3</button><button name=ocena type=submit>4</button><button name=ocena type=submit>5</button></FORM></td>";
  17. echo "</tr>";
  18. echo "</table>";
  19. echo "</center>";
  20.  
  21. $ocena = $_POST['ocena'];
  22. echo $ocena;
  23. ?>


Jednak nie wyświetla mi nic ze zmiennej $ocena. Wiem, że jest coś źle w tym "formularzu". Prosze o pomoc.
=kokos=
zamiast
  1. <button name=ocena type=submit>1</button>
spróbuj może
  1. <input type="submit" name="ocena" value="1">
  2. <input type="submit" name="ocena" value="2">
bemol
Dzięki wielkie. Teraz kolejny kłopot: polskie znaki w bazie danych :/ Nie ma żadnych, jak to zmienić?
=kokos=
Tzn. w bazie nie masz polskich znaków? Czy jak wyświetlasz dane na stronie?
bemol
W bazie danych. Jest ustawione utf8_polish_ci jako metoda porównywania napisów, jeśli to ma jakieś znaczenie. Poza tym: System kodowania znaków dla MySQL: UTF-8 Unicode (utf8).
kresh
  1. SET CHARACTER SET latin2;
  2. SET collation_connection = latin2_general_ci;


w samym headerze strony oczywiscie charset = iso-8859-2
bemol
Niestety nic to nie daje.
kresh
Zapomniałem dodać, żebyś wywołał te zapytania w skrypcie zaraz po nawiązaniu połączenia z bazą danych.
bemol
Tak właśnie zrobiłem.
A oto część pliku, która nie obejmuje formularza:

add_ciekawostki.php
  1. <?php
  2. echo '<style type="text/css" media="all">@import "add_style.css";</style>';
  3. include('connection.php');
  4.  
  5. $autor = $_POST['autor'];
  6. $tresc = $_POST['tresc'];
  7.  
  8. if($autor and $tresc) {
  9. $sql_conn = mysql_connect(SERWER, ADMIN, PASS)
  10. or die('Brak połączenia z serwerem MySQL.');
  11. @mysql_select_db(DATEBASE) 
  12. or die('Błąd wyboru bazy danych.');
  13.  
  14. $add = "INSERT INTO `ciekawostki` (`id`, `data`, `autor`, `tresc`) VALUES ('', Now(), '$autor', '$tresc')";
  15. $query = mysql_query($add);
  16. $query = "SET CHARACTER SET latin2";
  17. mysql_query($query) or die(mysql_error());
  18. $query = "SET collation_connection = latin2_general_ci";
  19. mysql_query($query) or die(mysql_error());
  20.  
  21. if($add) echo "Ciekawostka została dodana.<br /><br />";
  22. else echo "Błąd, nie udało się dodać ciekawostki.<br />";
  23. ?>
kresh
1. Zmień system porównań dla bazy i tabel na latin2_general_ci

Alternatywnie
1. Usuń te dwa zapytania SQL które podałem
2. Ustaw charset strony na utf-8
bemol
Zrobiłem i to i to i nic :/ Trudno...
kresh
1. W phpMyAdmin ustaw:
Metoda porównywania napisów dla bazy: utf8_general_ci
Metoda porównywania napisów dla tabeli: utf8_general_ci

2. W <head> strony daj:
  1. <meta http-equiv="content-type" content="text/html;charset=utf-8" />


3. Wreszcie w skrypcie:
  1. <?php
  2. mysql_connect( ... );
  3. mysql_select_db( ... );
  4. mysql_query('SET CHARSET utf8');
  5. ?>


Tym razem przetestowałem sam i musi działać winksmiley.jpg
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.