Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dodanie rekordu do bazy
Forum PHP.pl > Forum > Przedszkole
DerekDX
Witam jako, że już skończyły mi się pomysły jak rozwiązać problem dodania rekordu do bazy, proszę Was o pomoc. Skrypt jest w zasadzie rozwinięciem tego co już robiłem i nie są dla mnie czarną magią takie rzeczy.

Oto kod:
  1.  
  2. <?php
  3. ?>
  4. <form action="add_group.php" method="post">
  5. <input name="name" type="text" maxlength="10" />
  6. <input name="dodaj" type="submit" value="Dodaj" />
  7. </form>
  8.  
  9. <?php
  10. if((isset($group_name)) || ($_POST['dodaj'])){
  11. $group_name=$_POST['name'];
  12. require('mysql_config.php');
  13. ini_set('display_errors','1');
  14. echo($_SESSION['user_id']);
  15. echo($group_name);
  16. $mysql=mysqli_connect($mysql_server,$mysql_user,$mysql_password) or die('nie polaczylo z baza danych');
  17. $wybrana=mysqli_select_db($mysql,$db_name) or die('nie wybrano bazy danych');
  18. $zapytanie="INSERT INTO group VALUES ('','".$group_name."',NOW(),'".$_SESSION['user_id']."')";
  19. if(mysqli_query($mysql,$zapytanie)){
  20. echo('dodano');
  21. }else{
  22. echo('nie dodano');
  23. }
  24. }
  25.  
  26.  
  27. ?>
  28.  


po klienieciu przycisku "Dodaj"
pojawia się taki komunikat:
  1. iť?zmienna$_SESSION['user_id'] tresc_podana_w_formularzu INSERT INTO group VALUES ('','tresc_podana_w_formularzu',NOW(),'zmienna$_SESSION['user_id']'); nie dodano
  2.  


pochylona czcionka sa podane zmienne ktore pobierane sa z innych czesci skryptu
rad11
po mojemu to w tych linia brak " i nie wiem od kad sie pisze mysqli
  1.  
  2. $mysql=mysqli_connect($mysql_server,$mysql_user,$mysql_password) or die('nie polaczylo z baza danych');
  3. $wybrana=mysqli_select_db($mysql,$db_name) or die('nie wybrano bazy danych');
  4.  


czyli

  1.  
  2. $mysql= " mysql_connect($mysql_server,$mysql_user,$mysql_password) or die('nie polaczylo z baza danych')";
  3. $wybrana= "mysql_select_db($mysql,$db_name) or die('nie wybrano bazy danych')";
  4.  


a nie sorry dobrze ze bez " ale blad z tym i jest wydaje mi sie smile.gif
DerekDX
przy umieszczaniach w funkcji zmiennych nigdy nie daje sie znaków "
tylko gdy zamieszczamy jakis ciag zanków. Zresztą gdyby tak było skrypt zwrócił by błąd typu
nie polaczylo z baza danych
lub
nie wybrano bazy danych

mysqli_connect oraz mysqli_select_db także są poprawnymi fukcjami gdy by tak nie było wyrzucało by błąd ze nie ma takiej funcji

a jedyny błąd jaki pojawia się to ten zamieszczony
mmmmmmm
Spróbuj tak:
  1. INSERT INTO `group`...
DerekDX
nie jest to przyczyna błędu

Tu mozna zobaczyc strukture bazy danych do której odwołuje się skrypt
Odwiedź moją stronę
stud3nt
Aby ułatwić dochodzenie, zamiast

  1. die('nie dodano');


wrzuć

  1. die(mysqli_error($mysql));
DerekDX
MySQL z niewiadomych mi przyczyn akceptuje tylko zapis
  1. INSERT INTO `nazwa_bazy`.`group` VALUES ('','".$group_name."',NOW(),'".$_SESSION['user_id']."')";


Wiecie może dlaczgo nie akceptuje "normalnego" zapisu?
jest to MySQL 5.5.27
bostaf
Cytat(DerekDX @ 7.10.2012, 18:20:48 ) *
mysqli_connect oraz mysqli_select_db także są poprawnymi fukcjami

Panowie, one nie są "także poprawnymi funkcjami", one są funkcjami rekomendowanymi przez twórców PHP: http://php.net/manual/en/mysqlinfo.api.choosing.php.
Cytat
It is recommended to use either the mysqli or PDO_MySQL extensions. It is not recommended to use the old mysql extension for new development
W skrócie: "Rekomendujemy rozszerzenia mysqli i PDO. Nie polecamy stosowania starego rozszerzenia mysql". W PHP6 mogą już pojawić się ostrzeżenia E_DEPRECATED w przypadku wykrycia funkcji z rozszerzenia mysql: http://news.php.net/php.internals/53799. ext/mysql thumbsdownsmileyanim.gif


Cytat(DerekDX @ 7.10.2012, 21:23:48 ) *
MySQL z niewiadomych mi przyczyn akceptuje tylko zapis[...]Wiecie może dlaczgo nie akceptuje "normalnego" zapisu?

To nie MySQL, tylko PHP. I akceptuje, cokolwiek masz na myśli pisząc 'normalny" smile.gif Ale musisz ogarnąć zapis i znaczenie cudzysłowów. Są pojedyncze ' i podwójne ". Dopóki tekst jest zwykłym tekstem - nie zawiera zmiennych - nie widać różnic. Kiedy pojawiają się zmienne, zaczyna się magia smile.gif
  1. $v = 'hello'; // zmienna $v ma teraz wartość
  2. echo $v; // wyświetli: hello
  3. echo "$v"; // wyświetli: hello
  4. echo '$v'; // wyświetli: $v
  5. echo '"'; // wyświetli: "
  6. echo "'"; // wyświetli: '
  7. echo '$v''; // nic nie wyświetli bo kompilator natrafi na niespodziewany pojedynczy cudzysłów (ten drugi po $v) i się rozłoży
  8. echo "$v" . '$v'; // wyświetli: hello$v
  9. echo "$v" . $v; // wyświetli: hellohello

To co w podwójnym cudzysłowie będzie interpretowane, to co w pojedynczym, będzie traktowane dosłownie.
No i teraz, jeśli zabieramy się za bardziej skomplikowane konstrukcje, np. te konstruujące zapytania SQL, trzeba to wziąć pod uwagę bo na pewno w środku trzeba będzie miksować pojedyncze i podwójne cudzysłowy.
Jeśli zaczynam konstruować string zapytania od pojedynczego cudzysłowu, to dane w zapytaniu otaczam podwójnymi, lub pojedynczymi ale koniecznie eskejpowanymi backslashem:
  1. $q = 'INSERT INTO tabela VALUES ("wartość")';
  2. // lub, ale lepiej nie, bo paskudnie to wygląda
  3. $q = 'INSERT INTO tabela VALUES (\'wartość\')';

Jeśli zaczynam od podwójnych, to dane otaczam pojedynczymi:
  1. $q = "INSERT INTO tabela VALUES ('wartość')";

Teraz jeśli dane są zmiennymi z PHP, np. $v, to muszę pamiętać o tym co cudzysłowy robią ze zmiennymi: podwójne interpretują, pojedyncze nie, czyli:
  1. $q = 'INSERT INTO tabela VALUES ("$v")';
  2. // albo
  3. $q = "INSERT INTO tabela VALUES ('" . $v . "')";

Generalnie trzeba wiedzieć, jak łączyć łańcuchy tekstowe, gdzie się łańcuch tekstowy zaczyna (pierwszy cudzysłów) i gdzie się kończy (drugi cudzysłów), i najlepiej wykorzystać do tego edytor który podświetla składnię pozwalając w ten sposób momentalnie wyłapywać błędy.
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.