Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem ze składnią
Forum PHP.pl > Forum > PHP
michal_robak
więc tak mam taki problem który jest związany ze składnią.Jestem jeszcze zielony w tych tematach.Więc tak.Przedstawiam kod który działa:
  1. <form method="post" >
  2.         <select name="pole1">
  3.         <option value="obcy">obcy</option>
  4.         <option value="zielona mila">zielona mila</option></select>
  5.         
  6.         <select name="pole2">
  7.         <option value="luc besson">luc besson</option>
  8.         </select>
  9.  
  10.         <select name="pole3">
  11.         <option value="or">or<option></select>
  12.         //tu ma być jeszcze jedna opcja 
  13.         //<option value="and">and<option></select>
  14.         //ale że nie działa z "OR" więc jej nie wstawiam
  15.  
  16.         <input type="submit"></form>
  17.  
  18. <?php
  19. if(($_POST ['pole1'])or($_POST['pole3'])or($_POST['pole2'])){
  20.  
  21. $zapytanie="select *from WIDOK1";
  22. if(($_POST['pole1'])or($_POST['pole3])or($_POST['pole2']))
  23. {$zapytanie=$zapytanie." where";}
  24.  
  25. if($_POST['pole1'])
  26. {$zapytanie=$zapytanie." tytul="."'".$_POST['pole1']."'"." "."'".$_POST['pole3']."'";}
  27.  
  28. if($_POST['pole2'])
  29. {$zapytanie=$zapytanie." rezyser="."'".$_POST['pole2']."'";}
  30.  
  31.  
  32. $result=pg_query($connect,$zapytanie);
  33. print '<table border=1>';
  34. for($i=0;$i<pg_num_rows($result);$i++){
  35. print "<tr>";
  36. for($j=0;$j<pg_num_fields($result);$j++){
  37. print "<td>";
  38. echo pg_fetch_result($result,$i,$j);echo' ';};
  39. print "</td>";};
  40. print "</tr>";
  41. };
  42. print "</table>";
  43. ?>


I teraz tak ten kod nie działa ale jeżeli zamiast tej linijki:
  1. <?php
  2.  
  3. {$zapytanie=$zapytanie." tytul="."'".$_POST['pole1']."'"." "."'".$_POST['pole3']."'";}
  4.  
  5. ?>

wstawie taką linijke:
  1. <?php
  2.  
  3. {$zapytanie=$zapytanie." tytul="."'".$_POST['pole1']."'"." or";}
  4.  
  5. ?>

to to działa.Dlaczego nie działa ten pierwszy sposób??.
Turbeczek
Nie działa bo na końcu tej linijki jest " zamiast '' lub ""

Tak mi się przynajmniej wydaje smile.gif

Sorki źle spojrzałem - po OR powinno coś jeszcze być a u Ciebie nic nie ma dlatego jest błąd (np. OR 1=1)
Ludvik
Trochę za mało informacji... Nie powiedziałeś jaki błąd wyrzuca, dałeś kawałek zapytania, trudno zgadywać...

W pierwszym kodzie zgubiłeś apostrof w linijce 23:
  1. <?php
  2. if(($_POST['pole1'])or($_POST['pole3'])or($_POST['pole2']))
  3. ?>


Co do zapytań, to sobie strasznie skomplikowałeś sprawę, trzeba zacząć od zapisania tego w lepszy sposób:
  1. <?php
  2. $zapytanie = $zapytanie . " tytul='" . $_POST['pole1']."' '" . $_POST['pole3'] . "'";
  3. ?>

Co daje
Kod
tytul='tekst' 'tekst'

Nie spotkałem się z taką składnią jeszcze...
Drugi kod:
  1. <?php
  2. $zapytanie = $zapytanie . " tytul='" . $_POST['pole1'] . "' or";
  3. ?>

Tutaj już tego błędu nie ma, jeżeli doklejasz kolejny warunek...
michal_robak
Sory zapomniałem napisać jaki błąd wyskakuje.Oto on:
Kod
Warning: pg_query(): Query failed: ERROR: syntax error at or near "'or'" at character 40 in c:\usr\krasnal\www\michal\index4.php on line 57


Warning: pg_num_rows(): supplied argument is not a valid PostgreSQL result resource in c:\usr\krasnal\www\michal\index4.php on line 60


Nom.I tak.Jeżeli chodzi o apostrof to dziwnie sie wkleiło i tego nie zauwazyłem.W skrypcie jest ok.
Jeżeli chodzi o drugi skrypt to dalej jest ten sam błąd.
A jezeli chodzi o 3 skrypt to jest dobrze.Tylko że tak nie może być ,ponieważ mi trzeba w tym miejscu wlaśnie mieć możliwość wyboru 2 opcji OR i AND.
Turbeczek
Tak jak napisał Ludvik.
Ten kod
  1. <?php
  2.  
  3. {$zapytanie=$zapytanie." tytul="."'".$_POST['pole1']."'"." "."'".$_POST['pole3']."'";}
  4.  
  5. ?>


Nie ma poprawnej składni.

Trzeba pomiędzy $_POST['pole1'] a $_POST['pole3'] wstawić OR lub And (w zależności od tego co potrzebujesz

Gdzie pole3 jest kolejną opcją a nie tak jak tutaj spójnikiem (wybieranym w select)
Ludvik
Teraz widzę błąd... jeżeli chcesz wstawić do zapytania OR, to nie w apostrofach, bo jest traktowany jako ciąg znaków, a nie słowo kluczowe SQL. Poza tym, sposób, w który sprawdzasz czy wartości dla pól istnieją, nie gwarantuje ci, że zapytanie się nie rozsypie. Po pierwsze: jeżeli chcesz sprawdzić czy zmienna instnieje, to robisz to funkcją isset(). Po drugie: Co się stanie, jeżeli pola 1 i 3 będą istniały, a drugie nie? Zapytanie skończy się na OR albo AND, co spowoduje błąd składni. Z takimi przypadkami też trzeba się liczyć.
michal_robak
No niestety powiem szczerze że nie za bardzo wiem o co chodzi.A jeżeli chodzi o składnie to wogle lipa.No nic jakoś trzeba bedzie coś wykombinować.Dzieki za odpowiedzi.
Ludvik
Twoje zapytanie wygląda tak:
Kod
SELECT * FROM WIDOK1 WHERE tytul = 'jakis_tytul' 'or' rezyser = 'jakis_rezyser'

Powinno wyglądać tak:
Kod
SELECT * FROM WIDOK1 WHERE tytul = 'jakis_tytul' OR rezyser = 'jakis_rezyser'


Jeżeli masz pole 1 i 3, a drugiego nie ma to zapytanie będzie wyglądało tak:
Kod
SELECT * FROM WIDOK1 WHERE tytul = 'jakis_tytul' OR

Brakuje drugiego warunku...
michal_robak
To czyli nie da sie w ten sposób jak ja chciałem tego zrobic(bo próbowałem na różne sposoby)questionmark.gif.Bo przecież tam gdzie ma być to OR to musi być pole z wyborem dwóch opcji (właśnie tej OR i AND) a nie ciągle ten warunek OR.Mnie już to dobija mad.gif
Ludvik
Sam select jest ok, ale sposób w który wklejasz z niego dane jest zły... Powinno być tak:
  1. <?php
  2. // Źle
  3. $zapytanie = $zapytanie . " tytul='" . $_POST['pole1']."' '" . $_POST['pole3'] . "'";
  4. // Dobrze
  5. $zapytanie = $zapytanie . " tytul='" . $_POST['pole1']."' " . $_POST['pole3'];
  6. ?>

Różnica to te dwa apostrofy po prostu.
michal_robak
thumbsupsmileyanim.gif kurde LUDVIK brachu nie wiem jak ci dziękować smile.gif.Ja tak się męczyłem a to taki mały problemik był smile.gif.WIELKIE DZIEKI STARY.Masz u mnie browca





W wolnych chwilach guitar.gif cool.gif
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.