+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 20 von 37

PHP/MySQL-Problem

Eine Diskussion über PHP/MySQL-Problem im Forum Technik Ecke. Teil des Off Topic-Bereichs; Ich hab mal ein echt supersimples Gästebuch mit null Komfort geschrieben. Allerdings will es nicht so richtig funzen. Zumindest nicht ...

  1. #1

    PHP/MySQL-Problem

    Ich hab mal ein echt supersimples Gästebuch mit null Komfort geschrieben. Allerdings will es nicht so richtig funzen. Zumindest nicht aufm richtigen Server. Offline im XAMPP läufts jedoch ganz locker was ja schon sehr seltsam ist.
    Vielleicht findet ja ein Kenner hier den Fehler...ich kann irgendwie keinen finden. Oder machts Probs, wenn 2 Skripte zur gleichen Laufzeit bearbeitet werden müssen??? Wäre mir aber neu.

    1. <div id="impressum">
    2. <h3><span id="span">&raquo;&nbsp;G&auml;stebuch</span></h3>
    3. <?
    4. //Variablenübernahme
    5. include ('inc/db.inc.php');
    6.  
    7. //Überprüfung der Absendung
    8. if ($submit) {
    9.  
    10. //IP und Host bestimmen
    11. function getip() {
    12. if(getenv("HTTP_X_FORWARDED_FOR"))
    13. $ip = getenv("HTTP_X_FORWARDED_FOR");
    14. else
    15. $ip = getenv("REMOTE_ADDR");
    16. return $ip;
    17. }
    18.  
    19. //ausgeben
    20. $ip = getip();
    21. $host = gethostbyaddr($ip);
    22. $timestamp = time();
    23.  
    24. //E-Mailadresse überprüfen
    25. if(!eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $mail))
    26. echo("Keine gültige E-Mailadresse!");
    27. else {
    28.  
    29. //Datenbankverbindung
    30. $conn = mysql_connect($host, $uid, $pwd);
    31. //Datenbank auswählen
    32.  
    33. //Daten in die Tabelle schreiben
    34. $sql = "insert into rsn_gb (nickname, mail, datetime, comment, ip, host)
    35. values ('$nickname', '$mail', FROM_UNIXTIME($timestamp), '$comment', '$ip', '$host')";
    36. echo "Erfolgreicher Gästebucheintrag!";
    37.  
    38. //Ausführung
    39. mysql_query($sql);
    40.  
    41. //Datenbankverbindung schließen
    42. mysql_close($conn);
    43. }
    44. header('Location: index.php?section=guestbook');
    45. }
    46. ?>
    47. <form action="<?php echo $php_self ?>" method="post">
    48. <table border="0" cellpadding="2" cellspacing="0">
    49. <tr>
    50. <td width="20%">Ihr Name:</td>
    51. <td width="80%"><input type="text" class="feld" name="nickname" size="50"></td>
    52. </tr>
    53. <tr>
    54. <td>Ihre E-Mail:</td>
    55. <td><input type="text" class="feld" name="mail" size="50"></td>
    56. </tr>
    57. <tr>
    58. <td valign="top">Ihr Eintrag:</td>
    59. <td><textarea name="comment" class="feld"cols="60" rows="6"></textarea></td>
    60. </tr>
    61. <tr>
    62. <td></td>
    63. <td><input type="submit" name="submit" value="eintragen" id="button"> <input type="reset" value="zurücksetzen" id="button"></td>
    64. </tr>
    65. </table>
    66. </form>
    67. <?
    68. //Datenbankverbindung
    69. $conn = mysql_connect($host, $uid, $pwd);
    70. //Datenbank auswählen
    71. //Datenbankabfrage
    72. $sql1 = 'SELECT id, nickname, mail, UNIX_TIMESTAMP(datetime) AS datetime, comment, ip FROM rsn_gb WHERE visible > -1 ORDER BY datetime DESC';
    73. $result = mysql_query($sql1);
    74. if($result)
    75. {
    76. while($ausgabe = mysql_fetch_object($result))
    77. {
    78. echo "<table border=\"0\" class=\"feld\" cellpadding=\"2\" cellspacing=\"0\">";
    79. echo "<tr bgcolor=\"#0066ff\">";
    80. $datum = StrFTime('%d.%m.%Y um %H:%M:%S',$ausgabe->datetime);
    81. echo "<td width=\"20%\">Geschrieben von <b>$ausgabe->nickname</b> am $datum Uhr";
    82. echo "</td>";
    83. echo "</tr>";
    84. echo "<tr>";
    85. echo "<td><a href=\"mailto:".$ausgabe->mail."\" target=\"_blank\"><img src=\"pics/mail.gif\" border=\"0\"></a>";
    86. echo "</td>";
    87. echo "</tr>";
    88. echo "<tr bgcolor=\"#ffffff\">";
    89. $text = nl2br($ausgabe->comment);
    90. echo "<td>$text";
    91. echo "</td>";
    92. echo "</tr>";
    93. echo "<tr>";
    94. echo "<td>IP: $ausgabe->ip";
    95. echo "</td>";
    96. echo "</tr>";
    97. echo "</table>";
    98. echo "<br>";
    99. }
    100. }
    101. //Verbindung schließen
    102. mysql_close($conn);
    103. ?>
    104. </div>

  2. #2
    da du keine schleife hast, nimm require statt include

    interresant wäre jetzt noch zu wissen, was so an fehlern kommt.

    desweiteren wundere ich mich über $mail und $nickname, habe jetzt nicht gesehen, wo du aus $_POST['nickname'] und $_POST['mail'] die Daten entnimmst. ( oder auch $GLOBALS / $_REQUIRE, is ja wurscht )

    meist liegt es wenn du zur DB nicht connecten kannst daran, das fast jeder offline kein pw und benutzer ( bzw root ) hat für seine SQL Datenbank und Online dies ja eigentlich immer der Fall ist

    btw, es laufen keine 2 Scripte gleichzeitig ab ( jedenfalls nicht wenn man es ganz platt betrachtet ), er arbeitet db.inc.php durch und geht dann erst im eigentlichen script weiter

    // Edit
    hab gerade gesehen, das $submit ja auch nicht aufgerufen wird, mach mal leiber damit es bei jedem browser geht ( IE macht es nämlich zb nicht ) ein verstecktes input rein, also <input type="hidden" value="1" name="send"> und frag dann fürs abschicken die $_POST['send'] ab

  3. #3
    Der Fehler: Der Browser arbeitet ewig, gibt aber kein Ergebnis aus. So als wenn ne Endlosschleife läuft, was aber nicht vorliegt.

    Der Unterschied zwischen require und include ist lediglich, dass require das Skript mit einem schweren Fehler abbricht.

    $mail und $nickname wird doch aus dem Formular übernommen. Das eine Skript schreibt die Daten aus dem Formular (und die anderen Daten) in die Datenbank. Das zweite sorgt lediglich dafür, dass alle getätigten Einträge ausgegeben werden.

    Die Logindaten in der db.inc.php sind natürlich korrekt und nicht die selben wie im XAMPP. Von daher sollte das kein Problem sein mit der Datenbankverbindung.

  4. #4
    der unterschied ist, das require schneller als include arbeitet ~ wenn es mit nem fehler abbricht würde ich mal die datei näher untersuchen oder mir die fehlerausgabe geben

    und du hast [form method="post"] von daher werden die daten der variable in den $_POST Array geschickt und nicht an eine Variable mit den namen von value, außer du hast es im Script umgelenkt, was ich aber nicht sehen kann.

    im übrigen kenne ich mich zufällig mit php aus und weiß was dein code macht, nur so am rande

    zeigt er denn überhaupt etwas an oder kommt garnix raus ??

  5. #5
    Der Dateiinclude dürfte nicht der Fehler sein Egal welches man nimmt. Kann zumindest nix aus der Literatur entnehmen.
    Das mit dem $_Post stimmt schon, aber er schickt ja die Daten des Arrays an sich selbst und müüste dann arbeiten können. Abgesehen davon dürfte es ja dann auch nicht im XAMPP laufen, was es aber tut
    Zur Not kann ich ja mal testen, die Formalardaten an eine externe Datei zu schicken und diese dann per header wieder auf das GB-Skript (dann ohne den oberen Teil) zurückschicken zur weiteren Bearbeitung und Ausgabe der Daten.

    Zitat Zitat von [NNB
    Osbes]im übrigen kenne ich mich zufällig mit php aus und weiß was dein code macht, nur so am rande
    Das hat ja auch niemand bezweifelt. Ich bin bloß so perplex, dass ein eigentlich laut Offlineserver funktionsfähiges Skript nicht aufm Server laufen will???
    Lass Nachsicht walten; bin noch nichts so weit im Coden....versuch aber immer wieder was zu lernen. Derzeit der Versuch ne selbstprogrammierte HP zu machen, was allerdings zeitlich neben meiner 45h Arbeit, der Haushaltsführung und der sonstigen Freizeit nur schwer machbar ist.

  6. #6
    ich weiß was du meint, das er die variable ins global übernimmt, hatte dies etwas verdrängt, da dies zu überlappungen führen kann und man daher norm. aus der variable die daten zieht, die in method drin is ( oder halt $_REQUIRE ).

    sorry, bin etwas müde und da werde ich launisch, das war nur weil du mir erklären wolltest was der code macht, naja bin halt launisch ^^.

    das mit dem require sollte nur dein script schneller ablaufen lassen, require ignoriert anweisungen ( IF etc ) und wird nur dort durch das langsamere include ersetzt.

    naja, ich bin immernoch der meinung das mysql_connect is schuld, sehe jetzt im müden zustand keinen fehler. probiere mal

    $conn = mysql_connect($host, $uid, $pwd) or die("Verbindungsversuch fehlgeschlagen");

  7. #7
    Jaja, der saubere Codeaufbau. Hab aber irgendwie nie Böcke drauf immer und überall Fehlermeldungen a la @ / ! / die einzubauen. Ist aber vielleicht doch manchmal hilfreich. Ich tests mal!

  8. #8
    hats geklappt ?? ggf noch überprüfen, ob du die tabelle erstellt und richtig erstellt hast

  9. #9
    Ich habe den Code etwas umgebaut und es funzt jetzt auch. Die Zeit die PHP & MySQL zum generieren der Seite benötigen liegt bei etwa 0,01 s. Von daher sollte alles passen. Die angeforderten Daten werden auch korrekt in die Tabelle der Datenbank eingetragen.
    Derzeit plage ich mich noch im Adminbereich mit einem Fehler in der Sessionverwaltung, der, wie hätte mans auch denken können, im XAMPP-Offlineserver nicht auftrat. Sonst funktionieren aber sowohl Frontend und Backend zu meiner Zufriedenheit, auch wenn sicherlich noch viel zu tun ist
    THX @ Osbes, die Codercommunity scheint hier ja nicht wirklich groß zu sein

  10. #10
    was hast du denn für ein prob ?? normalerweise sollte bis auf einige zusätze in xampp und auf dem webspace funktionieren.

  11. #11
    Erster Fehler: Er akzeptiert nicht die md5-Verschlüsselung des vorläufigen Adminerstellungskriptes

    Quelltext: Eigentlich eine sehr simple Variante. Erzeugung wird via Befehlseingabe im Browser getätigt.

    1. <?php
    2.  
    3. include('inc/db.inc.php');
    4.  
    5. $user = $_GET['user'];
    6. $pass = $_GET['pass'];
    7.  
    8. $conn = mysql_connect($host,$uid,$pwd);
    9. if($conn)
    10. {
    11. if(mysql_select_db($db))
    12. {
    13. $pass_enc = md5($user,$pass);
    14. $sql = "INSERT INTO rsn_user (nickname,pw,active) VALUES ('$user','$pass_enc','true')";
    15. $result = mysql_query($sql);
    16. if($result)
    17. {
    18. echo "Admin wurde mit folgenden Daten erzeugt:<br><b>Benutzer:</b> $user<br><b>Passwort:</b> $pass";
    19. }
    20. else
    21. {
    22. echo 'Admin wurde nicht erzeugt!!!';
    23. }
    24. }
    25. mysql_close($conn);
    26. }
    27. ?>

    Dann gibt es noch eine login.inc.php, eine login.php und eine logout.php. Aber ich will ja nicht zu weit vorgreifen. Schleierhaft ist mir diese Fehlermeldung beim Aufruf der Datei via /datei.php?user=xxxx&pass=xxxx

    Warning: Wrong parameter count for md5() in /usr/home/xxxxx.de/htdocs/rsn/admin/create_admin.php on line 13

    Funktioniert eigentlich wunderbar im XAMPP.
    PHP.net gibt folgende Referenz:
    string md5 ( string str ) --> sollte eigentlich funzen

    EDIT: ok, anscheinend nimmt er bei der Verschlüsselung keine 2 Parameter, sondern nur einen? Zumindest hats mit einem gefunzt. Also nun zum Loginsystem!
    Geändert von -Admi- (06.11.2005 um 23:42 Uhr)

  12. #12
    logout.php sollte klargehen, funzt auch.

    1. <?
    2.  
    3.  
    4. $_SESSION['authenticated'] = false;
    5. $_SESSION['username'] = '';
    6. $_SESSION['user_id'] = '';
    7.  
    8.  
    9. header('Location: index.php');
    10.  
    11. ?>

    login.inc.php

    1. <?php
    2.  
    3. /* Überprüft, ob ein Login erfolgt ist */
    4. function is_logged_in()
    5. {
    6.  
    7. if($_SESSION['authenticated'] == true)
    8. {
    9. return true;
    10. }
    11. else
    12. {
    13. $content = '<h4>Login</h4>';
    14. $content .= '<form action="login.php" method="post">';
    15. $content .= '<table border="0" cellpadding="2" cellspacing="0">';
    16. $content .= '<tr>';
    17. $content .= '<td>Benutzername:</td><td><input type="text" class="feld" name="nickname" size="32" maxlength="50"></td>';
    18. $content .= '</tr><tr>';
    19. $content .= '<td>Passwort:</td><td><input type="password" class="feld" name="pw" size="32"></td>';
    20. $content .= '</tr><tr>';
    21. $content .= '<td></td><td><input type="submit" id="button" value="Login"></td>';
    22. $content .= '</tr>';
    23. $content .= '</table>';
    24. $content .= '</form>';
    25. echo $content;
    26. }
    27. }
    28. ?>

    login.php

    1. <?php
    2.  
    3. $username = $_POST['nickname'] ? $_POST['nickname'] : false;
    4. $password = $_POST['pw'] ? $_POST['pw'] : false;
    5.  
    6. if($username && $password)
    7. {
    8. $encrypted = md5($nickname,$pw);
    9.  
    10. include('inc/db.inc.php');
    11. $connection = mysql_connect($host,$uid,$pwd);
    12. if($connection)
    13. {
    14. if(mysql_select_db($db))
    15. {
    16. $sql = "SELECT id FROM rsn_user WHERE (nickname = '$nickname') AND (pw = '$encrypted') AND (active = 'true')";
    17. $result = mysql_query($sql);
    18. if($result && (@mysql_num_rows($result) > 0))
    19. {
    20. $row = mysql_fetch_row($result);
    21. $_SESSION['authenticated'] = true;
    22. $_SESSION['user_id'] = $row[0];
    23. $_SESSION['username'] = $username;
    24. }
    25. else
    26. {
    27. $_SESSION['authenticated'] = false;
    28. }
    29. }
    30. }
    31. }
    32. header('Location: index.php');
    33.  
    34. ?>

    Aus der Adminerzeugungsdatei würde ich sagen, dass er auch hier Probleme mit der Verschlüsselung hat.

    Eine dann geschützte Datei sieht im Grundgerüst etwa so aus.

    1. <div id="impressum">
    2. <h3><span id="span">&raquo;&nbsp;Statistik</span></h3>
    3. <?
    4. /* Konfigurationsdateien laden */
    5. include('inc/login.inc.php');
    6.  
    7. if(is_logged_in())
    8. {
    9. echo "Sie sind eingelogt!";
    10. }
    11. ?>
    12. </div>

    Als Fehlermeldung kommt dann das hier:

    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /usr/home/xxxxx.de/htdocs/rsn/admin/index.php:11) in /usr/home/xxxxx.de/htdocs/rsn/admin/inc/login.inc.php on line 3
    Geändert von -Admi- (06.11.2005 um 23:43 Uhr)

  13. #13
    Blub Das war dann wohl zuviel des Guten

  14. #14
    der fehler sagt, du hast schon daten rausgegeben. Das wäre hier der Quellcode

    1. <div id="impressum">
    2. <h3><span id="span">&raquo;&nbsp;Statistik</span></h3>

    und dann noch ne Session, das is nicht gut ^^.

    btw, sende daten pls per POST und nicht geht, denn 1. ist get auf eine datenmemnge begrenzt, alles was drüber geht wird einfach gelöscht und 2. soll man ja das pw verstecken und nicht noch offen zeigen.

    stelle dir mal vor man geht danach auf ne andere page wird das ganze ding als refferer angegeben und der benutzer der anderen page freut sich über neue login daten :>

  15. #15
    Im Loginsystem habe ich kein $_GET. Und dieses Skript (im Vorbeitrag) ist auch nur vorläufig und auch nur für den Admin. Von daher keine Gefahr

    Mit Session stimmt...hast Recht, Session muss vor jeder Ausgabe stehen, werd ich mal beheben.
    Hab jetzt sogar eine Aktivier-/Deaktivierfunktion am Start Echt feine Sache...alles was man im Userbereich nicht sehen soll, kann ausgeblendet werden.
    Geändert von -Admi- (08.11.2005 um 19:42 Uhr)

  16. #16
    ich hab mir den code jetzt nicht durchgelesen, nur das erste mit get und den fehler :>

    konnte jetzt net wissen ob du das mal geändert hast.
    wenn du willst können wiruns mal im scype unterhalten, dann kann ich dir mal meine db class geben, wirst sicher freude mit haben

  17. #17
    Ist die objektorientiert? Da hab ich mir auch mal eine angesehen...sieht in etwa so aus Damit habe ich mich mal ansatzweise beschäftigt, wollte aber eher mit den Grundlagen beginnen und mich dann Schritt für Schritt den höheren Techniken zuwenden.

    Aber ich muss schon sagen, die Entwicklung einer ganzen HP aus dem nichts ist echt ne arbeits- und zeitintensive Sache, weil sich immer irgendwo Bugs finden. Wird wohl noch 1-2 Monate mit der Entwicklung dauern. Bin ja schonmal gespannt, wie der UBZ-Code ausfällt

    jetzt nicht erschrecken

    1. <?php
    2.  
    3. #
    4. # Database Class v1.0_PHP4
    5. # ========================
    6. # Including DynQuery
    7. #
    8. # Last Update: 22-02-2004
    9. #
    10.  
    11.  
    12. class database {
    13.  
    14. //Datenbankkonfiguration
    15. var $mysql_server = "localhost";
    16. var $mysql_user = "";
    17. var $mysql_pwd = "";
    18. var $mysql_db = "";
    19.  
    20. //Verarbeitungs-Variablen
    21. var $querystring;
    22. var $result;
    23. var $fetched;
    24.  
    25. ////////////////////////////////////////////////////////////////////////////////// -> STARTUP + END
    26.  
    27.  
    28. //Verbindung herstellen
    29. function connect() {
    30. global $set;
    31. define("CONN",@mysql_connect($this->mysql_server, $this->mysql_user, $this->mysql_pwd));
    32. if ( !CONN ) $this->error("Verbindung konnte nicht hergestellt werden!<br>MySQL meldet: ".mysql_error(),1);
    33. if ( !@mysql_select_db($this->mysql_db, CONN) ) $this->error("Konnte die Datenbank ".$$this->database." nicht ausw&auml;hlen!<br>MySQL meldet: ".mysql_error(),1);
    34. }
    35.  
    36.  
    37. //Verbindung schließen
    38. function close() {
    39. @mysql_close(CONN);
    40. unset($this->querystring,$this->result,$this->fetched);
    41. }
    42.  
    43.  
    44. ////////////////////////////////////////////////////////////////////////////////// -> INSERT / UPDATE
    45.  
    46.  
    47. //Normale Datenbankanfrage
    48. function query($query) {
    49. $this->querystring=&$query;
    50.  
    51. $this->result=@mysql_query($query,CONN);
    52. if ( !$this->result ) {
    53. $this->mysqlerror();
    54. return false;
    55. }
    56. return true;
    57. }
    58.  
    59.  
    60. //DnyQuery Spalten holen
    61. function mkcols($data) {
    62. $p=explode(",",trim($data));
    63. foreach ( $p AS $onecol ) $out[]=trim($onecol);
    64. return $out;
    65. }
    66.  
    67.  
    68. //Dynamisches UPDATE
    69. function dupdate($table,$postcols,$conditions="") {
    70. $getcols=$this->mkcols($postcols);
    71.  
    72. $this->fetched=$this->fetch("SHOW COLUMNS FROM ".$table);
    73. if ( !count($this->fetched) ) {
    74. $this->error('Anforderung der Tabellen-Spalten fehlgeschlagen<br />Tabelle: '.$table);
    75. return false;
    76. }
    77.  
    78. foreach ( $this->fetched AS $thecol ) {
    79. if ( in_array($thecol['Field'],$getcols) && isset($_POST[$thecol['Field']]) ) $colcache[]=$thecol['Field']."='".addslashes($_POST[$thecol['Field']])."'";
    80. }
    81.  
    82. $commands=@implode(", ",$colcache);
    83. if ( !$this->query("UPDATE ".$table." SET ".$commands." ".$conditions) ) return false;
    84. return true;
    85. }
    86.  
    87.  
    88. //Dynamischer INSERT
    89. function dinsert($table,$postcols) {
    90. $getcols=$this->mkcols($postcols);
    91.  
    92. $this->fetched=$this->fetch("SHOW COLUMNS FROM ".$table);
    93. if ( !count($this->fetched) ) {
    94. $this->error('Anforderung der Tabellen-Spalten fehlgeschlagen<br />Tabelle: '.$table);
    95. return false;
    96. }
    97.  
    98. foreach ( $this->fetched AS $thecol ) {
    99. if ( in_array($thecol['Field'],$getcols) && isset($_POST[$thecol['Field']]) ) {
    100. $colcache[]=$thecol['Field'];
    101. $valcache[]="'".addslashes($_POST[$thecol['Field']])."'";
    102. }
    103. }
    104.  
    105. $cols=@implode(", ",$colcache);
    106. $values=@implode(", ",$valcache);
    107. if ( !$this->query("INSERT INTO ".$table." (".$cols.") VALUES (".$values.")") ) return false;
    108. return true;
    109. }
    110.  
    111.  
    112. ////////////////////////////////////////////////////////////////////////////////// -> SELECT
    113.  
    114.  
    115. //Datenbankanfrage mit SELECT
    116. function selquery() {
    117. $this->result=@mysql_query($this->querystring,CONN);
    118. if ( !$this->result ) {
    119. $this->mysqlerror();
    120. return false;
    121. }
    122. return true;
    123. }
    124.  
    125.  
    126. //Select Datenbankanfrage, mehrzeilig
    127. function fetch($query,$restype=0) {
    128. $this->querystring=&$query;
    129. unset($this->fetched); //Alte Werte löschen
    130.  
    131. if ( $restype==1 ) $restype=MYSQL_ASSOC;
    132. else $restype=MYSQL_BOTH;
    133.  
    134. if ( !$this->selquery() ) return array(); //Query
    135. while ( $element=@mysql_fetch_array($this->result,$restype) ) $this->fetched[]=$element;
    136. @mysql_free_result($this->result);
    137. return $this->fetched;
    138. }
    139.  
    140.  
    141. //Select Datenbankanfrage, erste Zeile
    142. function first($query,$restype=0) {
    143. $this->querystring=&$query;
    144. unset($this->fetched); //Alte Werte löschen
    145.  
    146. if ( $restype==1 ) $restype=MYSQL_ASSOC;
    147. else $restype=MYSQL_BOTH;
    148.  
    149. if ( !$this->selquery() ) return false; //Query
    150. $this->fetched=@mysql_fetch_array($this->result,$restype);
    151. @mysql_free_result($this->result);
    152. return $this->fetched;
    153. }
    154.  
    155.  
    156. ////////////////////////////////////////////////////////////////////////////////// -> FEHLERMELDUNGEN
    157.  
    158. //Fehler ausgeben
    159. function error($text,$die=false) {
    160. echo '<p><b>MySQL Fehler:</b><br>'.$text.'</p>';
    161. if ( $die ) exit;
    162. }
    163.  
    164.  
    165. //MySQL-Fehler -> Text
    166. function mysqlerror() {
    167. $this->error('Anfrage: '.$this->querystring.'<br>MySQL meldet: '.mysql_error());
    168. }
    169.  
    170. }
    171.  
    172. ?>

  18. #18
    sehr umständliche db class und ja, is OOP außerdem muss man ja die abfrage sofort absenden und kann net sammeln

    ich kann dir ja mal meine zeigen:

    1. <?php
    2. final class db
    3. {
    4. // function __construct() Variablen
    5. private $host = ''; //localhost:3306
    6. private $user = ''; //root
    7. private $password = '';
    8. private $database = '';
    9. private $boolean = ''; //false
    10. // function db_query() Variablen
    11. protected $query = array();
    12. protected $pre = array();
    13. // function db_fetch() Variablen
    14. public $fetch = array();
    15. // function db_errmsg() Variablen
    16. public $errormsg = '';
    17. // function db_ausgabe() Variablen
    18. public $ausgabe = '';
    19.  
    20. // Konstrukt
    21. function __construct($server='localhost',$user='root',$password='',$database,$boolean=false)
    22. {
    23. $this->host = & $host;
    24. $this->user = & $user;
    25. $this->password = & $password;
    26. $this->database = & $database;
    27. $this->boolean = & $boolean;
    28. $this->db_connect();
    29. }
    30.  
    31. // Verbindung zur MySql Datenbank
    32. function db_connect()
    33. {
    34. if (!@mysql_connect($this->host,$this->user,$this->password))
    35. return $this->db_errmsg();
    36. if ($this->database)
    37. {
    38. if ($this->boolean)
    39. $this->db_create_db();
    40. if (!@mysql_select_db($this->database))
    41. return $this->db_errmsg(1);
    42. else
    43. $this->ausgabe .= 'Verbindung zur Datenbank war erfolgreich<br>';
    44. }
    45. else
    46. $this->errormsg .= 'Bitte wählen sie eine Datenbank aus<br>';
    47. }
    48.  
    49. // Anfragen an die Datenbank
    50. function db_query($array,$buffer=0) // $array = $GLOBALS[query]
    51. {
    52. if (!$array)
    53. $this->errormsg .= 'Bitte geben sie den gewünschten Befehl ein<br>';
    54. else
    55. {
    56. $this->pre=array_keys($array);
    57. for ($i=0; $i<count($array); $i++)
    58. {
    59. if ($buffer && version_compare(phpversion(),'4.0.6','>='))
    60. $array[$this->pre[$i]]=substr_replace($array[$this->pre[$i]],' LOW_PRIORITY',strpos($array[$this->pre[$i]],' '),0);
    61. if (($this->query[]=@mysql_query($array[$this->pre[$i]]))===false)
    62. {
    63. (count($array) == 1) ? $this->errormsg .= 'Die Anfrage ist fehlgeschlagen!<br>' : $this->errormsg .= 'Die Anfrage ist nach dem '.($i+1).'. Befehl fehlgeschlagen!<br>';
    64. return $this->db_errmsg();
    65. }
    66. }
    67. (count($array) == 1) ? $this->ausgabe .= 'Die Anfrage war erfolgreich<br>' : $this->ausgabe .= 'Alle '.count($array).' Anfragen waren erfolgreich<br>';
    68. if ($this->query)
    69. $this->db_fetch();
    70. }
    71. }
    72.  
    73. // Umwandlung von Tabellenwerten in Array ( standard: [uid][numerisch][assoziativ] alternativ: [uid][numerisch][numerisch] )
    74. function db_fetch()
    75. {
    76. for($a=0;$a<count($this->query);$a++)
    77. for($i=0;$i<@mysql_num_rows($this->query[$a]);$i++)
    78. $this->fetch[$this->pre[$a]][]=@mysql_fetch_array($this->query[$a]);
    79. unset($this->query);
    80. }
    81.  
    82. // veraltete Funktion, nur in AUSNAHMEFALL nutzen
    83. function db_create_db()
    84. {
    85. if (!@mysql_create_db($this->database))
    86. return $this->db_errmsg();
    87. $this->ausgabe .= 'Die Datenbank &quot;'.$this->database.'&quot; wurde erfolgreich erzeugt';
    88. }
    89.  
    90. // Fehlermeldungen
    91. function db_errmsg($boolean=0)
    92. {
    93. if (!$boolean && mysql_errno())
    94. {
    95. global $mailto;
    96. $this->errormsg = '<pre><b>Fehler in der Datenbank Klasse</b><br><br>'.$this->errormsg.'<br>Bitte probieren sie es erneut oder wenden sie sich an <a href="mailto:'.$mailto['email'].'?subject=Fehler%20bei%20der%20Datenbank&body=Fehlercode:%20'.mysql_errno().'%0D%0ABedeutung:%20'.mysql_error().'%0D%0ADatum:%20'.date('d.m.Y%20@%20H:i').'%0D%0AUrl:%20'.getenv('REQUEST_URI').'">'.$mailto['email'].'</a><br>';
    97. $this->errormsg .= '-----------------------------<br>';
    98. $this->errormsg .= '<b>Fehlercode: </b>'.mysql_errno().'<br>';
    99. ($this->pre) ? $this->errormsg .= '<b>Query: </b>'.current($this->pre).'<br>' : $this->errormsg .= $this->pre[$i];
    100. $this->errormsg .= '<b>Bedeutung: </b>'.mysql_error().'<br>';
    101. $this->errormsg .= '<b>Datum: </b>'.date('d.m.Y @ H:i').'<br>';
    102. $this->errormsg .= '<b>Url: </b>'.getenv('REQUEST_URI').'<br>';
    103. $this->errormsg .= '<b>Referer: </b>';
    104. (!getenv('HTTP_REFERER')) ? $this->errormsg .= 'unbekannt<br>' : $this->errormsg .= getenv('HTTP_REFERER').'<br>';
    105. echo $this->errormsg;
    106. exit(0);
    107. }
    108. require ('error.php');
    109. exit(0);
    110. }
    111.  
    112. // Ausgabe des Scriptes ( Standard: NULL )
    113. function db_ausgabe()
    114. {
    115. return $this->errormsg.$this->ausgabe;
    116. }
    117. }
    118. ?>

    und naja, die UBZ Seite is gut Strukturiert, das liegt aber auch daran, das ich alle abläufe die nicht gerade einmalig sind als class schreibe und das sehr dynamisch halte.

  19. #19
    Klingt ganz interessant, auch wenn ich mir einige Sachen erst noch genauer ansehen muss. Gewisse Funktionen sind mir noch gar nicht geläufig. Ist das PHP 5? Bin ja noch an Version 4 verhaftet...mein HP-Host kann eh kein 5er

    Hab jetzt auch ein Kommentarsystem für News und Artikel laufen. Eigentlich nicht wirklich schwer. Muss ja lediglich eine 1:n Beziehung aufbauen und die newsid in der Kommentartabelle der DB ablegen und die beim Select via Where-Abfrage aufrufen.
    Bei Gelegenheit (wahrscheinlich am WE nach der Arbeit) werd ich mich mal einem PM-System widmen. Bestimmt ganz lustig und immer gern gesehen auf HPs.

    Ist die UBZ von Grund auf neu geschrieben (wir können das aber auch gerne im Internen Mod-Forum besprechen )? Ich find es immer schwer, mich in das System anderer Coder einzufinden, zumal jeder seinen eigenen Stil hat und es zig Möglichkeiten gibt, eine Sache umzusetzen. Von der Fehlersuche mal ganz zu schweigen.

    Kommt es mir nur so vor oder gibts hier nur 2 User, die sich mit PHP und MySQL beschäftigen

  20. #20
    So, Session und so funzt nun auch...gibt aber wieder n neues Prob.

    Bei der Aktivierungsfunktion muckt wiedermal der Server. Was soll eigentlich der Schwachsinn, dass XAMPP alles ausführt und der Server ständig motzt???

    Nunja, am Ende des Skripts leite ich via header-Funkion wieder auf die originäre Seite zurück. Sieht dann so etwa aus:

    header("Location: index.php?section=$sec");

    $sec steht für section und wird vom Ursprungsskript übermittelt. Rein theoretisch sollte es also nach dem Ausführen (was er auch tut) wieder zurückleiten.

    Wird aber so belohnt:
    Warning: Cannot modify header information - headers already sent by (output started at /usr/home/xxx.de/htdocs/rsn/admin/index.php:12) in /usr/home/xxx.de/htdocs/rsn/admin/module/inactive.php on line 22

    Gibts da irgendwas zu beachten? Die Doku ist da wiedermal nicht gerade aufschlußreich. Ggf könnte man noch über HTML-Refresh oder JS history.back arbeiten, aber das müsste doch auch so gehen

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Problem mit php session
    Von BseBear im Forum Technik Ecke
    Antworten: 6
    Letzter Beitrag: 07.06.2007, 19:18
  2. kleines php / mysql problem(sehr suspekt o_O)
    Von Maggy im Forum Technik Ecke
    Antworten: 2
    Letzter Beitrag: 11.04.2006, 15:18
  3. Hab Problem mit Php
    Von gondy im Forum Technik Ecke
    Antworten: 1
    Letzter Beitrag: 03.01.2004, 18:45
  4. apache, php, perl, mysql;
    Von starter im Forum Technik Ecke
    Antworten: 6
    Letzter Beitrag: 31.07.2002, 00:07
  5. webspace mit php und mysql
    Von m@x im Forum Technik Ecke
    Antworten: 15
    Letzter Beitrag: 17.05.2002, 21:02

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •