kostenloser Webspace werbefrei: lima-city


Newsscript PHP

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    Ich habe auf meiner Seite folgendes Script, zum Ausgeben von News:

    <?php
    
    $query    = "SELECT * from news ORDER BY datum DESC";
    $res      = $abstract -> checkQuery ($query);
    
    echo "";
    while ( $row = mysql_fetch_assoc ( $res ) ) {
    	echo "<table cellSpacing=\"0\" cellPadding=\"2\" width=\"90%\" align=\"center\" border=\"1\" style=\"border-collapse: collapse\" bordercolor=\"#111111\">
    <td width=\"100%\"><b><font size=\"2\" face=\"Verdana\">$row[betreff]</font></b></td>
    <td><font size=\"2\" face=\"Verdana\">$row[datum]</font></td>
    </tr>
    <td colspan=\"2\"><font size=\"2\" face=\"Verdana\">$row[nachricht]</font></td><br>";
    }
    echo "</table>";
    ?>


    Dafür benutze ich die Klassen.

    ref="/tag/abstract">abstract.class.php:
    <?php
    class AbstractSQL extends MySQL {
    	public function __construct($host, $user, $password, $database) {
    		parent::__construct ( $host, $user, $password, $database );
    	}
    	
    	public function __destruct() {
    		parent::__destruct ();
    	}
    	
    	public function checkQuery($query) {
    		if (preg_match ( "/^select/i", $query )) {
    			$result = $this->doSelect ( $query );
    			if ($result) {
    				return $result;
    			} else {
    				throw new dataexeception ( 'Fehler bei der Anfrage! Keine Datensätze geändert', 1 );
    			}
    		}
    	}
    }


    MySQL.class.php

    <?php
    
    class MySQL {
    	
    	protected function __construct($host, $user, $password, $database) {
    		$this->con = mysql_connect ( $host, $user, $password ) or die ( mysql_error () );
    		
    		if (is_resource ( $this->con )) {
    			mysql_select_db ( $database ) or die ( mysql_error () );
    		}
    	}
    	
    	protected function __destruct() {
    		if (is_resource ( $this->con )) {
    			mysql_close ( $this->con );
    		}
    	}
    	
    	public function doQuery($query) {
    		if ($this->result = mysql_query ( $query )) {
    			$aff_rows = mysql_affected_rows ();
    			if ($aff_rows) {
    				return true;
    			} else {
    				return false;
    			}
    		} else {
    			die ( mysql_error () );
    		}
    	}
    	
    	protected function doSelect($query) {
    		if ($this->result = mysql_query ( $query )) {
    			$output = array ();
    			while ( $row = mysql_fetch_assoc ( $this->result ) ) {
    				$output [] = $row;
    			}
    			if (count ( $output ) > 0) {
    				return $output;
    			} else {
    				return false;
    			}
    		} else {
    			die ( mysql_error () );
    		}
    	}
    }
    ?>


    Wie kann ich das obige Script so anpassen, dass es funktioniert?
    Zurzeit kommt eine Fehlermeldung:

    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/www/web48/html/new/index.php on line 48


    Line 48 ist im Script oben die Zeile

    while ( $row = mysql_fetch_assoc ( $res ) ) {


    Würde mich sehr über eure Hilfe freuen!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Kann ja garnicht funktionieren:
    du rufst checkQuery mit der SQL-Anweisung auf.
    checkQuery schaut ob in der SQL-Anweisung select am Anfang steht; wenn ja => doSelect
    doSelect ruft mysql_query auf und speichert in einer Schleife (mit aufrufen von mysql_fetch_assoc) das Ergebnis in ein Array

    Das Array wandert zurück in die Variable $res. Im nächsten Schritt möchtest du mysql_fech_assoc erneut aufrufen, diesmal mit einem Array als Parameter (das bereits dein Ergebnis enthält).
    Du wolltest warscheinlich in Zeile 48 statt deiner while... folgendes schreiben
    for($i = 0; $i < count($res); $i++) {
        $row = $res[$i];
    ...
    Dein Problem wird nur sein dass dein regex nicht auf "SELECT" sondern nur auf "select" reagieren wird => checkQuery wird undefined zurückgeben.

    Beitrag zuletzt geändert: 13.12.2011 19:20:28 von hackyourlife
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!