Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите пожалуйста с выводом из бд
 
 автор: Blondy   (21.04.2010 в 22:42)   письмо автору
 
 

Начало моей печальной истории- сайт, при создании которого чем больше я делаю, тем больше появляется проблем.
Итак, сейчас мой вопрос кажется вполне простым- подскажите пожалуйста, почему в ниже представленном коде происходит вывод такого рода: в выпадающем списке выбирается одно из значений, потом нажимаем кнопку "Просмотр". и по логике механизма должна выводится одна запись, содержащая выбранное название. У меня по непонятным мне причинам выводятся абсолютно все названия из базы данных.
попытаюсь изложить на всякий случай детально: существует таблица nomenklatura , каждая запись- описание определённого товара. И должна выводится только одна запись в результате моего кода, а выводятся все записи.
Слёзно прошу, помогите люди добрые кто чем может и где в коде ошибка!

<body>
<?php 
$database 
"gaz";
$host "localhost";
$username "root";
$gb=mysql_connect($host,$username,$password);
mysql_select_db("gaz"$gb);
$result =mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura",$gb);
$myrow mysql_fetch_array($result);

?>
<table width="100%" border="1">
  <tr>
    <td colspan="2"><p>Здесь шапка</p>
    <p align="right">поиск
    </p>
    </td>
  </tr>
  <tr>
    <td width="20%"><ul>
    <li> <a href="ob_deyatelnisti.php">Область деятельности</a></li>
    <li><a href="produkciya.php">Продукция и услуги</a></li>
    <li><a href="nomenklat.php">Номенклатура</a></li>
    <li><a href="publikaci.php">Раздел публикаций</a> </li>
    <li><a href="o_kompani.php">О компании </a></li>
    <li><a href="kantakti.php">Контакты </a></li>
    </td>
    <td><p>В данном разделе вы можете просматривать номенклатуры товаров а так же найти известный вам товар.</p>
    <form method="post" action="nomenklat.php">
    <fieldset>
    <legend>Выберите критерии для просмотра номенклатур</legend>
    <select name="krit">
    <option value="САУ_КЦ">САУ КЦ</option>
    <option value="2">ПКУ ДО-01</option>
    <option value="3">САУ РГС</option>
    <option value="4">САУ ТП УКПГ</option>
    <option value="5">САУ и Р ТП ГСП</option>
    <option value="6">АСДУ н/м</option>
    <option value="7">САУ и К ГНС</option>
    <option value="8">ПКУ ОГ</option>
    <option value="САУ_ВО">САУ ВО</option>
    <option value="10">САУ ГПА</option>
    </select></fieldset>
    <input type="submit" value="Просмотр" /> 
    </fieldset>
    </form>
<table width="200" border="1">
    <?php 
    $krit 
= ($_POST['krit']);
    if (
$krit 'САУ_КЦ')
    
$result =mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura WHERE krnazwanie = 'САУ_КЦ'",$gb);
$myrow mysql_fetch_array($result);
do {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
 "
,$myrow['krnazwanie'],$myrow['plnazwanie'],$myrow['slowa'],$myrow['opisanie'],$myrow['haracteristika'],$myrow['nazwobes'],$myrow['nazkompl']);
    }
while (
$myrow mysql_fetch_array ($result));    
    
?>
<?php     
if ($krit 'САУ_ВО')    
$result =mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura WHERE krnazwanie = 'САУ_ВО'",$gb);
$myrow mysql_fetch_array($result);
do {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
 "
,$myrow['krnazwanie'],$myrow['plnazwanie'],$myrow['slowa'],$myrow['opisanie'],$myrow['haracteristika'],$myrow['nazwobes'],$myrow['nazkompl']);
    }
while (
$myrow mysql_fetch_array ($result));    
    
?>
      </table>
    </p></td>
  </tr>
  <tr>
    <td colspan="2">Нижняя шапка</td>
  </tr>
</table>
</body>


ps для примера понять как и что работать должно и будет- в коде предусмотрен пока что только показ САУ КЦ и САУ ВО.

  Ответить  
 
 автор: oliss   (21.04.2010 в 23:40)   письмо автору
 
   для: Blondy   (21.04.2010 в 22:42)
 

а это что означает
if ($krit = 'САУ_КЦ') 

КЦ -- это спички.
Когда же уничтожат все диски господина Попова ?

  Ответить  
 
 автор: Blondy   (22.04.2010 в 09:22)   письмо автору
 
   для: oliss   (21.04.2010 в 23:40)
 

Это имя переменной (если я правильно понимаю) которое берётся отсюда:

 <select name="krit">


и используется вот здесь:

    $krit = ($_POST['krit']);
    if ($krit = 'САУ_КЦ') 


и позже для следующих таких же конструкций, чтобы знать что выбрано из выпадающего списка.
Я пишу сайт для фирмы имеющей отношение к газовой промышленности, и там САУ КЦ - Система автоматического управления компрессорными станциями )

простите, я по нему училась потому что этот диск- первое что было под рукой и более- менее доходчиво.

  Ответить  
 
 автор: oliss   (22.04.2010 в 10:01)   письмо автору
 
   для: Blondy   (22.04.2010 в 09:22)
 

if ($krit == 'WWW')
а вы постом передаёте кирилицу в какой кодировке?

  Ответить  
 
 автор: Blondy   (22.04.2010 в 10:09)   письмо автору
 
   для: oliss   (22.04.2010 в 10:01)
 

Честно говоря, не знаю.... может быть это HTML 4.01 Transitional? это в Doctype описано вроде.

сначала я делала не
if ($krit = 'САУ_КЦ')

а использовала цифры в value выпадающего списка, но результат один и тот же и я не могу понять почему выводятся все записи..

  Ответить  
 
 автор: Valick   (22.04.2010 в 10:14)   письмо автору
 
   для: Blondy   (22.04.2010 в 10:09)
 

= - оператор присваивания
== - сравнение

  Ответить  
 
 автор: Slo_Nik   (22.04.2010 в 10:22)   письмо автору
 
   для: Blondy   (22.04.2010 в 10:09)
 

>Честно говоря, не знаю.... может быть это HTML 4.01 Transitional? это в Doctype описано вроде.
маленька цитата.
"Элемент <!DOCTYPE> предназначен для указания типа текущего документа — DTD (document type definition, описание типа документа). Это необходимо, чтобы браузер понимал, как следует интерпретировать текущую веб-страницу, поскольку HTML существует в нескольких версиях,..."

  Ответить  
 
 автор: oliss   (22.04.2010 в 10:24)   письмо автору
 
   для: Blondy   (22.04.2010 в 10:09)
 

HTML 4.01 Transitional никакого отношения к кодировке не имеет
смотрите в какой кодировке сохранен скрипт + какие заголовки передаются серверу (хидеры)
если у вас кодировка отличная от утф8, то не стоит передавать кирилицу в чистом виде в гет и пост запросах ( надо использовать латиницу )
<?php header ('Content-type: text/html; charset=utf-8');?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head><body>
<form method="post" action="">
    <fieldset>
    <legend>Выберите критерии для просмотра номенклатур</legend>
    <select name="krit">
    <option value="САУ_КЦ">САУ КЦ</option>
    <option value="2">ПКУ ДО-01</option>
    <option value="3">САУ РГС</option>
    <option value="4">САУ ТП УКПГ</option>
    <option value="5">САУ и Р ТП ГСП</option>
    <option value="6">АСДУ н/м</option>
    <option value="7">САУ и К ГНС</option>
    <option value="8">ПКУ ОГ</option>
    <option value="САУ_ВО">САУ ВО</option>
    <option value="10">САУ ГПА</option>
    </select></fieldset>
    <input type="submit" value="Просмотр" /> 
    </fieldset>
    </form> 
<?php
echo '<pre>';
print_r($_POST);
?>
</body>
</html>

  Ответить  
 
 автор: Blondy   (22.04.2010 в 10:44)   письмо автору
 
   для: oliss   (22.04.2010 в 10:24)
 

Тогда я решила не путаться и перевести в свой старый вариант- числами, но тот же самый эффект- выводятся все записи а не одна как мне нужно.
Простите если очень сильно туплю- я совсем новичок в php.

<body>
<?php 
$database 
"gaz";
$host "localhost";
$username "root";
$gb=mysql_connect($host,$username,$password);
mysql_select_db("gaz"$gb);
$result =mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura",$gb);
$myrow mysql_fetch_array($result);
?>
<table width="100%" border="1">
  <tr>
    <td colspan="2"><p>Здесь шапка</p>
    <p align="right">поиск
    </p>
    </td>
  </tr>
  <tr>

    <td width="20%"><ul>
    <li> <a href="ob_deyatelnisti.php">Область деятельности</a></li>
    <li><a href="produkciya.php">Продукция и услуги</a></li>
    <li><a href="nomenklat.php">Номенклатура</a></li>
    <li><a href="publikaci.php">Раздел публикаций</a> </li>
    <li><a href="o_kompani.php">О компании </a></li>
    <li><a href="kantakti.php">Контакты </a></li>    
    </td>
    <td><p>В данном разделе вы можете просматривать номенклатуры товаров а так же найти известный вам товар.</p>
    <form method="post" action="nomenklat.php">
    <fieldset>
    <legend>Выберите критерии для просмотра номенклатур</legend>
    <select name="krit">
    <option value="1">САУ КЦ</option>
    <option value="2">ПКУ ДО-01</option>
    <option value="3">САУ РГС</option>
    <option value="4">САУ ТП УКПГ</option>
    <option value="5">САУ и Р ТП ГСП</option>
    <option value="6">АСДУ н/м</option>
    <option value="7">САУ и К ГНС</option>
    <option value="8">ПКУ ОГ</option>
    <option value="9">САУ ВО</option>
    <option value="10">САУ ГПА</option>
    </select></fieldset>
    <input type="submit" value="Просмотр" /> 
    </fieldset>
    </form>
<table width="200" border="1">
    <?php 
    $krit 
= ($_POST['krit']);
    if (
$krit '1')
    
$result =mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura WHERE krnazwanie = 'САУ_КЦ'",$gb);
$myrow mysql_fetch_array($result);
do {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr> "
,$myrow['krnazwanie'],$myrow['plnazwanie'],$myrow['slowa'],$myrow['opisanie'],$myrow['haracteristika'],$myrow['nazwobes'],$myrow['nazkompl']);
    }
while (
$myrow mysql_fetch_array ($result));    
    
?>
<?php     
if ($krit '9')    
$result =mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura WHERE krnazwanie = 'САУ_ВО'",$gb);
$myrow mysql_fetch_array($result);
do {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
"
,$myrow['krnazwanie'],$myrow['plnazwanie'],$myrow['slowa'],$myrow['opisanie'],$myrow['haracteristika'],$myrow['nazwobes'],$myrow['nazkompl']);
    }
while (
$myrow mysql_fetch_array ($result));    
    
?>
      </table>
    </p></td>
  </tr>
  <tr>
    <td colspan="2">Нижняя шапка</td>
  </tr>
</table>
</body>

  Ответить  
 
 автор: oliss   (22.04.2010 в 10:49)   письмо автору
 
   для: Blondy   (22.04.2010 в 10:44)
 

while( ); do { } замените на while( ) { }

опять те же грабли
 
if ($krit = '9') { } 
найдите несколько отличий
if ($krit == 9) { }

  Ответить  
 
 автор: Slo_Nik   (22.04.2010 в 10:54)   письмо автору
 
   для: Blondy   (22.04.2010 в 10:44)
 

Вам уже писал Valick про оператор сравнения и присваивания....
вот в здесь

<?php 
if ($krit '9'// грубо говоря, если переменной $krit присвоить значение 9
// а надо использовать оператор сравнения
if($krit == 9// если переменная $krit равна 9

да и фигурные скобки не мешало бы добавить

<?php 
if($krit == 9){
 
// вот тут делайте запрос и вывод информации для данного условия
}

  Ответить  
 
 автор: oliss   (22.04.2010 в 10:59)   письмо автору
 
   для: Slo_Nik   (22.04.2010 в 10:54)
 

$krit ='9'; это присвоение строковой [string]  переменной
$krit = 9;  это присвоение числовой [integer] переменной

  Ответить  
 
 автор: Blondy   (22.04.2010 в 11:04)   письмо автору
 
   для: oliss   (22.04.2010 в 10:59)
 

oliss, Slo_Nik
Огромное спасибо вам!! Заработало всё) Для меня это чудо!)

  Ответить  
 
 автор: oliss   (22.04.2010 в 11:12)   письмо автору
 
   для: Blondy   (22.04.2010 в 11:04)
 

рано радуетесь, у вас не разработана нормальная структура таблиц ,и всё это можно выбрать одним запросом,плюс сократить код мин в два раза избавившись от printf( )

  Ответить  
 
 автор: Blondy   (22.04.2010 в 11:17)   письмо автору
 
   для: oliss   (22.04.2010 в 11:12)
 

я только начала делать, поэтому чудо если работает, значит я попытаюсь дальше сделать так весь список да и подумать над остальным) пока что это было моей самой глобальной проблемой)
одним запросом это реально??

  Ответить  
 
 автор: oliss   (22.04.2010 в 11:21)   письмо автору
 
   для: Blondy   (22.04.2010 в 11:17)
 

:)

  Ответить  
 
 автор: Slo_Nik   (22.04.2010 в 11:45)   письмо автору
 
   для: Blondy   (22.04.2010 в 11:17)
 

конечно реально....
вот в этой части запроса
...WHERE krnazwanie = 'САУ_ВО'..."
подставляете переменную, которая передаётся через POST и в зависимотсти от значения переменной будет вывод из базы.... второй запрос не нужет будет вообще, код сократится....

  Ответить  
 
 автор: Trianon   (22.04.2010 в 12:05)   письмо автору
 
   для: Slo_Nik   (22.04.2010 в 11:45)
 

здесь придется подставить не переменную, а результат функции mysql_real_escape_string()
Не учите человека дурному, он и так плавает.

  Ответить  
 
 автор: Slo_Nik   (22.04.2010 в 12:24)   письмо автору
 
   для: Trianon   (22.04.2010 в 12:05)
 

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

  Ответить  
 
 автор: Trianon   (22.04.2010 в 13:22)   письмо автору
 
   для: Slo_Nik   (22.04.2010 в 12:24)
 

Нет уж, извините.
Вот от этого как раз и получается каша, когда человека с нуля учат, что между апострофами можно переменные совать.
Что это делать чревато, он постигает в лучшем случае с диким трудом. В худшем - после успешной атаки.

  Ответить  
 
 автор: oliss   (22.04.2010 в 12:40)   письмо автору
 
   для: Trianon   (22.04.2010 в 12:05)
 

Ага ,и обработать магические кавычки

  Ответить  
 
 автор: Trianon   (22.04.2010 в 13:25)   письмо автору
 
   для: oliss   (22.04.2010 в 12:40)
 

1. проще выключить.
2. Всяко раньше - не на этом этапе.
3. необработанные магические кавычки могут привести к искажениям данных - обычно сразу заметным. Но не к уязвимостям.

  Ответить  
 
 автор: oliss   (22.04.2010 в 13:39)   письмо автору
 
   для: Trianon   (22.04.2010 в 13:25)
 

за ,двумя руками!!!
.htaccess
php_flag magic_quotes_gpc Off 

чтоб в сервер не лазить

  Ответить  
 
 автор: Slo_Nik   (22.04.2010 в 11:41)   письмо автору
 
   для: oliss   (22.04.2010 в 10:59)
 

немного запарился...

  Ответить  
 
 автор: Blondy   (22.04.2010 в 16:25)   письмо автору
 
   для: Slo_Nik   (22.04.2010 в 11:41)
 

Честно говоря я запуталась)
Выходит, можно подставить вот сюда

$result =mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura WHERE krnazwanie = 'САУ_КЦ'",$gb);

просто мою переменную вот эту
$krit = ($_POST['krit']);

Я правильно поняла? Но как тогда получится распознавание чему равна эта переменная? или писать

$result =mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura WHERE $krit ==1,$gb);

1, 2.... и тд?

  Ответить  
 
 автор: Slo_Nik   (22.04.2010 в 18:00)   письмо автору
 
   для: Blondy   (22.04.2010 в 16:25)
 

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

....WHERE krnazwanie = '".$krit."'.....

получается

<?php
$result 
=mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura WHERE krnazwanie = '".$krit."'");
// выбрать значение заданных полей из таблицы такой то ГДЕ(WHERE) krnazwanie равно $krit
?>

при этом переменную надо обработать соответствующими функциями перед подстановкой в запрос, но об этом уже Trianon и oliss писали выше

  Ответить  
 
 автор: Blondy   (22.04.2010 в 19:23)   письмо автору
 
   для: Slo_Nik   (22.04.2010 в 18:00)
 

Простите за глупые вопросы, я видимо что-то не так делаю, но всё приходит с практикой)

Я попыталась подставить вот так:

    <?php 
    $krit 
= ($_POST['krit']);
    
$krit1 =mysql_real_escape_string($krit)    
    
$result =mysql_query("SELECT krnazwanie,plnazwanie,slowa,opisanie,haracteristika,nazwobes,nazkompl FROM nomenklatura WHERE krnazwanie = '".$krit1."'"); 
$myrow mysql_fetch_array($result);
do {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
"
,$myrow['krnazwanie'],$myrow['plnazwanie'],$myrow['slowa'],$myrow['opisanie'],$myrow['haracteristika'],$myrow['nazwobes'],$myrow['nazkompl']);
}
while (
$myrow mysql_fetch_array ($result));    
    
?>


Но к сожалению, выдаёт ошибку. или я неправильно поняла как надо подставлять результат функции mysql_real_escape_string() ?


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

в самом начале пишу вот это:

<fieldset> 
    <legend>Информация о дополнительных модулях</legend>
    <input type="checkbox" name="luch[]" id="yes" value="11"/>Показать модули <p>
    <input type="checkbox" name="luch[]" id="no" value="12"/>Только базовый комплект<p></p>
    </fildset>

подвешиваю на ту же кнопку что и было, "просмотр"


$luch = ($_POST['luch']);


и затем чтобы вывести:

<?php
 
if ($luch == '11')
 {
 
$result =mysql_query("SELECT krnazwanie,kodkompl FROM komplekt WHERE krnazwanie = 'САУ_КЦ'",$gb);
$myrow mysql_fetch_array($result);
do {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
 "
,$myrow['krnazwanie'],$myrow['kodkompl']);
 }
while (
$myrow mysql_fetch_array ($result));
?> 
}


Простите что замучала, сижу с учебником но по нему же и не выходит.

  Ответить  
 
 автор: neadekvat   (22.04.2010 в 19:39)   письмо автору
 
   для: Blondy   (22.04.2010 в 19:23)
 

Вот что я бы вам хотел сказать:
1. В запросе вы перечисляете те поля, которые вам нужны. Перечисляете так, что экран начинает трещать. Уж не все ли вы поля там перечислили? Или даже если незадействованных осталось 1-2 проще поставить *
2. Для читабельности можно внести переменную в запрос, т.к. обрамлен он двойными кавычками
3. Используйте mysql_fetch_assoc вместо mysql_fetch_array. Почему? Потому что нафиг оно нужно, создавать неиспользуемые элементы массива
4. Используйте цикл while вместо do..while по двум причинам:
- Вы даже тут его используете с ошибкой - а что если в первом случаи вернется пустой результат7
- Цикл do..while существует для других задач, где обязательно хотя бы раз должно выполниться некое действие. Это, очевидно, не тот случай.

А теперь пример:
<?php  
$krit 
mysql_real_escape_string($_POST['krit']);
$result =mysql_query("SELECT * FROM nomenklatura WHERE krnazwanie = '$krit'");
while (
$myrow mysql_fetch_array ($result)) {
 
// действия
}


По поводу чекбоксов пока ниче не говорю - разберитесь с первым =)
Но собстно очень хорошоп помогает понять, шозанах функция print_r() (дамп)
Сделайте print_r($_POST); и увидите, как чекбоксы приходят/не приходят.

  Ответить  
 
 автор: Slo_Nik   (22.04.2010 в 20:58)   письмо автору
 
   для: Blondy   (22.04.2010 в 19:23)
 

почти правильно, но есть несколько "но"...
зачем Вам создавать ещё одну переменную $krit1 ? есть несколько вариантов, как обработать переменную функцией mysq_real_escape_string()

<?php
// 1 вариант, как Вы и делаете, но без лишней переменной
$krit mysql_real_escape_string($_POST['krit']);
$query "SELECT * FROM `komplekt` WHERE `krnazwanie` = '".$krit."'";
// 2 вариант прямо в запросе
$krit $_POST['krit'];
$query "SELECT * FROM `komplekt` WHERE `krnazwanie` = '".mysql_real_escape_string($krit)."'";
// 3 вариант при помощи функции sprintf() сформировать строку в которую подставляются
// нужные аргументы при помощи разных определителей типов аргументов
// в данном случае определитель %s(строка)
$query sprintf("SELECT * FROM `komplekt` WHERE `krnazwanie` = '%s' ",
                             
mysql_real_escape_string($_POST['krit']));

  Ответить  
 
 автор: Blondy   (22.04.2010 в 22:26)   письмо автору
 
   для: Slo_Nik   (22.04.2010 в 20:58)
 

neadekvat, Slo_Nik
Спасибо огромнейшее что помогаете!!

Но что-то видимо у меня мозг вытек- ни один вариант не работает теперь, не говоря о чекбоксах)

Во всех вариантах я получаю вывод пустой таблицы, проверяю базу данных- все записи есть...вроде и подключаюсь как раньше.

вот что сейчас есть:
<?php 
    $krit 
mysql_real_escape_string($_POST['krit']);     
    
$result =mysql_query("SELECT * FROM nomenklatura WHERE krnazwanie = '".$krit."'",$gb); 
$myrow mysql_fetch_array($result);
do {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
   <tr>
    <td>%s</td>
  </tr>
"
,$myrow['krnazwanie'],$myrow['plnazwanie'],$myrow['slowa'],$myrow['opisanie'],$myrow['haracteristika'],$myrow['nazwobes'],$myrow['nazkompl']);

while (
$myrow mysql_fetch_array ($result));
    
?>

  Ответить  
 
 автор: neadekvat   (22.04.2010 в 22:32)   письмо автору
 
   для: Blondy   (22.04.2010 в 22:26)
 

Сделайте так:

<?php
error_reporting
(E_ALL);
$krit mysql_real_escape_string($_POST['krit']);
$result mysql_query("SELECT * FROM nomenklatura WHERE krnazwanie = '$krit'");
$myrow mysql_fetch_assoc($result);
echo 
'<pre>';
print_r($myrow);

И скажите, что на экран вывело.
И еще - данные точно через $_POST, а не через $_GET приходят?
И третье - еще раз прочитайте то, что я вам советовал. Хотя бы с do..while на while перепешите

  Ответить  
 
 автор: Blondy   (22.04.2010 в 22:58)   письмо автору
 
   для: neadekvat   (22.04.2010 в 22:32)
 

Честное блондинистое- читала и пробовала, тот же эффект- пустые строки!) поэтому я и бросила старый вариант раз эффекта не произошло.
И да, точно через Пост, у меня так везде происходит.
И вот какую ошибку выдало:
http://i065.radikal.ru/1004/f3/f9f7ff7d90ec.jpg

А на строке 70 у меня :
$krit = mysql_real_escape_string($_POST['krit']);


и дальше как вы сказали.

  Ответить  
 
 автор: neadekvat   (22.04.2010 в 23:19)   письмо автору
 
   для: Blondy   (22.04.2010 в 22:58)
 

Это после отправки данных такая ошибка возникает?

А про мои советы - они касались не конкретно вашей проблемы, а вообще в целом, как надо делать. А у вас - нехорошие эти советы от Попова, не так делается это..

  Ответить  
 
 автор: Blondy   (22.04.2010 в 23:28)   письмо автору
 
   для: neadekvat   (22.04.2010 в 23:19)
 

К сожалению, да. Я поставила как вы писали конструкцию, и вот такое вылезло.
А Попов- этот диск мне в университете преподаватель дал, поэтому я и с незнания по нему училась) Конструкция while очень даже мне понравилась и по смыслу- буду использовать, спасибо вам огромное что глаза мне открываете) Да и использование переменной думаю будет отлично когда я догадаюсь её нормально вывести)
Потому что на простом if работало всё) теперь нет.

  Ответить  
 
 автор: oliss   (22.04.2010 в 23:24)   письмо автору
 
   для: Blondy   (22.04.2010 в 22:58)
 

<?
error_reporting
(E_ALL);

$k = !empty($_POST['krit']) ? trim($_POST['krit']) : NULL;
$res mysql_query("SELECT * 
                    FROM `nomenklatura` 
                    WHERE `krnazwanie` = '"
.mysql_real_escape_string($k)."' 
                  "
,$gb);
if(
$res)
{
    while(
$mr mysql_fetch_assoc($res))
    { 
        
$list[] = $mr
    }

    echo 
'<pre>';
    
print_r($list);                
}                

  Ответить  
 
 автор: Blondy   (22.04.2010 в 23:35)   письмо автору
 
   для: oliss   (22.04.2010 в 23:24)
 

вот что вывелось в этом варианте:

Notice: Undefined variable: list in Z:\home\mysite\www\nomenklat.php on line 84

а на строке 84 у меня
 print_r($list); 


Что-то совсем не выходит, работало только в самом начале или же мой разум согласуется с кодом и не работают оба)

  Ответить  
 
 автор: oliss   (22.04.2010 в 23:41)   письмо автору
 
   для: Blondy   (22.04.2010 в 23:35)
 

while($mr = mysql_fetch_assoc($res))
    { 
        echo $mr['krnazwanie'].'<br />'; 
    } 


что выводит

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 07:27)   письмо автору
 
   для: Blondy   (22.04.2010 в 23:35)
 

У вас в базе данных точно есть строки, которые подходят под условие krnazwanie = %some% ?

После самого запроса допишите:
echo mysql_num_rows($res);

  Ответить  
 
 автор: Blondy   (23.04.2010 в 09:20)   письмо автору
 
   для: neadekvat   (23.04.2010 в 07:27)
 

oliss, neadekvat,
Простите пожалуйста, облажалась) И удивлена что сама это поняла) в krnazwanie у меня идут САУ_ВО и САУ_КЦ к примеру, а в списке value там цифры, вот и не показывало, исправила в value)
теперь вот что показывает:

Array
(
[id] => 1
[krnazwanie] => САУ_КЦ
[plnazwanie] => Система автоматического управления
[slowa] => лбюбые
[opisanie] => Описание
[haracteristika] => характеристика тоже самое
[nazwobes] => назвобес
[nazkompl] => компдектаияфы
)

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 13:39)   письмо автору
 
   для: Blondy   (23.04.2010 в 09:20)
 

Вот, теперь еще раз прочитайте мой пост и действуйте =)

  Ответить  
 
 автор: Blondy   (23.04.2010 в 14:21)   письмо автору
 
   для: neadekvat   (23.04.2010 в 13:39)
 

Спасибо огромнейшее !!) Я не сразу поверила в это чудо- всё работает)) теперь бы не спугнуть)
и... можно поинтересоваться как до кучи привесить мои чекбоксы, вернее правильно ли я это делаю?)
вот в самом начале они на той же кнопке что и список:
<fieldset> 
    <legend>Информация о дополнительных модулях</legend>
    <input type="checkbox" name="luch[]" id="yes" value="11"/>Показать модули <p>
    <input type="checkbox" name="luch[]" id="no" value="12"/>Только базовый комплект<p></p>
    </fildset>


затем

$luch = mysql_real_escape_string($_POST['luch']);
 if ($luch == '11')
 $result =mysql_query("SELECT krnazwanie,kodkompl FROM komplekt WHERE krnazwanie = '$krit'",$gb);
$myrow = mysql_fetch_array($result);
while ($myrow = mysql_fetch_array ($result)) {
printf("
  <tr>
    <td>%s</td>
  </tr>
  <tr>
    <td>%s</td>
  </tr>
 ",$myrow['krnazwanie'],$myrow['kodkompl']);
}

  Ответить  
 
 автор: neadekvat   (23.04.2010 в 14:25)   письмо автору
 
   для: Blondy   (23.04.2010 в 14:21)
 

Если честно, то из кода не совсем понятно, что именно вы хотите сделать.

Чекбоксы - это когда можно несколько вариантов, или вам все-таки radio нужно?
И что именно и откуда и при каком условии вы собираетесь вытаскивать

А вообще лучше новую тему заводите, потому что
а) здесь уже и так много постов набралось
б) это все-таки "совсем другая история"

И не забудьте в новой теме расписать все подробно, что вам именно надо, откуда, куда и т.д.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования