Подскажите как убрать предупреждение и вывести вместо него текст, что то вроде: Вобщем, $id = передает значение поля гетом, но если такого поля нет, выскакивает предупреждение: Код (Text): function cont($id) { $result = $this->return($id) ; $out = "" ; foreach($result as $key => $value) { $out .= "{$value['text]}" ; } return $out ; } Можно ли как то к foreach прописать условие? что то вроде: Код (Text): if ($id == NULL) { echo "Данного текста нет" ; } Если есть то выводим содержимое foreach Ну как то так, вот можно ли это сделать? или все же юзать для вывода for?
Код (Text): function cont($id = 0) { $id = abs((int) $id);// если id - это положительное число ... Код (Text): if(!$id) { return print "Данного текста нет" ; } или же я не понял, что нужно. В функцию все равно что-то должно быть передано (в твоем варианте), иначе пхп будет ругаться. И вообще, если что-то передается постом или гетом, то $a = isset($_GET['a']) ? $_GET['a'] : '';, тогда у тебя всегда будет переменная $a, вне зависимости от того, было ли что-то передано или нет.
По моему не поняли меня Вобщем есть страница адрес ее Код (Text): /index.php?id=2 Принимаю на странице айди гетом Код (Text): $id = $_GET['id']; Затем уже вношу айди в класс и функции в ней, для вывода контента из базы данных Проверку на ноль сделать могу, получается, но вот если скажем гетом передать значение 100, а данной новости нет, foreach начинает предупреждать, что нету такого в базе данных, ну и соответственно это очень не красиво и не приятно, хочется вместо предупреждения, вывести именно свой текст, ну или же перекинуть клиента на 404 страницу. Можно конечно сделать повторный запрос в базу данный и уже проверять перед выводом, но хочется минимализма и без лишних запросов. Вот и получается, то ли дополнительную функцию писать для проверки на существование айди, то ли как то вернуть текст что то вроде "foreachelse" ну вот что то вроде того получилось Код (Text): if($result != 0 ) { но мне почему то не нравится это Вот как хотелось бы Код (Text): foreach($result as $key => $value) { $out = "....." ; } else { $out = "нет данной записи" ; return $out ; }
Не понимать. Если id - это число, то для чего там цикл? Этот id должен попадать в запрос, искаться по базе, и, если такой новости нет, то выводить уведомление.
Ну, человекоподобный разум, обычно, делает подобным способом: $id = isset($_GET['id']) ? abs((int) $_GET['id']) : 0; ... тут проверяем на ноль, если нужно. ... SELECT FROM `news` WHERE `id` = $id .. смотрим, что вернуло нам. Если такой новости нет - выводим ошибку. Если у тебя все новости выводятся - тогда там вообще id не нужен, а если конкретную новость по id достаешь - тогда цикл зачем?
ну вот я сам себя запутал, на странице статьи, выводятся комменты в цикле, ну и в разделах новости и на главной. Но у меня и новость в цикле ))) переделаю. Вот и нужно как то сделать проверку. Думаю надо проспаться, уже сутки не сплю, голова не варит.
Если используешь библиотеку mysql или mysqli - то там есть num_rows. Если PDO - то, возможно, придётся сперва использовать запрос с COUNT(), ибо rowCount() там может не работать в SELECT-запросах с базой данных MySQL. На примере mysql - это может быть как-то так Код (PHP): $res = mysql_query("SELECT * FROM `table` WHERE `id` = {$id}"); if(mysql_num_rows($res) > 0) { // выводим записи } else { // посылаем на 404 или что-то такое }
count(fetchAll(SELECT fields ...)) либо просто fetchColumn(SELECT COUNT() ...), если нужно только количество.
Всем спасибо все получилось, но еще одна проблема, выскакивает нотик в случае нулевого результата. Notice: Undefined variable: result in Код (Text): function comments($id) { $sql = "SELECT * FROM comments WHERE news = {$id}"; $res = $this->sql($sql) ; while($row = mysql_fetch_array($res)) { $result[$row['id']] = $row ; } return $result ; } собственно и ругается на Код (Text): return $result ; Это можно как то побороть? Ошибки отключать не хочется
Спасибо помогло =) Т.е. данной строкой указывается что $result является именно массивом а не чем то другим?
Данной строкой этот массив создаётся. Даже если в него ничего не было добавлено, массив всё равно существует (пустой). Соответственно, функции есть что вернуть.