Eintragung in MySQL funktioniert nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Eintragung in MySQL funktioniert nicht

    Ich versuche gerade mein erstes Script mit PHP und MySQL zu schreiben und zwar handelt es sich hierbei um ein Newsscript. Ich hänge gerade bei der Kommentar-funktion. Hier mal der Code bzw. Codes:

    PHP-Code:
    <body>

    <?php
    include("zugriff.inc.php");
    include(
    "admin.inc.php");
    ?>

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <strong>Name</strong>:<br>
    <input type="text" name="Name" size="50"><br>
    Comment (<small>HTML noch möglich</small>):<br>
    <textarea cols="65" rows="15" wrap="soft" name="Comment">
    </textarea><br>
    <input type="submit" value="Comment abschicken!">
    </form>

    <?php
    $news_id
    =$_GET[id];
    echo
    "$news_id<br>"
    ?>

    <?php

    if (!empty($_POST["Comment"]) && !empty($_POST["Name"])) {
    $datum=date("d.m.Y, H:i") . " Uhr";
    $sql="INSERT INTO comments (Id,news_id,Name,Datum,Comment)" .
    "VALUES ('', '$news_id', '$_POST[Name]', " .
    "'$datum', '$_POST[Comment]')";
    mysql_query($sql);
    echo 
    "<h3>Eintrag vorgenommen! $news_id</h3>";
    }
    ?>
    <?php
    echo"$news_id";
    ?>
    </body>
    Ich weiss das ihr Wert auf gutes Layout legt jedoch habe ich damit noch überhaupt keine Erfahrung und werde mich daher erst später darum kümmern.

    Hier der SQL-Teil:

    Code:
    create table cms (
    id int not null auto_increment primary key,
    Name varchar (35),
    Headline varchar (80),
    Datum varchar (30),
    Eintrag text
    )
    
    
    create table comments (
    id int not null auto_increment primary key,
    news_id INT,
    Name VARCHAR (30),
    Datum vARCHAR (30),
    Comment Text
    )
    Also, die eigentliche News_id zu der der Kommentar gehören sollte, übergebe ich über die URL und wird dann auch von dort ausgelesen. Jedoch schreibt er wenn ich es in die Datenbank eingtragen möchte in der Tabelle comments bei news_id immer eine "0".
    Zur Kontrolle ob das mit dem Auslesen der ID aus der URL überhaupt funktioniert, gebe ich sie mit einem Echo wieder aus.

    Ich bedanke mich schon im Vorraus für eure Hilfe!

    GruPhi

  • #2
    Re: Eintragung in MySQL funktioniert nicht

    error_reporting(E_ALL); ?!
    richtige Verkettung von Strings mit Variablen?!

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Weiss zwar net genau was du meinst aber ja.. Ich hab den Code mal so modifiziert (dieses Error Teil und mysql_close am Schluss:

      PHP-Code:
      <body>

      <?php
      include("zugriff.inc.php");
      include(
      "admin.inc.php");
      error_reporting(E_ALL);
      ?>

      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
      <strong>Name</strong>:<br>
      <input type="text" name="Name" size="50"><br>
      Comment (<small>HTML noch möglich</small>):<br>
      <textarea cols="65" rows="15" wrap="soft" name="Comment">
      </textarea><br>
      <input type="submit" value="Comment abschicken!">
      </form>

      <?php
      $news_id 
      $_GET["id"];
      echo
      "$news_id<br>"
      ?>

      <?php

      if (!empty($_POST["Name"]) && !empty($_POST["Comment"])) {
      $datum=date("d.m.Y, H:i") . " Uhr";
      $sql="INSERT INTO `comments` (`id`, `news_id`, `Name`, `Datum`, `Comment`) VALUES (NULL, '$_GET[id]', '$_POST[Name]', '$datum', '$_POST[Comment]')";
      mysql_query($sql);
      echo 
      "<h3>Eintrag vorgenommen! $news_id</h3>";
      }
      mysql_close ();
      ?>
      <?php
      echo"$news_id";
      ?>
      </body>
      Hat sich nix geändert.

      //

      Sobald ich das Formular abschicke gibt es jetzt 3 Fehler aus:

      Notice: Undefined index: id in C:\Programme\xampp\xampp\htdocs\cms\comments.php on line 26


      Notice: Undefined variable: news_id in C:\Programme\xampp\xampp\htdocs\cms\comments.php on line 36
      Zuletzt geändert von phimei; 29.07.2006, 13:23.

      Kommentar


      • #4
        Original geschrieben von phimei
        Sobald ich das Formular abschicke gibt es jetzt 3 Fehler aus:
        verstehen und beheben, hinterher Query ausgeben, bevor du ihn an die Datenbank schickst (echo $sql und gucken ob das drin steht was du erwartest

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Hab jetzt mal nach der Eingabe in die DB echo "$sql"; gemacht:

          Code:
          INSERT INTO comments (id,news_id,Name,Datum,Comment) VALUES ('', '', 'Test', '29.07.2006, 15:11 Uhr', 'Nur ein Test!')
          Aber wieso dass er beim news_id wieder "null" schreibt, kann ich mir nicht erklären

          Aktueller Code:

          PHP-Code:
          <?php
          include("zugriff.inc.php");
          include(
          "admin.inc.php");
          error_reporting(E_ALL);
          ?>

          <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
          <strong>Name</strong>:<br>
          <input type="text" name="Name" size="50"><br>
          Comment (<small>HTML noch möglich</small>):<br>
          <textarea cols="65" rows="15" wrap="soft" name="Comment">
          </textarea><br>
          <input type="submit" value="Comment abschicken!">
          </form>

          <?php
          $news_id
          =$_GET["id"];
          echo
          "$news_id<br>";
          ?>

          <?php

          if (!empty($_POST["Name"]) && !empty($_POST["Comment"])) {
          $datum=date("d.m.Y, H:i") . " Uhr";
          $news_id=$_GET["id"];
          $sql="INSERT INTO comments (id,news_id,Name,Datum,Comment) VALUES ('', '".$news_id."', '".$_POST['Name']."', '".$datum."', '".$_POST['Comment']."')";
          mysql_query($sql);
          echo 
          "<h3>Eintrag vorgenommen! $news_id $sql</h3>";
          }
          mysql_close ();
          ?>
          <?php
          echo"$news_id";
          ?>

          Kommentar


          • #6
            Original geschrieben von phimei
            Aber wieso dass er beim news_id wieder "null" schreibt, kann ich mir nicht erklären
            dann mach Debug-Ausgaben

            PHP-Code:
            echo $news_id;
            echo 
            $_GET['id']; 
            könnten dich zum Beispiel schon weiter bringen.

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Ich glaube ich weiss wo es liegen könnte. Und zwar wenn ich das Formular absende geht die id verloren und daher schreibt er null.
              Ist dass möglich?

              Kommentar


              • #8
                Original geschrieben von phimei
                Ich glaube ich weiss wo es liegen könnte. Und zwar wenn ich das Formular absende geht die id verloren und daher schreibt er null.
                Ist dass möglich?
                (ausprobieren? Oo,)
                ist aber richtig ^^

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  So, hab das Problem jetzt anders gelöst. Jetzt läuft es nicht mehr mit der Get-funktion sonder es läuft jetzt alles mit post. (Schaut euch am besten die Codes an) Also, zu einem gibt es jetzt die eingabe der Kommentare:

                  PHP-Code:
                  <?php
                  if (is_numeric($_GET['id'])) {
                  $news_id $_GET['id'];
                  echo <<<SUBTOPICFORM
                  <div><strong>Kommentar verfassen</strong>
                  <form action="submit_comments.php" method="post">
                  Name:<br>
                  <input type="text" size="60" maxlength="50" name="name"><br>
                  Deine Botschaft:<br>
                  <textarea cols="60" rows="10" name="comment">
                  </textarea><br>
                  <input type="hidden" value="
                  {$news_id}" name="news_id">
                  <input type="submit" value="Kommentar absenden" name="subsend">
                  </form>
                  </div>
                  SUBTOPICFORM;
                  }
                  ?>
                  (Werde das Script demnächst so ergänzen, dass er die news_id nicht mehr per get holen muss sondern auch per post erhält.)

                  Dieses Script oben schickt jetzt die Daten inklusive der news_id weiter an die submit_comments.php. Dort findet dann die Eintragung statt:

                  PHP-Code:
                  <?php
                  if (isset($_POST['name']) && isset($_POST['comment'])
                  && 
                  is_numeric($_POST['news_id'])) {
                    
                  $news_id $_POST['news_id'];  // id übernehmen
                    
                  $status "";
                    
                  $date=date("d.m.Y, H:i:s") . " Uhr"//Datum festlegen
                    
                  $name trim($_POST['name']);    // Feldangaben übernehmen
                    
                  $comment trim($_POST['comment']);
                    if (
                  strlen($comment) < 5) {
                      
                  $status .= "<div>Dein Kommentar möge doch mehr als 5 Zeichen haben</div>"//Falls der Kommentar kleiner als 5 Zeichen haben sollte, wird dieser Satz ausgeben
                    
                  }
                    if (empty(
                  $status)) {
                    
                  $name htmlspecialchars($name);
                    
                  $comment nl2br(htmlspecialchars($comment));
                  $sql_putin "INSERT INTO comments
                  (id, news_id, Name, Datum, Comment)
                  VALUES ('', '
                  $news_id', '$name', '$date', '$comment')";
                      if (
                  mysql_query($sql_putin)) {
                        
                  $status "<p>Eintrag erfolgreich!</p>";
                        
                  $status .= "<p><a href='index.php'>Start</a></p><br><a href='comments.php?id=$news_id'>Zurück zur News</a>";
                      } else {
                        
                  $status "<p>Eintrag <b>nicht</b> erfolgreich!</p>";
                        
                  $status .= "<p><a href='javascript:history.back()'>Zurück</a></p>";
                      }
                    } else {
                      
                  $status .= "<p><a href='javascript:history.back()'>Zurück</a></p>";
                    }
                    echo 
                  $status;
                  }
                  ?>

                  Danke an alle (ghostgamble) die mir geholfen haben.

                  GruPhi

                  Kommentar

                  Lädt...
                  X