• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mittels einer Schleife daten in DB eintragen.

DD-Stylz

Neues Mitglied
Abend community ;)

also habe folgendes Problemchen, ich habe eine liste / einen Text mit Daten die aufgeteilt und danach in eine DB eingetragen werden sollen.

Der text sieht so aus

* User A: Wert 1: (Wert 2)
* User B: Wert 1: (Wert 2)
* User C: Wert 1: (Wert 2)

Aufgeteilt habe ich den text so:

PHP:
$text = $_POST['clipboard'];

$daten = explode("*", $text)

So jetzt habe ich die Werte von User A und User B usw. voneinander getrennt.

jetzt muss ich User A , Wert 1, Wert 2 aufteilen das mache ich so:

PHP:
$daten[1] = explode(":", $daten[1]);

jetzt bekomme ich den Namen von User A und seine beiden Werte raus (die Weiss ich vorher net weil die Reihenfolge der User sich immer ändert)

nur musste ich es jetzt 100 mal ( sind immer 100 User) machen für jeden User einzeln.

Meine frage ist, kann man es so machen das der code automatisch den Text abläuft und nach Zeilen trennt, dann den Namen vom User und die beiden Werte davon trennt und anschliesend in eine Tabelle einträgt?

Tabelle:
User ID | User | Wert 1 | Wert 2|

VALUES:

auto | User A | Wert 1 | Wert 2 |
auto | User B | Wert 1 | Wert 2 |


Wert1 & Wert 2 unterscheiden sich von User zu User.


Hoffe ist verständlich wusste net wie ich es genau erklären soll.
 
Werbung:
klar ist das moeglich.
wenn du weisst das es genau 100 user sind kannst du eine while schleife benutzt:
Code:
//**************
//zwischen die sterne kommt der code fuer die datenbank verbindung
//**************
$a = 0;
while ($a>99)
{
//**************
//hier kommt der code rein der die daten in die datenbank einfuegt
//**************
$a++;
}
//**************
//datenbank verbindung wird getrennt
//**************

das ist das prinzip. ich habe mal angenommen, dass du mit tabelle eine tabelle einer datenbank meinst.
fuer die datenbankverbindung gibt es eine nuetzliche klasse namens MySQLi:
PHP: Mysqli - Manual

damit sollte es eigentlich recht einfach sein.
 
Jop das Eintragen habe ich mir auch so in etwa gedacht.

Das größere Problem ist das ich net weiß ich ich den Code umschreiben soll das er den Text automatisch trennt. weil jetzt muss ich ja immer diese Zeilen 100mal wiederholen:

PHP:
$daten = explode("*", $text); //Das nur einmal

//Ab hier musste ich es für 100 User einzeln wiederholen
$daten[x] = explode(":", $daten[x]);
mysql_query("INSERT INTO tabellenname ('UserID', 'Username', 'Wert1', 'Wert2') VALUES ('', '{$daten[x][0]}', '{$daten[x][1]}', '{$daten[x][2]}')");
//Das x steht für 0, 1 , 2, 3, 4 usw..
ich möchte jedoch, wenn es möglich ist, den oben Code so umschreiben das er in eine Schleife passt und diese es immer bis zum ende der einträge abarbeitet und in die DB einfügt.



PS: Jop Dachte ein eien DB tabelle.


Sorry falls es unverständlich ist aber keine Ahnung wie ich es anders erklären soll.
 
Werbung:
Meinst du so?
PHP:
$daten = explode("*", $text); //Das nur einmal

//Ab hier musste ich es für 100 User einzeln wiederholen
for($i=1;$i<100;$i++) {
$daten[$i] = explode(":", $daten[$i]);
mysql_query("INSERT INTO tabellenname ('UserID', 'Username', 'Wert1', 'Wert2') VALUES ('', '{$daten[$i][0]}', '{$daten[$i][1]}', '{$daten[$i][2]}')");
}
Nur weis ich nicht, ob $i der for-Schleife in dem Array interpretiert wird. Musst du mal ausprobieren.

Mfg
 
ich würde die ploeden sternchen aus der datei entfernen und folgenden code verwenden

PHP:
$fileLines = file('/datei/name.extention');
foreach($fileLines as $line) {
    $line = trim($line, "\r\n\t:");
    if(empty($line)) {
        continue;
    }
    list($user, $value1, $value2) = explode(':', $line);
    $user = trim($user);
    $value1 = trim($value1);
    $value2 = isset($value2) ? $value2 : false;

    // hier könntest du jetzt einen string aus all den daten zusammensetzen den du dann eintragen könntest.

    if(!isset($query)) {
        $query = "INSERT INTO tabellenname (`user`, `value1`, `value2`) VALUES ('";
        $query .= mysql_real_escape_string($user)."', '";
        $query .= mysql_real_escape_string($value1)."', '";
        $query .= mysql_real_escape_string($value2)."')";
    } else {
        $query .= ", ('".mysql_real_escape_string($user)."', '";
        $query .= mysql_real_escape_string($value1)."', '";
        $query .= mysql_real_escape_string($value2)."')";
    }
}

// hier könntest du den query dan ausführen
mysql_query($query);

sollte nur ein beispiel sein kp wie schnell das ist aber dürfte auf jeden fall schneller sein als wenn du bei jedem schleifendurchgang einen query sendest.
 
Zuletzt bearbeitet von einem Moderator:
leider wird es ein kleines Hilfeprogi/Hilfeseite für die Admins eines BrowserGame´s, und die Daten werden vom BG makiert und in eine texarea eingefügt und dann sollte das Script sie bearbeiten.
 
Werbung:
vllt könntest du dein problem ein wenig genauer beschreiben

wenn dein einziges problem noch ist das du anhand der sterne trennen wolltest dann füge doch ein sternchen der zeile mit dem trim() befehl hinzu das sieht dann ungefähr so aus

PHP:
trim($line, "\r\n\t:*");

und dann sollte es trotsdem funktionieren ^^

//Edit: habe gerade gemerkt das an der stelle mit dem trim auch noch ein leerzeichen fehlt also eher

PHP:
trim($line, "\r\n\t:* ");
 
währe vielleicht nett, wenn du deine version posten könntest denn vielleicht haben ja noch mehr leute das selbe problem und dafür ist ein forum ja da ;)
 
Werbung:
Ohw löl mir fällt grade auf ich habe die version von Die Zahl genommen sry ;)

Also habe jetzt so aus dem Kopf den Code abgeändert den meinen zu posten wäre unsinn da er schon mittlerweile durch unzählige Erweiterungen auf knapp 600 Zeilen gewachsen ist

Ich weiß das es net der Perfecte Code ist jedoch funktioniert er bei mir.

Da wir mir gesagt wurde die Anzahl der User sich doch ändert(nie mehr als 10000) habe ich den Code auf eine Flexible Zahl umändern müssen.


PHP:
$daten = explode("*", $_POST['text']);

$teilnehmer = 10000; //bis zu dieser zahl werden die Datensätzte automatisch ermittelt
for($i=1;$i<=$teilnehmer;$i++) {
$files = $daten[$i];
$udaten = explode(":", $files);
if (strlen($files) == 0) { // So kann die An zahl der Daten die in die DB geschrieben werden von 0 - 10000 sein
    $teilnehmer = $i;
}
$user = trim($udaten[0]);
$wert1 = trim($udaten[1]);
$wert2 = trim($udaten[2]);

mysql_query("INSERT INTO tabellenname ('UserID', 'Username', 'Wert1', 'Wert2') VALUES ('', '{$user}', '{$wert1}', '{$wert1}')");

if (mysql_affected_rows() > 0) {
   echo "Eintraeng erfolgreich";
} else {
    echo "Eintragen nicht erfolgreich";
}
}
 
mit dem script fügst du einen user hinzu ohne die datei zu bearbeiten und die einträge wieder zu löschen...

versuch doch lieber das mit meinem script hinzukriegen das ist echt nicht schwer... die erste zeile mit dem file() oder dem explode() auf den post bei dir kannst du ganz einfach umbauen indem du daraus ein explode("\n", $_POST['text']); machst

zudem ist mein code verständlicher und auch andere leute die da vielleicht später was machen werden können ihn lesen und verstehen...
 
mit dem script fügst du einen user hinzu ohne die datei zu bearbeiten und die einträge wieder zu löschen...

versuch doch lieber das mit meinem script hinzukriegen das ist echt nicht schwer... die erste zeile mit dem file() oder dem explode() auf den post bei dir kannst du ganz einfach umbauen indem du daraus ein explode("\n", $_POST['text']); machst

zudem ist mein code verständlicher und auch andere leute die da vielleicht später was machen werden können ihn lesen und verstehen...


Welche Datei?

Habe nie von einer Datei gesprochen nur von einem Text, der wird in ein Textareafeld hineinkopiert, beim absenden bearbeitet und in die DB gespeichert. Also das Script macht genau das was ich will.
 
Werbung:
Zurück
Oben