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

выборка из БД

  • Saimon

    Сообщения: 76 Репутация: 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

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

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

    $sql = mysql_query() …

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

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

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

    блиин

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

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

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

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

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

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

    Сообщения: 2089 Репутация: 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

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

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

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

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

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

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

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

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

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

    echo "</td></tr>";
    echo "</table>";
    echo "</td></tr>";
    echo "<tr height=20><td></td><td></td></tr>";
    echo "</table>";

    }
    mysql_free_result($result);

    $text=' ';


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

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

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

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

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

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

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

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

    }
    mysql_free_result($result);

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


    Что то типа
  • AlexB

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    $smarty->display('index.tpl');
  • sap

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

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

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

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


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

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

    $data = array();

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

    $smarty->assign("news_data", $data);

    И в темплейте что-то вроде:
    {foreach from=$news_data item=v}
    <table border=1 cellpadding=0 cellspacing=0 width=570 align=center>
    <tr><td><img src="{$v.pic}" 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

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

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

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

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

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

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

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

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

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

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

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