Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQLite]sqlite2 i formularz php
Forum PHP.pl > Forum > Przedszkole
czechu5
stworzylem baze danych sqlite2 o nazwie "data.sdb" i utworzylem w niej tabele employees ktora zawiera 3 kolumny "fiirst", "last","phone".
w bazie jest kilka rekordow.

wyszukiwanie rekordu - formularz :

  1. <?php
  2. <form action="search.php" method="post">
  3. <input name="first" type="text" />
  4. <input name="last" type="text" />
  5. <input name="phone" type="text" />
  6.  
  7. <input name="search" type="button" value="submit" />
  8.  
  9. </form>
  10. ?>




plik search.php

  1. <?php
  2.        $dbhandle = sqlite_open(baza.sdb);
  3.  
  4.        if ($dbhandle == false)
  5.        {
  6.                die ('Unable to open database');
  7.        } else {
  8.                echo 'Database created.';
  9.        }
  10.  
  11.        $dbquery = SELECT * FROM employees;
  12.  
  13. .
  14. .
  15. .
  16. .
  17. .
  18. .
  19. ?>



no i jak dalej? jak to polaczyc z formulazem i sformulowac odpowiednie zapytanie.
dajcie jakies przyklad kodu albo adres strony z tuorialem.

a moze jakies inne koncepcje?
ja zaczynam dopiero przygode z php i bazami

z gory dziek
bregovic
Ok, naprawdę powinieneś poczytać trochę tutoriali. Ciągi znaków w php, tak zwane stringi, muszą być zamknięte w znakach apostrofu lub cudzysłowu. Czyli twoja linia #3 powinna wyglądać tak:
  1. <?php
  2. $dbhandle = sqlite_open('baza.sdb');
  3. ?>

A linia #12 tak:
  1. <?php
  2. $dbquery = 'SELECT * FROM employees';
  3. ?>


Aby pójść dalej, musisz wykorzystać LIKE w SQL'u. Aby wykonać polecenie SQL wykorzystasz funkcję sqlite_query" title="Zobacz w manualu PHP" target="_manual, potem sqlite_fetch_array" title="Zobacz w manualu PHP" target="_manual i pętlę - np while" title="Zobacz w manualu PHP" target="_manual.

Powodzenia smile.gif
czechu5
powiedz chociaz czy dobrze kombinuje.
czy ta skladnia jest ok


  1. <?php
  2. $baza = 'baza.sdb;  
  3. $db = sqlite_open($baza);
  4. $results=sqlite_query($db,'SELECT * FROM employees WHERE first=$first,last=$last AND phone=$phone');
  5. while ($entry = sqlite_fetch_array($results, SQLITE_ASSOC)) {
  6.    echo 'first: ' . $entry['first'] . '  last ' . $entry['last'] . ' phone' . $entry['phone];
  7. ?>


a co jesli ktores z pol w formularzu pozostanie puste ?

z gory dzieki
bregovic
Całkiem nieźle kombinujesz smile.gif
Masz mały błąd na linii #3 - zamknij ciąg. Twoje zapytanie jest trochę problematyczne - aby ściągnąć dane z POST (twój formularzy wysyła dane tą metodą) musisz odwołać się do tablicy $_POST. Poza tym dobrze by było przeanalizować te dane, i zapobiec SQL injection. Np tak:
  1. <?php
  2. $first = sqlite_escape_string(trim($_POST['first']));
  3. $last = sqlite_escape_string(trim($_POST['last']));
  4. $phone = sqlite_escape_string(trim($_POST['phone']));
  5. ?>

No i na koniec, zawsze zamykaj wartości w apostrofach, i nie ma funkcji poprzedzonych znakiem dolara:
  1. <?php
  2. $results = sqlite_query($db, "SELECT * FROM employees WHERE first LIKE '".$first."' AND last LIKE '".$last."' AND phone LIKE '".$phone."'");
  3. ?>

To jest podstawa wyszukiwania, reszta wygląda dobrze. Poza brakiem apostrofa w $entry['phone] (linia #7) i zamknięcia while (brakujący znak }).

Aby sprawdzić czy pole jest ustawione i nie puste, użyj:
  1. <?php
  2. if (isset($_POST['pole_ktore_chce_sprawdzic']) && empty($_POST['pole_ktore_chce_sprawdzic']) === false) {
  3. }
  4. ?>

Powodzenia smile.gif
czechu5
  1. <?php
  2.  
  3. if (isset($_POST['first']) && empty($_POST['first']) === false) ;
  4. if (isset($_POST['last']) && empty($_POST['last']) === false) ;
  5. if (isset($_POST['phone']) && empty($_POST['phone']) === false);
  6.  
  7. $first = sqlite_escape_string(trim($_POST['first']));
  8. $last = sqlite_escape_string(trim($_POST['last']));
  9. $phone = sqlite_escape_string(trim($_POST['phone']));
  10.  
  11. $baza = 'baza.sdb';  
  12. $db = sqlite_open($baza)
  13. or die('Nie mogę otworzyć bazy!');
  14. $results = sqlite_query($db, "SELECT * FROM employees WHERE first = '$first' AND last = '$last' AND phone = '$phone'");
  15. while ($entry = sqlite_fetch_array($results, SQLITE_ASSOC)) {
  16.   echo 'first: ' . $entry['first'] . '  last ' . $entry['last'] . ' phone' . $entry['phone'];
  17.  
  18. sqlite_close($db);  
  19. ?>


Parse error: syntax error, unexpected $end in c:\usr\krasnal\www\owner\search.php on line 19

czyli tutaj w 20 bo jest przesuniete o jeden w dol
bregovic
Ehhh, ale co ty robisz w 3 pierwszych liniach? Zrób coś takiego dla każdej s tych trzech zmiennych...
  1. <?php
  2. if (isset($_POST['first']) && empty($_POST['first']) === false) {
  3.    $first = sqlite_escape_string(trim($_POST['first']));
  4. }
  5. ?>

No i nie zamknąłeś while...
czechu5
  1. <?php
  2. $query = "SELECT * FROM employees order by 'last' asc";
  3. ?>


Warning
: sqlite_query() [function.sqlite-query]: ORDER BY terms must not be non-integer constants in c:\usr\krasnal\www\owner\page\show_all.php on line 8
SQL logic error or missing database

w jaki sposob moge sortowac wg. nazwiska uzwajac sqlite2
ayeo
Link

Może pomoże smile.gif

Pozdrawiam!
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.