Tabelle aufteilen und weiterblättern

Alles, was PHP betrifft, kann hier besprochen werden.

Tabelle aufteilen und weiterblättern

Postby 9coon9 » 20. September 2011 10:58

hallo leute:),
ich habe ein programm geschrieben oder bin viel mehr noch dabei, dass über eine datenbank(heidisql) eine adressliste erstellen soll.
ich habe ersteinmal nur vor und nachname erstellt...
das ganze soll in einem table sein, der sich in: vorname nachname editbutton delete button aufteilt.
dies habe ich ohne probleme erstellt. um die edit und delete funktion wollte ich mich nur nicht unterhalten, da ich denke das ich diese auch alleine hinkriege.
noch einiges zum programm ist, dass es oop ist. das heißt, dass ich über ein programm nur funktionenen eines anderen programmes abrufe...sodass falls ich etwas in der tabelle ändere wie beispielsweise vorname geändert werden soll in firstname, ich nur in einem programm eine variable ändere.
soviel zum programm... nun komme ich aber zu meinem problem...ich habe einen button zum sortieren erstellt, hier kann man sowohl vor als auch nachname alphabetisch sortieren. dies ist notwendig damit ich den nächsten teil, und nun kommen wir zum problem, erstellen kann. ich wollte buttons erstellen, mit dem man eine seite weiter blättern kann. dazu muss man natürlich festlegen wie viele daten auf eine seite können. dies habe ich mit 2 weiteren buttons getan...
nun kommt aber das problem, dass mir einfach der ansatz fehlt wie ich umblättern könnte... habt ihr vielleicht einen denkansatz für mich?
ich werde mein programm mit versuchtem lösungsansatz hier unten reinschreiben... ich habe den versuch nicht ganz strukturirert und deshalb könnte es den einen oder anderen verwirren, aber vorweg meine idee war es von einem zähler auszugehen, der anfangs =1 ist und wenn man auf einen -> button klickt sich um die anzahl der daten pro seite erhöht... das problem ist nur, dass ich nicht weiß wie ich sage, dass der 3 datensatz anstatt dem ersten angezeigt werden kann...
hat jemand ne idee oder ist mein lösungsweg kompletter mist?
quelltext:
Code: Select all
<?php//table_test.php
print_r($_POST);
include('connect.php');
include('table_class.php');
$table=new table();
$table->settitle('Adresse');
$table->settable('adresse');
$table->setorder(
    array('start'=>'DESC','end'=>'ASC'));
$table->setbutton(
      array('text'=>'edit','buttonname'=>'button','img'=>'edit.png'));
$table->setbutton(
    array('text'=>'delete','buttonname'=>'button','img'=>'delete.png'));
$table->setpages(
      array('direction'=>'back','pagename'=>'page'));
$table->setpages(
      array('direction'=>'forward','pagenmame'=>'page'));
$table->setPK(
   array(
      'PK'=>'adresse_id','PKname'=>'id'));   
$table->setfields(
  array(
    array('header'=>'Vorname','colname'=>'firstname','order'=>'lastname,firstname'),
    array('header'=>'Nachname','colname'=>'lastname','order'=>'adresse_id')
  )
);
if($_POST['button']=='edit'){
  echo'Sie wollen den Datensatz '.$_POST['id'].' bearbeiten';
}
if($_POST['button']=='delete'){
  echo'Sie wollen den Datensatz '.$_POST['id'].' löschen';
}
$table->showtable();
?>


und der eigentliche quelltext
<?php//table_class.php
class table
{
private $title='Überschrift fehlt noch!';
private $table;
private $fields;
private $PK;
private $buttons =array();


function __construct(){

}

function settitle($title){
$this -> title = $title;
}

function settable($table){
$this -> table = $table;
}

function setorder($order){
$this -> order = $order;
}

function setfields($fields){
$this -> fields = $fields;
}

function setbutton($button){
$this -> buttons[] = $button;
}
function setpages($page){
$this -> page[] = $page;
}

function setPK($PK){
$this -> PK =$PK;
}

function showtable(){
echo '<form method= "post">';
echo '<form action="select.htm">';
if(!isset($_POST['order_column'])){
$orderer=$this->order['start'];
}
else{
$orderer=$_POST['order_direction'];
if($_POST['order_direction']==$this->order['start']){
$orderer=$this->order['end'];

}
else{
$orderer=$this->order['start'];
}
}
echo '<h2>'.$this -> title.'</h2>';

$str_select_adresse='select ';

foreach($this -> fields as $value)
{
$str_select_adresse.= $value['colname'] . " ,";

}
$str_select_adresse.=' '.$this->PK['PK'].' ';
$str_select_adresse.='from ' . $this -> table;



echo '<table border="1"><tr>';

foreach($this -> fields as $field){
if(isset($_POST['arrowbutton-'.$field["header"]]) || isset($_POST[$button["buttonname"]])){ //nachfragen wie man auf button zugreift
echo'hi';
}
else{
$arrow=' ';
$number=1;
}
if(isset($_POST['arrowbutton-'.$field["header"]])){
if($_POST['order_direction']==$this->order['start']){
$arrow= '&uarr;';
}
elseif($_POST['order_direction']==$this->order['end']){
$arrow= '&darr;';
}
}


// echo '<form method= "post">';
echo '<th>'.$field["header"];
echo '<input type="submit" name="arrowbutton-'.$field["header"].'" value="'.$arrow.'"></th>';
echo '<input type="hidden" name="order_direction" value="'.$orderer.'">';
echo '<input type="hidden" name="order_column" value="'.$field["header"].'">';

if(isset($_POST['arrowbutton-'.$field["header"]])){

if($_POST['order_direction']==$this->order['start']){
$str_select_adresse.=' order by ' .$field["colname"].' '.$this->order['start'];

}
else{
$str_select_adresse.=' order by ' .$field["colname"].' '.$this->order['end'];
}
}
// echo '</form>';
}
// echo '<form action="select.htm">';

echo '<td>
<select name="data_per_page" size="0">';
for($i=1;$i<=5;$i++){
if($i==$_POST['data_per_page']){
echo '<option selected>'.$i.'</option>';
}

else{
echo '<option >'.$i.'</option>';
}
}
echo '</select>
</td>
<td>
<input type="submit" name="sort" value="sort">
</td>
<td>
<input type="submit" name="pagebackward" value="&larr;">
<input type="submit" name="pageforward" value="&rarr;">
<input type="hidden" name="pagenumber" value="number">
</td>';
// echo '</form>';
print_r($_POST);
echo '</tr>';
$zaehler=1;
$summe=$_POST['number'];
if(isset($_POST['pagebackward'])){
if($summe>=$_POST['data_per_page']){
$summe=$summe-$_POST['data_per_page'];
$_POST['pagenumber']=$summe;
}
}
if(isset($_POST['pageforward'])){
$summe=$summe+$_POST['data_per_page'];
$_POST['pagenumber']=$summe;
}
// echo $str_select_adresse;
$query_select_adresse=mysql_query($str_select_adresse);
while($tabelle = mysql_fetch_assoc($query_select_adresse)){
if($zaehler>=$_POST['number'] && $zaehler<=($_POST['number']+$_POST['data_per_page'])){
echo '<tr>';
foreach ($tabelle as $value){
echo '<td>' . $value;

if($value=='')

{
echo '&nbsp;' ;

}
echo '</td>';

}
foreach($this->buttons as $button){
echo '<td>';
echo '<input type="submit" name="'.$button["buttonname"].'" value="'.$button["text"].'">';
echo '</td>';
}
echo '<input type="hidden" name="'.$this->PK["PKname"].'" value="'.$tabelle[$this->PK["PK"]].'">';


echo '</tr>';
$zaehler++;
}
}

echo '</table>';
echo '</form>';
// echo "hi".$summe;

}

}


?>
9coon9
 
Posts: 15
Joined: 03. May 2011 14:27

Re: Tabelle aufteilen und weiterblättern

Postby Altrea » 20. September 2011 11:27

SQL bietet dir mit "LIMIT {start} {count}" schon das passende Hilfsmittel.
Mit dem ersten Parameter gibst du an, bei welchem Datensatz du anfangen möchtest und mit dem zweiten, wieviele Datensätze du haben möchtest.
ein LIMIT 0, 10 gibt dir also Datensatz 1-10 aus, ein LIMIT 4, 25 würde Datensatz 5-29 ausgeben.

für den ersten Parameter eignet sich eine Seitenzahl, die du in deiner PHP-Klasse ablegen kannst gut ((Seitenzahl - 1) * Datensätze_pro_Seite), für den zweiten Parameter brauchst du nur die Anzahl der Datensätze pro Seite.

Ich denke das hilft erstmal als Denkanstoß.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11935
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Tabelle aufteilen und weiterblättern

Postby 9coon9 » 21. September 2011 10:35

hallo nochmal und erstmal danke für den hinweis über die limit funktion...
ich habe dies versucht umzusetzten, jedoch klappt das nicht ganz.... ich bekomme immer ein warning hinweis und passieren tut eigentlich gar nichts... (Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\programmiertes\table_class.php on line 148)
außerdem weiß ich nicht ob limit vor oder nach order by kommen soll....
mein programm sieht mittlerweile so aus:
Code: Select all
<?php
class table{
    private $title='Überschrift fehlt noch!';
    private $table;
    private $fields;
    private $PK;
    private $buttons =array();


    function __construct(){
       
    }

    function settitle($title){
        $this -> title = $title;
    }
   
    function settable($table){
        $this -> table = $table;
    }
   
    function setorder($order){
        $this -> order = $order;
    }
   
    function setfields($fields){
        $this -> fields = $fields;
    }
   
   function setbutton($button){
        $this -> buttons[] = $button;
     }
   function setpages($page){
       $this -> page[] = $page;
     }
    
   function setPK($PK){
        $this -> PK =$PK;
     }   
    
   function showtable(){
        echo '<form method= "post">';
        echo '<form action="select.htm">';
      if(!isset($_POST['order_column'])){
            $orderer=$this->order['start'];
        }
        else{
            $orderer=$_POST['order_direction'];
            if($_POST['order_direction']==$this->order['start']){
              $orderer=$this->order['end'];
             
            }
            else{
              $orderer=$this->order['start'];
            }
        }
          echo '<h2>'.$this -> title.'</h2>';
       
        $str_select_adresse='select ';
       
        foreach($this -> fields as $value)
        {
            $str_select_adresse.= $value['colname'] . " ,";
           
        }
        $str_select_adresse.=' '.$this->PK['PK'].' ';
        $str_select_adresse.='from ' . $this -> table;
      //  $str_select_adresse.='LIMIT' . $_POST['startnumber'].',' .$_POST['data_per_page'];
       
       
       
        echo '<table border="1"><tr>';
       
        foreach($this -> fields as $field){
           if(isset($_POST['arrowbutton-'.$field["header"]]) || isset($_POST[$button["buttonname"]]) || isset($_POST['pageforward']) || isset($_POST['pagebackward']) || isset($_POST['sort'])){ //nachfragen wie man auf button zugreift
         echo'hi';
         }
         else{
            $arrow=' ';
            $_POST['startnumber']=0;
         }

              if(isset($_POST['arrowbutton-'.$field["header"]])){
               if($_POST['order_direction']==$this->order['start']){
                    $arrow= '&uarr;';
               }
               elseif($_POST['order_direction']==$this->order['end']){
                   $arrow= '&darr;';
               }
              }
       
           
          //  echo '<form method= "post">';
            echo '<th>'.$field["header"];
            echo '<input type="submit" name="arrowbutton-'.$field["header"].'" value="'.$arrow.'"></th>';
            echo '<input type="hidden" name="order_direction" value="'.$orderer.'">';
            echo '<input type="hidden" name="order_column" value="'.$field["header"].'">';
         
            if(isset($_POST['arrowbutton-'.$field["header"]])){
       
              if($_POST['order_direction']==$this->order['start']){
                $str_select_adresse.=' order by ' .$field["colname"].' '.$this->order['start'];
               
              }
              else{
                $str_select_adresse.=' order by ' .$field["colname"].' '.$this->order['end']; 
              }
            }
            $str_select_adresse.='LIMIT' . $_POST['startnumber'].',' .$_POST['data_per_page'];
      //      echo '</form>';
        }
      //  echo '<form action="select.htm">';
       
      echo '<td>
         <select name="data_per_page" size="0">';
         for($i=1;$i<=5;$i++){
         if($i==$_POST['data_per_page']){
            echo '<option selected>'.$i.'</option>';
         }
      
         else{
            echo '<option >'.$i.'</option>';
         }
      }   
         echo '</select>
            </td>
            <td>
            <input type="submit" name="sort" value="sort">
            </td>
            <td>
            <input type="submit" name="pagebackward" value="&larr;">
            <input type="submit" name="pageforward" value="&rarr;">
            <input type="hidden" name="startnumber" value="startnumber">
            </td>';
      //   echo '</form>';
        echo '</tr>';
        if(isset($_POST['pagebackward'])){
           if($_POST['startnumber']>=$_POST['data_per_page']){
            $_POST['startnumber']=$_POST['startnumber']-$_POST['data_per_page'];
            
         }
      }
      if(isset($_POST['pageforward'])){
         $_POST['startnumber']=$_POST['startnumber']+$_POST['data_per_page'];
      }
      //  echo $str_select_adresse;
         $query_select_adresse=mysql_query($str_select_adresse);
        while($tabelle = mysql_fetch_assoc($query_select_adresse)){
            echo '<tr>';
            foreach ($tabelle as $value){
                echo  '<td>' . $value;
               
                if($value=='')
               
                {
                    echo '&nbsp;' ;
                   
                }
                echo '</td>';
               
               }
                foreach($this->buttons as $button){
                  echo '<td>';
                  echo '<input type="submit" name="'.$button["buttonname"].'" value="'.$button["text"].'">';
                  echo '</td>';
            }
                echo '<input type="hidden" name="'.$this->PK["PKname"].'" value="'.$tabelle[$this->PK["PK"]].'">';

               
            echo '</tr>';
       
       
        }
       
        echo '</table>';
        echo '</form>';
      //  echo "hi".$summe;
   
    }
     
}


?>


ich hoffe mir kann jemand helfen, denn ich weiß nicht wo das problem liegt :/
9coon9
 
Posts: 15
Joined: 03. May 2011 14:27

Re: Tabelle aufteilen und weiterblättern

Postby Altrea » 21. September 2011 10:41

Die Fehlermeldung deutet darauf hin, dass deine ressource false enthält, also deine SQL Syntax fehlgeschlagen ist.
Lass dir doch mal das komplette SQL-Statement ($str_select_adresse) ausgeben, sobald du es komplett zusammengebaut hast.
Diese kannst du dann

Wie die genaue Reihenfolge eines MySQL Select Statements ist, kann dir die MySQL Dokumentation zeigen

Besser wäre es natürlich, wenn du dich ein bißchen mit SQL Debugging beschäftigen würdest.
Einen guten Einstiegspunkt dazu gibts im Wiki von php.de
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11935
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Tabelle aufteilen und weiterblättern

Postby 9coon9 » 21. September 2011 14:03

sooo.... jetzt habe ich soweit es geht das programm zusammengebastelt...
mein problem nun ist nur (das ich auch vorher hatte), dass ich nicht auf den button edit delete sort oder -> <- zugreifen kann...
wenn ich auf den pfeil aufwärts und abwärts klicke funktioniert es wenigstens, dass nur bestimmte anzahl von daten angezeigt wird....
auf die andren buttons reagiert er gar nicht... das sehe ich daren :
Code: Select all
if(isset($_POST['arrowbutton-'.$field["header"]]) || isset($_POST[$button["buttonname"]]) || isset($_POST['pageforward']) || isset($_POST['pagebackward']) || isset($_POST['sort'])){ //nachfragen wie man auf button zugreift
         echo'hi';
         }
         else{
            $arrow=' ';
            $_POST['startnumber']=0;
         }

einfach mal hi nur so gemacht...
die startnummer wird auch nicht auf null gesetzt wenn ich auf andere buttons klicke...
als echo $str_select_adresse wird also ausgegeben :
select firstname ,lastname , adresse_id from adresse LIMIT startnumber, 2
9coon9
 
Posts: 15
Joined: 03. May 2011 14:27

Re: Tabelle aufteilen und weiterblättern

Postby Altrea » 23. September 2011 03:50

9coon9 wrote:auf die andren buttons reagiert er gar nicht... das sehe ich daren :
...
die startnummer wird auch nicht auf null gesetzt wenn ich auf andere buttons klicke...

Das wäre technisch unmöglich. Du hast dort ein if-else Konstrukt. Eins von beidem muss ausgeführt werden. Entweder das eine oder das andere (oder die darüberliegende Funktion wird garnicht erst ausgeführt, was auch möglich wäre).

9coon9 wrote:
Code: Select all
...|| isset($_POST[$button["buttonname"]])...

Das ist Mumpitz. $button kann an dieser Stelle garnicht gefüllt sein, da es nirgens in der Funktion vorkommt.

gib dir doch erstmal das komplette $_POST Array aus, um zu sehen, was wo wie überhaupt gefüllt wird
Code: Select all
<?php
echo '<pre>';
print_r( $_POST );
echo '</pre>';
?>


Und dann degugge dein Monster if-isset Konstrukt nochmal ganz in Ruhe.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11935
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64


Return to PHP

Who is online

Users browsing this forum: No registered users and 51 guests