Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z utworzeniem tabeli MySqL
Forum PHP.pl > Forum > Przedszkole
Stron: 1, 2
xavi_sof
Witam,

Problem z utworzeniem tabeli w bazie MySQL.

1. Utworzyłem baze danych na moim serwerze FTP.
2. Wpisałem odpowiednie dane do pliku db.php

  1. <?php
  2.  
  3. // dane do połączenia z bazą MySQL
  4. $mysql_host = 'localhost';
  5. $mysql_login = 'projekcior_test';
  6. $mysql_haslo = 'test';
  7. $mysql_baza = 'projekcior_domweselnywiktoria';
  8.  
  9. // połączenie z bazą danych
  10. $polaczenie = mysql_connect($mysql_host, $mysql_login, $mysql_haslo) or die('Błąd: nie udało się nawiązać połączenia z bazą danych.');
  11.  
  12. // połączenie ze schematem bazy danych
  13. mysql_select_db($mysql_baza) or die('Błąd: nie udało się wybrać schematu bazy danych.');
  14.  
  15.  
  16. if($polaczenie){
  17. echo '<br>polaczono z mysql<br>';
  18. }
  19. else{
  20. echo 'nie polaczono';
  21. }
  22.  
  23. ?>
  24.  


3. Po wejściu w przeglądarce do pliku db.php wyskakuje mi komunikat 'POLACZONO Z MYSQL' <-- czyli wnioskuje że łącze się prawidłowo z bazą danych

4. W pliku calendar.php mam taki oto kod:
  1. <?php
  2. include ("db.php");
  3. //utworzenie zapytania
  4. $zapytanie = 'CREATE TABLE daty ('
  5. . 'daty VARCHAR(10),'
  6. . ')';
  7.  
  8. //wykonanie zapytania
  9. $wykonaj = mysql_query ( $zapytanie );
  10.  
  11. //sprawdzenie czy wykonanie zapytania się udało
  12. if($wykonaj)
  13. {
  14. echo 'Tabela utworzona pomyślnie.';
  15. }
  16. else
  17. {
  18. echo 'Tabela nie mogła zostać utworzona.';
  19. }
  20.  
  21.  
  22.  
  23. if(isset($_POST["submit"])) {
  24. include ("db.php");
  25.  
  26.  
  27. $daty = $_POST['simple-textarea'];
  28. $add = mysql_query("INSERT INTO quiz(daty) VALUES('$daty')");
  29.  
  30.  
  31.  
  32. if ($add) {
  33. echo '<p>Dodano do bazy</p>';
  34. } else {
  35. echo mysql_error(); echo '<p>Błąd! Spróbuj ponownie</p>';
  36. }
  37. } else {
  38. ?>
  39.  
  40.  
  41.  
  42.  
  43. <!doctype html>
  44. <html lang="en">
  45. <head>
  46. <meta charset="UTF-8">
  47. </head>
  48. <body>
  49.  
  50. <form action="" method="POST">
  51. <input type="submit" name="submit" value="Zapisz i wyświetl na stronie" class="btn btn-success">
  52. <br><br>
  53. <textarea name="simple-textarea" id="simple-textarea" cols="100" rows="20"></textarea>
  54. </form>
  55. </body>
  56. </html>
  57.  
  58. <?php
  59. }
  60. ?>


5. Po wejściu na plik calendar.php wyskakuje mi komunikat:
  1. polaczono z mysql
  2. Tabela nie mogła zostać utworzona.


6. Po kliknięciu na przycisk SUBMIT wyskakuje mi taki komunikat:
  1. polaczono z mysql
  2. Tabela nie mogła zostać utworzona.
  3. polaczono z mysql
  4. Table 'projekcior_domweselnywiktoria.quiz' doesn't exist
  5. Błąd! Spróbuj ponownie


O co kaman...? Proszę o podpowiedź.
Dziękuje
nospor
Maz bledne zapytanie tworzące tabelę. Przecinek na koncu jest zbedny
xavi_sof
Cytat(nospor @ 18.04.2014, 10:18:04 ) *
Maz bledne zapytanie tworzące tabelę. Przecinek na koncu jest zbedny


1. Dziękuje, zmieniłem, pojawił się najpierw komunikat 'Tabela utworzona pomyślnie'. Teraz za każdym razem pojawia się że nie została utworzona (bo już jest). Jakim warunkiem mogę sprawdzać czy tabela już istnieje w mysql? Jeśli tak to pomija tworzenie tabeli?

2. Po kliknięciu w przycisk SUBMIT wylatuje mi:
Cytat
polaczono z mysql <-- połączono, jest good
Tabela nie mogła zostać utworzona. <-- nawiązanie do pytania nr 1
polaczono z mysql <-- połączono, jest good (chociaż nie wiem czy wystarczy raz się połączyć na początku pliku i to wystarczy?)
Table 'projekcior_domweselnywiktoria.quiz' doesn't exist <-- tego nie czaje, odwołuje się do 'projekcior_domweselnywiktoria.quiz' a baza to przecież 'projekcior_domweselnywiktoria'
Błąd! SprĂłbuj ponownie <-- związane z Table 'projekcior_domweselnywiktoria.quiz' doesn't exist


Proszę o pomoc

Dołączam jeszce kod:
  1. <?php
  2. include ("db.php");
  3. //utworzenie zapytania
  4. $zapytanie = 'CREATE TABLE daty ('
  5. . 'daty VARCHAR(10)'
  6. . ')';
  7.  
  8. //wykonanie zapytania
  9. $wykonaj = mysql_query ( $zapytanie );
  10.  
  11. //sprawdzenie czy wykonanie zapytania się udało
  12. if($wykonaj)
  13. {
  14. echo 'Tabela utworzona pomyślnie.';
  15. }
  16. else
  17. {
  18. echo 'Tabela nie mogła zostać utworzona.';
  19. }
  20.  
  21.  
  22.  
  23. if(isset($_POST["submit"])) {
  24. include ("db.php");
  25.  
  26. $dane = $_POST['simple-textarea'];
  27. $daty = explode("\r\n", $dane);
  28.  
  29. foreach ($daty as $element){
  30. $add = mysql_query("INSERT INTO quiz(daty) VALUES('$element')");
  31. }
  32.  
  33.  
  34. if ($add) {
  35. echo '<p>Dodano do bazy</p>';
  36. } else {
  37. echo mysql_error(); echo '<p>Błąd! Spróbuj ponownie</p>';
  38. }
  39. } else {
  40. ?>
Turson
Po co sobie utrudniasz życie i robisz zapytania w ten sposób questionmark.gif
  1. $zapytanie = 'CREATE TABLE daty ('
  2. . 'daty VARCHAR(10),'
  3. . ')';

mam na myśli ciągłe łączenia tekstu przy każdej nowej linii.



Table 'projekcior_domweselnywiktoria.quiz' doesn't exist
nie masz tabelii quiz
nospor
Cytat
1. Dziękuje, zmieniłem, pojawił się najpierw komunikat 'Tabela utworzona pomyślnie'. Teraz za każdym razem pojawia się że nie została utworzona (bo już jest). Jakim warunkiem mogę sprawdzać czy tabela już istnieje w mysql? Jeśli tak to pomija tworzenie tabeli?

Poprostu wywal juz ten kod do tworzenia tabeli..... jest on juz niepotrzebny
xavi_sof
Cytat(Turson @ 18.04.2014, 10:25:33 ) *
Po co sobie utrudniasz życie i robisz zapytania w ten sposób questionmark.gif
  1. $zapytanie = 'CREATE TABLE daty ('
  2. . 'daty VARCHAR(10),'
  3. . ')';

mam na myśli ciągłe łączenia tekstu przy każdej nowej linii.



Table 'projekcior_domweselnywiktoria.quiz' doesn't exist
nie masz tabelii quiz


Działa, pytania kolejne...
1. Po zalogowaniu do PHPmyadmin w bazie projekcior_domweselnywiktoria utworzyły się odpowiednie rekordy. Lecz piszę mi coś takiego:
  1. SELECT *
  2. FROM `daty`
  3. LIMIT 0 , 30


Dlaczego limit do 30 tylko? Chciałbym tu mieć możliwość wpisania ilośći bez limitu.

2. Dodało mi również rekord pusty.
Chciałbym napisać warunek w php, w przypadku gdy wczytana zawartość to '' czyli pusty rekord, przechodzi do następnego pola z tablicy explode().
Nie wiem jak to ułożyć do końca ;/

  1. if(isset($_POST["submit"])) {
  2. include ("db.php");
  3.  
  4. $dane = $_POST['simple-textarea'];
  5. $daty = explode("\r\n", $dane);
  6.  
  7.  
  8.  
  9. foreach ($daty as $element){
  10. if ($element == ''){POMIŃ TĄ LINIJKE}
  11. else {
  12. $add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  13. }
  14. }
  15.  
  16.  



3. Chciałbym aby w polu textarea (html) wyświetlały się wszystkie rekordy oddzielone enterem i po zmianie tej listy, dopisanie innych, zmiana poprzednich - wszystko się nadpisuje tak jakby w bazie. Jak mogę to uczynić?


4. nospor, Nie chciałbym wywalać tego kodu, ponieważ jeśli wrzuce to na jakiś inny serw to nie muszę logować się do bazy osobiście i tworzyć ręcznie tabeli, tylko wszystko z automatu leci, kwestia edycji danych do zalogowania, do bazy danych.

Dziękuje
Turson
1. Tak jest domyślnie.
2.
  1. foreach ($daty as $element){
  2. if(!empty($element)){
  3. mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  4. }
  5. }

3. Pobierz i wyświetl wszystkie. Jak to zrobić znajdziesz w jakimś kursie
xavi_sof
Cytat(Turson @ 18.04.2014, 10:42:42 ) *
1. Tak jest domyślnie.
2.
  1. foreach ($daty as $element){
  2. if(!empty($element)){
  3. mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  4. }
  5. }

3. Pobierz i wyświetl wszystkie. Jak to zrobić znajdziesz w jakimś kursie


Jeśli chodzi o komunikat "Tabela nie utworzona...." to wywaliłem po prostu else. I się on nie pojawia, a jeśli pierwszy raz ktoś to uruchomi to pokaże się że utworzono i tyle. Inaczej nie potrafie haha.gif

1. Jak mogę zmienić ten limit? Przecież to mnie pogrąża. Rekordu nie mogę powiększyć do nieskończonej ilości znaków. To chociaż ten limit?
3. A jak potem to nadpisać wszystko? Z wyświetleniem to jakoś dam rade wydaje mi się.
Turson
1. To nie jest żaden limit możliwości dodania określonej ilości rekordów, tylko limit wyświetlania ich w bazie. Masz tam bodajże select z option powiększenia do 60 itd. To tylko wizualna kwestia, nic więcej.
3. Samo się nadpisze, bo przy kadym ładowaniu strony, generuje się to od nowa
xavi_sof
Cytat(Turson @ 18.04.2014, 10:52:42 ) *
1. To nie jest żaden limit możliwości dodania określonej ilości rekordów, tylko limit wyświetlania ich w bazie. Masz tam bodajże select z option powiększenia do 60 itd. To tylko wizualna kwestia, nic więcej.
3. Samo się nadpisze, bo przy kadym ładowaniu strony, generuje się to od nowa


3. Spróbuje.

4. Mam pytanko, jak napisać warunek:
Jeżeli zawiera znaki " - 1 2 3 4 5 6 7 8 9 " wykonaj coś tam, jeśli nie nic nie rób ?

  1. If ( zawiera znaki "- 1,2,3,4,5,6,7,8,9"){ciesz się}else{}


Proszę o pomoc w pkt 4
nospor
Cytat
4. nospor, Nie chciałbym wywalać tego kodu, ponieważ jeśli wrzuce to na jakiś inny serw to nie muszę logować się do bazy osobiście i tworzyć ręcznie tabeli, tylko wszystko z automatu leci, kwestia edycji danych do zalogowania, do bazy danych.
To zakomentuj, a jak wrzucisz na nowy serwer to odkomentuj, wykonaj, i znowu zakomentuj.
Pyton_000
CREATE IF NOT EXISTS
nospor
@Pyton_000 zaraz zrobisz dodatkowe 10 kółek wink.gif
No nie ucz go zlych nawykow.... po grzyba bez sensu ma walic za kazdym razem to zapytanie? No tak sie nie robi.... Tabele sie tworzy raz i koniec i zapomina.
Poza tym twoja poprawka nie rozwiazuje jego problemu ktorym jest ciagly komunikat, ze utworzylo tabele tongue.gif
xavi_sof
Staram się ogarnąć wypisywanie danych. Mam problem z tym aby po wypisaniu rekordu dodać ENTER.... Wszystko aktualnie wypisuje mi w jednej linii.

  1. <textarea name="simple-textarea" id="simple-textarea" cols="100" rows="20">
  2.  
  3.  
  4. <?php
  5.  
  6. $link = mysql_connect("localhost", "projekcior_test", "test")
  7. or die("Could not connect");
  8.  
  9. mysql_select_db("projekcior_domweselnywiktoria")
  10. or die("Could not select database");
  11.  
  12. $query = "SELECT * FROM daty";
  13. $result = mysql_query($query)
  14. or die("Query failed");
  15.  
  16. while ($row = mysql_fetch_array($result)) {
  17. echo $row["daty"]; <-- CHODZI O TO MIEJSCE DOKŁADNIE, jak tu enter dodać (textarea nie przyjmuje <br>)
  18. }
  19.  
  20. mysql_close($link);
  21.  
  22. ?>
  23.  
  24.  
  25.  
  26. </textarea>

nospor
echo $row["daty"].'<br />';
lub
echo $row["daty"]."\n";
Naucz sie wkoncu podstaw php, ktorymi jest obsluga tekstow....
xavi_sof
Cytat(nospor @ 18.04.2014, 11:18:35 ) *
echo $row["daty"].'<br />';
Naucz sie wkoncu podstaw php, ktorymi jest obsluga tekstow....


Efekt:
  1. 2014-04-04<br />2014-04-05<br />ggsdgsdg<br />dfhgdfhdfh<br />
nospor
Spojrz jeszcze raz na mojego poprzedniego posta smile.gif
xavi_sof
Cytat(nospor @ 18.04.2014, 11:20:57 ) *
Spojrz jeszcze raz na mojego poprzedniego posta smile.gif


Elegancko.

5. Jak uczynić żeby ten mój skrypt nadpisywł dane?

Wymyśliłem że po naciśnięciu przycisku SUBMIT:
- usuną się wszystkie rekordy w tabeli
- wpiszą się na nowo wszystkie

W polu textarea będzie widoczny zawsze, aktualny stan bazy danych.

Czy to dobre rozwiązanie?
nospor
Jesli takie rozwiazanie ci pasuje, to tak, jest to dobre rozwiazanie.
Z tego wynika, ze kazdy moze wpisac co mu sie zywnie podoba i nadpisze to co wpisal poprzednik. O to ci naprawde chodzi?
xavi_sof
Cytat(nospor @ 18.04.2014, 11:33:02 ) *
Jesli takie rozwiazanie ci pasuje, to tak, jest to dobre rozwiazanie.
Z tego wynika, ze kazdy moze wpisac co mu sie zywnie podoba i nadpisze to co wpisal poprzednik. O to ci naprawde chodzi?


Nom nie jest to zbytnio bezpieczne rozwiązanie, pod względem zachowania danych :/
Może stworzyć drugą tabele jako kopie wcześniejszego kroku? Hmm... no nie wiem ;/
nospor
A nie sadzisz, ze kazdy user powinien widziec i zapisywac tylko swoje dane?
W tym celu musisz stworzyc tabele z userami, tam sie userzy bedą rejestrowac i potem logowac. Pisalem ci juz wczesniej, ze to co masz, to nie jest logowanie.
Zas w tabeli z datami masz dodac kolumne ID_USERA i jak bedziesz dodawal daty to bedziesz tez dopisywal id danego usera.Jak bedziesz kasowal daty, to tez tylko i wylacznie tego usera a nie wszystkie
Turson
Zależy po co chcesz za każdym razem usuwać wszystkie rekordy a potem znowu dodać je masowo.
Może UPDATE questionmark.gif
nospor
@Turson przeciez to sie sprowadzi do tego samego. A delete i insert w tym wypadku bedzie wygodniejsze od UPDATE
xavi_sof
Cytat(nospor @ 18.04.2014, 11:39:04 ) *
A nie sadzisz, ze kazdy user powinien widziec i zapisywac tylko swoje dane?
W tym celu musisz stworzyc tabele z userami, tam sie userzy bedą rejestrowac i potem logowac. Pisalem ci juz wczesniej, ze to co masz, to nie jest logowanie.
Zas w tabeli z datami masz dodac kolumne ID_USERA i jak bedziesz dodawal daty to bedziesz tez dopisywal id danego usera.Jak bedziesz kasowal daty, to tez tylko i wylacznie tego usera a nie wszystkie


Wszystko fajnie, tylko że co mi to daje że powielam użytkowników?

Bardziej mi chodzi to o że:
- przypadkowo osoba edytująca to może sobie skasować zawartość (nad którą pracowała np. 2 dni), naciśnie przypadkiem ZAPISZ i the end.
Nie wróci nigdy do wcześniejszego stanu.

Czy tu się kłania tworzenie archiwum? Jak się za takie coś zabrać?

PS. Tak w ogóle to dzięki że poświecacie mi tyle czasu (w szczególności nospor). Ogromnie pomocne.
nospor
Cytat
- przypadkowo osoba edytująca to może sobie skasować zawartość (nad którą pracowała np. 2 dni), naciśnie przypadkiem ZAPISZ i the end.
Nie wróci nigdy do wcześniejszego stanu.
No to sory winetu.... jak ktos jest sierota to jego problem.

Cytat
Wszystko fajnie, tylko że co mi to daje że powielam użytkowników?
A kto ci kaze powielac?

Pytanie podstawowe:
co to ma byc za system? Czy w tym systemie wielu uzytkownikow moze wprowadzac swoje daty? Jesli tak, to masz zrobic jak mowilem.
Jesli nie, czyli wielu uzytkownikow bedzie operowac na tych samych datach, niezaleznie kto je dodaje i nie wazne jest info kto je dodal, to zostaw jak masz teraz.
xavi_sof
Cytat(nospor @ 18.04.2014, 11:46:38 ) *
No to sory winetu.... jak ktos jest sierota to jego problem.

A kto ci kaze powielac?

Pytanie podstawowe:
co to ma byc za system? Czy w tym systemie wielu uzytkownikow moze wprowadzac swoje daty? Jesli tak, to masz zrobic jak mowilem.
Jesli nie, czyli wielu uzytkownikow bedzie operowac na tych samych datach, niezaleznie kto je dodaje i nie wazne jest info kto je dodal, to zostaw jak masz teraz.



W sumie racja, ciężko jest:
- skasować przypadkiem wszystko
- najechać jeszcze kurosorem na button i kliknąć zapisz

Tymi samymi datami będą się wszyscy zajmowali, nie ma znaczenia kto doda poszczególne. Liczy się całość.
Zresztą nie czuje się na siłach żeby pisać bardziej zaawansowane systemy, zarządzania terminarzem zajętych terminów. Dlatego staram się uproszczać jak najwięcej sprawek.

Chciałbym jeszcze prosić o odpowiedź na moje wcześniejsze pytanie:

Cytat
4. Mam pytanko, jak napisać warunek:
Jeżeli zawiera znaki " - 1 2 3 4 5 6 7 8 9 " wykonaj coś tam, jeśli nie nic nie rób ?

  1. If ( zawiera znaki "- 1,2,3,4,5,6,7,8,9"){ciesz się}else{}



Proszę o pomoc w pkt 4

nospor
A, tu az sie prosi o ładne wyrażenie regularne smile.gif
Turson
Cytat(nospor @ 18.04.2014, 11:43:13 ) *
@Turson przeciez to sie sprowadzi do tego samego. A delete i insert w tym wypadku bedzie wygodniejsze od UPDATE

Update konkretnych rekordów, a nie wszystkiego jak leci.
nospor
Cytat
Update konkretnych rekordów, a nie wszystkiego jak leci.
Zycze powodzenia przy takiej zapisywani jaki jest teraz. Przeciez to nie ma sensu.
A co jak ktos usunie daty z listy? Musisz wiedziec ktore usunal, musisz wiec wszystko sprawdzac.
A skad bedziesz wiedzial ktore ma updatowac a ktore usuwac a ktore moze dodac? Bez sensu.
Delete i insert na nowo i wszystkie te problemy znikają.
Turson
Przy obecnym sposobie wyświetlania wszystkiego w textarea, owszem delete/insert lepszy, ale mam myśli jakiś zwykły "system" edycji poszczególnych rekordów.
nospor
Ale tutaj nie mamy zwyklego systemu edycji poszczegolnych rekordow wink.gif

@xavi_sof kolejny HINT dla Ciebie:
skoro pole DATY zawiera datę to pole to ma miec typ DATE a nie varchar
Turson
Dokładnie, właśnie próbuję zasugerować, że taki feature jest wygodniejszy

Tak tak, wiem iż kolega jeszcze nie na tym poziomie wtajemniczenia, ale trzeba się rozwijać na takich rzeczach smile.gif


@down
Przepraszam sadsmiley02.gif
nospor
To na przyszlosc sugeruj ciut obszerniej co zamierzasz sugerowac bo sam post z samym UPDATE na pytanie usera, raczej brzmial bezsensu wink.gif

Autor na chwile obecną chce miec prosto i szybko. I realizuje to calkiem rozsadnie szczegolnie wziawszy pod uwage jego stan początkowy oraz porownujac go do innych poczatkujacych. Wpadl na dobre rozwiązanie (delete insert), ktore na tym etapie jest ok.
xavi_sof
Cytat(nospor @ 18.04.2014, 12:03:14 ) *
@xavi_sof kolejny HINT dla Ciebie:
skoro pole DATY zawiera datę to pole to ma miec typ DATE a nie varchar


Hmm... Czy to coś zmieni? Zmiana varchar na date w moim przypadku? Czy to znaczy że baza przyjmie tylko łańcuch znaków w postaci rrrr-mm-dd ?
nospor
Zmieni to tyle, ze zaczniesz uczyc sie jak nalezy i wyrabiac dobre nawyki
xavi_sof
Cytat(nospor @ 18.04.2014, 12:07:17 ) *
Zmieni to tyle, ze zaczniesz uczyc sie jak nalezy i wyrabiac dobre nawyki


Ok zmieniłem

Pytanko:
  1. foreach ($daty as $element){
  2. if(!empty($element) || preg_match(0123456789-, $element)){
  3. $add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  4. }
  5. else
  6. {}
  7. }


Co jest źle w tym preg matchu ;/ ?
Cytat
Parse error: syntax error, unexpected ',' in .... on line 34
nospor
preg_match jako pierwszy argument przyjmuje tekst....

poza tym masz blad logiczny.....
nie || a &&
odrozniaj LUB od I
xavi_sof
Cytat(nospor @ 18.04.2014, 12:12:18 ) *
preg_match jako pierwszy argument przyjmuje tekst....

poza tym masz blad logiczny.....
nie || a &&
odrozniaj LUB od I


Aktualnie udało mi się tylko zdziałać aby chyba to sprawdzało czy po prostu zawiera jeden ze znaków sad.gif i przepuszcza dalej.... np wiązanke '123a'

  1. foreach ($daty as $element){
  2. if(!empty($element) && preg_match("(0|1|2|3|4|5|6|7|8|9|-)", $element)){
  3. $add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  4. }
  5. else
  6. {}
  7. }


Hmm...
nospor
Z racji ze probujesz, to masz w prezencie:
  1. foreach ($daty as $element){
  2. $element = trim($element); //usuniecie entera
  3. if(!empty($element) && preg_match("/^\d{4}-\d{2}-\d{2}$/", $element)){
  4.  
  5. $add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  6.  
  7. }
  8.  
  9. else
  10.  
  11. {}
  12.  
  13. }
xavi_sof
Cytat(nospor @ 18.04.2014, 12:33:33 ) *
Z racji ze probujesz, to masz w prezencie:
  1. foreach ($daty as $element){
  2. $element = trim($element); //usuniecie entera
  3. if(!empty($element) && preg_match("/^\d{4}-\d{2}-\d{2}$/", $element)){
  4.  
  5. $add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  6.  
  7. }
  8.  
  9. else
  10.  
  11. {}
  12.  
  13. }


A jakieś krótkie wytłumaczenie tego mógłbym prosic?
  1. "/^\d{4}-\d{2}-\d{2}$/"


Bezmyślne wklejenie nic mi nie da haha.gif
nospor
zajrzyj w pierwszy lepszy kurs wyraze regularnych dostepnych w necie i po polsku. Tam masz wyjasnione co znaczą znaczki ktorych uzylem

http://pl.wikibooks.org/wiki/PHP/Podstawy_...żeń_regularnych
http://gajdaw.pl/php/wyrazenia-regularne-p...rial/print.html

http://kursphp.com/wzorce_wyrazen.php
i cala masa innych
xavi_sof
Cytat(nospor @ 18.04.2014, 12:42:22 ) *
zajrzyj w pierwszy lepszy kurs wyraze regularnych dostepnych w necie i po polsku. Tam masz wyjasnione co znaczą znaczki ktorych uzylem

http://pl.wikibooks.org/wiki/PHP/Podstawy_...żeń_regularnych
http://gajdaw.pl/php/wyrazenia-regularne-p...rial/print.html

http://kursphp.com/wzorce_wyrazen.php
i cala masa innych


Przemyślałem działanie tego skryptu, i suma sumarum takie coś wykminiłem:

  1. <?php
  2.  
  3. header('Content-Type: text/html; charset=utf-8');
  4.  
  5. /* TWORZENIE TABELI W BAZIE DANYCH
  6. include ("db.php");
  7. //utworzenie zapytania
  8. $zapytanie = 'CREATE TABLE daty ('
  9. . 'daty DATE'
  10. . ')';
  11.  
  12. //wykonanie zapytania
  13. $wykonaj = mysql_query ( $zapytanie );
  14.  
  15. //sprawdzenie czy wykonanie zapytania się udało
  16. if($wykonaj)
  17. {
  18. echo 'Tabela utworzona pomyślnie.';
  19. } else{echo 'Tabela nie utworzona!';}
  20. */
  21.  
  22.  
  23.  
  24.  
  25. //PO NACIŚNIĘCIU PRZYCISKU
  26. if(isset($_POST["submit"])) {
  27.  
  28.  
  29. //ŁĄCZE SIĘ Z BAZĄ
  30. include ("db.php");
  31.  
  32. //POBIERAM WPISANY TEKST
  33. $dane = $_POST['simple-textarea'];
  34.  
  35. //ZNAJDUJE ENTERY W TEKŚCIE I ROZDZIELAM
  36. $daty = explode("\r\n", $dane);
  37.  
  38. //SPRAWDZAM CZY KAŻDA LINIJKA JEST DOBRZE NAPISANA rrrr-mm-dd lub CZY JEST PUSTA, JEŻELI NIE - PRZERYWAM.
  39. foreach ($daty as $element){
  40. if(preg_match("/^\d{4}-\d{2}-\d{2}$/", $element || empty($element){continue;}
  41. else{
  42. break;
  43. echo '<p>Błąd! Przeczytaj instrukcje. Jedyne dozwolone znaki to cyfry od 0 do 9 oraz pauza. Wprowadź daty w formacie rrrr-mm-dd.
  44. <br><a href="calendar.php">Kliknij TU aby móc poprawić daty.</a></p>';
  45. }
  46. }
  47.  
  48. //WSZYSTKO JEST DOBRZE, WIĘC OPŁACA SIĘ USUNĄĆ CAŁĄ BAZE
  49. $delete = mysql_query("DELETE FROM daty");
  50.  
  51.  
  52. //ZABRANIAM ŻE MOŻE BYĆ PUSTE POLE, DO BAZY DOPISUJE TYLKO I WYŁĄCZNIE DOBRZE WPISANE DATY rrrr-mm-dd
  53. if(!empty($element) && preg_match("/^\d{4}-\d{2}-\d{2}$/", $element)){
  54. $add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  55. echo "Dodano do bazy date ".$element."<br>";
  56. }else{}
  57.  
  58.  
  59.  
  60. //SPRWADZENIE CZY DOBRZE DODAŁO DO BAZY
  61. if ($add) {
  62. echo 'Wszystko dodano do bazy prawidłowo.'
  63. } else {
  64. echo mysql_error(); echo '<p>Błąd z bazą danych MYSQL!</p>';
  65. }
  66.  
  67.  
  68. } else {
  69. ?>


Mam problem w linijce 40:
Cytat
Parse error: syntax error, unexpected '{' in ..... on line 40
Turson
Forum to nie parser!

Zamknij nawias w preg_match
nospor
No ale patrz gdzie (nie)zamykasz nawiasow....

ps:
to jest bez sensu
break;

echo '<p>Błąd! Przeczytaj instrukcje. Jedyne dozwolone znaki to cyfry od 0 do 9 oraz pauza. Wprowadź daty w formacie rrrr-mm-dd.

<br><a href="calendar.php">Kliknij TU aby móc poprawić daty.</a></p>';

Nie dosc ze przez break nie wyswietlisz swojego ECHO, a po drugi break przerywa tylko petle a dalszy kod czyli delete itp sie wykona

ps2:
zas to:
//SPRWADZENIE CZY DOBRZE DODAŁO DO BAZY
if ($add) {
echo 'Wszystko dodano do bazy prawidłowo.'
} else {
echo mysql_error(); echo '<p>Błąd z bazą danych MYSQL!</p>';
}

Masz wykonywac po kazdym dodaniu a nie na samym koncu. W ten sposob jak teraz mozesz miec przeklamania. Np. moze nie dodac sie pierwszy rekord a pozostale tak, i ty o tym sie nie dowiesz
xavi_sof
Kurde, coś mam nie tak sad.gif Nie dodaje mi tych dat w ogóle teraz, a mi się już zamęt w głowie zrobił od tego:

  1. <?php
  2.  
  3. header('Content-Type: text/html; charset=utf-8');
  4.  
  5. /* TWORZENIE TABELI W BAZIE DANYCH
  6. include ("db.php");
  7. //utworzenie zapytania
  8. $zapytanie = 'CREATE TABLE daty ('
  9. . 'daty DATE'
  10. . ')';
  11.  
  12. //wykonanie zapytania
  13. $wykonaj = mysql_query ( $zapytanie );
  14.  
  15. //sprawdzenie czy wykonanie zapytania się udało
  16. if($wykonaj)
  17. {
  18. echo 'Tabela utworzona pomyślnie.';
  19. } else{echo 'Tabela nie utworzona!';}
  20. */
  21.  
  22.  
  23.  
  24.  
  25. //PO NACIŚNIĘCIU PRZYCISKU
  26. if(isset($_POST["submit"])) {
  27.  
  28.  
  29. //ŁĄCZE SIĘ Z BAZĄ
  30. include ("db.php");
  31.  
  32. //POBIERAM WPISANY TEKST
  33. $dane = $_POST['simple-textarea'];
  34.  
  35. //ZNAJDUJE ENTERY W TEKŚCIE I ROZDZIELAM
  36. $daty = explode("\r\n", $dane);
  37.  
  38. //SPRAWDZAM CZY KAŻDA LINIJKA JEST DOBRZE NAPISANA rrrr-mm-dd lub CZY JEST PUSTA, JEŻELI NIE - PRZERYWAM.
  39. foreach ($daty as $element){
  40. if( preg_match("/^\d{4}-\d{2}-\d{2}$/", $element) || empty($element) ){continue;}
  41. else{
  42. echo '<p>Błąd! Przeczytaj instrukcje. Jedyne dozwolone znaki to cyfry od 0 do 9 oraz pauza. Wprowadź daty w formacie rrrr-mm-dd.
  43. <br><a href="calendar.php">Kliknij TU aby móc poprawić daty.</a></p>';
  44. }
  45. }
  46.  
  47. //WSZYSTKO JEST DOBRZE, WIĘC OPŁACA SIĘ USUNĄĆ CAŁĄ BAZE
  48. $delete = mysql_query("DELETE FROM daty");
  49.  
  50.  
  51. //ZABRANIAM ŻE MOŻE BYĆ PUSTE POLE, DO BAZY DOPISUJE TYLKO I WYŁĄCZNIE DOBRZE WPISANE DATY rrrr-mm-dd
  52. if(!empty($element) && preg_match("/^\d{4}-\d{2}-\d{2}$/", $element)){
  53. $add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  54.  
  55. if ($add) {
  56. echo "Dodano do bazy date ".$element."<br>";
  57. } else {}
  58.  
  59. }else{}
  60.  
  61.  
  62.  
  63.  
  64.  
  65. } else {
  66. ?>


Dodatkowo nawet jeśli zacznie to działać to obawiam się że w przypadku gdy ktoś po prostu wciśnie enter (puste pole) i da zapisz, to wszystko się usunie.
nospor
NIe: if( preg_match("/^\d{4}-\d{2}-\d{2}$/", $element) || empty($element) ){continue;}
a: if( preg_match("/^\d{4}-\d{2}-\d{2}$/", $element) && !empty($element) ){continue;}

Cytat
to obawiam się
To zamiast sie obawiac, to poprostu sprawdz co sie stanie w sytuacji, ktorą nakresliles

No i to:
if(!empty($element) && preg_match("/^\d{4}-\d{2}-\d{2}$/", $element)){

$add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");



if ($add) {

echo "Dodano do bazy date ".$element."<br>";

} else {}



}else{}
Ma byc w petli FOREACH jak do tej pory, a Ty to sobie wyrzuciles radosnie za petle....
xavi_sof
  1. <?php
  2.  
  3. header('Content-Type: text/html; charset=utf-8');
  4.  
  5. /* TWORZENIE TABELI W BAZIE DANYCH
  6. include ("db.php");
  7. //utworzenie zapytania
  8. $zapytanie = 'CREATE TABLE daty ('
  9. . 'daty DATE'
  10. . ')';
  11.  
  12. //wykonanie zapytania
  13. $wykonaj = mysql_query ( $zapytanie );
  14.  
  15. //sprawdzenie czy wykonanie zapytania się udało
  16. if($wykonaj)
  17. {
  18. echo 'Tabela utworzona pomyślnie.';
  19. } else{echo 'Tabela nie utworzona!';}
  20. */
  21.  
  22.  
  23.  
  24.  
  25. //PO NACIŚNIĘCIU PRZYCISKU
  26. if(isset($_POST["submit"])) {
  27.  
  28.  
  29. //ŁĄCZE SIĘ Z BAZĄ
  30. include ("db.php");
  31.  
  32. //POBIERAM WPISANY TEKST
  33. $dane = $_POST['simple-textarea'];
  34.  
  35. //ZNAJDUJE ENTERY W TEKŚCIE I ROZDZIELAM
  36. $daty = explode("\r\n", $dane);
  37.  
  38. //SPRAWDZAM CZY KAŻDA LINIJKA JEST DOBRZE NAPISANA rrrr-mm-dd lub CZY JEST PUSTA, JEŻELI NIE - PRZERYWAM.
  39. foreach ($daty as $element){
  40. if( preg_match("/^\d{4}-\d{2}-\d{2}$/", $element) && !empty($element) ){continue;}
  41. else{
  42. echo '<p>Błąd! Przeczytaj instrukcje. Jedyne dozwolone znaki to cyfry od 0 do 9 oraz pauza. Wprowadź daty w formacie rrrr-mm-dd.
  43. <br><a href="calendar.php">Kliknij TU aby móc poprawić daty.</a></p>';
  44. }
  45. }
  46.  
  47. //WSZYSTKO JEST DOBRZE, WIĘC OPŁACA SIĘ USUNĄĆ CAŁĄ BAZE
  48. $delete = mysql_query("DELETE FROM daty");
  49.  
  50.  
  51. //ZABRANIAM ŻE MOŻE BYĆ PUSTE POLE, DO BAZY DOPISUJE TYLKO I WYŁĄCZNIE DOBRZE WPISANE DATY rrrr-mm-dd
  52. foreach ($daty as $element){
  53. $add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  54.  
  55. if ($add) {
  56. echo "Dodano do bazy date ".$element."<br>";
  57. } else {}
  58.  
  59. }
  60.  
  61.  
  62.  
  63.  
  64.  
  65. } else {
  66. ?>


Teraz znów działa tylko przy wpisaniu jednej daty. Jak więcej dam to Wywala
  1. echo '<p>Błąd! Przeczytaj instrukcje. Jedyne dozwolone znaki to cyfry od 0 do 9 oraz pauza. Wprowadź daty w formacie rrrr-mm-dd.
  2. <br><a href="calendar.php">Kliknij TU aby móc poprawić daty.</a></p>';
Turson
Przerywasz wykonywanie pętli, jeżeli znajdzie się element nie pasujący do wzorca daty lub pusty.

Taki zapis
  1. if( preg_match("/^\d{4}-\d{2}-\d{2}$/", $element) && !empty($element) ){continue;}
  2. else{
  3. echo '<p>Błąd! Przeczytaj instrukcje. Jedyne dozwolone znaki to cyfry od 0 do 9 oraz pauza. Wprowadź daty w formacie rrrr-mm-dd.
  4. <br><a href="calendar.php">Kliknij TU aby móc poprawić daty.</a></p>';
  5. }

możesz zastąpić
  1. if(!preg_match("/^\d{4}-\d{2}-\d{2}$/", $element) || empty($element) ){
  2. echo '<p>Błąd! Przeczytaj instrukcje. Jedyne dozwolone znaki to cyfry od 0 do 9 oraz pauza. Wprowadź daty w formacie rrrr-mm-dd.
  3. <br><a href="calendar.php">Kliknij TU aby móc poprawić daty.</a></p>';
  4. //exit;
  5. }


a else{} nie musisz pisać
xavi_sof
  1. <?php
  2.  
  3. header('Content-Type: text/html; charset=utf-8');
  4.  
  5. /* TWORZENIE TABELI W BAZIE DANYCH
  6. include ("db.php");
  7. //utworzenie zapytania
  8. $zapytanie = 'CREATE TABLE daty ('
  9. . 'daty DATE'
  10. . ')';
  11.  
  12. //wykonanie zapytania
  13. $wykonaj = mysql_query ( $zapytanie );
  14.  
  15. //sprawdzenie czy wykonanie zapytania się udało
  16. if($wykonaj)
  17. {
  18. echo 'Tabela utworzona pomyślnie.';
  19. } else{echo 'Tabela nie utworzona!';}
  20. */
  21.  
  22.  
  23.  
  24.  
  25. //PO NACIŚNIĘCIU PRZYCISKU
  26. if(isset($_POST["submit"])) {
  27.  
  28.  
  29. //ŁĄCZE SIĘ Z BAZĄ
  30. include ("db.php");
  31.  
  32. //POBIERAM WPISANY TEKST
  33. $dane = $_POST['simple-textarea'];
  34.  
  35. //ZNAJDUJE ENTERY W TEKŚCIE I ROZDZIELAM
  36. $daty = explode("\r\n", $dane);
  37.  
  38. //SPRAWDZAM CZY KAŻDA LINIJKA JEST DOBRZE NAPISANA rrrr-mm-dd lub CZY JEST PUSTA, JEŻELI NIE - PRZERYWAM.
  39. foreach ($daty as $element){
  40. if(!preg_match("/^\d{4}-\d{2}-\d{2}$/", $element) || empty($element) ){
  41. echo '<p>Błąd! Przeczytaj instrukcje. Jedyne dozwolone znaki to cyfry od 0 do 9 oraz pauza. Wprowadź daty w formacie rrrr-mm-dd.
  42. <br><a href="calendar.php">Kliknij TU aby móc poprawić daty.</a></p>';
  43. //exit;
  44. }
  45. }
  46.  
  47. //WSZYSTKO JEST DOBRZE, WIĘC OPŁACA SIĘ USUNĄĆ CAŁĄ BAZE
  48. $delete = mysql_query("DELETE FROM daty");
  49.  
  50.  
  51. //ZABRANIAM ŻE MOŻE BYĆ PUSTE POLE, DO BAZY DOPISUJE TYLKO I WYŁĄCZNIE DOBRZE WPISANE DATY rrrr-mm-dd
  52. foreach ($daty as $element){
  53. $add = mysql_query("INSERT INTO daty(daty) VALUES('$element')");
  54.  
  55. if ($add) {
  56. echo "Dodano do bazy date ".$element."<br>";
  57. } else {}
  58.  
  59. }
  60.  
  61.  
  62.  
  63.  
  64.  
  65. } else {
  66. ?>
  67.  


Niestety... Nie działa nadal, wywala błąd ciągle:
Błąd! Przeczytaj instrukcje. Jedyne dozwolone znaki to cyfry od 0 do 9 oraz pauza. Wprowadź daty w formacie rrrr-mm-dd.
Kliknij TU aby móc poprawić daty.

Ehh.. kurde nie mam już siły ;/
nospor
$dane = trim($dane);
$daty = explode("\r\n", $dane);

Zas jesli nadal ci bedzie wywalac blad, znaczy ze gdzies w srodku danych masz zly/pusty element
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.