Newsscript PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abstract
anweisung
array
betreff
code
datum
ergebnis
erneut aufrufen
folgendes schreiben
freuen
host
nachricht
not
ordern
output
parameter
re
schleife
schritt
zeile
-
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! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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
Dein Problem wird nur sein dass dein regex nicht auf "SELECT" sondern nur auf "select" reagieren wird => checkQuery wird undefined zurückgeben.for($i = 0; $i < count($res); $i++) { $row = $res[$i]; ...
Beitrag zuletzt geändert: 13.12.2011 19:20:28 von hackyourlife -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage