За последние 24 часа нас посетили 16402 программиста и 1670 роботов. Сейчас ищут 937 программистов ...

вывод по одному имени. обновил страницу - выводит следующею

Тема в разделе "PHP и базы данных", создана пользователем 3ay4ka, 20 сен 2014.

  1. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    У меня есть таблица кандидатов, которые содержат:

    Можно их вывести по одному (допустим по id, до последнего), и по нажатию той или иной кнопки (в скрине лайк или дислайк) он отбрасывает обратно на ту же страницу, но выводит уже следующего кандидата?

    [​IMG]


    Вот тут например он выводит по факультету, в алфавитном порядке, и по нажатию лайка он записывает имя студента (перед этим стоял логин), имя/фамилию кандидата, ии если нажал лайк, то записывает лайк, дислайк - значит дислайк

    И ПОСЛЕ ОБРАБОТКИ ОН ВОЗВРАЩАЕТ ОБРАТНО, НО ВЫВОДИТ УЖЕ СЛЕДУЮЩЕЕ ИМЯ?

    Простите если повторяюсь,
    просто очень хочу сделать эту запись,
     
  2. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Что-то типа такого http://binom.u-gu.ru/0.php ? Нажал на кнопку получил следующую запись?
    Да, можно. Можно с обновлением страницы, можно без обновления страницы (ajax).
    Следует инкрементировать значение переменной и возвращать увеличенное значение пользователю.
    Например в поле hidden
    ++$i;
    <input type="hidden" name="i" value="<?=$i;?>">
    При запросе к mysql следует устанавливать в limit '.$i.', 1'
    Например так:

    $res = mysql_query('select * from news order by id desc limit '.$i.', 1' ) or die('error!');

    Вариант с ajax:
    http://binom.u-gu.ru/ajax.php

    Увеличивать переменную можно с помощью JavaScript и просто передавать методом GET, таким образом: xmlHttp.open("GET", "index.php?page="+i++, true);
     
  3. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

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

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Если будут затруднения, напишите, я просто сброшу вам весь код.
     
  5. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

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


    иии этот весь код, он должен стоять при выводе?

    просто по нажатию лайка/дислайка он отправляет в другой файл, где записывает в базу нужную информацию
    и с этого файла обратно на первый,

    Код (Text):
    1. <a href="plus.php?plus=<?php echo $candidate_id; ?>"><img src="images/like.png" /></a>
    вот как он отсылает
     
  6. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Без ajax.

    Код (Text):
    1.  
    2.  <?
    3. ++$i; ##Инкремент
    4. $c=$i-1; ##Переменная для подстановки в sql запрос
    5.  require_once 'admin/config.php';
    6.   mysql_connect(HOST, USER, PASSWORD) or die('error! No Connection!');
    7.    mysql_query("SET NAMES utf8");
    8.     mysql_select_db(NAME_BD) or die('error! Check BD connection'); 
    9.  $res = mysql_query('select * from  news order by id desc limit '.$c.',  1' ) or die('error!');
    10. $row = mysql_fetch_array($res);
    11. #Если вывод пустой, сбросить счетчик
    12.  if(empty($row['head'])) {
    13. $i=0;
    14. }
    15. ?>
    16. <form method="get">
    17. <input type="hidden" name="i" value="<?=$i;?>">
    18.  <input type="submit" value="Show News">
    19.   </form>
    20.  
    21. <?=$row['head']?>
    22. <?=$row['date']?>
    23. <?=nl2br($row['text'])?>
    Я думаю, сумеете перепилить под свои нужды.
     
  7. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

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

    и вот первый вопрос:

    Код (Text):
    1. ++$i; ##Инкремент
    изначально $i чему равен?

    Код (Text):
    1. $res = mysql_query('select * from candidate order by candidate_id desc limit '. $c .',  1' ) or die('error!');

    что берет $c?

    и самое главное
    можно ли сделать в одной форме два баттана
    тоесть,
    если плюс, он отсылает на один файл,
    если минус, он отсылает на другой файл,
    записывает этого кандидата ии значение +, что он за него

    и возвращает обратно на этот файл, выводя уже следующего кандидата

    как в скрине

    [​IMG]
     
  8. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Изначально i=1, ноль теряем. Чтобы вернуть 0 вводим вторую переменную с=i-1. И c=0, ее в запрос. В запросе в limit $c, 1 - это значит начать вывод с 0 значения по 1 записи (0 будет при первой загрузке). Может быть, можно по другому определять переменные, но сути это не меняет.

    Безусловно можно сделать две кнопки с разными именами:
    <form>
    <input type=submit name=name1>
    <input type=submit name=name2>
    </form>
    Далее проверять с помощью isset
    Если установлена переменная name1
    Тогда одни действия
    Если установлена другая name2
    Какие-то иные действия (допустим, декремент)

    https://php.net/manual/ru/language.operators.increment.php
     
  9. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

    $res = mysql_query('select * from candidate order by candidate_id desc limit '. $c .', 1' ) or die('error!');

    можно объяснить эту часть?

    Код (Text):
    1. <form method="get">
    2.     <input type="hidden" name="i" value="<?=$i;?>">
    3. </form>
    а этот код, почему метод именно get
    type="hidden"
    name="i"
    value="<?=$i;?>"
    может я туплю,
    за это дико извиняюсь
    но как мне это поможет вывести другого кандидата? :сс

    Код (Text):
    1. <?=$row['date']?>
    2. <?=nl2br($row['text'])?>
    ии почему тут nl2br?
     
  10. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Не обращайте внимания ни на переменную $c, ни на остальные конкретные вещи в скрипте, скрипт вырван из конкретного контекста. Ваша задача, как я понял: нажать на ссылку, поставить кому-то лайк и вывести другого кандидата. В общем случае решается так, для примера:
    <?
    ##i равно 1 при первой загрузке, первая запись
    ++$i;
    ##вывод кандидата из базы, выводим первого.
    $resault = mysql_query('select * from candidate order by candidate_id desc limit '. $i .', 1' );
    Тут ваши данные для вывода, я не знаю, как у вас там организовано.
    echo "something";
    ?>
    Допустим, ниже после скрипта кнопка, у меня в том случае указан метод get, можно его убрать, запрос все равно get по умолчанию. Можете поставивть post.
    <form>
    <input type="hidden" name="i" value="<?=$i;?>">
    <input type="submit" value="Show News">
    </form>
    В поле hidden после первой загрузки будет значение 1. Можете проверить заменив hidden на text,
    Нажали на кнопку, передали переменную name="i", значение получило инкремент 2, и оказалось в запросе к базе,
    получили вывод второго кандидата, поле hidden получило значение 2, опять нажали, получили 3 и т.д.

    Далее уже ваша конкретная реализация: действия, если нажали dislike, действия если нажали like - еще какой-то запрос к базе для записи какого-то значения.
    Какие-то условия и на их основе какой-то вывод.
     
  11. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

    Код (Text):
    1. <table width=600 border="0">
    2.         <tr style="font-weight: bold; font-size: 20px;">
    3.             <th>Name</th>
    4.             <th>Surname</th>
    5.             <th>Faculty</th>
    6.             <th>+ / -</th>
    7.         </tr>
    8.  
    9. <?php
    10.     $i = 0;
    11.     ++$i; ##Инкремент
    12.      require_once "connectme.php";
    13.  
    14.     $res = mysql_query("SELECT * FROM candidate ORDER by candidate_id") or die('error!');
    15.     $row = mysql_fetch_array($res);
    16.  
    17.     #Если вывод пустой, сбросить счетчик
    18.     if(empty($row['candidate_name']))
    19.     {
    20.         $i=0;
    21.     }
    22. ?>
    23.         <tr>
    24.             <th><?=$row['candidate_name']?></th>
    25.             <th><?=$row['candidate_surname']?></th>
    26.             <th><?=$row['candidate_faculty']?></th>
    27.             <th>
    28.                 <form method="get">
    29.                     <input type="text" name="plus" value="<?=$i;?>">
    30.                     <input type="submit" value="+" id="like">
    31.                 </form>
    32.                 <form method="get" action="minus.php">
    33.                     <input type="hidden" name="minus" value="<?=$i;?>">
    34.                     <input type="submit" value="-" id="like">
    35.                 </form>
    36.             </th>
    37.         </tr>
    38.      </table>
    вот мой код,
    если сначала $i=1, то он сразу делает инкремент и уже второе значение,

    проверил заменив hidden на text,


    дальше, обработка,

    Код (Text):
    1.  
    2. <form method="get">
    3.     <input type="text" name="plus" value="<?=$i;?>">
    4.     <input type="submit" value="+" id="like">
    5. </form>
    6.  
    7. <form method="get" action="minus.php">
    8.     <input type="hidden" name="minus" value="<?=$i;?>">
    9.     <input type="submit" value="-" id="like">
    10. </form>
    в первой форме он обрабатывает в том же файле, просто я после всего HTML написал

    Код (Text):
    1. if(isset($_GET['plus']))
    2. {
    3.  
    4.     $id = $_GET['plus'];
    5.     $res = mysql_query("SELECT * FROM candidate WHERE candidate_id='$id'") or die('error!');
    6.     $row = mysql_fetch_array($res);
    7.  
    8.         $candidate_id = $row['candidate_id'];
    9.         $candidate_name = $row['candidate_name'];
    10.         $candidate_surname = $row['candidate_surname'];
    11.         $candidate_faculty = $row['candidate_faculty'];
    12.         $sqlb = mysql_query("INSERT INTO voting_results (`student_name`, `candidate_name`, `candidate_surname`, `candidate_faculty`, `result_value`)
    13.         VALUES ('$_SESSION[student_name]', '$row[candidate_name]', '$row[candidate_surname]', '$row[candidate_faculty]', '+')") or die (mysql_error());
    14. }

    правильная ли у меня обработка?
    ии как лучше, чтоб он перекидывал на другой файл ( plus.php иminus.php ) или в конце прописать if(isset... как я сделал на первой форме??

    ии он мне все равно выводит только первого чувака,
    тоесть не делает инкремент на ИД

    я Вам наверное уже надоел,
    и простиите,
    ноо этот вывод по одному иии запись лайка/дислайка мне очень нужен,
    На данный момент даже воздух так сильно не нуженн
     
  12. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Если вы ставите так в скрипте $i=0; потом инкремент ++$i;, при выполнении скрипта, во всех последующих перезагрузках страницы вы получите одно и то же значение переменной $i.
    Код (Text):
    1. <?php
    2.    $i = 0;
    3.    ++$i; ##Инкремент
    4.     require_once "connectme.php";
    Добавлено спустя 3 минуты 31 секунду:
    Re: вывод по одному имени. обновил страницу - выводит следующею
    Нет, неправильная
    <?php
    ++$i; ##Инкремент
    require_once "connectme.php";

    $res = mysql_query("SELECT * FROM candidate ORDER by candidate_id limit '. $i .', 1'") or die('error!');
    $row = mysql_fetch_array($res);
     
  13. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

    если так, то у меня выдает ошибку:

    Notice: Undefined variable: i in C:\xampp\htdocs\evoting\evote.php on line 50
    error!
    а в 50 у меня икремент ++$i;
     
  14. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Я не заметил, в каких у вас кавычках select, в одинарных попробуйте:
    Код (Text):
    1. $res = mysql_query('SELECT * FROM candidate ORDER by candidate_id limit '. $i .', 1') or die('error!');
     
  15. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

    уже перед изменил,
    все равно эта ошибка


    [​IMG]

    вот как выглядит

    и еще он записывает первого участника(ИД 1), а выводит второго (с ИД 2)

    может у меня сама форма не правильная?

    Код (Text):
    1.     <form method="get">
    2.         <input type="text" name="plus" value="<?=$i;?>">
    3.          <input type="submit" value="+" id="like">
    4.     </form>
     
  16. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Notice это не ошибка, а замечание, что переменная не проинициализирована. В начале скрипта
    $i=$_GET['i'];

    И здесь вы опять просто вывели кандидата ничего не указав в limit, вообще не указав limit
    $res = mysql_query("SELECT * FROM candidate WHERE candidate_id='$id'") or die('error!');

    Разберитесь заодно, в каком скрипте у вас что лежит.
    action="minus.php"
    Только вы знаете, как организован у вас код.
     
  17. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

    Notice: Undefined index: i in C:\xampp\htdocs\evoting\evote.php on line 50

    ВЫВОД
    Код (Text):
    1. <table width=600 border="0">
    2.         <tr style="font-weight: bold; font-size: 20px;">
    3.             <th>Name</th>
    4.             <th>Surname</th>
    5.             <th>Faculty</th>
    6.             <th>+ / -</th>
    7.         </tr>
    8.  
    9. <?php
    10.  
    11. $i = $_GET['i'];
    12.     ++$i; ##Инкремент
    13.      require_once "connectme.php";
    14.  
    15.     $res = mysql_query('SELECT * FROM candidate ORDER by candidate_id limit '. $i .', 1') or die('error!');
    16.     $row = mysql_fetch_array($res);
    17.  
    18.     #Если вывод пустой, сбросить счетчик
    19.     if(empty($row['candidate_name']))
    20.     {
    21.         $i=0;
    22.     }
    23. ?>
    24.         <tr>
    25.             <th><?php echo $row['candidate_name']; ?></th>
    26.             <th><?php echo $row['candidate_surname']; ?></th>
    27.             <th><?php echo $row['candidate_faculty']; ?></th>
    28.             <th>
    29.                 <form method="get">
    30.                     <input type="hidden" name="plus" value="<?=$i;?>">
    31.                     <input type="submit" value="+" id="like">
    32.                 </form>
    33.                 <form method="get">
    34.                     <input type="hidden" name="minus" value="<?=$i;?>">
    35.                     <input type="submit" value="-" id="like">
    36.                 </form>
    37.             </th>
    38.         </tr>
    39.      </table>
    ПЛЮС
    Код (Text):
    1. if(isset($_GET['plus']))
    2. {
    3.  
    4. $i = $_GET['plus'];
    5.     //$id = $_GET['plus'];
    6.  
    7.     $res = mysql_query('SELECT * FROM candidate limit '. $i .', 1') or die('error!');
    8.  
    9.     $row = mysql_fetch_array($res);
    10.  
    11.         $candidate_id = $row['candidate_id'];
    12.         $candidate_name = $row['candidate_name'];
    13.         $candidate_surname = $row['candidate_surname'];
    14.         $candidate_faculty = $row['candidate_faculty'];
    15.         $sqlb = mysql_query("INSERT INTO voting_results (`student_name`, `candidate_name`, `candidate_surname`, `candidate_faculty`, `result_value`)
    16.         VALUES ('$_SESSION[student_name]', '$row[candidate_name]', '$row[candidate_surname]', '$row[candidate_faculty]', '+')") or die (mysql_error());
    17. }
    МИНУС
    Код (Text):
    1. if(isset($_GET['minus']))
    2. {
    3.  
    4.     $i = $_GET['minus'];   
    5.     //$id = $_GET['plus'];
    6.  
    7.     $res = mysql_query('SELECT * FROM candidate limit '. $i .', 1') or die('error!');
    8.  
    9.     $row = mysql_fetch_array($res);
    10.    
    11.         $candidate_id = $row['candidate_id'];
    12.         $candidate_name = $row['candidate_name'];
    13.         $candidate_surname = $row['candidate_surname'];
    14.         $candidate_faculty = $row['candidate_faculty'];
    15.         $sqlb = mysql_query("INSERT INTO voting_results (`student_name`, `candidate_name`, `candidate_surname`, `candidate_faculty`, `result_value`)
    16.         VALUES ('$_SESSION[student_name]', '$row[candidate_name]', '$row[candidate_surname]', '$row[candidate_faculty]', '-')") or die (mysql_error());
    17.  
    18. }  

    может проще мне скинуть весь архив и Вы сами посмотрите почему такая лажа?;с
     
  18. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Кидайте
     
  19. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

    отправил в личное сообщение
     
  20. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    217
    Симпатии:
    4
    Re: вывод по одному имени. обновил страницу - выводит следую

    Попробуй так тогда, чтобы убрать предупреждение:
    Код (Text):
    1.  if (isset($_GET['i'])) {
    2.    ++$i;
    3. $c=$i-1;
    4.  
    5. } else {
    6.       $i=0;
    7.     $c=$i;
    8. echo $i;
    9. }
     
  21. 3ay4ka

    3ay4ka Новичок

    С нами с:
    19 сен 2014
    Сообщения:
    27
    Симпатии:
    0
    Re: вывод по одному имени. обновил страницу - выводит следую

    спасибо, проблему решил,
    нашел другой способ с ajax
    еще раз спасибо <3