[PHP / SQL] Text wird beim Speichern abgeschnitten



  • Hallo Zusammen

    Ich möchte eigentlich ein Text mit ca. 1'500 oder mehr Zeichen speichern können (entspricht in etwa 3 -4 SMS eines Handys also 4 mal 160 Zeichen).

    Ich habe die SQL Tabelle mit der Variable longtext versehen...

    Feld: Text
    Typ: longtext

    Wenn ich jetzt ein langer Text speichern will wird der mir einfach abgeschnitten. Warum denn das? Habs schon mit Blob versucht, keine Chance. Hier mal den Text, den ich beispielsweise speichen möchte:

    Wie viele Zeichen kann ein longtext eigentlich in der SQL Tabelle abspeichern? Bei mir ist das Problem dass nicht der gesamte Text gespeichert wird. Ja ja... eben DIE SQL.. schneidet eifach immer irgendwo was Text ab, egal ob wir Longtext, blobtext, mediumtext oder sonst was angeben oder haben ind er Datenbank. Keine chance und warum ist das so? dass weis ich selbst auch nicht wir müssen testn fragen und rumprobieren bsi die Lösung da ist.!!!

    Aber es wird mir nur folgendes gespeichert:

    Wie viele Zeichen kann ein longtext eigentlich in der SQL Tabelle abspeichern? Bei mir ist das Problem dass nicht der gesamte Text gespeichert wiü

    Das fette ü hab ich aber nirgends geschrieben. Was mache ich falsch? Ich füge die Daten folgendermassen in die SQL-Datenbank ein:

    mysql_query("INSERT INTO sms_vars (Absender, Keyword, Text, Zeit, Kategorie) VALUES ('$absender', '$keyword', '$txt', '$zeit', '$category');");
    

    Diese werden direkt vom SMS mit der PHP-Verarbeitet. Hier der gesamte Code:

    <?php
    /********************************
     * Requesting incoming SMS from *
     * external Gateway. System is  *
     * still running with extendet  *
     * POST-Vars URL from iNetWorx  *
     * to follow URL-Adress:        *
     * /gateway/sms_incomfing.php   *
     ********************************
     * (C) Copyright 2008 by Kurz D.*
     * Globesolutions, Spreitenbach *
     ********************************/
    
    //Datenbankverbindung definieren
    $db_host = "localhost";
    $db_name = "*******";
    $db_user = "*******";
    $db_pass = "*******";
    
    //SMS-Variablen auslesen
    $absender = $_POST['sender'];
    $keyword = $_POST['keyword'];
    $txt = $_POST['values'];
    $time = $_POST['tstamp'];
    
    $zeit = date("d.m.Y", $time)." / ".date("H:i", $time);
    switch($_REQUEST['op'])
    {
    	case 'truncate':
    	{
    	$connectionid = mysql_connect ($db_host, $db_user, $db_pass);
        if (!mysql_select_db ($db_name, $connectionid))
        {
          die ("Keine Verbindung zur Datenbank");
        }
    
    	mysql_query("TRUNCATE TABLE sms_vars");
    	echo '<b>Tabelle wurde geleert. <a href="sms_incoming.php?op=default" target="_self">--> Zurück <--</a></b>';
    	break;
    	}
    
    	default:
    	{
    
    //Einzelne Keywords und Values verarbeiten
    if($keyword == "TICKER")
    {
    $category = "ticker";
    }
    else
    {
    $category = "error: 402";
    }
    
    //Verbinden mit der Datenbank
    $connectionid = mysql_connect ($db_host, $db_user, $db_pass);
        if (!mysql_select_db ($db_name, $connectionid))
        {
          die ("Keine Verbindung zur Datenbank");
        }
    
    //Eintrag in die Datenbank vornehmen
    if($keyword == "TICKER")
    {
    mysql_query("INSERT INTO sms_vars (Absender, Keyword, Text, Zeit, Kategorie) VALUES ('$absender', '$keyword', '$txt', '$zeit', '$category');");
    $header = "From:smsEMPF@globesolutions.ch(SMS Empfänger)";
    $betreff = "Neue SMS eingegangen";
    $nachricht = "Es ist eine neue SMS eingetroffen. Bitte besuche http://www.globesolutions.ch/gateway/sms_incoming.php um nachzuschauen";
    mail("dominic.kurz@globesolutions.ch", $betreff, $nachricht, $header);
    }
    else
    {
    //nichts
    }
    
    //Auslesen zur Testfunktion und ausgabe im PHP-Script
    echo '<table cellspacing="2" cellpadding="2" border="0" width="100%">';
    echo '<tr><td><b>Absender</b></td><td>&nbsp;</td><td><b>Keyword</b></td><td>&nbsp;</td><td><b>Text</b></td><td>&nbsp;</td><td><b>Timestamp</b></td><td>&nbsp;</td><td><b>Kategorie</b></td></tr>';
    $result = mysql_query("SELECT Id, Absender, Keyword, Text, Zeit, Kategorie FROM sms_vars");
        while ($row = mysql_fetch_array($result)) {
        echo '<tr><td>'.$row['Absender'].'</td><td>&nbsp;</td><td>'.$row['Keyword'].'</td><td>&nbsp;</td><td>'.$row['Text'].'</td><td>&nbsp;</td><td>'.$row['Zeit'].'</td><td>&nbsp;</td><td>'.$row['Kategorie'].'</td></tr>';
        }
    
    echo '</table><br /><br />This Script was programmed by Kurz Dominic. Testet of a Server from Globesolutions.ch';
    echo '<br /><a href="sms_incoming.php?op=truncate" target="_self">--> [ Tabelle Leeren ] <--</a>';
    	break;
    	}
    }
    
    //Weitere Funktionen hier...
    
    ?>
    

    Was kann ich machen damit denn der ganze Text in der SQL-DB abgelegt wird und nicht abgeschnitten?

    Hier findet Ihr die Texte die kurzen waren mit varchar und char sowie text versehen, die längerem mit Longtext und mediumtext. Aber das Ergebnis immer dasselbe. --> http://www.globesolutions.ch/gateway/sms_incoming.php?op=default Speichere ich aber den Text direkt in phpMyAdmin in der DB gehts... aber sonst nicht. Komisch

    Gruss
    Wolf



  • Hallo,

    was passiert wenn du vor dem Schreiben in die DB die Ausgabe echo($txt) machst? Ist der Text dann auch schon abgeschnitten?

    mfg, Micha



  • Ja der Text ist vorher schon abgeschnitten.

    Aber ich vermute folgendes:

    Der Anbieter vom Gateway hat vermutlich eine Begrenzung von 1SMS und was drüber hinaus ist wird abgeschnitten. Wäre durchaus möglich.



  • Abgesehen davon solltest du dich dringendst zum Thema SQL Injections informieren.



  • árn[y]ék schrieb:

    Abgesehen davon solltest du dich dringendst zum Thema SQL Injections informieren.

    Wieso denn jetzt? - Miau



  • Hierzu muss man glaube ich nicht mehr viel sagen 🙄

    //SMS-Variablen auslesen 
    $absender = $_POST['sender']; 
    $keyword = $_POST['keyword']; 
    $txt = $_POST['values']; 
    $time = $_POST['tstamp'];
    
    // ...
    
    mysql_query("INSERT INTO sms_vars (Absender, Keyword, Text, Zeit, Kategorie) VALUES ('$absender', '$keyword', '$txt', '$zeit', '$category');");
    

    Und wenn bei dem Code immer noch nicht klar ist, was das mit SQL Injections zu tun haben könnte, dann bitte umso dringender informieren.


Anmelden zum Antworten