2014-01-26 2 views
-1

Я новичок и все еще изучаю php & mysql. Искать весь день и пробовать разные учебники, но ничего не происходит. Пока у меня есть только то, с чем я извлекаю текст из своей БД. Как я могу сделать предыдущие и следующие кнопки здесь?Кнопки Prev и Next

if($q = mysqli_query($con, 'SELECT * FROM joke WHERE `id` = ' . mysqli_real_escape_string($con,$_GET['id']))){ 
    if($row = mysqli_fetch_array($q)){ 
     echo nl2br($row['text']); 
     echo '<div id="data">Date ' . $row['date'] . "</div>'; 
    } else { 
     echo 'Not found'; 
    } 
} else { 
    echo mysqli_error($con); 
} 

echo "</div>"; 
$query = "select * from joke order by RAND() LIMIT 1"; 
$result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con)); 
while ($row = mysqli_fetch_array($result, MYSQL_BOTH)){ 
    echo '<a href="single.php?id='.$row['id'].'"class="random">Random</a>'; 
} 
+0

Что вы ищете, это разбиение на страницы. Есть много много учебников с примерами. Если один из них запутан, отправьте его здесь и сообщите нам, что вы не понимаете. – sachleen

+0

После прочтения учебника для разбивки на страницы я бы посмотрел подготовленные операторы (http://stackoverflow.com/questions/8263371/how-prepared-statements-can-protect-from-sql-injection-attacks) в качестве функции mysql_real_escape_string не рекомендуется. – Dan

+0

Спасибо, что указали мне, что именно искать и читать. – Gordon

ответ

1

, если я вас правильно понял вы хотите отобразить следующую и предыдущую шутку на основе идентификатора,
так что вы хотите, чтобы выбрать макс (ID) из анекдота, где идентификатор < текущий идентификатор
и ... выберите min (id) из шутки, где id> текущий идентификатор

$currentId = mysqli_real_escape_string($con,$_GET['id']); 
if($q = mysqli_query($con, 'SELECT *, 
(SELECT IFNULL(max(id),-1) FROM joke WHERE `id` < '.$currentId.') as previousid, 
(SELECT IFNULL(min(id),-1) FROM joke WHERE `id` > '.$currentId.') as nextid 
    FROM joke WHERE `id` = ' . $currentId)){ 
    if($row = mysqli_fetch_array($q, MYSQL_BOTH)){ 
     echo nl2br($row['text']); 
     echo '<div id="data">Date ' . $row['date'] . '</div>'; 
     if ($row['previousid'] > -1){ 
      echo '<a href="single.php?id='.$row['previousid'].'"class="random">Previous</a>'; 
     } 
     if ($row['nextid'] > -1){ 
      echo '<a href="single.php?id='.$row['nextid'].'"class="random">Next</a>'; 
     } 
    } else { 
     echo 'Not found'; 
    } 
} else { 
    echo mysqli_error($con); 
} 

echo "</div>"; 
$query = "select * from joke order by RAND() LIMIT 1"; 
$result = mysqli_query($con, $query) or die("Query failed: " . mysqli_errno($con)); 
while ($row = mysqli_fetch_array($result, MYSQL_BOTH)){ 
    echo '<a href="single.php?id='.$row['id'].'"class="random">Random</a>'; 
} 
+0

Отлично! Еще один вопрос: когда есть первый элемент, есть кнопка 'prev', и когда я нажимаю, я получаю ошибку' У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее вашей версии сервера MySQL, для правильный синтаксис для использования рядом ') в качестве предыдущего, (SELECT min (id) FROM joke WHERE 'id'>) как nextid FROM jok' в строке 2'. То же самое с последним элементом и кнопкой' next'. Любая идея, как исправить это? – Gordon

+0

Да, потому что, когда вы находитесь в первом элементе или последнем элементе, предыдущий будет равен NULL, или nextID будет равен NULL соответственно, вы можете использовать 'IFNULL (max (id), defaultValueHere)' вместо 'max (id) ', вы можете захотеть по умолчанию использовать juse к вашему течению, это одно возможное решение. Другое решение - это 'IFNULL (max (id), - 1)', затем проверьте, не является ли предыдущий -1, и не отбрасывайте предыдущую кнопку. –

+0

что может быть 'defaultValueHere' в этом случае. Как его получить? – Gordon

Смежные вопросы