muumiin
5.11.2014, 13:59:20
Potrzebuję znaleźć w tabeli pages wiersz, którego wartość name=$entered i wczytać zawartość tego wiersza do jakiejś tablicy.
Randallmaster
5.11.2014, 14:03:44
Zapytanie:
SELECT * FROM pages WHERE name=$entered
Potrzebować będziesz takie komendy:
mysql_query
mysql_fetch_array
PS. oczywiście musisz mieć połączenie z bazą danych
ilidir
5.11.2014, 14:22:56
$zmienna = SELECT * FROM pages WHERE name=$entered
printf (tabela
[0
], tabela
[1
]); }
coś takiego może ci pomoże
grzes999
5.11.2014, 14:25:53
Cytat(ilidir @ 5.11.2014, 14:22:56 )

$zmienna = SELECT * FROM pages WHERE name=$entered
printf (tabela
[0
], tabela
[1
]); }
coś takiego może ci pomoże
Wszystkie funckje z mysql chyba uważane są już za przestażałem i powinno stosować się mysqli. Ale wszystko inne to tak jak kolega napisał powinno działać.
muumiin
6.11.2014, 13:18:50
wolałabym nie używać przestarzałych metod
http://php.net/manual/en/function.mysql-query.phpPiszę CMS-a i zależy mi na solidnie napisanym kodzie, z którego będę mogła w przyszłości korzystać.
Z bazą danych łączę się za pomocą biblioteki PDO
aniolekx
6.11.2014, 14:38:51
Tyle osób na forum pisze własnego CMSa ze możne powinniśmy napisać wspólnego

?
A wracając do twojego pytania zamiast się męczyć z czystym sql'em możesz użyć czegoś takiego:
Medoo
muumiin
6.11.2014, 14:42:16
chętnie

wiem,że cms-a powinny pisać osoby, które się znają na rzeczy, ale niestety mój szef od praktyk jest innego zdania
aniolekx
6.11.2014, 14:48:04
ah tak pamiętam ten watek, to chyba raczej pomysł z Medoo nie przejdzie
slash^
6.11.2014, 15:18:19
Mamy 2014 rok, PHP w wersji 5.6 a ludzie mysql_query polecają....
Tu masz dokładnie opisane jak to zrobić przez PDO:
http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO
aniolekx
6.11.2014, 16:04:02
@slash^ nie ma się co dziwić, w obiegu jest pewnie sporo przeterminowanych książek do PHP / tutoriali, z których ludzie się uczą i nie wiedza jakie są standardy.
muumiin
6.11.2014, 22:14:56
I dlatego wujek google często zawodzi w tych kwestiach... Co wpiszę pytanie, to wyskakują mi odpowiedzi sprzed kilku lat... Szukanie ma sens jak się ustawi filtr na świeże daty

@slash^ a pomógłbyś mi napisać takie zapytanie?
skleciłam taki kod, ale niestety nie działa...
$stmt = $db->prepare("SELECT * FROM pages WHERE name=?");
$stmt->execute(array($entered)); $row = $stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount()>0){
echo 'Strona' . $entered. 'odnaleziona';
}
else{
echo 'Strona '.$entered. ' nie odnaleziona<br/>'; }
mam połączenie z biblioteką, zmienna $entered też jest w porządku, bo wyświetla mi się napis o tym, że strona o tej nazwie nie została odnaleziona... w bazie mam jeden wiersz jak na razie (później ma być ich więcej), name='rejestracja', ale gdy $entered='rejestracja', to i tak wyświetla się, że nie odnaleziono...
Jak komuś chce się czytać wszystkie kody z moich plików, to mogę wrzucić, ale nie chcę Was tak zanudzać
mmmmmmm
6.11.2014, 22:20:33
Zauważ, że zmienną $entered inicjujesz w linii 15 - tuż przed wyświetleniem komunikatu. Dlatego możesz mieć wrażenie, że wcześniej równiez ma prawidłową wartość. A tak nie jest... Przenieś ten global ... do pierwszej linii.
EDIT: Jak ty zedytowałaś, to ja również muszę... lini 9, nie 15.
muumiin
6.11.2014, 22:30:32
przeniosłam i dalej to samo...
zmienna entered jest zdefiniowana wcześniej, tutaj tylko wpisuje global $entered, bo ten kod jest w środku funkcji
trueblue
6.11.2014, 22:38:55
global nie jest potrzebne, bo tam nie ma żadnej funkcji (w sensie warunku if).
Sprawdź co masz w $entered, może pokaż var_dump($entered);
Nie musisz zaciągać wszystkich kolumn i całego wiersza:
$stmt = $db->prepare("SELECT 1 FROM pages WHERE name=?");
$stmt->execute(array($entered)); $istnieje=$stmt->fetchColumn(0);
$stmt->closeCursor();
//nie istnieje
}
else{
//istnieje
}
muumiin
6.11.2014, 22:51:37
w $entered mam tekst wpisany po ukośniku, czyli jeśli wpiszę adres np. localhost/test/rejestracja to $entered ="rejestracja".
w tabeli 'pages' mam wiersz dotyczący tej strony i potrzebuję go po prostu wczytać. Szukam go przez nazwę w kolumnie ('name')
Boshi
6.11.2014, 22:54:20
Wyświetl zawartość $entered.
Co jest trzymane w $entered przed wysłaniem zapytania?
W necie jest sporo poradników, z tym, że większosć jest bezużyteczna. Nauczysz się czegoś a za chwilę dowiadujesz się, że są inne standardy.
muumiin
7.11.2014, 09:02:27
Zrobiłam tak jak mówi @trueblue po if dałam
echo 'Strona ' . $entered . ' nie istnieje';
Gdy wpiszę adres_mojej_strony/rejestracja wyskakuje napis: Strona rejestracja nie istnieje. Ale w bazie danych ona jest.
Połączenie z bazą mam na pewno, bo logowanie na stronie działa.
trueblue
7.11.2014, 09:27:58
Pokaż co daje wynik:
var_dump($entered);
muumiin
7.11.2014, 10:37:20
@trueblue
przy wpisaniu adres_mojej_strony/rejestracja:
string(11) "rejestracja"
trueblue
7.11.2014, 10:48:33
Jesteś pewna, że istnieje wiersz dokładnie z taką wartością?
Jakiego typu jest kolumna 'name'?
Turson
7.11.2014, 10:59:23
Pokaż kod po zmianach
muumiin
7.11.2014, 11:04:55
jestem pewna, sprawdzałam kilka razy. Typ kolumny name to text
trueblue
7.11.2014, 11:07:16
To sprawdź czy nie ma enter na końcu wartości w tym polu.
muumiin
7.11.2014, 11:11:03
@turson
$stmt = $db->prepare("SELECT 'id','name','body','title' FROM pages WHERE name=?");
$stmt->execute(array($entered)); $istnieje=$stmt->fetchColumn(0);
$stmt->closeCursor();
echo 'Strona '.$entered . ' nie istnieje '; }
else{
echo 'Strona '.$entered . ' istnieje '; }
w bazie mam dwa wiersze, w jednym name='rejestracja', w drugim name='strona'. I nie chce się wczytać nawet jak $entered='rejestracja' lub 'strona'.
@trueblue
właśnie sprawdziłam, nie ma żadnych białych znaków...
Turson
7.11.2014, 11:17:58
Nazwy kolum bierze się w ` a nie '
Wystarczyłoby obsługiwać błędy zapytań PDOException i od razu wiadomo.
nospor
7.11.2014, 11:20:09
@Turson akurat to co wskazales, nie generuje bledu zapytania, wiec jesli o to chodzi nadal by nie bylo nic wiadomo.
Ale tak, warto by włączyc rzucanie wyjatkow i sprawdzic czy w ogole połączylo się z bazą lub czy w ogole wykonalo sie poprawnie zapytanie. Wiele rzeczy po drodze moglo pojsc nie tak, a nikt tego tutaj nie sprawdza.
trueblue
7.11.2014, 11:20:42
Turson,
ale to nie spowoduje błędu. A tym bardziej, powinno jej dać wynik pozytywny, choć niekoniecznie zgodny z prawdą.
muumiin
7.11.2014, 11:20:43
Dzięki @Turson, wychodzą moje braki w podstawowej wiedzy...
poprawiłam, ale dalej nie działa
Turson
7.11.2014, 11:21:32
Nie generuje a powinno...
trueblue
7.11.2014, 11:22:03
Nie:) Bo wyciąga stałe bez aliasów.
nospor
7.11.2014, 11:25:04
Cytat
Nie generuje a powinno...
Widac nie tylko autorka tematu ma tu luki w podstawach

@muumiin ustaw w PDO by rzucalo wyjątkami gdy cos bedzie nie tak. To moze wkoncu cos na ekranie sie pojawi
Turson
7.11.2014, 11:25:14
Acha

możesz sprawdzić co siedzi w $istnieje i $entered dla pewnosci za wykonaniem zapytania, czyli var_dump
muumiin
7.11.2014, 11:34:09
@turson
w entered jest to co wpiszę w adresie po /
(już używałam tej funkcji do sprawdzenia,czy aby na pewno)
istnieje jest puste (bo wykonuje się to co w pętli if)
@nospor
wyskakuje:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in C:\WebServ\httpd\startuj\templates\include\dbpages.php:17 Stack trace: #0 C:\WebServ\httpd\startuj\templates\include\dbpages.php(17): PDOStatement->execute(Array) #1 C:\WebServ\httpd\startuj\index.php(9): dbPages('rejestracja') #2 {main} thrown in C:\WebServ\httpd\startuj\templates\include\dbpages.php on line 17
$stmt->execute(array($entered)); $istnieje=$stmt->fetchColumn(0); // linia 17
$stmt->closeCursor();
echo 'Strona '.$entered . ' nie istnieje '; }
else{
echo 'Strona '.$entered . ' istnieje '; }
nospor
7.11.2014, 11:38:34
No brawo, w koncu...
Invalid catalog name: 1046 No database selected'
Chyba nie trzeba tego tlumaczyc?
muumiin
7.11.2014, 11:45:06
może się nie znam, ale dla mnie brzmi to, jak gdyby nie było połączenia z bazą...
Problem w tym, że mam takie połączenie, bo logowanie się działa...
Chyba że jednak o co innego chodzi?
Przed logowaniem i przed szukaniem strony mam identyczny kod:
$db=new PDO('mysql:host='.$DBVARS['hostname'].';dbname='.$DBVARS['db_name'],$DBVARS['username'],$DBVARS['password']);
$db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->query('SET NAMES utf8');
$db->num_queries=0;
nospor
7.11.2014, 12:13:47
Ileż to razy ja już na tym forum slyszalem: "mam identyczny kod" ....
Komunikat bledu mowi, że nie wybrano bazy. Sprawdz wszystkie zmienne dokładnie.
muumiin
7.11.2014, 12:22:51
Chyba mi łeb ukręcicie...
Na początku każdego pliku załączałam config.php, a tutaj zapomniałam...Więc rzeczywiście nie było połączenia z bazą... Dzięki za pomoc i cierpliwość
nospor
7.11.2014, 12:41:12
Cytat
a tutaj zapomniałam...
Aby unikac tak glupich bledow, nalezy wyswietlac wszystkie bledy
Tu masz napisane jak
Temat: Jak poprawnie zada pytaniezastosuj sie do tego obowiązkowo
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.