Någon kunnig på PHP och SQL satser?
- gnagis
- Inlägg: 947
- Blev medlem: 25 juli 2004, 00:29
- Bil: Civic X
- Namn: Daniel Svensson
- Ort: Karlstad
- Been thanked: 6 times
- Kontakt:
vill få dit så det går att klicka "nästa sida" och "föregående sida" så inte alla inlägg på gästboken visas på samma sida [img]http://www.hondaklubben.com/forum/style ... /smile.gif[/img]
koden:
då det inte är jag som gjort scriptet utan det är en kompis... men inte heller han vet hur han ska kirra det så sitter vi lite fast... någon som vet? har frågat på irc kanaler men där är dom bara otrevliga och tror mig inte typ att jag inte förstår hur ja ska göra...
koden:
Kod: Markera allt
<?
guestbook = new Comment (DB_USERS_TABLE, DB_GUESTBOOKS_TABLE);
if (isset(_POST['savegb']))
{
if (strlen(_POST['message']) > 4)
{
guestbook->set ('owner', _GET[user]);
guestbook->set ('author', login->getUserId ());
guestbook->set ('text', _POST [message]);
guestbook->write ();
unset(_POST['message']);
}
else
get_error("Du måste minst skriva 5 tecken i ett inlägg!");
}
if (isset(_GET['remove']))
{
guestbook->load(_GET['remove']);
if (guestbook->get('author') == login->getUserId () || guestbook->get ('owner') == login->getUserId () || privs->ownPrivs (array (PRIV_GUESTBOOK_ALTER)))
guestbook->delete (_GET['remove']);
}
if (isset(_GET['user']) && _GET['user'] != login->getUserId())
uId = _GET['user'];
else
uId = login->getUserId();
if (profile->load(uId))
{
guestbook_load = guestbook->loadComments (uId);
data = profile->load(uId);
if (data->activated == Y)
{
include("pages/cm/tpl/guestbook_tpl.php");
echo "<table width="100%" border="0" cellpadding="3" cellspacing="0">";
if (!empty(guestbook_load[0]->text))
{
for (i = 0; i < count (guestbook_load); i++)
{
if (i%2)
bgcolor = "#DFE8FF";
else
bgcolor = "#FFFFFF";
modify_string = (login->getUserId () == guestbook_load [i] ->owner || login->getUserId () == guestbook_load[i]->author || privs->ownPrivs (array (PRIV_GUESTBOOK_ALTER))) ? ' <b>-></b> <a href="javascript:Confirm('Är du säker på att du vill ta bort inlägget?', 'index.php?page=cmgb&user=' . uId . '&remove=' . guestbook_load[i]->uid .'');">Ta bort</a> <b>-></b> <a href="index.php?page=cmgb&user=' . guestbook_load [i] ->author . '">Besvara</a>' : '';
data = profile->load(guestbook_load[i]->author);
content = nl2br(htmlspecialchars (guestbook_load [i] ->text, ENT_QUOTES));
footer = nl2br("skrivet av <a href="index.php?page=profile&user=" . guestbook_load[i]->author . "">" . htmlspecialchars(guestbook_load[i]->user_name, ENT_QUOTES) . "</a> ".data->sex.getAge(data->birthdate).", ".date ("j/n Y kl. H:i", guestbook_load[i]->unix_timestamp) . modify_string);
if (i > 0)
{
echo "
<tr>
<td><hr color="#666666" size="1"></td>
</tr>
";
}
echo "
<tr bgcolor="bgcolor">
<td>content</td>
</tr>
<tr bgcolor="bgcolor">
<td height="5"></td>
</tr>
<tr bgcolor="bgcolor">
<td>footer</td>
</tr>
";
}
}
else
{
echo "
<tr>
<td height="15"></td>
</tr>
<tr>
<td align="center"><b>data->user_name har inte fått några gästboksinlägg ännu =(</b></td>
</tr>
";
}
echo "</table>";
include("pages/cm/tpl/bottom_tpl.php");
}
else
{
cmErrTop = "Ett fel inträffade när sidan laddades";
cmErrText = "Användaren du söker har blivit avstängd!";
include("pages/cm/error.php");
}
}
else
{
cmErrTop = "Ett fel inträffade när sidan laddades";
cmErrText = "Användaren du söker finns ej i vår medlemsdatabas!";
include("pages/cm/error.php");
}
?>[b]Daniel "gnagis" Svensson[/b]
[i]Member since:[/i][b]2002[/b]
[i]Member since:[/i][b]2002[/b]
-
Hamlet

- Inlägg: 42
- Blev medlem: 11 september 2005, 23:12
- Bil: B18 CRX
- Namn: Daniel Lundberg
- Ort: Älvängen
Det gör du direkt i SQL:en, i denna koden har du bara anrop till klasser och funktioner som utför själva sql:erna.
Säg till din polare att lägga till LIMIT efter SELECT:en, ex. "SELECT x FROM y LIMIT 0, 30" för att få de 30 första, "LIMIT 30, 30" för att få nästföljande 30 osv...
Säg till din polare att lägga till LIMIT efter SELECT:en, ex. "SELECT x FROM y LIMIT 0, 30" för att få de 30 första, "LIMIT 30, 30" för att få nästföljande 30 osv...
Daniel Lundberg, medlem 1617, Älvängen
Sen lägger du alla poster i en variabel som du sen delar med antalet/poster per sida som du i sin tur sedan använder för att dela upp sidorna. Piece of cake.
// Johan Strömqvist
ÖSK/Linköping
ÖSK/Linköping
- gnagis
- Inlägg: 947
- Blev medlem: 25 juli 2004, 00:29
- Bil: Civic X
- Namn: Daniel Svensson
- Ort: Karlstad
- Been thanked: 6 times
- Kontakt:
Kod: Markera allt
<?php
require_once "db_mysql.class.php";
class Comment
{
var _dbConn;
var _dbCommentsTable;
var _dbUsersTable;
var _comment;
function Comment (dbUsersTable, dbCommentsTable)
{
this->_dbConn = &DbResource::instance ();
this->_dbUsersTable = dbUsersTable;
this->_dbCommentsTable = dbCommentsTable;
}
function load (uid)
{
if (this->_comment = this->_dbConn->getRow ("SELECT a.*,UNIX_TIMESTAMP(a.`timestamp`) AS `unix_timestamp`,b.`user_name` FROM `" . this->_dbCommentsTable . "` a,`" . this->_dbUsersTable . "` b WHERE a.`author`=b.`uid` AND a.`uid`='" . uid . "' LIMIT 0,1")) {
return true;
}
return false;
}
function write ()
{
if (this->_dbConn->query ("INSERT INTO `" . this->_dbCommentsTable . "` (`uid`, `timestamp`, `owner`, `author`,`header`, `text`, `ip`) VALUES ('" . md5_uniqid () . "', NOW(), '" . this->_comment->owner . "', '" . this->_comment->author . "', '" . this->_comment->header . "','" . this->_comment->text . "','" . getenv("REMOTE_ADDR") . "')")) {
return true;
}
return false;
}
function update (uid)
{
if (this->_dbConn->query ("UPDATE `journal` SET `header`='" . this->_comment->header . "',`text`='" . this->_comment->text . "' WHERE `uid`='" . uid . "' LIMIT 1")) {
return false;
}
return false;
}
function delete (uid)
{
if (this->_dbConn->query ("UPDATE `". this->_dbCommentsTable ."` SET `deleted`='1' WHERE `uid`='" . uid . "' LIMIT 1")) {
return false;
}
return false;
}
function loadComments (owner_uid)
{
if (result = this->_dbConn->getResults ("SELECT a.`uid`,UNIX_TIMESTAMP(a.`timestamp`) AS `unix_timestamp`,a.`owner`,a.`author`,b.`user_name`,a.`header`,a.`text` FROM `" . this->_dbCommentsTable . "` a,`" . this->_dbUsersTable . "` b WHERE a.`owner`='" . owner_uid . "' AND a.`author`=b.`uid` AND deleted != '1' ORDER BY a.`id` DESC")) {
return result;
}
return false;
}
function set (param, value)
{
this->_comment->param = value;
return true;
}
function get (param)
{
return this->_comment->param;
}
function countComments (owner_uid)
{
if (result = this->_dbConn->getRow ("SELECT COUNT(`id`) AS `count` FROM `" . this->_dbCommentsTable . "` WHERE `owner`='" . owner_uid . "' LIMIT 0,1")) {
return result->count;
}
return false;
}
function countWrittenByUid (uid)
{
if (result = this->_dbConn->getRow ("SELECT COUNT(`id`) AS `count` FROM `" . this->_dbCommentsTable . "` WHERE `author`='" . uid . "' LIMIT 0,1")) {
return result->count;
}
return false;
}
}
?>kan säga att det dära "pice of cake" inte riktigt funka för mig... så visa gärna eller lägg till mig på MSN / ICQ och hjälp mig om det är så lätt [img]http://www.hondaklubben.com/forum/style ... iggrin.gif[/img]
[b]Daniel "gnagis" Svensson[/b]
[i]Member since:[/i][b]2002[/b]
[i]Member since:[/i][b]2002[/b]
Först instanserar du en variabel som håller antalet inlägg per sida Tex :
$pagesize = 50; någonstans där du kan ändra det eller låta användaren ändra det själv.
if(Isset(get["page"])
$page = get["page"];
Sen så har du en back knapp och en framåt knapp som ökar eller minskar sidan med 1.
back-knappen är get["page"] - 1 om inte page är 1, då kan du låta bli att skriva ut den.
Framåtknappen är get["page"] +1 (om inte antalet svar är slut)
Du skickar värdet med $get så en användare kan skicka en annan användare rätt sida genom en länk.
Detta värde gångrar du med 50.
Jag gjorde någon form av sökning i det som hittades i databasen men Limit går förmodligen minst lika bra. Man kan skapa en stored procedure (mysql5) och ta emot 2 parametrar dvs startpunkt och sidstorlek enligt vad hamlet sade.
Har dock aldrig använt mig av LIMIT-parametern.
$pagesize = 50; någonstans där du kan ändra det eller låta användaren ändra det själv.
if(Isset(get["page"])
$page = get["page"];
Sen så har du en back knapp och en framåt knapp som ökar eller minskar sidan med 1.
back-knappen är get["page"] - 1 om inte page är 1, då kan du låta bli att skriva ut den.
Framåtknappen är get["page"] +1 (om inte antalet svar är slut)
Du skickar värdet med $get så en användare kan skicka en annan användare rätt sida genom en länk.
Detta värde gångrar du med 50.
Jag gjorde någon form av sökning i det som hittades i databasen men Limit går förmodligen minst lika bra. Man kan skapa en stored procedure (mysql5) och ta emot 2 parametrar dvs startpunkt och sidstorlek enligt vad hamlet sade.
Har dock aldrig använt mig av LIMIT-parametern.
Medlem 427
Charly har du någon bra länk till hur "stored procedures" funkar i mysql5? Kan man spara SQL satser som körs automatiskt av servern var, låt oss säga, 5:e sekund?
// Johan Strömqvist
ÖSK/Linköping
ÖSK/Linköping
uhm... kan kolla upp det men jag tror inte det är stored procedures du söker isf.
Anledningen är att stored procedures snarare är ett sätt att skapa logik i databasen, men att få dessa att gå igång av sig själv...
Om du kör servern på en linuxburk så kan du lösa problemet med ett cronjob... det gjorde en kollega på jobbet.
Jag får återkomma när jag vet bättre.
Anledningen är att stored procedures snarare är ett sätt att skapa logik i databasen, men att få dessa att gå igång av sig själv...
Om du kör servern på en linuxburk så kan du lösa problemet med ett cronjob... det gjorde en kollega på jobbet.
Jag får återkomma när jag vet bättre.
Medlem 427
- gnagis
- Inlägg: 947
- Blev medlem: 25 juli 2004, 00:29
- Bil: Civic X
- Namn: Daniel Svensson
- Ort: Karlstad
- Been thanked: 6 times
- Kontakt:
som jag sa tidigare... jag fattar inte ett shit av vart det ska in eller hur det ska in... tyvär det sitter helt fast i huvet på mig :S
så skriv gärna in där det ska vara och så så jag får det rätt kliar sönder huvet just nu tyvär..
så skriv gärna in där det ska vara och så så jag får det rätt kliar sönder huvet just nu tyvär..
[b]Daniel "gnagis" Svensson[/b]
[i]Member since:[/i][b]2002[/b]
[i]Member since:[/i][b]2002[/b]
ska försöka imorgon... men jag sitter o kodar C# hela dagarna på jobbet just nu och det är deadline snart... inte mycket php som får plats just nu [img]http://www.hondaklubben.com/forum/style ... #>/sad.gif[/img]
Medlem 427
- gnagis
- Inlägg: 947
- Blev medlem: 25 juli 2004, 00:29
- Bil: Civic X
- Namn: Daniel Svensson
- Ort: Karlstad
- Been thanked: 6 times
- Kontakt:
vore najs... min deadline är igentligen på nyår är det tänkt [img]http://www.hondaklubben.com/forum/style ... tongue.gif[/img]
[b]Daniel "gnagis" Svensson[/b]
[i]Member since:[/i][b]2002[/b]
[i]Member since:[/i][b]2002[/b]
Jag kan inte PHP men jag kan nog fixa det ändå, kommer hem runt den 2:e.
// Johan Strömqvist
ÖSK/Linköping
ÖSK/Linköping
- gnagis
- Inlägg: 947
- Blev medlem: 25 juli 2004, 00:29
- Bil: Civic X
- Namn: Daniel Svensson
- Ort: Karlstad
- Been thanked: 6 times
- Kontakt:
ja det är ju mestadels sql frågor så all hjälp är jag 105% tacksamm för då jag igentligen lovat bli klar med sidan till nyår [img]http://www.hondaklubben.com/forum/style ... iggrin.gif[/img]
[b]Daniel "gnagis" Svensson[/b]
[i]Member since:[/i][b]2002[/b]
[i]Member since:[/i][b]2002[/b]
Kod: Markera allt
<? static l = 1; // SIDAN
res_per_page = 50; // ANTALET SIDOR ?>
<?
res =& DBConn->query("SELECT * FROM MINTABELL");}
if (PEAR::isError(res)) {die(res->getMessage());}
// to make sure where you are in the documents (wich page)
if( !isset(_GET['page'])){ // gör ingenting } // FINNS INGEN SIDA, därför blir sidan till sida 1.
else {l = _GET['page'];} // vi tilldelar l sidan som användaren har valt i get.
echo(res->numRows(). " document(s) found <br>"); // valfritt (
if(res->numRows() > res_per_page) // antalet träffar får inte plats.
//anledningen till att jag kör prevnext här är att jag vill skriva ut knapparna innan innehållet.
{prevnext(l, letters,next, res);} // så kör vi metoden prevnext.
if(res->numRows() < res_per_page) // vi får plats och då kör vi som vanligt.
{
while( res->fetchInto(row) )
{
echo("<div id="post">n");
echo("<h3>" . row['RUBRIK'] . "</h3>");
echo("brödtext kanske :" . row['cusname'] . "</a></p></li>n");
//och så fortsätter du vräka på med det du vill ha här.
}
echo("</div>");
}
else
{
from = 0;
from = (l - 1) * res_per_page;
to = from + res_per_page;
foreach(range(from, to) as rownum) // vår range, dvs inom vilket intervall som skall tittas på.
{
if (!row = res->fetchrow(fetchmode, rownum)) // as long as we have rows left we continue to carry them out.
{break;}
echo("<h3>" . row['RUBRIK'] . "</h3>");
echo("brödtext kanske :" . row['cusname'] . "</a></p></li>n");
//och så fortsätter du vräka på med det du vill ha här.
//varning, det KAN bli så att du är tvungen att ange row[0] för första kolumnen istället för row[id] som ofta är första kolumnen.
// alltså echo("<h3>" . row['3'] . "</h3>"); om RUBRIK är kolumn3.
}
}
// a function in order to display previous and nextbuttons
function prevnext(l, letters, next, res)
{
if(l > 1)
{
prev = l - 1;
echo('<p><a href="?st=guestbook.inc&page='. prev .'">previous '. res_per_page .'</a>'); //st är alltså parametern på att det är den här sidan som skall hämtas.
}
else
{echo('<p>previous '. res_per_page );}
echo("nnnn");
next = l + 1;
if(res->numrows() > to ){echo('<a href="?st=guestbook.inc&page='. next .'&letters='. letters .'">next '. res_per_page .'</a></p>');}
else {echo'next '. res_per_page .'</p>';}
}
?>Det finns en del fel i den, en av dom är att det utförs en helsökning i databasen oavsett sida som användaren tittar på, men så länge det inte är tusentals inlägg så är det nog ingen fara.
Men prova om du kan få rätsida på den för förlagan fungerar. (Jag var tvungen att strippa en hel del kod p.g.a sekretess osv)
Medlem 427
-
Hamlet

- Inlägg: 42
- Blev medlem: 11 september 2005, 23:12
- Bil: B18 CRX
- Namn: Daniel Lundberg
- Ort: Älvängen
Har väl inte riktigt tid, så det får bli en snabb otestad Q&D variant. Har inte läst igenom all kod så jag tar inte ansvar för ev. bieffekter [img]http://www.hondaklubben.com/forum/style ... stling.gif[/img] . Here we go:
Ändra:
Till:
Ändra:
Till:
Och lägg in en länk på sidan som visar kommentarerna:
<a href="<? echo basename(PHP_SELF) . "?offset=" . (_GET['offset'] + 30); ?>">Nästa sida »</a>
Du får fixa till radbrytningarna inne i funktionen oxå så dom blir rätt annars får du error när du kör scriptet.
Ändra:
Kod: Markera allt
guestbook_load = guestbook->loadComments (uId);Kod: Markera allt
guestbook_load = guestbook->loadComments (uId, _GET['offset']);Kod: Markera allt
function loadComments (owner_uid)
{
if (result = this->_dbConn->getResults ("SELECT a.`uid`,UNIX_TIMESTAMP(a.`timestamp`) AS `unix_timestamp`,a.`owner`,a.`author`,b.`user_name`,a.`header`,a.`text` FROM `" . this->_dbCommentsTable . "` a,`" . this->_dbUsersTable . "` b WHERE a.`owner`='" . owner_uid . "' AND a.`author`=b.`uid` AND deleted != '1' ORDER BY a.`id` DESC")) {
return result;
}
return false;
}Kod: Markera allt
function loadComments (owner_uid, offset=0)
{
offset = addslashes(offset);
if (result = this->_dbConn->getResults ("SELECT a.`uid`,UNIX_TIMESTAMP(a.`timestamp`) AS `unix_timestamp`,a.`owner`,a.`author`,b.`user_name`,a.`header`,a.`text` FROM `" . this->_dbCommentsTable . "` a,`" . this->_dbUsersTable . "` b WHERE a.`owner`='" . owner_uid . "' AND a.`author`=b.`uid` AND deleted != '1' ORDER BY a.`id` DESC LIMIT 'offset', 30")) {
return result;
}
return false;
}<a href="<? echo basename(PHP_SELF) . "?offset=" . (_GET['offset'] + 30); ?>">Nästa sida »</a>
Du får fixa till radbrytningarna inne i funktionen oxå så dom blir rätt annars får du error när du kör scriptet.
Daniel Lundberg, medlem 1617, Älvängen
- gnagis
- Inlägg: 947
- Blev medlem: 25 juli 2004, 00:29
- Bil: Civic X
- Namn: Daniel Svensson
- Ort: Karlstad
- Been thanked: 6 times
- Kontakt:
Charly... du gjorde mig ännu mera förvirrad... grattis ! [img]http://www.hondaklubben.com/forum/style ... iggrin.gif[/img]
Daniel.... Underbart precis så behöver jag min hjälp... dock fungera det inte :S något som inte riktigt vart rätt?
blir som om jag inte fått några inlägg alls nu??
data->user_name har inte fått några gästboksinlägg ännu =(
det är vad som blir nu....
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/karlstab/public_html/beta/libs/db_mysql.class.php on line 110
detta är enda error jag får ^^
det är när jag ändrar det som som fetchar allt.... typ om raderna som skulle bytas ut där....
har du ICQ eller MSN? går lite snabbare så...
Daniel.... Underbart precis så behöver jag min hjälp... dock fungera det inte :S något som inte riktigt vart rätt?
blir som om jag inte fått några inlägg alls nu??
data->user_name har inte fått några gästboksinlägg ännu =(
det är vad som blir nu....
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/karlstab/public_html/beta/libs/db_mysql.class.php on line 110
detta är enda error jag får ^^
det är när jag ändrar det som som fetchar allt.... typ om raderna som skulle bytas ut där....
har du ICQ eller MSN? går lite snabbare så...
Senast redigerad av gnagis den 30 december 2005, 16:38, redigerad totalt 1 gånger.
[b]Daniel "gnagis" Svensson[/b]
[i]Member since:[/i][b]2002[/b]
[i]Member since:[/i][b]2002[/b]