ФорумПрограммированиеPHP для идиотов → выборка из БД

выборка из БД

  • Saimon

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 27 октября 2008 г. 12:19

    Доброго всем времени суток.

    Подскажите как такую выборку из БД присвоить как какой-нибудь переменной чтобы передать её на страницу?


    $sql = "SELECT * FROM $table_name where (mark='Tank')AND (model='Т34')";
    $query = mysql_query($sql,$link) or die();
    $n = mysql_num_rows($query);

    if ($n = = 0) {
    echo "<tr>";
    echo "<td colspan=6 align=center><p> раздел не заполнен! </td></tr>";
    }
    else {
    $i=0;
    while($i<$n)
    {
    $img=mysql_result($query,$i, "pic");
    $t_text=mysql_result($query,$i, "text");
    $nid=mysql_result($query,$i, "id");
    $art=mysql_result($query,$i, "articl");

    echo "<table border=1 cellpadding=0 cellspacing=0 width=570 align=center>";
    echo "
    <tr width=250 height=133><td> <img src='$img' width=250 height=133> </td>
    <td>
    <table border=1 cellpadding=0 cellspacing=0 width=320>
    <tr><td> $t_text </td></tr>
    <tr><td> $art </td></tr>
    </table>
    </td>
    </tr>";
    echo"<tr height=20><td></td><td></td></tr>";
    echo "</table>";
    $i++;
    }
    }

    заранее спасибо)
  • md5

    Сообщения: 11951 Репутация: N Группа: в ухо

    Spritz 27 октября 2008 г. 12:23, спустя 4 минуты 16 секунд

    $sql = mysql_query() …

    while ($row = mysql_fetch_assoc($sql)) {
    print_r($row);
    }
    все умрут, а я изумруд
  • Saimon

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 27 октября 2008 г. 14:30, спустя 2 часа 6 минут 18 секунд

    блиин

    нужно чтобы данные сюда попали

    $smarty -> assign('text', $text);

    $text- то есть я так понял их сюда надо присвоить
  • Saimon

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 27 октября 2008 г. 14:31, спустя 1 минуту 11 секунд

    я как не бюсь, выборка из базы велезает на странице где попало(
  • Professor

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 27 октября 2008 г. 14:56, спустя 25 минут 24 секунды

    Помоему ты немного не понимаеш чего хочеш.

    $smarty -> assign('text', $text); - Это шаблонизатор смарти. Тут cтатья про него есть. надо почитать.
    http://pyha.ru/articles/php/smarty-for-beginners/

    В общих чертак, как показал md5 надо что то типо этого

    $sql = mysql_query("SELECT name,id FROM table") 

    while ($row = mysql_fetch_array($sql))
     {
        $text[]=$row;
     }
    $smarty -> assign('text', $text);


    Это в выполняющем файле, а
    где вывести надо,
    там так

    <body>
    {$text.name}
    {$text.id}
    </body>
  • Saimon

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 27 октября 2008 г. 15:20, спустя 23 минуты 27 секунд

    что то я вообще понимать что либо перестал(((

    вот как у меня сейчас все выглядит:

    require($_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/libs/Smarty.class.php&#39;);
    $smarty = new Smarty();

    $link = mysql_connect($localhost, $mysql_user, $mysql_password);
    if(!$link) die(&#39;Не могу соединиться с MySQL&#39;);
    mysql_select_db($bd_name) or die(&#39;Не могу открыть $bd_name: &#39;.mysql_error());

    $query = &quot;SELECT * FROM $table_name where (mark=&#39;Q&#39;)AND (model=&#39;W&#39;)&quot;;
    $result = mysql_query($query);
    while ($row = mysql_fetch_assoc($result)) {
    echo &quot;&lt;table border=1 cellpadding=0 cellspacing=0 width=570 align=center>&quot;;
    echo &quot;&lt;tr>&lt;td>&lt;img src= $row[pic] width=250 height=133>&lt;/td>&lt;td>&quot;;

    echo &quot;&lt;table border=1 cellpadding=0 cellspacing=0 width=320>&quot;;
    echo &quot;&lt;tr>&lt;td> $row[tov_name] &lt;/td>&lt;/tr>&quot;;
    echo &quot;&lt;tr>&lt;td> $row[tov_text] &lt;/td>&lt;/tr>&quot;;
    echo &quot;&lt;tr>&lt;td> $row[tov_sena] &lt;/td>&lt;/tr>&quot;;
    echo &quot;&lt;tr>&lt;td> $row[articl] &lt;/td>&lt;/tr>&quot;;
    echo &quot;&lt;tr>&lt;td>&quot;;

    echo &quot;&lt;table border=0 cellpadding=5 cellspacing=0 width=320>&quot;;
    echo &quot;&lt;tr>&lt;td>&lt;input type=&#39;hidden&#39; name=&#39;id&#39; value=&#39;$nid&#39;>&lt;input type=&#39;submit&#39; name=&#39;norel&#39; value=&#39;в корзину&#39; readonly>&lt;/td>&lt;/tr>&quot;;
    echo &quot;&lt;/table>&quot;;

    echo &quot;&lt;/td>&lt;/tr>&quot;;
    echo &quot;&lt;/table>&quot;;
    echo &quot;&lt;/td>&lt;/tr>&quot;;
    echo &quot;&lt;tr height=20>&lt;td>&lt;/td>&lt;td>&lt;/td>&lt;/tr>&quot;;
    echo &quot;&lt;/table>&quot;;

    }
    mysql_free_result($result);

    $text=&#39; &#39;;


    $smarty->template_dir = $_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/templates&#39;;
    $smarty->compile_dir = $_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/templates_c&#39;;
    $smarty->cache_dir = $_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/cache&#39;;
    $smarty->config_dir = $_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/configs&#39;;
    $smarty -> assign(&#39;text&#39;, $text);
    $smarty->display (&#39;mainuslugi.tpl&#39;);
  • Professor

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 27 октября 2008 г. 17:06, спустя 1 час 46 минут 9 секунд

    Сильно не вдавался, но помоему ебе нужно так
    require($_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/libs/Smarty.class.php&#39;);
    $smarty = new Smarty();

    $link = mysql_connect($localhost, $mysql_user, $mysql_password);
    if(!$link) die(&#39;Не могу соединиться с MySQL&#39;);
    mysql_select_db($bd_name) or die(&#39;Не могу открыть $bd_name: &#39;.mysql_error());
    $text=&#39; &#39;;
    $query = &quot;SELECT * FROM $table_name where (mark=&#39;Q&#39;)AND (model=&#39;W&#39;)&quot;;
    $result = mysql_query($query);
    while ($row = mysql_fetch_assoc($result)) {
    $text.=&quot;<table border=1 cellpadding=0 cellspacing=0 width=570 align=center>&quot;;
    $text.=&quot;<tr><td><img src= &#39;&quot;.$row[pic].&quot;&#39; width=250 height=133></td><td>&quot;;

    $text.=&quot;<table border=1 cellpadding=0 cellspacing=0 width=320>&quot;;
    $text.=&quot;<tr><td> &quot;.$row[&#39;tov_name&#39;].&quot; </td></tr>&quot;;
    $text.=&quot;<tr><td> &quot;.$row[&#39;tov_text&#39;].&quot; </td></tr>&quot;;
    $text.=&quot;<tr><td> &quot;.$row[&#39;tov_sena&#39;].&quot; </td></tr>&quot;;
    $text.=&quot;<tr><td> &quot;.$row[&#39;articl&#39;].&quot; </td></tr>&quot;;
    $text.=&quot;<tr><td>&quot;;

    $text.=&quot;<table border=0 cellpadding=5 cellspacing=0 width=320>&quot;;
    $text.=&quot;<tr><td><input type=&#39;hidden&#39; name=&#39;id&#39; value=&#39;$nid&#39;><input type=&#39;submit&#39; name=&#39;norel&#39; value=&#39;в корзину&#39; readonly></td></tr>&quot;;
    $text.=&quot;</table>&quot;;

    $text.=&quot;</td></tr>&quot;;
    $text.=&quot;</table>&quot;;
    $text.= &quot;</td></tr>&quot;;
    $text.=&quot;<tr height=20><td></td><td></td></tr>&quot;;
    $text.=&quot;</table>&quot;;

    }
    mysql_free_result($result);

    $smarty->template_dir = $_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/templates&#39;;
    $smarty->compile_dir = $_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/templates_c&#39;;
    $smarty->cache_dir = $_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/cache&#39;;
    $smarty->config_dir = $_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/configs&#39;;
    $smarty -> assign(&#39;text&#39;, $text);
    $smarty->display (&#39;mainuslugi.tpl&#39;);


    Что то типа
  • AlexB

    Сообщения: 4288 Репутация: N Группа: в ухо

    Spritz 27 октября 2008 г. 17:24, спустя 18 минут 34 секунды

    Saimon, не может быть echo и assign одновременно.
    Либо ты выводишь данные через echo, тогда никакого Smarty быть не должно в принципе, либо отдаешь данные в шаблон и пользуешься методами шаблонизатора. Поэтому у тебя и получается где попало т.к. вывод сам по себе, а шаблонизатор сам по себе.

    То что написал Professor, в принципе может работать, но делать так не надо не в коем случае.
  • Professor

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 27 октября 2008 г. 18:09, спустя 45 минут 2 секунды

    но делать так не надо не в коем случае.

    Подтверждаю!
  • Saimon

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 28 октября 2008 г. 0:44, спустя 6 часов 34 минуты 44 секунды

    Так работает ТОЧНО проверил!!!

    Почему нельзя ??? И как можно сделать правильно???

    Я в Smarty новичок, да и в ПХП тоже, вот уже один сайт с принципиальным касяком есть (не правильно понял как Smarty работает)
  • Saimon

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 28 октября 2008 г. 0:49, спустя 4 минуты 44 секунды

    я на сколько понял данные надо в массив, а из массива в $text

    что вроде этого

    @$result = mysql_query(&quot;SELECT * FROM `news`&quot;);
    $cnt = 0;
    $arr_news = array ();

    while ($row = mysql_fetch_array ($result)) {
    $arr_news[$cnt][&#39;date&#39;] = $row[date];
    $arr_news[$cnt][&#39;text&#39;] = $row[text];
    $cnt++;
    }

    $smarty->assign(&#39;arr_news&#39;, $arr_news);

    $smarty->display(&#39;index.tpl&#39;);
  • sap

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 28 октября 2008 г. 2:27, спустя 1 час 37 минут 42 секунды

    Так работает ТОЧНО проверил!!!

    Почему нельзя ??? И как можно сделать правильно???


    Потому что нужно понимать, что такое шаблонизатор, и зачем он нужен. А нужен он для отделения бизнес-логики от вью-логики.
    В варианте, предложенным Professor-ом, они смешиваются. Если не понял, читать про MVC и шаблонизаторы, причем теорию.

    Правильно будет что-то вроде:
    $result = mysql_query(&quot;SELECT * FROM $table_name WHERE `mark`=&#39;Q&#39; AND `model`=&#39;W&#39;&quot;;);

    $data = array();

    while ($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
    }

    $smarty->assign(&quot;news_data&quot;, $data);

    И в темплейте что-то вроде:
    {foreach from=$news_data item=v}
    <table border=1 cellpadding=0 cellspacing=0 width=570 align=center>
    <tr><td><img src=&quot;{$v.pic}&quot; width=250 height=133></td><td>

    <table border=1 cellpadding=0 cellspacing=0 width=320>
    <tr><td>{$v.tov_name}</td></tr>
    <tr><td>{$v.tov_text}</td></tr>
    <tr><td>{$v.tov_sena}</td></tr>
    <tr><td>{$v.articl}</td></tr>
    <tr><td>
    {/foreach}

    Это если я правильно вспомнил синтаксис смарти, потому как это говно давно не использовал.
  • Professor

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 28 октября 2008 г. 5:36, спустя 3 часа 8 минут 56 секунд

    Все правильно. Как я и предлогал в первом сообщении))
  • Saimon

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 28 октября 2008 г. 16:41, спустя 11 часов 5 минут 49 секунд

    Спасибо все заработало

    Еще просьба, подскажите какие книги почитать на эту тему (Smarty и PHP), я еще только учусь.
  • md5

    Сообщения: 11951 Репутация: N Группа: в ухо

    Spritz 28 октября 2008 г. 16:56, спустя 14 минут 48 секунд

    сначала почитать про php,
    smarty ещё рано
    не понимаешь что должен передавать и куда и как это обрабатывать
    все умрут, а я изумруд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!