Seite 1 von 2

Insert in DB

Verfasst: 22.11.2006, 15:27
von Ice Man
Folgendes Problem.

Ich bekomme von einem PP immer eine Email, wenn jemand was in deren Shop bestellt hat. Früher hab ich das alles per Excel gemacht, da kamen 2-3 Mails pro Tag. Nun sind es paar mehr, und ich will das nun professioneller machen.

Meine Idee, alles über ne Mysql DB
Ich will ein Texteingabe Feld machen, da kopiere ich diese Einträge rein, und dann sind diese in der DB. Funktioniert auch bei nur einem Eintrag bestens. Aber zum Glück bestellen die Leute oft mehr, so das es mehr Kohle gibt :D

Beispiel

19.11.2006;DVD;Matrix Revolution;1;19.99;19.99;1.99
19.11.2006;DVD;irgendwas;2;10.00;20.00;2.00
.
.
.
Also

Datum|Art|Produkt|Anzahl|Einzelpreis|Gesamtpreis|Provision

Das Problem, wie sage ich dem Insert Script, Achtung neue Zeile.
Also wieder einfügen ?

Es geht bisher so
Aufsplitten des Strings in einzelne Komponenten
Dann insert in einzelne Spalten.
Klappt auch bei nur einer Zeile bestens, aber wie mach ich das bei 2 Zeilen, das jede Zeile einzeln in die DB kommt.

Also geht das überhaupt über das Text Eingabefeld
Als per

Code: Alles auswählen

<textarea type=\"text\"....
Ich bastle schon gut 60 min, aber irgendwie will der meine 2. Zeile nicht :D

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 22.11.2006, 15:37
von pebosi
poste doch mal den code den du bis jetzt zum einfügen verwendest...

Verfasst: 22.11.2006, 15:40
von Black Alpha
ja du kannst das über das textarea machen...
könntest z.B. dann die zeilen aufsplitten....
sind ja mit \n getrennt

kleine frage... was bedeutet PP?
...Ich bekomme von einem PP immer eine Email....

Verfasst:
von

Verfasst: 22.11.2006, 15:45
von Ice Man

Code: Alles auswählen

## Aufsplitten 
$teile = explode&#40;';',$eintag&#41;;

## Eintragen in DB
$query2 = mysql_query&#40;"Insert into pp &#40;datum,typ,name,preis,prov&#41; VALUES &#40;'$teile&#91;0&#93;',$teile&#91;1&#93;',$teile&#91;2&#93;',$teile&#91;5&#93;',$teile&#91;6&#93;'&#41;"&#41;;
Das müste jetzt bestimmt in eine Schleife, damit das bei einer 2. oder 3. Zeile nochmal passiert.

PP = Partner Programm

Verfasst: 22.11.2006, 15:49
von pebosi
sowas in der art dürfte es sein:

Code: Alles auswählen


## Aufsplitten
$zeilen = explode&#40;'\n',$eintag&#41;;

foreach &#40;$zeilen as $zeile&#41; &#123;

## Aufsplitten
$teile = explode&#40;';',$zeile&#41;;

## Eintragen in DB
$query2 = mysql_query&#40;"Insert into pp &#40;datum,typ,name,preis,prov &#41; VALUES &#40;'$teile&#91;0&#93;',$teile&#91;1&#93;',$teile&#91;2&#93;',$teile&#91;5&#93;',$teile&#91;6&#93;'&#41;"&#41;;

&#125;

Verfasst: 22.11.2006, 15:56
von Black Alpha
ich weiß nicht ob das so sinnvoll ist, für jeden eintrag ein neuen querry zu machen....

ich habe dir mal was rausgesucht...
so sollte es auch gehen:

Code: Alles auswählen

INSERT INTO tbl_name &#40;a,b,c&#41; VALUES&#40;1,2,3&#41;,&#40;4,5,6&#41;,&#40;7,8,9&#41;;
(1,2,3) ist dabei ein datensatz und (4,5,6) der nächste usw.

quelle:
dev.mysql.com/doc/refman/5.1/de/insert.html

Verfasst: 22.11.2006, 16:05
von pebosi
stimmt dann also so,

Code: Alles auswählen

$zeilen = explode&#40;'\n',$eintag&#41;;
$sql = "Insert into pp &#40;datum,typ,name,preis,prov &#41; VALUES";

foreach &#40;$zeilen as $zeile&#41; &#123;
  $teile = explode&#40;';',$zeile&#41;;
  $sql .= " &#40;'$teile&#91;0&#93;',$teile&#91;1&#93;',$teile&#91;2&#93;',$teile&#91;5&#93;',$teile&#91;6&#93;'&#41;, ";
&#125; 

$sql = substr&#40;$sql, 0, -2&#41;;

mysql_query&#40;$sql&#41;;

Verfasst: 22.11.2006, 16:19
von 800XE
pebosi hat geschrieben:stimmt dann also so,

Code: Alles auswählen

$zeilen = explode&#40;'\n',$eintag&#41;;
$sql = "Insert into pp &#40;datum,typ,name,preis,prov &#41; VALUES";

foreach &#40;$zeilen as $zeile&#41; &#123;
  $teile = explode&#40;';',$zeile&#41;;
  $sql .= " &#40;'$teile&#91;0&#93;',$teile&#91;1&#93;',$teile&#91;2&#93;',$teile&#91;5&#93;',$teile&#91;6&#93;'&#41;, ";
&#125; 

$sql = substr&#40;$sql, 0, -2&#41;;

mysql_query&#40;$sql&#41;;
wollte gerade sagen das du dann am Ende ein KOMMA hast aber das machst du ja mit substr weg .....
ich mach soche Sachen .....

Code: Alles auswählen


$trenner = ''; // trenner ist leer

schleife ..... bei mir sind es while
&#123;
  $content .= $trenner . "blablabla";
   $trenner = ',';
&#125; $content .= ';';
Also, ich ergänze den Trenner vorne nicht hinten .... und beim ertenmal ist der Trenner nicht vorhanden, für den 2ten Durchlauf wird er dann gestzt
.... und hier zum Abschluß noch den Semikolon anhängen ... der fehlt glaub bei dir noch

Verfasst: 22.11.2006, 16:28
von Ice Man
@ pebosi

Irgendwie ist es immer noch alles eine zeile.

Ich hab mal '$teile[7]' verwendet, da kam das was eigentlich in Zeile 2 stehen soll.
Er sieht das wohl alles als eine komplette Zeile ?

Verfasst: 22.11.2006, 16:40
von 800XE
Ice Man hat geschrieben:Er sieht das wohl alles als eine komplette Zeile ?
mach mal aus dem "mysql_query($sql); " ein "echo($sql);"
dann siehst du was abgeliefert wird.....

Verfasst: 22.11.2006, 16:44
von Ice Man
Insert into pp (datum,typ,name,preis,prov ) VALUES ('2006..','xxxx','xxxxx','xxxxxx')

Also alles soweit richtig, aber ebend nur eine Zeile

Erhöhe ich die Zahlen bei Teile,
dann trägt er die 2. Zeile ein, aber nur die 2. Zeile

Ich denke er trennt die Zeilen nicht, und behandelt alles als eine.

Verfasst: 22.11.2006, 16:49
von pebosi
hm die hochkommas sollte man noch korrigieren :)

probier das mal:

Code: Alles auswählen

$zeilen = explode&#40;'\n',$eintag&#41;;
$sql = "Insert into pp &#40;datum,typ,name,preis,prov &#41; VALUES";

foreach &#40;$zeilen as $zeile&#41; &#123;
  $teile = explode&#40;';',$zeile&#41;;
  $sql .= " &#40;'$teile&#91;0&#93;','$teile&#91;1&#93;','$teile&#91;2&#93;','$teile&#91;5&#93;','$teile&#91;6&#93;'&#41;,";
&#125;

$sql = substr&#40;$sql, 0, -1&#41;;

mysql_query&#40;$sql&#41;;

Verfasst: 22.11.2006, 16:55
von 800XE

Code: Alles auswählen

$zeilen = explode&#40;'\n',$eintag&#41;;
echo &#40;"<br>#Zeilen ".count&#40;$zeilen&#41; &#41;;


foreach &#40;$zeilen as $zeile&#41; &#123;
  $teile = explode&#40;';',$zeile&#41;;
echo &#40;"<br>#Teile ".count&#40;$teile&#41; &#41;;
&#125;
was spricht er?

Verfasst: 22.11.2006, 16:57
von Ice Man
ja, das hatte ich auch bemerkt, und vorhin schon bei mir geändert.

Es wird aber trotzdem nur eine Zeile ausgeben oder eingetragen.

Würde ich stat $teile[0] dieses $teile[7] nehmen, dann hab ich den beginn von Zeile 2.

Also ist alles in einem kompletten String.
Also das was eigentlich in der neuen Zeile sein sollte, hängt am Ende der 1. Zeile usw.

Also eine riesig lange Zeile.

Ich hab mal

echo "$eintag";
gemacht,
Auf der Seite ist nun alles hintereinander
aber im Quelltext sind die Zeilen schön getrennt.

Verfasst: 22.11.2006, 16:58
von 800XE
pebosi hat geschrieben:hm die hochkommas sollte man noch korrigieren :)

probier das mal:

Code: Alles auswählen

$zeilen = explode&#40;'\n',$eintag&#41;;
$sql = "Insert into pp &#40;datum,typ,name,preis,prov &#41; VALUES";

foreach &#40;$zeilen as $zeile&#41; &#123;
  $teile = explode&#40;';',$zeile&#41;;
  $sql .= " &#40;'$teile&#91;0&#93;','$teile&#91;1&#93;','$teile&#91;2&#93;','$teile&#91;5&#93;','$teile&#91;6&#93;'&#41;,";
&#125;

$sql = substr&#40;$sql, 0, -1&#41;;

mysql_query&#40;$sql&#41;;

was für Hochkomma?



aber ....

$zeilen = explode('\n',$eintag);


dort müssen doppelteAnführungszeichen rein, damit aus dem \n ein NewLine wird

$zeilen = explode("\n",$eintag);