Andris: Datenbank füllen

Hallo allerseits,

ich möchte ein kleines CMS bauen. dafür habe ich einige dateien erstellt.

ein interface, wo man die daten eingeben kann, womit eine tabelle in einer datenbank gefüllt werden soll. und natürlich ein file, welches die daten aus der datenbank abruft. wenn ich die tabelle über phpmyadmin direkt fülle, funktioniert alles wunderbar, doch will ich meinem kunden das phpmyadmin interface nicht zumuten und es ihm so einfach wie möglich machen. ich habe in meinem script einige fehlermeldungen eingebaut, aber einen fehler bringe ich einfach nicht raus. und zwar schlägt die sql-query immer fehl.

ja hier einige script brocken. falls mir jemand helfen könnte wäre ich super froh.

so sieht das formular der eingabe seite aus:

<form name="newseintrag" action="news.entry.php" method="post">
  <table border="0" align="center" cellpadding="10" bgcolor="#FFFFFF">
 <tr>
  <td colspan="2" bgcolor="#666666"><div align="center"><img src="images/logo_klein.png" width="100" height="99" align="middle">

<h2 class="style1">Content Management System</h2>
   </div>
   <?php
   if(isset($isError) AND $isError == TRUE){
    echo"<span style='color:red; font-family:Arial; font-weight:bold;'><ul left-margin:0;>".$error_msg."</ul></span>\n";
   }
  ?>

</td>
 </tr>
 <tr>
  <td>
   <h2>Platzierung:</h2>  </td>
  <td>
   <input type="text" name="id" size="10" value="<?php echo $_POST['id']; ?>"/>  </td>
 </tr>
 <tr>
  <td>
   <h2>Titel:</h2>  </td>
  <td>
   <input type="text" name="titel" size="100" value="<?php echo $_POST['titel']; ?>"/>  </td>
 </tr>
 <tr>
  <td valign="top">
   <h2>News:</h2>  </td>
  <td><textarea name="news" cols="80" rows="10" value="<?php echo $_POST['news']; ?>"></textarea></td>
 </tr>
 <tr>
  <td>&nbsp;   </td>
  <td>
   <input type="submit" name="b1" value="News eintragen!">  </td>
 </tr>
</table>

</form>

mit diesem file sollte die datenbank gefüllt werden:

<?php
//Konstanten und Funktionen einbinden
include("include/definitionen.php");

//POST-Variablen uebernehmen

$titel  = $_POST['titel'];
$news  = $_POST['news'];
$id   = $_POST['id'];

//Variable vordefinieren
$isError = FALSE;

if(empty($id)){
 $isError = TRUE;
 $error_msg .= "<li>Bitte Platzierung bestimmen!</li>";
}

if(empty($titel)){
 $isError = TRUE;
 $error_msg .= "<li>Bitte Titel eintragen!</li>";
}

if(empty($news)){
 $isError = TRUE;
 $error_msg .= "<li>Bitte News eintragen!</li>";
}

//abfragen, ob ein fehler aufgetreten ist
if($isError){
 //formular nochmals ausgeben
 include("newseintrag.php");
}else{

//SQL-Query erstellen
 $sql_query = "INSERT INTO ".MYSQL_DATABASE;
 $sql_query .= " (id, titel, news) ";
 $sql_query .= "VALUES";
 $sql_query .= " ('".$id."',";
 $sql_query .= " '".$titel."',";
 $sql_query .= " '".$news."',";
 $sql_query .= " '".$_SERVER['REMOTE_ADDR']."')";

//SQL-Query abschicken
 $eintrag = querysenden($sql_query);

//header an den browser senden, damit dieser eine neue seite laedt
 header("location: home.php?neu=1");
}

?>

dann noch die eingebunden files:

<?php
//Server Konstanten

define('MYSQL_HOST', 'localhost');       // Datenbank Server
define('MYSQL_USER', 'x');        // Datenbank Benutzer
define('MYSQL_PASS', 'y');        // Datenbank Passwort
define('MYSQL_DATABASE', '21087_sabor');    // Datenbank Name
define('MYSQL_NEWS', 'news');         // Datenbank Tabelle News

//Funktionen einbinden

include("funktionen.php");

?>

und dann noch, und das ist wahrscheinlich das problemfile:

<?php

function querysenden($query){

//schritt 1: mit dbserver verbinden
 //mysql_connect("server", "benutzername", "passwort")
 //@ unterdrueckt die fehlermeldung
 @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)
 OR die("ERROR: keine Verbindung zum DB-Server!");

//schritt 2: db auswaehlen
 mysql_select_db(MYSQL_DATABASE) OR die("ERROR: DB wurde nicht gefunden!");

//schritt 4: sql-query absenden
 $rueckgabe = mysql_query($query) OR die("ERROR: SQL-Query fehlgeschlagen!");

//schritt 5: db verbindung trennen
 mysql_close();

//resultat zurueckliefern
 return $rueckgabe;
 }

function datenlesen($suchID){
   //sql-query definieren
   $sql_query = "SELECT * FROM ".MYSQL_GUEST." WHERE id=".$suchID;

//sql-query senden
   $resultat = querysenden($sql_query);

// datensatz auslesen und in ein assiziatives array speichern
   while($zeile = mysql_fetch_assoc($resultat)){
    $item['id'] = $zeile['id'];
    $item['titel'] = $zeile['titel'];
    $item['news'] = $zeile['news'];
   }

return $item;
  }

?>

  1. Sei bitte mal so gut und gebe die SQL-Statements an, die tatsächlich abgesandt und fehlerauslösend wurden. Diese Problemisolierung wäre so zu sagen noch Deine Aufgabe.

    1. Sei bitte mal so gut und gebe die SQL-Statements an, die tatsächlich abgesandt und fehlerauslösend wurden. Diese Problemisolierung wäre so zu sagen noch Deine Aufgabe.

      Also wenn ich das Formular abschicken will, kommt die eigens definierte Fehlermeldung "SQL-Query fehlgeschlagen".

      //schritt 4: sql-query absenden
      $rueckgabe = mysql_query($query) OR die("ERROR: SQL-Query fehlgeschlagen!");

      reicht das?

      1. Sei bitte mal so gut und gebe die SQL-Statements an, die tatsächlich abgesandt und fehlerauslösend wurden. Diese Problemisolierung wäre so zu sagen noch Deine Aufgabe.

        Also wenn ich das Formular abschicken will, kommt die eigens definierte Fehlermeldung "SQL-Query fehlgeschlagen".

        //schritt 4: sql-query absenden
        $rueckgabe = mysql_query($query) OR die("ERROR: SQL-Query fehlgeschlagen!");

        reicht das?

        Fast, bitte mal den Variableninhalt von $query "zum Zeitpunkt des Fehlers" bereitstellen. Ggf. auch das von Dir implementierte Datendesign (die Tabellenstruktur und ggf. "Specials").

        1. Fast, bitte mal den Variableninhalt von $query "zum Zeitpunkt des Fehlers" bereitstellen. Ggf. auch das von Dir implementierte Datendesign (die Tabellenstruktur und ggf. "Specials").

          So sieht die gesamte funktion aus, fehlschlägt:

          function querysenden($query){

          //schritt 1: mit dbserver verbinden
           //mysql_connect("server", "benutzername", "passwort")
           //@ unterdrueckt die fehlermeldung
           @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)
           OR die("ERROR: keine Verbindung zum DB-Server!");

          //schritt 2: db auswaehlen
           mysql_select_db(MYSQL_DATABASE) OR die("ERROR: DB wurde nicht gefunden!");

          //schritt 4: sql-query absenden
           $rueckgabe = mysql_query($query) OR die("ERROR: SQL-Query fehlgeschlagen!");

          //schritt 5: db verbindung trennen
           mysql_close();

          //resultat zurueckliefern
           return $rueckgabe;
           }

          Die Tabellen Struktur:

          3 Felder:

          1. id | char(1)
          2. titel | varchar(100)
          3. news | text

          hilft dir das?

          1. Fast, bitte mal den Variableninhalt von $query "zum Zeitpunkt des Fehlers" bereitstellen. Ggf. auch das von Dir implementierte Datendesign (die Tabellenstruktur und ggf. "Specials").

            Die Tabellen Struktur:

            3 Felder:

            1. id | char(1)
            2. titel | varchar(100)
            3. news | text

            hilft dir das?

            Leider nicht ausreichend, wir wiederholen noch einmal: Benötigt werden Angaben

            • zum Variableninhalt von $query "zum Zeitpunkt des Fehlers"
            • die Tabellenstruktur (teilw. schon da, bitte noch Tabellennamen liefern - Zusatzfrage: War das das gesamte Daten-Design?)
            1. Leider nicht ausreichend, wir wiederholen noch einmal: Benötigt werden Angaben

              • zum Variableninhalt von $query "zum Zeitpunkt des Fehlers"
              • die Tabellenstruktur (teilw. schon da, bitte noch Tabellennamen liefern - Zusatzfrage: War das das gesamte Daten-Design?)

              wegen Daten Design: meinst du wie die tabelle in der datenbank definiert ist? dort steht noch unter NULL: nein bei allen drei zellen.

              tabellenname: news
              datenbankname: 21078_sabor

              weiss nicht wie ich dir den inhalt von $query sagen soll. den inhalt der drei felder?

              1. wegen Daten Design: meinst du wie die tabelle in der datenbank definiert ist? dort steht noch unter NULL: nein bei allen drei zellen.

                tabellenname: news
                datenbankname: 21078_sabor

                Der Tabellenname ist nun da, danke.

                weiss nicht wie ich dir den inhalt von $query sagen soll. den inhalt der drei felder?

                Mit einem echo oder die() kriegst Du den Inhalt, den Du dann bitte hier publizierst. Wohlgemerkt: Benötigt wird erst einmal das SQL-Statement, nicht die Antwort des Datenservers (die Du aber auch gerne liefern könntest (bspw. per die())).

                1. Mit einem echo oder die() kriegst Du den Inhalt, den Du dann bitte hier publizierst. Wohlgemerkt: Benötigt wird erst einmal das SQL-Statement, nicht die Antwort des Datenservers (die Du aber auch gerne liefern könntest (bspw. per die())).

                  ja irgendwie wird das wohl nichts. hab keine ahnung, wo ich das echo einbauen soll. aber trotzdem vielen dank für deine hilfe.

                  1. Mit einem echo oder die() kriegst Du den Inhalt, den Du dann bitte hier publizierst. Wohlgemerkt: Benötigt wird erst einmal das SQL-Statement, nicht die Antwort des Datenservers (die Du aber auch gerne liefern könntest (bspw. per die())).

                    ja irgendwie wird das wohl nichts. hab keine ahnung, wo ich das echo einbauen soll. aber trotzdem vielen dank für deine hilfe.

                    Du hast doch schon das die(), dann pack $query in das die().

                    1. Du hast doch schon das die(), dann pack $query in das die().

                      habst geschafft:

                      INSERT INTO 21087_sabor (id, titel, news) VALUES ('2', 'titel', 'news', '84.226.120.147')

                      1. Es hat geklappt!!!!!

                        vielen Dank an alle, die mir geholfen haben.

                        musste die sql_query anpassen.

                        freude herrscht!
                        nach oben

            2. Leider nicht ausreichend, wir wiederholen noch einmal: Benötigt werden Angaben

              • zum Variableninhalt von $query "zum Zeitpunkt des Fehlers"
              • die Tabellenstruktur (teilw. schon da, bitte noch Tabellennamen liefern - Zusatzfrage: War das das gesamte Daten-Design?)

              habe eben das file nicht wirklich selbst geschrieben, sondern von einem gästebuch file angepasst, das wir in der schule gemacht haben, und ich nicht mehr genau kapiere.

              1. habe eben das file nicht wirklich selbst geschrieben, sondern von einem gästebuch file angepasst, das wir in der schule gemacht haben, und ich nicht mehr genau kapiere.

                Irgendwelche PHP-Kenntnisse vorhanden? Falls nicht, wird es etwas mau aussehen mit dem "ich möchte ein kleines CMS bauen."

                1. Irgendwelche PHP-Kenntnisse vorhanden? Falls nicht, wird es etwas mau aussehen mit dem "ich möchte ein kleines CMS bauen."

                  ja ich kann kontaktformulare bauen. das ist doch schon was.

          2. Hello,

            //@ unterdrueckt die fehlermeldung
            @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS)
            OR die("ERROR: keine Verbindung zum DB-Server!");

            solange Dein Machwerk nicht funktioniert, solltest Du keinerlei Fehlermeldungen unterdrücken. Ganz im Gegenteil solltets Du auch die Notices einschalten.

            ein

            error_reporting ( E_ALL);

            am Anfang des Scriptes wirkt da manchmal Wunder bei der Fehlersuche.
            http://www.php.net/manual/en/function.error-reporting.php

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. solange Dein Machwerk nicht funktioniert, solltest Du keinerlei Fehlermeldungen unterdrücken. Ganz im Gegenteil solltets Du auch die Notices einschalten.

              hab das @ rausgenommen, aber es kommt immer noch dieselbe fehlermeldung:

              ERROR: SQL-query fehlgeschlagen.

              1. solange Dein Machwerk nicht funktioniert, solltest Du keinerlei Fehlermeldungen unterdrücken. Ganz im Gegenteil solltets Du auch die Notices einschalten.

                hab das @ rausgenommen, aber es kommt immer noch dieselbe fehlermeldung:

                ERROR: SQL-query fehlgeschlagen.

                Und deine Aufgabe ist es, in diese Ausgabe noch den Inhalt von $query mit auszugeben, damit wir erfahren, welchen Query die Datenbank als fehlerhaft zurückweist.

                1. Und deine Aufgabe ist es, in diese Ausgabe noch den Inhalt von $query mit auszugeben, damit wir erfahren, welchen Query die Datenbank als fehlerhaft zurückweist.

                  sowas?:

                  INSERT INTO 21087_sabor (id, titel, news) VALUES ('2', 'titel', 'news', '84.226.120.147')

                  1. Und deine Aufgabe ist es, in diese Ausgabe noch den Inhalt von $query mit auszugeben, damit wir erfahren, welchen Query die Datenbank als fehlerhaft zurückweist.

                    sowas?:

                    INSERT INTO 21087_sabor (id, titel, news) VALUES ('2', 'titel', 'news', '84.226.120.147')

                    Exakt!

                    Und schon wird klar, wo eines der Probleme liegt: Du gibst 3 Spalten an, in die Werte kommen sollen, aber hinter VALUES stehen vier Werte.

                    1. Und schon wird klar, wo eines der Probleme liegt: Du gibst 3 Spalten an, in die Werte kommen sollen, aber hinter VALUES stehen vier Werte.

                      ja das hab ich auch bemerkt. aber wieso packt es mir da eine ip-adresse rein?

                      1. Es hat geklappt!!!!!

                        vielen Dank an alle, die mir geholfen haben.

                        musste die sql_query anpassen.

                        freude herrscht!

                      2. Und schon wird klar, wo eines der Probleme liegt: Du gibst 3 Spalten an, in die Werte kommen sollen, aber hinter VALUES stehen vier Werte.

                        ja das hab ich auch bemerkt. aber wieso packt es mir da eine ip-adresse rein?

                        Du hast das doch programmiert? Mußt du doch auch wissen, was du da reinpackst. Mindestens aber solltest du rausfinden, wo das passiert, damit du es korrigieren kannst.

              2. Hello,

                solange Dein Machwerk nicht funktioniert, solltest Du keinerlei Fehlermeldungen unterdrücken. Ganz im Gegenteil solltets Du auch die Notices einschalten.

                hab das @ rausgenommen, aber es kommt immer noch dieselbe fehlermeldung:

                Fehler in SQL-Queries werden nicht automatisch an die Standardausgabe geleitet.

                Du solltest daher immer

                $err = mysql_query();

                if (!empty($err))
                   {
                     fehlerbehandlung (mysql_errno(), mysql_error());
                   }

                Fehlerbehandlung() musst Du Dir natürlich selber schreiben...
                Fang einfach mit

                echo mysql_error();

                an.

                ERROR: SQL-query fehlgeschlagen.

                Harzliche Grüße vom Berg
                http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau