# CSV Datei Import in eine MYSQL Datenbank über PHP



## micha (5. März 2004)

Hallo PHPler 

Wollte mal fragen, wie man dieses Problem löst:
Vorhanden ist eine CSV Datei, deren Inhalt in eine Datenbank über ein PHP Script importiert werden soll. (Durch Semicolon getrennt)
Im ersten Schritt soll durch den druck auf "Durchsuchen" die Datei auf der Festplatte gewählt werden. Dann durch einen Druck auf einen Submitbutton das Einlesen ausgeführt werden. zunächst in Variablen, die erst nach einer Ausgabe zum Gegenkorrekturlesen und einem danach folgenden Betätigen eines Submitbuttons in die Datenbank geschrieben werden.

Wie realisiere ich das, wenn ich nun wirklich nicht viel Ahnung von PHP habe. 

Pro
-> Apache läuft
-> Mysql läuft
-> phpscript hat Verbindung zur Datenbank
-> HTML Layout ist fertig

Contra
-> keine Formulare angegeben
-> keine Ahnung, wie das funktionieren soll

Danke schonmal für die Hilfe.


----------



## Tim C. (5. März 2004)

> _Original geschrieben von micha _
> *Wie realisiere ich das, wenn ich nun wirklich nicht viel Ahnung von PHP habe.
> *


Dann wahrscheinlich überhaupt nicht.

Alle deine Pro Punkte, sind keine Pro Punkte sondern bis auf das HTML Layout überhaupt erstmal die Grundlagen. Ohne könntest du ja überhaupt keine solche Applikation entwickelt. Also, das sind keine positiven Eigenschaften, sondern die absolut notwendige Basis. 

Entweder es gibt irgendwo in den Weiten des Web oder in den Weiten von PEAR eine Klasse, die das parsen von CSV Dateien ermöglichst, oder du solltest dir mal http://www.php.net/explode zum trennen der Werte pro Zeile, http://www.php.net/file zum Einlesen der gesamten Datei, sowie Sessions für das Zwischenspeichern bei der Vorschau und File Uploads für das Hochladen der Datei angucken.

Ganz wichtig zu verstehen ist, dass du mit einem Upload Formular, die Datei niemals direkt an ein PHP-Script übergibst. Diese wird zunächst IMMER per HTTP auf den Server geladen und von dort aus dem temporären Verzeichnis an das Script übergeben.


----------



## ludz (5. März 2004)

schau dir diese Funktion mal an: http://de.php.net/fgetcsv

Nach dem Auslesen der Datei und Speichern der Werte in Variablen / einem Array, diese zum Korrektur lesen ausgeben, und bei anschließender Bestätigung Daten weitergeben sowie ein entsprechendes SQL-Query (INSERT...) zusammenbauen und an die Datenbank senden.
So viel zum Prinzip.


----------



## micha (5. März 2004)

danke schonmal.

die daten liest er nun aus und trägt sie auch fein untereinander ein. es geht nun also erstmal nurnoch um das formatieren dieser daten.

ich werde mich nochmal melden, wenn ich weiter gekommen bin


----------



## micha (5. März 2004)

```
<?php 
$row = 1;                                      // Anzahl der Arrays
$handle = fopen ("testds.csv","r");   	       // Datei zum Lesen öffnen
echo"<table bordeR=1><tr>";                    // eröffnen einer table und einer spalte VOR beginn der ersten schleife
while ($data = fgetcsv ($handle, 1000, ";")) { // Daten werden aus der Datei
                                               // in ein Array $data gelesen
   $num = count ($data);                       // Felder im Array $data
                                               // werden gezählt
   $row++;                                     // Anzahl der Arrays wird 
                			       // inkrementiert
   for ($c=0; $c < $num; $c++) {               // FOR-Schleife, um Felder 
       echo "<td>$data[$c]</td>";              // des Arrays auszugeben in einer zeile
   }
   echo"</tr>";					//ende spalte -> beginn nächster schleifendurchlauf in neuer spalte
}
echo"</table>	";				//ende table
fclose ($handle);
?>
```

sodele.

das ergebnis ist eine weiße datei, wo meine 2 zeilen ausgegeben werden, die die csv derzeit enthält.
habe es nun hingemurkselt, dass sie horizontal ausgegeben werden, aber vertikal wäre mir lieber. d.h. die erste zeile in eine spalte und die 2te zeile in die zweite spalte.

habe es ein wenig versucht, aber nicht hinbekommen. kann mir da einer helfen ? das mit den schleifen ist für mich so unübersichtlich.


----------



## stanleyB (5. März 2004)

Du schaffst dir  vorher deine Tabellenstruktur mit CREATE selbst und arbeitest anschliessend (nach dem Upload) so:

```
mysql> LOAD DATA INFILE 'deine_datei.csv' INTO TABLE deine_tabelle
    -> FIELDS TERMINATED BY ';' ENCLOSE BY '"'
    -> LINES TERMINATED BY '\n';
```

Gruesse,
stanleyB


----------



## micha (5. März 2004)

hm, ich wollte es erstmal auf diesem weg machen, den ich angefangen habe,
es hapert derzeit jedoch am 2spalitigen auslesen vertikal. 
horizontal ging es ja....


----------



## micha (8. März 2004)

Kann mir nochmal jemand helfen ?
Es wäre wichtig, dass ich heute das Vertikale auslesen hinbekomme, da ansonsten mein Projekt auf Eis liegt und mir mein Chef aufs Dach springt.


----------



## Tim C. (8. März 2004)

> _Original geschrieben von micha _
> *Kann mir nochmal jemand helfen ?
> Es wäre wichtig, dass ich heute das Vertikale auslesen hinbekomme, da ansonsten mein Projekt auf Eis liegt und mir mein Chef aufs Dach springt. *


Speicher die zwei horizontalen Reihen in zwei getrennte Arrays und gebe diese abwechselnd in eine Tabelle aus.
Es wird davon ausgegangen, dass beide vertikale Reihen gleich viel Elemente haben.

```
$array1; // Müsstest du mit den Daten aus Zeile 1 füllen
$array2; // Müsstest du mit den Daten aus Zeile 2 füllen

echo "<table>";
for($i=0;$i<count(array1);$i++) {
  echo "<tr><td>".$array1[$i]."</td><td>".$array2[$i]."</td></tr>";
}
echo "</table>";
```

Alternativ kann ich dir noch folgenden Code anbieten, der für eine zweizeilige CSV Datei, auch bei ungleicher Anzahl an Elementen und ohne den ganzen CSV Funktionskram funktionieren sollte (wohlgemerkt ungetestet).

```
$csvFile = "datei.csv";
$fileArray = file($csvFile);

$array1 = explode(";",$fileArray[0]);
$array2 = explode(";",$fileArray[1]);

if(count($array1) >= count($array2)) { $maxrows = count($array1); }
else { $maxrows = count($array2); }

echo "<table>\n";

for($i=0;$i<$maxrows;$i++) {
  if($array1[$i] == "" || !isset($array1[$i])) {
    $array1[$i] = "&nbsp;";
  }
  if($array2[$i] == "" || !isset($array2[$i])) {
    $array2[$i] = "&nbsp;";
  }

  echo "\t<tr><td>".$array1[$i]."</td><td>".$array2[$i]."</td></tr>\n";
}
echo "</table>";
```


----------



## micha (8. März 2004)

danke schonmal. das hat mich weiter gebracht.
die ausgabe der CSV datei ist nun schön vertikal.

jetzt schreibe ich mal dahingehend weiter, dass er nach dem klick auf einen submit button eine zeile weiter nach unten / nach oben springt und somit der nächste datensatz ausgegeben wird.

ich habe dein 2tes script verwendet. das funktioniert einwandfrei. nur welche variable muss ich erhöhen, dass er mir zeile 3 der csv datei ausgibt ? zeile 1 ist ja nur die jeweilge überschrift, array 1 bleibt also immer unverändert.


----------



## Tim C. (8. März 2004)

Sprich du hast in der ersten Zeile der CSV die "Überschriften" für die Zeilen die durch die vertikale Darstellung der Zeilen aus der CSV Datei resultieren?

Wenn ja, dann tu doch mal Butter bei die Fische und sag, wieviele Zeilen die CSV hat, oder ob das Variabel ist.


----------



## micha (8. März 2004)

moment, ich mach mal einen screen, dann wird das deutlich.
oh nein, merke gerade, dass das nichtmehr funktioniert.

also dann nochmal infos zum gesamten prinzip.

ich habe eine alte datenbank und muss deren daten in eine neue datenbank migrieren.

dazu habe ich nun eine datei erstellt, die 2 spalten hat im layout. in der linken spalte wird 2spaltig der inhalt der alten datenbank durch das importieren einer csv datei angezeigt. dabei muss von dieser spalte die linke seite (also array1) nur einmal ausgelesen werden, damit dort die überschriften stehen. spalte 2 (also array2) sollte variabel sein und zwar dahingehend, dass man damit jede zeile der CSV datei auslesen kann. durch 2 submit buttons ("next" und "previous" ) soll man durch die datensätze navigieren können.
in der rechten spalte des layoutes ist dann die struktur der neuen datenbank, die dynamisch aus den inhalten der linken spalte generiert wird. durch if abfrage blöcke wird der datensatz der linken spalte in die rechte neu einsortiert.

ich versuche das nochmal als ascii bild:

|_______spalte1________||______spalte 2______|
| ____alte datenbank_____|| __neue datenbank__ |

| csvarray1[1] |csvarray2[1]  || titelneu |neudatensatz |
| csvarray1[2] |csvarray2[2]  || titelneu |neudatensatz |
| csvarray1[3] |csvarray2[3]  || titelneu |neudatensatz |
| csvarray1[4] |csvarray2[4]  || titelneu |neudatensatz |
| csvarray1[5] |csvarray2[5]  || titelneu |neudatensatz |

<< previous___________________________next >>


die anzahl der zeilen der csv ist variabel, die pcs werden ja ständig neu hinzugefügt. nur die erste zeile ist immer gleich, die überschrift eben. aber auch die muss jedesmal, wenn die csv geladen wird, neu ausgelesen werden, sollte sich etwas an den spaltentiteln ( csvarray1[1]  )    ändern


----------



## Tim C. (8. März 2004)

Alles schön und gut, aber:

1) Bitte halte dich in Zukunft unbedingt an unsere Netiquette bezüglich Groß/Kleinschreibung.

2) Ich werde beim besten Willen nicht Schlau aus deinen Ausführungen. Entweder, ich verstehe dich nicht, oder was du vorhast ist in höchstem Maße schwachsinnig und viel einfacher zu lösen.

Frage in den Raum: Versteht irgendwer, was er meint?

Datenbank portieren? Von was für einer DB in was für eine andere denn?


----------



## micha (8. März 2004)

Wir haben eine Datenbank mit PCs, die erfasst, welche Art von Prozessor, welche Festplatte, welche Grafikkarte, welche IP,  die Rechner haben und wer den Rechner gerade nutzt. Diese Datenbank wurde von einem Mitarbeiter vor 8 Jahren erstellt und ist weder normalisiert, noch in irgendeiner anderen Art und Weise den herkömmlichen Standards von Datenbanken angepasst.
Im Grunde ist es nur eine Excel Tabelle, die sich Datenbank schmipft.

Ich muss nun im Rahmen eines Praktikums in dieser Firma mit einer Programmiersprache (PHP), die ich nur aus der Schule aus einem Halbjahr kenne, diese alte Datenbank in eine normalisierte Form umbauen. Die neue Datenbankstruktur habe ich bereits fertig.

Nun geht es darum die Datensätze der alten Datenbank in die neue Datenbank zu migrieren.

Dazu wollte ich aus der alten Datenbank eine CSV Datei basteln, diese via PHP importieren und dann in die neue Datenbank (MYSQL)  einsortieren. Als Kontrollzwischenschritt möchte ich jeweils einen Datensatz (also eine Zeile der CSV Datei) auf dem Bildschirm ausgeben (Linke Spalte). Dabei wird nach den Regeln, die ich zum Einsortieren in die neue Datenbank angelegt habe, der Inhalt der CSV Datei in die neue Datenbank einsortiert und erstmal ausgegeben (Rechte Spalte). Somit habe ich auf einer HTMLSeite 2 Spalten - auf der einen Seite die alte Datenbank und auf der anderen Seite die gleichen Daten, wie sie in der neuen Datenbank einsortiert sind. Ich kann also kontrollieren, ob meine Regeln, die ich für das Sortieren der Datensätze in die neue Datenbank angelegt habe, richtig sind.

Mit 2 Submitbuttons möchte ich dann die Zeile der CSV Datei weiterschalten können. Jeweils "Vor" oder "Zurück" und somit kontrollieren, ob das Sortieren für die anderen Datensätze auch stimmt.

Ich habe derzeit 3 Dateien.
dbmaske1.php -> Hier wird über ein "Durchsuchen" Feld die CSV Datei angegeben und an die nächste Datei weitergegeben
dbmaske2.php -> Hier findet die Gegenüberstellung eines Datensatzes der CSV Datei statt mit der Funktion jeweils einen Datensatz weiter und einen Datensatz zurück zu navigieren
dbmaske3.php -> Hier wird dann via PHP und den definierten Sortierregeln der Inhalt der alten CSV Datei unter Verwendung von MYSQL in die neue Datenbank geschrieben.

Danke für die Geduld, die Ihr mit mir habt und für die enorme Hilfe, die Ihr mir gerade seid!


Hier nochmal zum Copy und Pasten das Layout der 2ten Datei. Das hilft beim Verständnis des Problems glaube ich nochmal enorm. Ist mit Dreamweaver gemacht, der Code wird noch entmistet, aber damit ging es nun bedeutend schneller.

```
<HTML><HEAD><TITLE>Datenbanktransfermaske</TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<STYLE type=text/css>
A:hover {
	FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: verdana; TEXT-DECORATION: none
}
A:link {
	FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: verdana; TEXT-DECORATION: none
}
A:visited {
	FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: verdana; TEXT-DECORATION: none
}
A:active {
	FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: verdana; TEXT-DECORATION: none
}
.font {
	FONT-SIZE: 10px; COLOR: #000000; FONT-FAMILY: verdana
}
.Stil1 {
	FONT-WEIGHT: bold; COLOR: #ff0000
}
.Stil3 {
	COLOR: #000000
}
.Stil4 {
	COLOR: #ff0000
}
.submit {
	FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
</STYLE>

</HEAD>
<BODY class=font>
<P class=Stil1 align=center>Schritt 2 / 3 <BR><SPAN class=Stil3>Überprüfung der 
Datenmigration<BR><BR><STRONG><SPAN class=Stil4><A 
href="http://localhost/dbmaske.php">&lt;&lt; Schritt 1</A></SPAN>&nbsp;<B>|</B> 
<SPAN class=Stil4><A href="http://localhost/dbmaske3.php">Schritt 3 
&gt;&gt;</A></SPAN> </STRONG></SPAN></P>
<TABLE 
style="BORDER-RIGHT: #000000 thin solid; BORDER-TOP: #000000 thin solid; BORDER-LEFT: #000000 thin solid; BORDER-BOTTOM: #000000 thin solid" 
cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR bgColor=#eeeeee>
    <TD vAlign=center bgColor=#eeeeee>
      <DIV align=center><STRONG>- Alte "Datenbank" - <BR></STRONG></DIV></TD>
    <TD bgColor=#eeeeee>
      <DIV align=center><STRONG><BR>- Neue Datenbank - 
  <BR><BR></STRONG></DIV></TD></TR>
  <TR bgColor=#eeeeee>
    <TD vAlign=top colSpan=2>
      <DIV align=center><STRONG>
      <FORM action=$php_self method=get><INPUT class=submit type=submit value="<<" name=back> 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <INPUT class=submit type=submit value="Diesen Datensatz migrieren" name=migrieren> 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <INPUT class=submit type=submit value=">>" name=next></FORM></STRONG></DIV>
      <DIV align=center></DIV></TD></TR>
  <TR>
    <TD vAlign=top width="50%"><!-- erste spalte - alte datenbank inhalte -->
      <TABLE cellPadding=1 width="100%" border=0 class="font">
        <TBODY>
        <TR>
          <TD bgColor=#eeeeee>TERM_ADR</TD>
          <TD bgColor=#cccccc><input class=submit readonly value=zeile1a 
            name=alt0></TD>
        </TR>
        <TR>
          <TD bgColor=#eeeeee>TERM_ADR_A</TD>
          <TD bgColor=#cccccc><INPUT class=submit readOnly value=b 
          name=alt1></TD></TR>
        <TR>
          <TD bgColor=#eeeeee>DRU_ADR</TD>
          <TD bgColor=#cccccc><INPUT class=submit readOnly value=c 
          name=alt2></TD></TR>
        <TR>
          <TD bgColor=#eeeeee>NAME</TD>
          <TD bgColor=#cccccc><INPUT class=submit readOnly value=d 
          name=alt3></TD></TR>
        <TR>
          <TD bgColor=#eeeeee>ABT_ALT</TD>
          <TD bgColor=#cccccc><INPUT class=submit readOnly value=e 
          name=alt4></TD></TR>
        <TR>
          <TD bgColor=#eeeeee>undsoweiter</TD>
          <TD bgColor=#cccccc>undsoweiter</TD>
        </TR>
        </TBODY></TABLE></TD>
    <TD vAlign=top width="50%">
      <TABLE cellPadding=1 width="100%" border=0 class="font">
        <TBODY>
        <TR bgColor=#e0e0e0>
          <TD colSpan=2><STRONG>PC_Systeme</STRONG></TD></TR>
        <TR>
          <TD width="50%" bgColor=#eeeeee>pcnr</TD>
          <TD width="50%" bgColor=#cccccc><INPUT class=submit value=$[] 
          name=Input22232111></TD></TR>
        <TR>
          <TD bgColor=#eeeeee>terminalnr</TD>
          <TD bgColor=#cccccc><INPUT class=submit value=$[] 
          name=Input22232112></TD></TR>
        <TR>
          <TD bgColor=#eeeeee>gebaeudenr</TD>
          <TD bgColor=#cccccc><INPUT class=submit value=$[] 
          name=Input22232113></TD></TR>
        <TR>
          <TD bgColor=#eeeeee>zimmer</TD>
          <TD bgColor=#cccccc><INPUT class=submit value=$[] 
          name=Input22232114></TD></TR>
        <TR>
          <TD bgColor=#eeeeee>undsoweiter</TD>
          <TD bgColor=#cccccc>undsoweiter</TD>
        </TR>
        </TBODY></TABLE></TD></TR>
  <TR>
    <TD bgColor=#eeeeee colSpan=2>
      <DIV align=center><BR></DIV></TD></TR></TBODY></TABLE>
<DIV align=center><STRONG><BR><SPAN class=Stil4><A 
href="http://localhost/dbmaske.php">&lt;&lt; Schritt 1</A></SPAN>&nbsp;<B>|</B> 
<SPAN class=Stil4><A href="http://localhost/dbmaske3.php">Schritt 3 
&gt;&gt;</A></SPAN> </STRONG></DIV></BODY></HTML>
```


----------



## Tim C. (8. März 2004)

```
$csvFile = "datei.csv";
$fileArray = file($csvFile);

/* Du solltest über eine GET Variable festlegen, welche Zeile aus der
CSV Datei gelesen werden soll.
Wenn ich dich richtig verstanden habe, sollen ganz links immer  die
"Überschriften" stehen. Es ist also nur $array2 "variabel.

Im folgenden Beispiel wird davon ausgegangen, dass du die jeweilige
Zeile über $_GET['row'] übergeben hast.
*/

$array1 = explode(";",$fileArray[0]);
$array2 = explode(";",$fileArray[$_GET['row']-1]);

if(count($array1) >= count($array2)) { $maxrows = count($array1); }
else { $maxrows = count($array2); }

echo "<table>\n";

for($i=0;$i<$maxrows;$i++) {
  if($array1[$i] == "" || !isset($array1[$i])) {
    $array1[$i] = "&nbsp;";
  }
  if($array2[$i] == "" || !isset($array2[$i])) {
    $array2[$i] = "&nbsp;";
  }

  echo "\t<tr><td>".$array1[$i]."</td><td>".$array2[$i]."</td></tr>\n";
}
echo "</table>";
```
Jetzt muss du nur noch am unteren Ende der Seite die zwei Buttons entsprechend definieren. Am besten wie folgt, nur dann noch um einige "Kollisionsabfragen" erweitert.

```
echo "<button name=\"back\" value=\"zurück\" onclick=\"location.href=".$_SERVER['PHP_SELF']."?row=".$_GET['row']-1."\" />";
echo "<button name=\"forward\" value=\"vorwärts\" onclick=\"location.href=".$_SERVER['PHP_SELF']."?row=".$_GET['row']+1."\" />";
```
Hilft das, oder bin ich immer noch nicht dem wirklichen Problem auf der Spur?


----------



## micha (8. März 2004)

Sofern ich das auf den ersten Blick sehe, scheint es genau das zu sein, was ich benötige. Ich teste das jetzt erstmal aus.

Danke schonmal, ich melde mich dann nochmal.

Edit 1: Die Get Row werde ich über den Link von Datei 1 zu Datei standardmässig erstmal mit Zeile 1 (also erster auszulesender Zeile NACH der Titelzeile meine ich damit - de Fakto also Zeile 2)übergeben.
Ist der Syntax : 
	
	
	



```
dbmaske.php?row=2
```
korrekt?

Edit2: Ja ist es, es funktioniert schonmal, wenn ich es in der dbmaske2.php hinten an den Link schreibe.

Dummerweise vergisst er die Belegung der Variable 'row', wenn ich versuche die Variable mit der Datei dbmaske.php über den Link weiterzugeben.

Hier nun mal das Formularfeld, dass die Daten an die dbmaske2.php übergibt. Die Variable Frank ist die Location der CSV Datei auf der Festplatte. Alles, was dahintersteht, vergisst er.


```
<form method="get" action="dbmaske2.php?frank&row=2">
  <table  border="0" cellpadding="0" style="border:1; border-color:#000000; border-style:solid; border-width:thin;" align="center">
    <tr>
      <td bgcolor="#eeeeee" style="border-right:1 black solid;"><div align="center">
          <input CLASS="submit" type="file" value="c:\*.CSV" name="frank">
          <br>
      </div></td>
    </tr>
    <tr>
      <td bgcolor="#eeeeee" style="border-right:1 black solid;"><div align="center">
        <input CLASS="submit" name="submit" type="submit" value="Datei laden">
      </div></td>
    </tr>
  </table></form>
```

Nach dem Klick auf Durchsuchen und dem Auswählen der Datei wird über einen Klick auf Datei Laden die nächste URL (dbmaske2.php) aufgerufen.

Was muss ich nun tun um den Browser das "Vergessen der letzten Variable über den Link mitzugeben" abzugewöhnen ?


----------



## Tim C. (8. März 2004)

Ich kapiere nicht genau was du meinst. Klar ist jedoch das $_GET['row'] nur auf den Seiten gesetzt ist, die mit seite.php?row=wert aufgerufen werden.


----------



## micha (8. März 2004)

Ja, er übergibt die Variable Row jedoch nicht mit dem Link, obwohl ich sie angegeben habe im Form Action teil. Er scheint sie schlichtweg zu "vergessen".
Die Adresszeile bei der dbmaske2.php (also der unmittelbar folgenden Datei) lautet: 


```
http://localhost/dbmaske2.php?frank=D%3A%5Cphpmysqlwebserver%5Cminixampp%5Chtdocs%5Ctestds.csv&submit=Datei+laden
```

Wobei seltsamerweise da das "Submit = Datei Laden" steht. Der Knopf sollte eigentlich keine Variable weitergeben, sondern einfach das Formularfeld ausführen. Also das Weiterleiten zur nächsten Seite auslösen. Das Row hingegen verschwindet vollkommen.
Oben im Edit steht nochmal das Formularfeld, dass ich zum Übergeben der Daten nutze.

Habe zwischenzeitlich versucht die Vorwärts und Zurück Buttons einzubinden.
in der Zeile, in der ich Deinen Befehl eingefügt habe bekomme ich folgenden Fehler ausgegeben:

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in D:\phpmysqlwebserver\minixampp\htdocs\dbmaske2.php on line 65

Ich habe mal drüber geschaut, aber in den Anführungszeichen und Semicolons (was ist nochmal Plural von Semicolon? Semicoli ?) keine Fehler gefunden.


----------



## micha (8. März 2004)

Also das mit dem Row Problem habe ich nun dadurch gelöst, dass ich den Button , der davor Datei Laden in 2 umbenannt habe und den Button, der Submit hieß in row. 

Sieht zwar etwas doof aus, aber funktioniert. Das ist die Hauptsache.

Nur das mit der zeilenweisen Navigation funktioniert noch nicht.
Da gibt er mir auch nach allem Rumprobieren nur diese Parse Errors (Siehe Oben) aus.


----------



## micha (9. März 2004)

Schaut nochmal jemand nach den Buttons ?


----------



## Tim C. (9. März 2004)

Push das ganze noch einmal und du bist deinen Account los. Dauerhaft!

Es ist das eine, dass ich mal a) viel Zeit habe und b) eine mögliche Lösung für das Problem. Aber es gibt nunmal Tage da trifft a) nicht zu und b) sowieso nicht. Also, wenn du Projekte ohne tutorials.de überhaupt nicht auf die Beine stellen kannst, dann lass es lieber ganz bleiben. Und wie schon gesagt, sinnfreies "pushen" der Beiträge führt zu gar nichts, ausser noch mehr Ignoranz von Seiten derer, die evtl. helfen könnten.

Man "verzeihe" mir meine schroffe Ausdrucksweise, aber wer in der Signatur damit "prahlt" schonmal von tutorials.de gebannt worden zu sein, der sollte eigentlich seine Lektion gelernt haben.


----------



## Chino (9. März 2004)

> _Original geschrieben von micha _
> *Habe zwischenzeitlich versucht die Vorwärts und Zurück Buttons einzubinden.
> in der Zeile, in der ich Deinen Befehl eingefügt habe bekomme ich folgenden Fehler ausgegeben:
> 
> ...


 Bekanntlich hilft auch ein Blick in die Zeile vor der angegebenen Zeile.


----------



## micha (9. März 2004)

Meine Signatur bezieht sich auf die Zeiten, in denen Tutorials.de noch einen IRC Channel hatte, in dem ich oft anwesend war. Dort habe ich tagtäglich mitgeholfen Usern im IRC Hilfe bei Problemstellungen zu geben. Nicht unbedingt im PHP Bereich, sondern im grafischen Bereich.

Meine Signatur bezieht sich daher auf die meiner Meinung nach weniger sinnvolle, aber Tutorials.de durchaus mehr Seriösität bringende Maßnahme, Sonderzeichen zu verbieten und Leute, die im IRC Sonderzeichen tragen, automatisch zu bannen.

Schade, dass ich an dieser Seriösität bei einer solchen Abfuhr nurnoch zweifeln kann. Ein einfaches: "Tut mir leid, ich kann Dir nichtmehr helfen" oder ein "Sorry, keine Zeit mehr" hätte genügt.

Nun hat mich Tutorials.de ein zweites Mal vor den Kopf gestoßen. Zum ersten mal, als ich selbst aktiv mitgeholfen habe und dann auf einmal nichtmehr konnte, weil ich ein böses Sonderzeichen in meinem IRC Nickname hatte - und nun zum zweiten mal, als ich Hilfe benötige.

Versetz Dich mal in meine Situation und überleg, ob es nötig ist einen derart schroffen Ton an den Tag zu legen, wenn eine einfache Info genügt hätte.

Danke dennoch für die bisherige Hilfe.


----------



## Tim C. (9. März 2004)

> _Original geschrieben von micha _
> *Meine Signatur bezieht sich auf die Zeiten, in denen Tutorials.de noch einen IRC Channel hatte.*


Den haben wir nach wie vor, allerdings nicht mehr im QuarkNet.



> *Schade, dass ich an dieser Seriösität bei einer solchen Abfuhr nurnoch zweifeln kann. Ein einfaches: "Tut mir leid, ich kann Dir nichtmehr helfen" oder ein "Sorry, keine Zeit mehr" hätte genügt.*


Schade das du, entgegen jeglichen guten Benehmens und jeglicher Etiquette auf Foren (ich spreche jetzt nicht mal im Speziellen von unserer Netiquette), den Thread heute Morgen einmal mit einem ansonsten völlig sinnentleerten Einzeiler gepusht hast und dann grade eben nochmal, mit einem schlichten "Tim?". Wirklich "Hut ab vor dieser Leistung". Da sprudelt einem das "erwachsene" Verhalten ja geradezu entgegen.



> *
> Nun hat mich Tutorials.de ein zweites Mal vor den Kopf gestoßen. Zum ersten mal, als ich selbst aktiv mitgeholfen habe und dann auf einmal nichtmehr konnte, weil ich ein böses Sonderzeichen in meinem IRC Nickname hatte - und nun zum zweiten mal, als ich Hilfe benötige.*


Beide male ging der aktive Part, der zu der Reaktion unsererseits (ich sehe mich als Menge des "unsererseits") führte, von dir aus.



> *
> Versetz Dich mal in meine Situation und überleg, ob es nötig ist einen derart schroffen Ton an den Tag zu legen, wenn eine einfache Info genügt hätte.
> *


Kein Problem, ich bin oft genug in deiner Situation. Aber wenn ich nicht weiterkomme, dann bastel ich selber, überlege mir Alternativen, probiere rum, usw. Aber ich pushe nicht innerhalb eines Tages zweimal mit völligen Nonsense Postings, ohne klarzumachen, welche Überlegungen ich mir im Laufe der Zeit evtl. selber dazu gemacht habe.




> *Danke dennoch für die bisherige Hilfe. *


Keine Ursache, mache ich ja normalerweise gerne, so sich denn mein Gegenüber nicht in eine totale Konsumhaltung zurückzieht und ein bischen selber mitdenkt. Aber durch deine zwei Postings vor meinem "Ausraster", hast du eindeutig die falsche Haltung vermittelt.

Warum rechtfertige ich mich eigentlich?


----------

