MySql zeilen
Tobias Otto
- datenbank
0 Sven Rautenberg0 Leeloo5E
0 Leeloo5E
Hallo ich möchte ein feld aus der datenbank so ausgeben wie bei einen txt dokument. das heißt dieses feld $num = sizeof($lines); die anzahl ausgeben.
bei mir kommt momentan immer nur 1 obwohl ich in diesem feld 3 zeilen habe.
Danke
Moin!
Hallo ich möchte ein feld aus der datenbank so ausgeben wie bei einen txt dokument. das heißt dieses feld $num = sizeof($lines); die anzahl ausgeben.
bei mir kommt momentan immer nur 1 obwohl ich in diesem feld 3 zeilen habe.
Ich schätze mal, dass du einen String hast - und dessen "Anzahl" ist immer 1.
Die Anzahl der Zeilen in einem String ermittelt man, indem man die Anzahl der Zeilenschaltungen in dem String zählt.
- Sven Rautenberg
Hallo,
Die Anzahl der Zeilen in einem String ermittelt man, indem man die Anzahl der Zeilenschaltungen in dem String zählt.
Ok, wenn man das ganze nochmal liest, könnte man auch darauf kommen, dass er sowas meint. "MySql zeilen" sind bei mir die Anzahl der Rückgabezeilen ... Aber egal ...
Gruß,
Leeloo
Hallo,
also die quelltest ist so
$res = mysql_query("SELECT * FROM datenbank WHERE Anr='$anr' ");
$zusatzoption1 = mysql_result($res,0,"$zusatzoption1");
$lines = $zusatzoption1;
$num = sizeof($lines);
if ($num > 0) {
for($i = 0; $i < $num; $i++) {
$lg = explode("|", $lines[$i]);
$daten_1 = $lg[0];
$daten_2 = $lg[1];
echo "$daten_1 <br />$lines<br />$num";
}
}
mit der textdatei hat es ohne probleme funktioniert, bei mysql gehts aber nicht
Hallo,
Hallo,
also die quelltest ist so
$res = mysql_query("SELECT * FROM datenbank WHERE Anr='$anr' ");
$zusatzoption1 = mysql_result($res,0,"$zusatzoption1");$lines = $zusatzoption1;
$num = sizeof($lines);
if ($num > 0) {
for($i = 0; $i < $num; $i++) {
$lg = explode("|", $lines[$i]);
$daten_1 = $lg[0];
$daten_2 = $lg[1];echo "$daten_1 <br />$lines<br />$num";
}
}mit der textdatei hat es ohne probleme funktioniert, bei mysql gehts aber nicht
Ich glaub, du würfelst da was durcheinander ...
Mach mal ein "echo mysql_num_rows($res);"
Damit erhälst du die Anzahl der Zeilen bzw. Einträge in der DB, die dir zurück gegeben werden.
Mit
while ($line = mysql_fetch_assoc($res)) {
$Text_aus_DB = $line['dein_DB_Feld'];
}
greifst du für jede Zeile auf das entsprechende Feld zu. Hast du nur eine Zeile, kannst du dir das while sparen.
So, jetzt hast du deinen mehrzeiligen Text in der Variable $Text_aus_DB - als String. Und nun zähle die Zeilenumbrüche.
Gruß,
Leeloo
Moin!
Ich glaub, du würfelst da was durcheinander ...
Davon ist auszugehen.
while ($line = mysql_fetch_assoc($res)) {
$Text_aus_DB = $line['dein_DB_Feld'];
}
Auch du kopierst vollkommen sinnlos Variableninhalte. Warum bloß?
Zumal diese Schleife nur dafür sorgt, dass nach ihr der LETZTE abgefragte Wert in $Text\_aus\_DB steht. Die Verarbeitung müßte innerhalb der Schleife stattfinden.
> So, jetzt hast du deinen mehrzeiligen Text in der Variable $Text\_aus\_DB - als String. Und nun zähle die Zeilenumbrüche.
Ich denke, es geht hier noch um ein ganz anderes Verständnisproblem, welches Zeilen in Textdateien und Zeilen in Datenbanken durcheinanderbringt.
Eine Datenbankabfrage besteht zwar auch aus mehreren "Zeilen", aber die sind viel stärker getrennt und automatisch einzeln verfügbar. Das ist ja gerade der Vorteil gegenüber Textdateien, bei denen man das ganze Trennen (und Escapen beim Schreiben) selbst machen muß.
- Sven Rautenberg
--
"Love your nation - respect the others."
so habe ich bisher immer die textdatei ausgelesen.
nun möchte ich hier aber diese daten aus der mysql auslesen.
$datei = "intershop/$id.intershopbasket";
$lines = file($datei);
$num = sizeof($lines);
if ($num > 0) {
for($i = 0; $i < $num; $i++) {
$lg = explode("|", $lines[$i]);
$daten_anr = $lg[0];
$daten_menge = $lg[1];
}
}
in der textdatei steht sowas drin wie
0546400640|2
0546400233|1
die erste zahl ist vom shop die artikelnummer und die zweite zahl die menge.
sobald die bestellung abgesclossen wird, werden die daten in die db geschrieben.
jetzt kann es ja sein, dass der kunde sich seine alten bestellungen wieder anschauen kann.
deshalb muss ich ja nun wieder die daten auslesen.
das geht aber leider nicht
Hallo,
Ich glaub, du würfelst da was durcheinander ...
Davon ist auszugehen.
while ($line = mysql_fetch_assoc($res)) {
$Text_aus_DB = $line['dein_DB_Feld'];
}
>
> Auch du kopierst vollkommen sinnlos Variableninhalte. Warum bloß?
Sinnlos würde ich jetzt nicht ganz behaupten. Das hat schon einen Sinn, nämlich dem Fragensteller selbst nachdenken zu lassen anstatt alles vorzugeben ...
>
> Zumal diese Schleife nur dafür sorgt, dass nach ihr der LETZTE abgefragte Wert in $Text\_aus\_DB steht. Die Verarbeitung müßte innerhalb der Schleife stattfinden.
Jupp, das ist richtig. Nun verrat doch nicht alles ;-)
Dann halt so:
~~~php
while ($line = mysql_fetch_assoc($res)) {
$Text_aus_DB[] = $line['dein_DB_Feld'];
}
Gut, dann gibts jetzt für jede Zeile ein durchnummeriertes Array, was du hinterher verarbeiten kannst oder halt ... in der Schleife selbst. Gesetz den Fall, es gibt mehrere Zeilen, die zurückgegeben werden. Ansonsten kannst du dir das while sparen und auch die "[]".
Ich denke, es geht hier noch um ein ganz anderes Verständnisproblem, welches Zeilen in Textdateien und Zeilen in Datenbanken durcheinanderbringt.
jupp.
Eine Datenbankabfrage besteht zwar auch aus mehreren "Zeilen", aber die sind viel stärker getrennt und automatisch einzeln verfügbar. Das ist ja gerade der Vorteil gegenüber Textdateien, bei denen man das ganze Trennen (und Escapen beim Schreiben) selbst machen muß.
*zustimm*
Gruß,
Leeloo
Moin!
also die quelltest ist so
Erwartungsgemäß grauslig - aber das kriegen wir hin... :)
Ich habe natürlich Anmerkungen:
$res = mysql_query("SELECT * FROM datenbank WHERE Anr='$anr' ");
Vermeide "SELECT *". Liste immer alle gewünschten Spalten auf, die du abfragen willst. Das spart Ressourcen und Zeit. Wie es aussieht, fragst du hier ja nur eine einzige Spalte ab. Also liste sie auf.
$zusatzoption1 = mysql_result($res,0,"$zusatzoption1");
Was steht in der Variablen $zusatzoption1 drin, bevor diese Zeile ausgeführt wird?
$lines = $zusatzoption1;
Warum kopierst du hier die Variable um?
$num = sizeof($lines);
sizeof() ist count(). Aber $lines ist kein Array, sondern ein String. Nur Arrays kann man sinnvoll zählen.
if ($num > 0) {
for($i = 0; $i < $num; $i++) {
Die IF-Bedingung zusammen mit der for-Schleife sind obsolet. Verwende eine while-Schleife.
$lg = explode("|", $lines[$i]);
Ist in $lines überhaupt ein Zeichen | enthalten?
$daten_1 = $lg[0];
$daten_2 = $lg[1];
Warum kopierst du hier wieder sinnlos die Variablen?
echo "$daten_1 <br />$lines<br />$num";
Das ist die einzige Zeile, die nicht zu kritisieren ist.
}
}
mit der textdatei hat es ohne probleme funktioniert, bei mysql gehts aber nicht
Textdateien verhalten sich deswegen anders, weil man sie ja auch mit komplett anderen Befehlen ausliest. Zeig mal, wie du das bei der Textdatei gemacht hast, damit ich sehen kann, was dir jetzt an Effekt fehlt.
- Sven Rautenberg
so habe ich bisher immer die textdatei ausgelesen.
nun möchte ich hier aber diese daten aus der mysql auslesen.
$datei = "intershop/$id.intershopbasket";
$lines = file($datei);
$num = sizeof($lines);
if ($num > 0) {
for($i = 0; $i < $num; $i++) {
$lg = explode("|", $lines[$i]);
$daten_anr = $lg[0];
$daten_menge = $lg[1];
}
}
in der textdatei steht sowas drin wie
0546400640|2
0546400233|1
die erste zahl ist vom shop die artikelnummer und die zweite zahl die menge.
sobald die bestellung abgesclossen wird, werden die daten in die db geschrieben.
jetzt kann es ja sein, dass der kunde sich seine alten bestellungen wieder anschauen kann.
deshalb muss ich ja nun wieder die daten auslesen.
das geht aber leider nicht
Moin!
$lines = file($datei);
Tja, und da ist der entscheidende Unterschied. Der Befehl "file" liest die gesamte Textdatei in ein Array ein, jede Zeile in ein Arrayelement.
Bei Datenbanken passiert das nicht. Da kriegst du durch dein SELECT aber auch alle betroffenen Zeilen der Tabelle geliefert - nur eben nacheinander, du kannst die einzelnen Zeilen dann problemlos mit mysql_fetch_assoc() in eine Variable auslesen.
Da du ja eine Datenbank hast, brauchst du auch das überflüssige Splitten nicht mehr - für sowas hat ja jeder Datensatz seine unterschiedlichen Felder.
sobald die bestellung abgesclossen wird, werden die daten in die db geschrieben.
jetzt kann es ja sein, dass der kunde sich seine alten bestellungen wieder anschauen kann.
deshalb muss ich ja nun wieder die daten auslesen.
das geht aber leider nicht
Wenn du eine Shop-Software von Textdateien auf Datenbank umstellen willst, erfordert das mehr oder weniger zwingend, dass du dich mit der Datenhaltung in Datenbanken auch auskennst. So wie es aussieht, fehlen dir ganz böse die Grundlagen.
Dabei ist das PHP-Handbuch eigentlich ausreichend mit Beispielcode ausgestattet, der die einzelnen Befehle verdeutlicht. Und es gibt auch viele Tutorials zu dem Thema - z.B. http://tut.php-quake.net/.
- Sven Rautenberg
ne ich tu keinen shop umprogrammieren sonder habe in den letzten tagen einen selbst programmiert. das kann gut sein das mir im datenbankenberreich die grundlagen fehlen.
übrigens die shopseite ist www.prinz-deluxe.de
wie tu ich denn dann am besten die txt datei in der db abspeichern??
ich habe monentan in der db auftrag folgende spalten
id, kunde, auftrag, gesamtpreis
im der spalte auftrag habe ich die anr + menge drin stehen
000032423|1
324234323|3
jeden artikel in eine spalte legen möchte muss ich da für jeden auftrag eine neue db anleden oder??
Moin!
wie tu ich denn dann am besten die txt datei in der db abspeichern??
Indem du diese Textdatei-Analogie mal ganz schnell wieder vergißt. Das ist nicht zielführend.
ich habe monentan in der db auftrag folgende spalten
id, kunde, auftrag, gesamtpreis
im der spalte auftrag habe ich die anr + menge drin stehen
000032423|1
324234323|3
Üblicherweise hast du in einer Datenbank mehrere Tabellen. Bei Shops sind das mindestens:
Eine Tabelle für Produkte, mit einer Produkt-ID zum Verknüpfen.
Eine Tabelle für Kunden, mit einer Kunden-ID zum Verknüpfen.
Eine Tabelle mit Aufträgen, mit einer Auftrags-ID, und der verknüpften Kunden-ID.
Eine Tabelle Auftragsdetails, mit einer eigenen ID, der Auftrags-ID, der Produkt-ID und irgendeiner Art der Verknüpfung des zum Zeitpunkt des Bestellens aktuellen Preises. Was bedeuten kann, dass entweder der Auftrag ein Datum trägt, und die Produkt-Tabelle noch eine Untertabelle "Preishistorie" bekommt, wo jede Preisänderung eines Produkts aufgeführt ist. Oder indem schlicht und einfach der dann gültige Preis fix kopiert wird.
Jede Tabelle hat dann natürlich noch die weiteren Nutzdaten, die jeweils 1:1 mit der entsprechenden ID verbunden sind. Bei Produkten also z.B. Bezeichnung, Bildlink, Beschreibung, bei den Kunden Name, Adresse etc, bei den Aufträgen vielleicht Status (bestellt, geliefert, bezahlt).
jeden artikel in eine spalte legen möchte muss ich da für jeden auftrag eine neue db anleden oder??
Um Gottes Willen nicht. Datenbanken und Tabellen werden einmalig bei Systeminstallation erstellt, danach nie wieder angefaßt. Der Rest spielt sich ausschließlich in den Daten ab, die passend verknüpft werden.
Ich kann hier wirklich unmöglich in einem Posting Grundlagen der Datenbanknutzung vermitteln. Lies bitte das Tutorial.
- Sven Rautenberg
Hallo Tobias,
$res = mysql_query("SELECT * FROM datenbank WHERE Anr='$anr' ");
warum fragst Du alle Spalten Deiner Tabelle ab, dazu möglicherweise noch
Tausende von Zeilen, wenn Du ...
$zusatzoption1 = mysql_result($res,0,"$zusatzoption1");
doch nur an einem einzigen Feld der ersten Zeile Deiner Ergebnismenge
interessiert bist - und den Rest einfach wegwirfst?
Außerdem ist es Dir egal, ob Deine Abfrage erfolgreich ist oder nicht, ob ein
Fehler auftritt oder nicht - Du ignorierst diese Möglichkeiten einfach. Das
tut weh.
Bitte erläutere mir, was Du mit folgendem Programmcode erreichen willst.
Es ist eine äußerst gute Idee, seinen Code zu kommentieren, damit man selbst
in 14 Tagen noch versteht, was man damals auf welchem Weg erreichen wollte.
$lines = $zusatzoption1;
$num = sizeof($lines);
if ($num > 0) {
for($i = 0; $i < $num; $i++) {
$lg = explode("|", $lines[$i]);
$daten_1 = $lg[0];
$daten_2 = $lg[1];
Vermutlich ist es viel einfacher als Du denkst.
Ich könnte mir vorstellen, dass Du an den Inhalten einer bestimmten Spalte
interessiert bist und diese Zeilenweise ausgeben möchtest.
Für Deine Helfer wäre es viel einfacher, wenn Du uns ein paar Beispieldatensätze
aus der Datenbank angeben würdest und dann das, was Du gerne als Ausgabe
hättest.
Freundliche Grüße
Vinzenz
Hallo,
Welche Programmiersprache? In PHP gehts mit: mysql_num_rows();
Du könntest deiner MySQL-Anfrage auch "COUNT(*) AS anzahl" hinzufügen. Dann liefert MySQL selbst schon die Anzahl der Zeilen. Du musst nur das Feld 'anzahl' abfragen.
Gruß,
Leeloo