[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка значения в таблице
Angl
Помогите, пожалуйста, разобраться.

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

Вот код без переменных, который работает:

Код


$sql = 'SELECT `bane` FROM `book_bowl` WHERE dato=\'22. maj\' AND tid=12';


$result = mysql_query($sql);

$row = mysql_fetch_array($result);

if (in_array('4', $row)) {

echo "'4' found";

}


Но здесь значения dato и tid вписаны конкретно, вручную. Когда же я пытаюсь заменить их на переменные:

Код
$dato = '22.maj';
$tid = 12;

$sql = 'SELECT `bane` FROM `book_bowl` WHERE dato=`$dato` AND tid=`$tid`';

$result = mysql_query($sql);

$row = mysql_fetch_array($result);

if (in_array('4', $row)) {

echo "'4' found";

}

то выдаёт ошибку. Я пробовала убирать кавычки и назначать дополнительные, ставить точку перед именем переменной (почему это делается, я не знаю, видела просто такой синтаксис у кого-то в SELECTе, решила попробовать методом тыка: вдруг повезёт? не повезло) - ничего не помогает. Объясните, пожалуйста, в чём тут фишка, почему не читаются переменные? Ведь без них всё работает, а остальную часть кода я не меняла dumau.gif




_____________
Timok
http://phpfaq.ru/globals
LoneCat
1. В SQL-запросе - косыми кавычками обрамляюцца названия строк и столбцов, данные нужно обрамлять прямыми.
2. В самом коде - значения переменных вместо самих переменных подставляются только внутри двойных кавычек, одинарные - для ввода обычного текста, без переменных и упр. символов

Итого:
Код
$sql = "SELECT `bane` FROM `book_bowl` WHERE `dato`='$dato' AND `tid`='$tid'";

Angl
Цитата(LoneCat @ 21.5.2008, 4:16) [snapback]38920[/snapback]
1. В SQL-запросе - косыми кавычками обрамляюцца названия строк и столбцов, данные нужно обрамлять прямыми.
2. В самом коде - значения переменных вместо самих переменных подставляются только внутри двойных кавычек, одинарные - для ввода обычного текста, без переменных и упр. символов

LoneCat, огромное спасибо за код и за информацию!! Теперь работает. Пойду зубрить теорию про кавычки.
(задумчиво так): Вот оно значит как, кавычки! Кто бы мог подумать... dumau.gif

_____________
Angl
Не думала я, что придётся вернуться в тему. Но сегодня просидела весь день, чего только не перечитала и не перепробовала, а с новой проблемой не справилась. Пришла опять на поклон.

Я всё насчёт своей выборки из массива, полученного из базы данных. Мой код оказался неполноценным. То есть, если я проверяю наличие значения '5', скажем, и оно в массиве - одно, то всё работает прекрасно. И если имеются несколько значений, а '5' стоит первым, то тоже работает. Но если первым в массиве стоит другое число, то '5' не находится.

Я пробовала разные варианты кодов - везде одно и то же: или находит только первый элемент, или ничего. Вот один из них:

Код

require("connect_db.php");

$sql = "SELECT `bane` FROM `book_bowl` WHERE `dato`='$yourdate' AND `tid`='$tid'";

$result = mysql_query($sql);

$row = mysql_fetch_array($result);

#эта часть работает, если проверить выведением на печать



if (in_array('3', $row)) {

echo " ";

} else {
echo "<input type=\"radio\" name=\"bane\" value=\"3\">";
}

#а вот эта уже не находит '3', потому что '3' стоит не на первой позиции в массиве.
#на первой позиции там стоит '5', вот его находит легко.


Пробовала я и через цикл закрутить:

Код


$sql = "SELECT `bane` FROM `book_bowl` WHERE `dato`='$yourdate' AND `tid`='$tid'";

$result = mysql_query($sql);

for ($data=array(); $row=mysql_fetch_assoc($result); $data[]=$row);

if (($i = array_search('5', $data))!== FALSE) {

echo "6 found";
}



Ничего!
Уже просто чтобы вывести весь массив, написала такую штуку:

Код

$sql = "SELECT `bane` FROM `book_bowl` WHERE `dato`='$yourdate' AND `tid`='$tid'";

$result = mysql_query($sql)
or die("Could not query: " . mysql_error());

echo mysql_result($result,1);

for ($i=1; $i < count($result); $i++){
echo mysql_result($result,$i);
}


В этом последнем скрипте первое echo работает как надо, т.е. выводит второе значение в массиве (проверяла, есть ли вообще доступ к элементам, кроме первого). А то, что в цикле, выводит ту же долбаную '5', которая стоит на первом месте - и больше ничего. Ну где, где я туплю, скажите мне пожалуйста! А то меня уже истерика бьёт, честно (тут должен был стоять рвущий на себе волосы смайлик, но у вас нет такого).

_____________
LoneCat
Ну тут у тебя загвоздка из-за того что ты немного не понимаешь что конкретно возвращается из базы данных запросом mysql_query smile.gif Дык вот возвращается ссылка на ресурс, это не массив, не объект, не число и не строка, это особый тип данных. Типы ресурсов бывают разные, и каждый обрабатывается соот-щими функциями.

Теперь немного конкретики - третий вариант у тебя был практически правильным, но не работает он из-за того что в цикле у тебя кол-во повторений указано как count($result), ресурс - это не массив, а все переменные PHP кроме массивов и объектов со специальным интерфейсом возвращают еденицу, тоесть цикл у тебя отрабатывал только один раз. Чтобы получить количество возвращенных из БД рядов - используется специальная функция mysql_num_rows(), иже твой код должен выглядеть так:

Код
$sql = "SELECT `bane` FROM `book_bowl` WHERE `dato`='$yourdate' AND `tid`='$tid'";

$result = mysql_query($sql)
or die("Could not query: " . mysql_error());

for ($i=1; $i < mysql_num_rows($result); $i++){
  print_r(mysql_fetch_row($result));
}


Хотя чаще делают так:

Код
$sql = "SELECT `bane` FROM `book_bowl` WHERE `dato`='$yourdate' AND `tid`='$tid'";

$result = mysql_query($sql)
or die("Could not query: " . mysql_error());

while($row = mysql_fetch_row($result)) {
  print_r($row);
}


Во втором случае результат получается тот-же, цикл повторяется до тех пор пока mysql_fetch_row не выдаст false, а false он выдает только в случае когда все ряды результата уже считаны

mysql_fetch_row выдает результат в виде неиндексированного массива ($row[0], $row[1]...), его прозрачно можно заменить на mysql_fetch_assoc (выдает индексированный массив, где индекс - название стоблца, а-ля $row['bane'] и т.п.), или mysql_fetch_object (выдает объект, где каждое значение ячейки будет записано в свойство объекта под названием столбца, а-ля $row->bane в твоем случае и т.п.)

mysql_result использовать не рекомендуется, потому как он очень медленный, об этом даже в мануале пишут, да и честно говоря абсолютно бесполезный smile.gif
Angl
LoneCat, спасибо за подробное объяснение. Не скажу, что всё поняла, голова не варит после нескольких бессонных ночей и сегодняшних нервов по поводу неработающего скрипта. Но вчитаюсь повнимательнее завтра.

Скрипт работает, но не так, как мне надо всё равно. То есть, если бы мне значения нужны были в куче, то нормально. А мне их надо рассадить в визуальную таблицу, в 10 ячеек, причём отсутствующим значениям должны всё равно соответствовать ячейки (там будут радио-кнопки). Тут мне скрипт такой каши навыдавал, что держите меня семеро! Я тогда с горя решила не выделываться со сложными функциями и написала дубовый скрипт (точка, точка, два крючочка wink.gif ). Просто использовала обращение к базе для каждого отдельного значения:

Код


$sql = "SELECT `bane` FROM `book_bowl` WHERE `dato`='$yourdate' AND `tid`='$tid' AND `bane`='1'";

$result = mysql_query($sql);

if (!$row = mysql_fetch_row($result)) {
echo "это 1";
}


$sql = "SELECT `bane` FROM `book_bowl` WHERE `dato`='$yourdate' AND `tid`='$tid' AND `bane`='2'";

$result = mysql_query($sql);


if (!$row = mysql_fetch_row($result)) {
echo "это 2";
}
#и так далее, до 10.



Ну и пусть примитивно, но ведь работает же! И разве я не молодец? Вам-то наверно смешно. Ну и ладно, а мне всё равно гордо. Не так уж плохо, для блондинки-то! biggrin.gif



_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.