Jump to content
  • 0

Вывод данных из БД


Евген
 Share

Question

while ($a_row = mysql_fetch_array($result))
{
print "$a_row[name]
";

print "<img src="$a_row[image]">
";

print "$a_row[opisanie]";
}

Я хочу проверять, $a_row[image] (VARCHAR) пустое поле (т.е поле не заполнено, нет фото). Тогда его не выводить. Я делаю вот так:

 if ($a_row[image] != "") 
print "<img src="$a_row[image]">
";

НО, компилятор жалуется. Говорит не знаю такую переменную.

Посоветуй-те люди добрые...

?

//Оформляйте код соответствующими тегами [ Code ] LokiDi L0ck

Link to comment
Share on other sites

20 answers to this question

Recommended Posts

  • 0

$a_row['name']

$a_row['image']

потому что без кавычек интерпретатор ищет не значение массива с ключем имя которого "name", а переменную с таким очень длинным именем "a_row[name]". естественно она не определена.

Link to comment
Share on other sites

  • 0

Во-первых, без кавычек интерпертатор ищет не "a_row[name]" а элемент массива с индексом равным неопределенной константе "name".

Во-вторых, к проблеме это не относится ^_^

Нужно писать:

print "b]"

";

А там где переменная не вставляется в строку, вообще без извращений:

print $a_row['opisanie'];

Ну и использовать оба типа кавычек (двойные и одинарные), чтобы избежать этого ужаса с частоколом слешей.

Link to comment
Share on other sites

  • 0
Я хочу проверять, $a_row[image] (VARCHAR) пустое поле (т.е поле не заполнено, нет фото). Тогда его не выводить. Я делаю вот так:

 if ($a_row[image] != "") 
print "<img src="$a_row[image]">
";

НО, компилятор жалуется. Говорит не знаю такую переменную.

Посоветуй-те люди добрые...

?

Проверяйте с помощью isset()

 if (isset($a_row[image]))
print "<img src="$a_row[image]">
";

Link to comment
Share on other sites

  • 0

2 vasa_c, хорошо, константа. ^_^ Но суть проблемы это не меняет (зри сабж) "Говорит не знаю такую переменную" посему image & name это скорее всего имена полей базы данных, а в последствии имена ключей массива $a_row. собственно чтоб не разводить пререкания на пустом месте:

2 Евген код запроса в студию, также полный вывод сроки ошибки парсера РНР и сруктуру таблицы в базе тоже сюда.

2 yopopt если база вернет $a_row['image']=NULL, то isset() не совсем сработает, в данном случае надежнее проверять empty()

Link to comment
Share on other sites

  • 0
А в чем разница между isset() and empty()??? Только с NULL?

Разница в том, что в случае чтения всех полей таблицы (SELECT * FROM table) элемент $a_row['image'] будет в любом случае установлен, так как это название поля таблицы, которое и становится элементом массива.

Не зависимо от того что содержит это поле таблицы, функция isset() всегда определит что такой элемент есть, стало быть этой функции isset() абсалютно до "фени" пустой этот элемент или нет, главное что он есть.

А вот функция empty() определяет именно содержимое этого элемента (пустой или нет). Но на практике, не обязательно использовать функцию empty() что бы определить пустая переменная или нет. Достаточно простого условия

if ($a_row['image']) print "Элемент не пустой"; else print "Элемент пустой";

Эту запись можно еще упростить если действие по условию только одно (например печать).

print $a_row['image'] ? "<img src='".$a_row['image']."'>
" : "";

Link to comment
Share on other sites

  • 0

Спасибо.

Вот еще одна задача с которой я столкнулся.

У меня есть страничка add.php. Из названия понятно, добавление данных в БД.

На странице форма

, в ней чекбоксы, поля для ввода текста.

Заполняю поля, добавляю в БД, метод

. После чего при каждом обновление страницы у меня снова добавляются данные. Пытался переменные "обнулять", не помогло. Не представляю, где это может храниться...
Link to comment
Share on other sites

  • 0
А вот функция empty() определяет именно содержимое этого элемента (пустой или нет). Но на практике, не обязательно использовать функцию empty() что бы определить пустая переменная или нет. Достаточно простого условия

if ($a_row['image']) print "Элемент не пустой"; else print "Элемент пустой";

да можно , то только начиная с РНР5 ^_^

Пытался переменные "обнулять", не помогло. Не представляю, где это может храниться...

Подскажем... Они храняться на стороне браузера. Наверно вылетает окошко: "Сраница содержит POST дата, эти данные будут отправлены ОК ОТМЕНА"? Самый простой способ избавиться от этого переадресовать клиента принудительно через хедеры. Или так, как сделано на этом форуме при добавлении сообщений

Link to comment
Share on other sites

  • 0
Пытался переменные "обнулять", не помогло. Не представляю, где это может храниться...

Эти данные хранятся в браузере и сколько раз вы бы не нажимали кнопочку "ОБНОВИТЬ" (F5) данные из формы будут передавиться снова и снова и никакими средствами вы эти данные не сбросите.

Именно по этому после обработки и записи этих данных в БД делайте редирект на этот-же скрипт (или на любой другой).

if (isset($_POST['submit'])) {
### Обрабатываем данные и записываем в БД ###
header("Location: ".$_SERVER['PHP_SELF']);
}

После редиректа данные POST отправлены не будут.

Link to comment
Share on other sites

  • 0

Пересылаю на другой скрипт:

header("Location: http://www.mycat.ru/mycat/go.php");

,но ничего не получается.

фрагмент

if ($categor_text != "")

{

$result = mysql_query("INSERT INTO categories(name) VALUES("$categor_text");");

header("Location: http://www.mycat.ru/mycat/go.php/");

exit;

}

ОШИБКА

Warning: Cannot modify header information - headers already sent by (output started at z:homemycat.ruwwwmycatadd.php:13) in z:homemycat.ruwwwmycatadd.php on line 82

Link to comment
Share on other sites

  • 0
Пересылаю на другой скрипт:

header("Location: http://www.mycat.ru/mycat/go.php");

,но ничего не получается.

Выражайтесь пожалуйста точнее: - Что именно не получается?

Не сохраняются данные в БД?

Не редиректится страница?

После редиректа остаются данные отправленные методом POST?

Link to comment
Share on other sites

  • 0
И не происходит редирект на другой скрипт.

Вот по этому данные и остаются. Потому что редирект не происходит, стало быть и ничего не происходит...

Не забывайте о том что изменять заголовок документа можно только в том случае, если до этого изменения не было ни одной комманды echo или print...

Вообще-то в этом случае у вас в браузере интерпретатор PHP должен выдать ошибку и вы это увидите, но если у вас на сервере отключена отладочная информация, то вы можете просто не видеть эту ошибку.

Узнать более точнее об ошибках можно прописав в начале скрипта

error_reporting(E_ALL);

Как варриант можно использовать переадресацию жабаскриптом.

if (isset($_POST['submit'])) {
### Обрабатываем данные и записываем в БД ###
print "<script>window.location.href = '".$_SERVER['PHP_SELF']."';</script>";
}

Ну лучше постарайтесь построить алгоритм скрипта таким образом, что бы до обработки данных в страницу ничего не печаталось, так будет более удобно, а может быть даже и более грамотно.

Собственно проглядел вот что:

ОШИБКА

Warning: Cannot modify header information - headers already sent by (output started at z:homemycat.ruwwwmycatadd.php:13) in z:homemycat.ruwwwmycatadd.php on line 82

Это и есть ошибка. Вы не можете менять заголовок документа, так как уже начали печатать в страницу.

Измените алгоритм вашего скрипта или используйте жабаскрипт для переадресации...

Link to comment
Share on other sites

  • 0

2Евген, лучше прислушайтесь к этому

Не забывайте о том что изменять заголовок документа можно только в том случае, если до этого изменения не было ни одной комманды echo или print...

Из мануала:

The HTTP status header line will always be the first sent to the client, regardless of the actual header() call being the first or not

Такой код:

<html>
<?php
/* This will give an error. Note the output
* above, which is before the header() call */
header('Location: http://www.example.com/');
?>

Вызовет ошибку, т.к. вывод клиенту происходит раньше отсылки шапок. Если иного варианта вывода данных клиенту нет, то следует использовать буферизацию (ob_start и ob_end_flush).

С точки зрения кода нормальной логики, вариант с js (хоть он и работает) неверен и некрасив.

Link to comment
Share on other sites

  • 0
С точки зрения кода нормальной логики, вариант с js (хоть он и работает) неверен и некрасив.

Я тоже так считаю и именно об этом пытался предупредить спрашивающего. Но видимо его все устраивает и больше менять он ничего не хочет. Можно конечно оставить и JS но я предупреждал что это "как варриант".

Во первых: - Зачем использовать 2 языка програмирования если с простейшей задачей можно справиться и средствами PHP.

Во вторых: - Вся эта затея с переадресацией не будет работать у клиентов, у которых в браузере отключен JS. В отличае от header("Location: Адресс") который будет работать в любом случае.

ИМХО переадресация при помощи заголовков header("Location: Адресс") - это самая корректная переадресация которая работает независимо от браузеров клиента. Ну то есть это как бы базовое перенаправление страницы, которое любой браузер знать просто ОБЯЗАН... А вот с JS не все так гладко.

Кстати помимо JS можно ведь еще и мета тег использовать

<meta http-equiv='REFRESH' content='0; URL=Адрес перхода'>

Но я бы не стал использовать ни JS ни мета тег.

PS Евген - Просто рекомендую все-таки построить алгоритм вашего скрипта немного иным способом, а именно не писать ничего в страницу коммандами echo или print до тех пор, пока не сделаете все обработки данных.

Link to comment
Share on other sites

  • 0

Удаление строк из БД.

Подскажите, какой скрипт лучше использовать для удаления строк и БД. Свой так писать не хочется, времени на добавление уже много потратил. phpmyadmin не пойдет, нужно что то более понятное, т.к. человек, со всем этим будет работать, не опытный.

нашел.

Если кому надо вот сюда http://nikrybak.narod.ru/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy