Daniel: MySQL, keine datensätzte hinzugefügt

Hi,
ich habe ein php protokol das so aussieht:

  
 if(isset($_POST['text']))  
  {  
    if ($_POST['text'] == null)  
    {  
    echo "Name fehlt.";  
    }//  
    else  
    {  
      if(isset($_POST['textarea']))  
      {  
        $Von = $_POST['text'];  
        $Vom = date("Y-m-d");  
        $UnverschluesselteNachricht = $_POST['textarea'];  
        $lang = strlen($UnverschluesselteNachricht);  
        $NachrichtenteilCode = false;  
        for ($z=0; $z<$lang; $z++)  
        {  
          $Nachrichtenteil = substr($UnverschluesselteNachricht, $z);  
          $Nachrichtenteil = ord($Nachrichtenteil);  
          $Code = "B";  
          $Code = ord($Code);  
          $NachrichtenteilCode[$z] = $Nachrichtenteil+$Code;  
        }  
        if ($NachrichtenteilCode == false)  
        {  
        echo "Keine Nachricht eingegeben.";  
        }//if ($NachrichtenteilCode == false)  
        else  
        {  
          $anzahl = count($NachrichtenteilCode);  
          $NachrichtCodiert ="";  
          for ($z=0; $z<$anzahl; $z++)  
          {  
            $NachrichtCodiert .= $NachrichtenteilCode[$z];  
          }  
          $Kennung = mysql_connect("localhost", "coder", "coder");  
          mysql_query("use codiert", $Kennung);  
          $sql = 'INSERT INTO nachrichten VALUES("'.$Von.'", '.$Vom.'", '.$NachrichtCodiert.'")';  
          mysql_query($sql, $Kennung);  
          echo "Neuer Eintrag";  
        }  
      }// if(isset($_POST['textarea']))  
    }//else  
  }// if(@$_POST['submit']<>null)  

zuvor in der html datei:

  
form action="Eingabe.php" method="post">  
  Ihr Name: <input type="text" name="text"><br>  
  Nachricht:  
  <textarea cols="30" rows="6" name="textarea"></textarea>  
  <input type="submit" name="submit" value="codierung">  
  </form>  

die eingabe wird übernommen doch es wird nix in die datenbank hinzugefügt die so erstellt ist:

  
CREATE TABLE nachrichten (  
  Name varchar(30) NOT NULL default '',  
  Vom date NOT NULL default '0000-00-00',  
  Nachricht longtext  
) TYPE=MyISAM;  

wobei das nach einem Save der DB kam ich hatte eigentlich

  
CREATE TABLE nachrichten (  
  Name char(30) NOT NULL,  
  Vom date NOT NULL,  
  Nachricht longtext  
);  

So nun meine 2Fragen:

  • Warum wird in die Tabele kein einziger datensatz hinzugefügt?
  • Warum mach MySQL aus dem CHAR ein VARCHAR und wo ist da das problem?

MfG

  1. Moin!

    ich habe ein php protokol das so aussieht:

    Du hast da einige Eigenheiten eingebaut, die ich an deiner Stelle lieber ändern würde.

    if(isset($_POST['text']))
      {
        if ($_POST['text'] == null)

    Wenn ein String leer ist, dann ist er nicht NULL, sondern "".

    {
        echo "Name fehlt.";
        }//
        else
        {
          if(isset($_POST['textarea']))
          {
            $Von = $_POST['text'];
            $Vom = date("Y-m-d");
            $UnverschluesselteNachricht = $_POST['textarea'];
            $lang = strlen($UnverschluesselteNachricht);
            $NachrichtenteilCode = false;

    Wenn du $NachrichtenteilCode in der Schleife als Array verwenden willst, solltest du es hier mit array() vorbelegen, dann hast du ein leeres Array.

    for ($z=0; $z<$lang; $z++)
            {
              $Nachrichtenteil = substr($UnverschluesselteNachricht, $z);
              $Nachrichtenteil = ord($Nachrichtenteil);
              $Code = "B";
              $Code = ord($Code);
              $NachrichtenteilCode[$z] = $Nachrichtenteil+$Code;
            }
            if ($NachrichtenteilCode == false)

    Und hier kannst du dann mit count($NachrichtenteilCode) == 0 prüfen, ob es immer noch leer ist.

    {
            echo "Keine Nachricht eingegeben.";
            }//if ($NachrichtenteilCode == false)
            else
            {
              $anzahl = count($NachrichtenteilCode);
              $NachrichtCodiert ="";
              for ($z=0; $z<$anzahl; $z++)
              {
                $NachrichtCodiert .= $NachrichtenteilCode[$z];
              }
              $Kennung = mysql_connect("localhost", "coder", "coder");
              mysql_query("use codiert", $Kennung);
              $sql = 'INSERT INTO nachrichten VALUES("'.$Von.'", '.$Vom.'", '.$NachrichtCodiert.'")';
              mysql_query($sql, $Kennung);

    Und zu deinem konkreten Problem: Wenn der SQL-Query fehlschlägt, solltest du an dieser Stelle mysql_error() abfragen und ausgeben - dann wirst du sehen, was die Datenbank zu meckern hat, sofern sie was zu meckern hat (wenn sie nicht meckert, dann würde mich das sehr wundern).

    echo "Neuer Eintrag";
            }
          }// if(isset($_POST['textarea']))
        }//else
      }// if(@$_POST['submit']<>null)

    Dein letzter Kommentare zu der schließenden Klammern stimmt nicht. :)

      
    
    > - Warum mach MySQL aus dem CHAR ein VARCHAR und wo ist da das problem?  
      
    MySQL optimiert die angelegte Tabellen nach gewissen Kriterien. CHAR-Felder werden meist zu VARCHAR-Feldern optimiert, wenn sich in der Tabelle noch weitere variable Felder befinden - es sei denn, du legst ein Feld CHAR(3) oder kleiner an. Alle Arten von text und blob sind variable Felder, genauso wie varchar selbst. Du kannst also niemals char(>=4) und varchar in der gleichen Tabelle benutzen.  
      
     - Sven Rautenberg
    
    1. Hi,

        
      mysql_query("use codiert", $Kennung);  
                mysql_error();  
                $sql = 'INSERT INTO nachrichten VALUES("'.$Von.'", '.$Vom.'", '.$NachrichtCodiert.'")';  
                mysql_query($sql, $Kennung);  
                mysql_error();  
      
      

      trotz des mysql_error() bekomm ich keine Fehlermeldung, und die tabelle bleibt trotzdem leer :(

      }// if(@$_POST['submit']<>null)

      Dein letzter Kommentare zu der schließenden Klammern stimmt nicht. :)

      Ups, ein überbleibsel der ersten Version.

      Danke für die schnelle hilfe. aber es ist noch nicht vorbei.

      MfG

      1. Hi,
        *umpfl* da muss ja ein echo vorne dran.
        *umpflgrml*  You have an error in your SQL syntax near  na weist es
        schon?? *grmlgrml* ", 131176172163") *arghs* ein " hab ich vergessen

        MfG

    2. hi,

      if(isset($_POST['text']))
        {
          if ($_POST['text'] == null)

      
      >   
      > Wenn ein String leer ist, dann ist er nicht NULL, sondern "".  
        
      in dem falle wäre die verwendung von empty() vielleicht ganz schick.  
        
      gruß,  
      wahsaga  
        
      
      -- 
      /voodoo.css:  
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      
      1. Hi,

        in dem falle wäre die verwendung von empty() vielleicht ganz schick.

        und wiedereinmal der beweis das es nichtnur eine Lösung gibt.

        Wie das Topic schon verät jetzt funtzts.

        MfG