2009-08-06 10 views
1

würde ich wirklich schätzen, wenn Sie einen Blick auf dieses Stück Code nehmen würde:Einfügen einer Reihe von Linien in eine SQL-Tabelle

<?php 
if(isset($_POST['add'])) { 

$self = $_SERVER['PHP_SELF']; //the $self variable equals this file 
$ipaddress = ("$_SERVER[REMOTE_ADDR]"); //the $ipaddress var equals users IP 

//connect 
$connect = mysql_connect($host,$username,$password) or die('<p class="error">Unable to 
connect to the database server at this time.</p>'); 
mysql_select_db($database,$connect) or die('<p class="error">Unable to connect to the 
database at this time.</p>'); 

//fetch data 
$data = htmlspecialchars($_POST['list']); 
$comment = mysql_real_escape_string($_POST['comment']); 

$data_lines = explode("\r\n", $data); 
$comment_lines = explode("\r\n", $comment); 
for($i=0;$i<count($data_lines);$i++) 
{ 
$data_fields = explode(",", $data_lines[$i]); 

    $time = time(); 
    $queryb = "INSERT INTO coords SET tag='$data_fields[0]', guild='$data_fields[1]', name='$data_fields[2]', base='$data_fields[3]', econ='$data_fields[5]', maxecon='$data_fields[6]', location='$data_fields[4]', comment='$comment_lines[$i]', ipaddress='$ipaddress' ,date='$time';"; 

    // if it succeeds, display message 
    if (@mysql_query($queryb)) 
    { 
    echo('<p class="success">Successful posting of ['.$data_fields[3].']!</p>'); 
    } 
    else 
    { 
    echo('<p class="error">Error could not post ['.$data_fields[3].'] to database!</p>'); 
} 
}//end for loop 
}//end if $_POST['add'] statement 
?> 

Wie Sie sehen können, ist es Daten erhält aus einem Formular Vorlage erhalten und explodiert sie in Linien.

Für $data, es explodiert es wieder für jedes Komma. Es fügt dann alles für jedes Komma in einer neuen Spalte und für jede Zeile in einer neuen Zeile ein.

Jetzt für $comment, sollte es für jede Zeile in eine neue Zeile einfügen, die es nicht tut. Habe schon seit ein paar Tagen gesucht und getestet.

Die Kommentarspalte ist ein varchar von 100 der Länge.

Also im Grunde tut es alles, was ich brauche, außer $comment in einer neuen Zeile für jede Zeile einzufügen.

+0

Haben Sie überprüft, wie oft es Ihre For-Schleife durchläuft? –

+0

versuchen, $ queryb Echo und sehen, ob der Kommentar dort ist –

+0

Hallo wieder, Danke für die schnellen Antworten, aber es scheint, dass die Kommentare noch nicht richtig hinzufügen, sie scheinen den gesamten Kommentar in einer einzigen Zeile statt hinzuzufügen Hinzufügen für jede Zeile in einer neuen Zeile. Weitere Hilfe wird geschätzt. Vielen Dank im Voraus. – user151797

Antwort

0

und vielen Dank für Ihre Zeit bei der Beantwortung meiner Frage investieren, aber es scheint, dass ich eine Lösung gefunden haben, die funktioniert. Hier geht es:

Die mysql_real_escape_string() Funktion scheint hier, um die Kommentare zu brechen auseinander:

$comment = mysql_real_escape_string($_POST['comment']); 

Also, was ich tun muß, ist ein zusätzliches Backslash für jeden Backslash hinzuzufügen.Also hier :

$comment_lines = explode("\r\n", $comment); 

Sollte sein:

$comment_lines = explode("\\r\\n", $comment); 

statt.

Wie auch immer, ich muss Ihnen nochmals danken, dass Sie sich die Zeit genommen haben, meine Frage zu lesen und zu versuchen, sie zu lösen.

0

Ich bin nicht ganz sicher, dass ich Ihre Frage genau verstand, aber ein potenzielles Problem in Ihrem String-Interpolation. Sie sollten solche Arrays niemals ohne korrektes Entweichen setzen. Die richtige Zeichenfolge würde wie folgt aussehen:

$queryb = "INSERT INTO coords SET tag='{$data_fields[0]}', 
    guild='{$data_fields[1]}', name='{$data_fields[2]}', 
    base='{$data_fields[3]}', econ='{$data_fields[5]}', 
    maxecon='{$data_fields[6]}', location='{$data_fields[4]}', 
    comment='{$comment_lines[$i]}', ipaddress='$ipaddress' ,date='$time';"; 
+0

Hallo nochmal, Danke für die schnellen Antworten, aber es scheint, dass die Kommentare immer noch nicht korrekt hinzugefügt werden, sie scheinen den gesamten Kommentar in einer einzigen Zeile hinzuzufügen, anstatt ihn für jede Zeile in eine neue Zeile einzufügen. Mehr Hilfe wird geschätzt. Danke im Voraus. – user151797

0

Wie plaindrom erwähnt, sollten Sie „\ r \ n“ mit nur „\ n“ versuchen zu ersetzen, wie das wird beiden Fälle, in denen die Form mit eingereicht wird „\ r \ n "und nur" \ n ". Ich würde sagen, dass Sie vielleicht in Betracht ziehen, Ihre Flucht in die Schleife zu verschieben, um sicherzustellen, dass das Entkommen keine Probleme verursacht.

Sie sollten auch Klammern um die Variablen in der Abfragezeichenfolge einfügen. Oft wird "ein String $ array [0]" $ array und nicht $ array [0] analysieren. Also würden Sie Ihre Abfrage wechseln zu sein:

$queryb = "INSERT INTO coords SET tag='{$data_fields[0]}', guild='{$data_fields[1]}', name='{$data_fields[2]}', base='{$data_fields[3]}', econ='{$data_fields[5]}', maxecon='{$data_fields[6]}', location='{$data_fields[4]}', comment='{$comment_lines[$i]}', ipaddress='$ipaddress' ,date='$time';"; 

Sie sollten technisch nicht diese um ipaddress $ tun müssen, und $ Zeit, aber es kann keine schlechte Idee sein, wenn auch nur für Konsistenz.

+0

Hallo nochmal, Danke für die schnellen Antworten, aber es scheint, dass die Kommentare immer noch nicht korrekt hinzufügen, sie scheinen den ganzen Kommentar in einer einzigen Zeile hinzuzufügen, anstatt ihn für jede Zeile in eine neue Zeile einzufügen. Mehr Hilfe wird geschätzt. Danke im Voraus. – user151797

0

zuerst:

print_r($data_lines) ."<br>"; 
print_r($comment_lines) ."<br>"; 

und dann für jeden Einsatz:

$queryb = "INSERT INTO coords SET 
    tag='" . $data_fields[0] ."', 
    guild='" . $data_fields[1] ."', 
    name='". $data_fields[2] ."', 
    base='".$data_fields[3]."', 
    econ='".$data_fields[5]."', 
    maxecon='".$data_fields[6]."', 
    location='".$data_fields[4]."', 
    comment='".$comment_lines[$i]."', 
    ipaddress='".$ipaddress."' , 
    date='".$time."';"; 

echo $queryb . "<br><br>"; 

Blick das ist, was vom Client kommt.

print '<pre>'; 
for ($ ind = 0, $ ind <strlen ($ _POST [ 'comment']); $ ind + +) ( 
    $ w = substr ($ _POST [ 'comment'], $ ind, 1); 
    print $ w. "." ord ($ _POST [ 'comment']). "<br>; 
) 
print '</ pre>'; 
+0

Hallo nochmal, Danke für die schnellen Antworten, aber es scheint, dass die Kommentare immer noch nicht korrekt hinzugefügt werden, sie scheinen den gesamten Kommentar in einer einzigen Zeile hinzuzufügen, anstatt ihn für jede Zeile in eine neue Zeile einzufügen. Mehr Hilfe wird geschätzt. Danke im Voraus. – user151797

+0

mmm, lädst du den Kommentar in das Textfeld ?, siehe Antworten des Palindroms, und schreibe hier den HTML-Code für einen Kommentar. –

+0

Die Kommentare werden gesendet, aber nicht für jede Zeile in eine neue Zeile eingefügt, was das Problem ist.

Danke. – user151797

Verwandte Themen