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

Форум MySQL

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

 

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

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

тема: Из базы в select
 
 автор: itch   (01.02.2010 в 16:28)   письмо автору
 
 

У меня возникла проблема. Не получается вывести список фамилий из базы в селектор делал вот так
<!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=windows-1251" />
<title>Документ без названия</title>


<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<?php 
$db 
mysql_connect ("localhost""admin""12345");
mysql_select_db "testfs"$db);
$result mysql_query ("SELECT  lastname  FROM students   ",$db ); 
$myrow mysql_fetch_array ($result); 
$a $myrow ["lastname"]; 
echo 
$a;
?>

<table class=" table1" align="center" width="400" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td>
   
        
    <form class="form1" id="form1" name="form1" method="post" action="test.php">
<select name="1111" size="1">
<?php  
do {
         
printf (
        
"<option name='lastname' value='<?php $a ?>' ><?php echo '$a'; ?></option>"
        
,$myrow ["lastname"]);
         }
         while (
$myrow mysql_fetch_array ($result));?>
        
</select>
<input name="logogo" type="submit" value="Продолжить" ></input >
</form>
    </td>
  </tr>
</table>


</body>
</html>

В итоге селектор пуст. Хотя выборка из базы раьотает проверено
Помогите пожалуйста

  Ответить  
 
 автор: Рома   (01.02.2010 в 16:41)   письмо автору
 
   для: itch   (01.02.2010 в 16:28)
 

используйте while вместо do while, и fetch_assoc вместо fetch_array. И у вас все должно получиться

  Ответить  
 
 автор: tvv123456   (01.02.2010 в 19:08)   письмо автору
 
   для: Рома   (01.02.2010 в 16:41)
 

>используйте while вместо do while, и fetch_assoc вместо fetch_array. И у вас все должно получиться

Я что-то сомневаюсь что проблема именно в этом, хотя совет полезный(на будущее)
к тому же do while здесь оправдан так как автор 2 раза выводит 1 вытащенную строку

Обратите внимание на этот кусочек кода:

<?php   
do { 
         
printf 
        
"<option name='lastname' value='<?php $a ?>' ><?php echo '$a'; ?></option>" 
        
,$myrow ["lastname"]); 


Я точно не уверен, но помоему что=то тут не так, (хотя бы <?php ......<?php .....?> ..... - вроде что-то не то да и echo внутри printf я не разу не видел

Вообще правильнее думаю будет так:

<?php   
do { 
         
printf 
        
"<option name='lastname' value='%s' >%s</option>" ,$a,$a);
..............

  Ответить  
 
 автор: itch   (01.02.2010 в 21:54)   письмо автору
 
   для: tvv123456   (01.02.2010 в 19:08)
 

спасибо %s исправил я на этот момент ,но вот это не работает value='%s' да и вообще пробую валуе задавать цифрами и всё равно не передаёт

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 01:11)   письмо автору
 
   для: itch   (01.02.2010 в 21:54)
 

Вы покажите как и что вы исправили, и заодно посмотрите что написал вам t3ma , обработка не прошедшего запроса к базам и прочее, очень полезная вещь. Правда там я бы лучше стыковку использовал. Мне не нравиться когда тупо переменные в кавычки echo беруться

  Ответить  
 
 автор: Trianon   (02.02.2010 в 01:24)   письмо автору
 
   для: tvv123456   (01.02.2010 в 19:08)
 

>к тому же do while здесь оправдан так как автор 2 раза выводит 1 вытащенную строку

Автор её по ошибке дважды выводит. По ошибке, спровоцированной применением do_while

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:10)   письмо автору
 
   для: Trianon   (02.02.2010 в 01:24)
 

По чему по ошибке? примерчик:

<tr><td>лучший ученик там тыры пыры</td></tr>

что то тут еще идет  куча всякой ерунды
проголосуйте за ученика
<select ....>
<option...>
и так далее тут 
но вот ту был бы полезен do
делаем первый вывод такой же как и при первом выводе(слава do))(можем же мы голосовать за чувака который пока всех опережает)
а дальше цикл


Думаю автор тут не привел всех критериев зарпоса

  Ответить  
 
 автор: Trianon   (02.02.2010 в 02:14)   письмо автору
 
   для: tvv123456   (02.02.2010 в 02:10)
 

да, верно.
Дважды применен mysql_fetch_*
все равно на конюшню в ближайшую субботу.

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:17)   письмо автору
 
   для: Trianon   (02.02.2010 в 02:14)
 

НУ я бы не сказал что дважды. Все-таки цыкл :)) А насчет того что автор 2 массива тащит(цифровой и ассоциативный) это его проблемы к то му же про это уже написали

  Ответить  
 
 автор: Trianon   (02.02.2010 в 02:25)   письмо автору
 
   для: tvv123456   (02.02.2010 в 02:17)
 

Дважды.
один раз в строке $myrow = mysql_fetch_array ($result);
второй - в строке while ($myrow = mysql_fetch_array ($result));?>
А значит можно в одной из строк сделать трудноуловимую ошибку.

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:27)   письмо автору
 
   для: Trianon   (02.02.2010 в 02:25)
 

Но этого же требует структура сайта
если бы не do, то все равно цикл бы сделал бы этот круг но(если убрнать ду) на один шаг больше? Разве не так?

  Ответить  
 
 автор: Trianon   (02.02.2010 в 02:34)   письмо автору
 
   для: tvv123456   (02.02.2010 в 02:27)
 

послушайте.
проход по резалтсету должен выполняться либо так:
$sql = "SELECT ...";
$res = mysql_query($sql);
while($row = mysql_fetch_assoc($row))
{
   // $row
}

либо так:
$sql = "SELECT ...";
$res = mysql_query($sql);
for(;$row = mysql_fetch_assoc($row);)
{
   // $row
}



и никак иначе.

Контролем ошибок и наличия записей можно разбавить. но и только.

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:36)   письмо автору
 
   для: Trianon   (02.02.2010 в 02:34)
 

Но как сделать структуру показанную выше
нужно одну и туже строку из базы вывести 2 раза в разных местах?

  Ответить  
 
 автор: Trianon   (02.02.2010 в 02:42)   письмо автору
 
   для: tvv123456   (02.02.2010 в 02:36)
 

Очень надуманный пример.
По-моему, для этого более корректно выполнить либо отдельный захват строки вне цикла и последующий mysql_data_seek()
$sql = "SELECT ...";
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res)
//$row
mysql_data_seek($res, 0);
while($row = mysql_fetch_assoc($res))
{
   // $row


либо сделавть условную вставку в составной оператор.

$sql = "SELECT ...";
$res = mysql_query($sql);
while($row = mysql_fetch_assoc($res))
{
   if($i == 0) 
   {
       // $row
       $i = 1;
   }
   // $row


Хотя.. может и вправду do_while оправдан здесь.
Просто он настолько задолбал, там где его не надо нахрен, что стойку на него делаешь уже на полном автомате.

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:46)   письмо автору
 
   для: Trianon   (02.02.2010 в 02:42)
 

>Просто он настолько задолбал, там где его не надо нахрен, что стойку на него делаешь уже
>на полном автомате.
:)))))))))

есть чуток
Хотя же по идее do сам по себе относително безобиден(если не применять там супер стили) так что. Все равно нужно делать проверки на не пустоту первой строки.

А на счет mysql_data_seek() полезно, но в данном случае do помогает обойтись и без нее.

  Ответить  
 
 автор: t3ma   (01.02.2010 в 19:45)   письмо автору
 
   для: itch   (01.02.2010 в 16:28)
 

<?php 
$db 
mysql_connect ("localhost""admin""12345");
 if (!
$db) {
        echo 
"Unable to connect to DB: " mysql_error();
        exit;
    }

if (!
mysql_select_db("testfs")) {
        echo 
"Unable to select mydbname: " mysql_error();
        exit;
    }

$sql mysql_query("SELECT * FROM students"); 
   or die(
"Could not query:" mysql_error());

   while (
$row mysql_fetch_assoc($sql)) {
            echo 
"<option name='lastname' value='$row[lastname]'>$row[lastname]</option>";
   }
?>

  Ответить  
 
 автор: tvv123456   (01.02.2010 в 21:13)   письмо автору
 
   для: t3ma   (01.02.2010 в 19:45)
 

Все сделано здорово, но думаю пусть человек сначала разбереться с PRINTF() :)))))))))))))))))))

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

  Ответить  
 
 автор: Trianon   (02.02.2010 в 01:21)   письмо автору
 
   для: tvv123456   (01.02.2010 в 21:13)
 

Так указывайте. В ответе t3ma такая есть.

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 01:57)   письмо автору
 
   для: Trianon   (02.02.2010 в 01:21)
 

Я не вижу ошибки :) Единственное что я использую)(когда echo использую) стыковку через точку и соответственно кавычки проставляю в массивах типа $row['name'], но это вроде как не ошибка. Просто разные системы подхода.

Можно подсказку плиз

  Ответить  
 
 автор: Trianon   (02.02.2010 в 02:11)   письмо автору
 
   для: tvv123456   (02.02.2010 в 01:57)
 

подсказка. Сказав Connect и сказав select_db нужно обязательно сказать еще одну фразу.
Её можно опустить, как подразумевающуюся. Но тогда лучше опустить и первые две.

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:15)   письмо автору
 
   для: Trianon   (02.02.2010 в 02:11)
 

У меня на ум лезет только определение кодировки, но я этим никогда не пользовался(всегда все работало отлично)

Думаю все сдадуться. Можно ответ услышать :))))))))))))

а с точкой с запятой нет проблем(см.ниже)?

  Ответить  
 
 автор: Trianon   (02.02.2010 в 02:27)   письмо автору
 
   для: tvv123456   (02.02.2010 в 02:15)
 

>У меня на ум лезет только определение кодировки, но я этим никогда не пользовался(всегда все работало отлично)
Оно и есть.
Работает оно отлично только если SET NAMES в INIT_CONNECT прописан.
А если нет - огребете проблем с миграцией при первом же импорте / экспорте.

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:29)   письмо автору
 
   для: Trianon   (02.02.2010 в 02:27)
 

>Работает оно отлично только если SET NAMES в INIT_CONNECT прописан.
Извините, но когда делаешь инсталятор для сайта то при создании базы это в первую очередь идет или не так?

  Ответить  
 
 автор: Trianon   (02.02.2010 в 02:31)   письмо автору
 
   для: tvv123456   (02.02.2010 в 02:29)
 

при чем тут создание?
SET NAMES должен выполняться после каждого коннекта!

Сколько тут уже таких страдальцев перебывало.

Ой, у меня все работало, стал переходить на другой хостинг / пытаться забрать копию домой / менять тарифный план - и откуда ни возьмись кракозяблики/вопросики!
Ой, а куда же данные делись?
Ой, спасите помогите!

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:34)   письмо автору
 
   для: Trianon   (02.02.2010 в 02:31)
 

Согласен, но это проблемы не создателя сайта, вы уж извините, но у меня один раз на виндовском сервере вообще не было не utf-8 ни cp=1251 и я им долго обьяснял что не могу переделать сайт под ISO. И что в итоге? они извинились и я обошолся только 1251

Извините за обилие граммотических ошибок :))))

  Ответить  
 
 автор: Trianon   (02.02.2010 в 02:36)   письмо автору
 
   для: tvv123456   (02.02.2010 в 02:34)
 

что за iso?
и при чем тут кодировка сайта?
Речь о том, чтобы в БД лежали данные в той кодировке, которой помечены.

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:41)   письмо автору
 
   для: Trianon   (02.02.2010 в 02:36)
 

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

Вопрос не по теме: подскажите плиз прогу где я могу увидеть первый бит(который зараза) не виден в других текстовых прогах(а то задрали меня уже все с этим первым битом когда конфиг настраивают)
я про ошибку: мы не можем послать хедеры так как они ушли в первом бите конфиг файла

  Ответить  
 
 автор: tvv123456   (02.02.2010 в 02:00)   письмо автору
 
   для: Trianon   (02.02.2010 в 01:21)
 

вы про точку с запятой в конце первой строки ниже приведенного кода?
$sql = mysql_query("SELECT * FROM students");  
   or die("Could not query:" . mysql_error()); 

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

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