PHP Ausgabe einer SQL Tabelle mit Status

  • Hallo PHP Freunde

    ich habe folgendes Problem:
    Ich hab' eine Webseite mit einem mini CMS von 'nem Freund.
    Unter den Einstellungen im CMS wollte ich mir jetzt alle Sprachen, die Installiert sind( zur Zeit nur Deutsch und Englisch), ausgeben lassen und mit einem Statusbutton( Grün= Online, Rot= Offline) versehen. Allerdings hagelt es NUR Fehlermeldungen (Fatal error: Call to a member function fetch_assoc() on a non-object in C:\xampp\htdocs\CMS3\admin\option.php on line 48)

    Hier mal die Klasse, zu den Optionen:
    <?php

    class Option {
    private $intOptionID;
    private $intOptionTyp;
    private $strOptionWert;
    private $db;
    private $intID;
    private $intStatus;

    function Option(){
    $this->db = new Connect();
    $this->db = $this->db->gibConnect();
    }

    function optionShow(){
    $sql_einstellungen = 'SELECT * FROM einstellungen';
    $result = $this->db->query($sql_einstellungen);
    $ausgabe = '<input name="anzahl" type="hidden" value="'.$result->num_rows.'" />'."\n";
    while($zeile = $result->fetch_assoc()){
    if(!empty($zeile['einstellungenID'])){
    $ausgabe .= '<div class="text">'.$zeile['einstellungenTyp'].'</div><input name="option'
    .$zeile['einstellungenID'].'" value="'
    .$zeile['einstellungenWert'].'" type="text" class="option_box" /><br />'."\n";
    }
    }
    return $ausgabe;
    }

    function optionEdit($sql){
    $result = $this->db->query($sql);
    if(!$result):
    return 'Werte konnten nicht gespeichert werden.';

    endif;
    }
    function sprachen(){
    $sql_sprache = 'SELECT * FROM sprache';
    $result = $this->db->query($sql_sprache);
    $ausgabe = $result;
    while($zeile = $result->fetch_assoc()){
    if(!empty($zeile['spracheName'])){
    $ausgabe = $zeile['spracheID']
    .$zeile['spracheName'];
    }
    return $ausgabe;
    }
    }
    function statusEdit($id){
    $this->intID = $id;
    $result = $this->db->query("SELECT spracheStatus FROM sprache WHERE spracheID = '".$this->intID."'");
    $zeile = $result->fetch_assoc();
    $this->intStatus = $zeile['spracheStatus'];
    if($this->intStatus == 1): $i = 0;
    elseif($this->intStatus == 0): $i = 1;
    endif;
    $sql = "UPDATE sprache SET spracheStatus = '".$i."' WHERE spracheID = '".$this->intID."'";
    $result = $this->db->query($sql);
    }

    }
    ?>

    Und jetzt die Optionen.php, dass ist die, die aufgerufen wird, wenn man im Backend auf "Optionen" klickt:

    <div id="seite">Einstellungen<hr /></div>
    <form id="formular" enctype="multipart/form-data" method="post">

    <?php

    $op = new Option();
    echo $op->optionShow();
    echo $op->sprachen();
    ?>

    <br />
    <input name="abschicken" type="submit" value="Speichern" id="button" />
    </form>
    <?php

    if(isset($_POST['abschicken'])):
    for( $i = 1; $i <= $_POST['anzahl'] ; $i++ ){
    $name = 'option'.$i;
    $sql = "UPDATE einstellungen SET einstellungenWert = '".$_POST[$name]."'
    WHERE einstellungenID = '".$i."'";
    $ausgabe = $op->optionEdit($sql);
    echo $ausgabe;

    }
    echo'<meta http-equiv="refresh" content="0;URL=cms.php?datei=option" />';
    endif;

    ?>
    <table id="uebersicht">
    <tr>
    <th class="datum">Erstellungsdatum</th>
    <th class="titel">Titel</th>
    <th class="status">Status</th>
    <th class="edit">&nbsp;</th>
    </tr>
    <?php
    $show = 20;
    $result = $db->query("SELECT COUNT(*) FROM sprache");
    $zeile = $result->fetch_assoc();
    $anzahl = $zeile['anzahl'];
    #$rest = $anzahl%$show;
    #$seiten = ($anzahl - $rest)/$show + 1;
    #$page = $_GET['page'];
    #$datensatz = ($page-1)*$show;
    $sql = "SELECT spracheID AS id, spracheKuerzel AS kuerzel, spracheName AS name, spracheStatus AS status, FROM sprache ORDER BY spracheID DESC LIMIT ".$datensatz.", ".$show;

    $result = $db->query($sql);
    while($zeile = $result->fetch_assoc()){
    $status = $zeile['status'];
    if( $status == 0 :( $farbe = "rot";
    elseif( $status == 1 :( $farbe = "gruen";
    endif;
    $datum = $zeile['datum'];
    $datum = date('d.m.Y', $datum);
    echo '<tr>
    <td class="datum">'.$datum.'</td>
    <td class="titel"><a href="cms.php?datei=startseite&'.$_GET['datei'].'='.$zeile['id'].'">'.$zeile['titel'].'</a></td>
    <td class="status"><form method="post" action="">
    <input name="status" type="submit" value="'.$zeile['id'].'" class="'.$farbe.'" />
    </form></td>
    <td class="edit"><form method="post" action="">
    <input name="edit" type="submit" value="'.$zeile['id'].'" class="edit_button" />
    </form></td>
    </tr>';
    }
    ?>

  • So eine unformatiert gepostete Buchstabenwüste sehe ich mir ja eigentlich nicht an, aber wo kommt $db her? Und $result wird wohl nicht das sein, was du vermutest.

    Warum fragst du nicht deinen Freund, der sollte sich doch damit am besten auskennen.

  • Da hast Du Recht! Aber ich kann den absolut nicht erreichen, da er immoment im Urlaub ist.

    Was wird $result denn dann sein? Es sollte ja eigentl. ( wenn man's mal übersetzt) das Resultat wiedergegeben werden, oder?

  • Was wird $result denn dann sein? Es sollte ja eigentl. ( wenn man's mal übersetzt) das Resultat wiedergegeben werden, oder?


    Das kannst du herausfinden, in dem du dir die DB-Klasse ansiehst. Man könnte sich ja auch einen Quellcode von deinem Freund ansehen und gucken, wie er die DB-Ausgabe gestaltet hat, oder?

  • Ich habe eben verzweifelt gesucht aber keine Klasse für $db gefunden.
    Ich glaube, dass die DB bei der Installation schon definiert wird. Also wo er was hinlegen soll und wo er was anlegen soll( in welche Tabbel quasi).
    Soll ich die install mal posten?

  • Ich würde eher sagen: warte auf deinen Freund. Mir scheint es, dass du relativ wenig Ahnungvon PHP hast und dass du da rumfuscht. Das macht nicht wirklich Sinn. Das Installationsscript bringt uns auch nichts.

  • ich habe jetzt mal selbstständig was geändert:

    vorher:$result = $db->query($sql);
    while($zeile = $result->fetch_assoc()){
    $status = $zeile['status'];
    if( $status == 0 :( $farbe = "rot";
    elseif( $status == 1 :( $farbe = "gruen";
    endif;


    jetzt:$result = $db->query($sql);
    while($row = ($row=mysql_fetch_assoc($result))){
    $status = $zeile['status'];
    if( $status == 0 :( $farbe = "rot";
    elseif( $status == 1 :( $farbe = "gruen";
    endif;

    Also anstatt "($zeile = $result->fetch_assoc()){" einfach :"$row = ($row=mysql_fetch_assoc($result))){"
    Jetzt kommt dann folgende Fehlermeldung:

    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\CMS3\admin\option.php on line 44

  • Und was lernen wir daraus? Dass die Funktion query true oder false liefert und keine Resource-ID

  • Ein Schnellschuss wäre


    Aber warte besser auf deinen Freund und benutze dann seine DB-Klasse.