PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Die eigene Filebase?


DaDon4130
23.03.2005, 23:59:34
Also Leute ,bin nun mit meinem Login Script soweit fertig und das freut mich sehr ;-) .
Nun zum zweiten Teil meiner Page ,
die "Filebase".
Welche folgende Sachen beinhaltne sollte :
-Kategorien
File Infos :
-Grösse
-Besitzer
-Erstellt am
-Hits
-File download nur als regestrierter User ( das kriege ich wahrscheinlich hin)
-File upload vom User selber aus
-Download Counter (evt. Anzeige der Top-Downloads)

-----
Ich habe im Netz leider kein vernünfiges Tutorial gefunden , und da ich nich auf fertig Scripts zurück greifen will , frage ich lieber euch.
Wo fange ich am besten an , gibt mir bitte nicht irgendwelche links wo ich mir grundkentnisse sammeln soll ^^ ,die hab ich alle schon gelesen und mein buch kommt auch bald.Ich möchte gerne ,das ihr mir ne Starthilfe in Form von Codes gebt. Also ,wo fange ich an ,was sind die ersten Schritte?

xabbuh
24.03.2005, 09:14:04
Wo genau hakt es bei dir denn? Hast du dir schon eine Struktur für deine Datenbanktabelle überlegt?

DaDon4130
24.03.2005, 11:30:46
Wo genau hakt es bei dir denn? Hast du dir schon eine Struktur für deine Datenbanktabelle überlegt?
danke ! genau so meinte ich das nämlich.. jetzt hab ich schon mal nen Anfang womit ich anfange muss , also die struktur der mysql tabelle.
Ich würde die so aussehen lassen:

CREATE TABLE filebase (
`fileid` mediumint( 8 ) unsigned NOT NULL auto_increment,
`filename` tinytext NOT NULL ,
`on_date` bigint( 20 ) unsigned default '1',
`author` tinytext NOT NULL ,
`filesize` tinytext NOT NULL ,

Stimmt das soweit? nun brauch ich noch was für kategorien! Wie wäre dafür die Bezeichnung?

Corvin
24.03.2005, 11:34:25
CREATE TABLE filebase (
`sd` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`fileid` mediumint( 8 ) unsigned NOT NULL auto_increment,
`filename` tinytext NOT NULL ,
`on_date` bigint( 20 ) unsigned default '1',
`author` tinytext NOT NULL ,
`filesize` tinytext NOT NULL ,
PRIMARY KEY ( `sd` )
);

xabbuh
24.03.2005, 11:35:13
Das sieht doch soweit ganz gut aus. Für den Dateinamen würde als Spaltentyp vielleicht eher VARCHAR(255) nehmen. Außerdem würde ich die Dateigröße gar nicht unbedingt in der Datenbank speichern, so lange du nicht danach sortieren möchtest.
Zu den Kategorien: Lege dir eine zweite Tabelle an, in der du die Kategorien abspeicherst. In der Tabelle filebase fügst du dann noch eine Spalte categoryid hinzu, in der du die id der zugehörigen Kategorie speicherst.

DaDon4130
24.03.2005, 11:38:04
CREATE TABLE filebase (
`sd` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`fileid` mediumint( 8 ) unsigned NOT NULL auto_increment,
`filename` tinytext NOT NULL ,
`on_date` bigint( 20 ) unsigned default '1',
`author` tinytext NOT NULL ,
`filesize` tinytext NOT NULL ,
PRIMARY KEY ( `sd` )
);
was wäre den "sd" ,danke für deine hilfe ;-)

ist das sowas wie "id"?

xabbuh
24.03.2005, 11:43:52
CREATE TABLE filebase (
`sd` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`fileid` mediumint( 8 ) unsigned NOT NULL auto_increment,
`filename` tinytext NOT NULL ,
`on_date` bigint( 20 ) unsigned default '1',
`author` tinytext NOT NULL ,
`filesize` tinytext NOT NULL ,
PRIMARY KEY ( `sd` )
);
Wofür denn die Spalte sd? Außerdem kannst du nicht zwei Spalten die Eigenschaft auto_increment geben.
Mit dem PRIMARY KEY hast du Recht. Allerdings würde ich den auf die Spalte fileid legen und die Spalte sd weglassen.

Corvin
24.03.2005, 11:50:05
Oh mann... ich schlaf noch halb.
sd ist ein Tippfehler ind sollte id heißen.
Und fileid` mediumint( 8 ) unsigned NOT NULL auto_increment, wollte ich ganz rausnehmen.

CREATE TABLE filebase(
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`filename` tinytext NOT NULL ,
`on_date` bigint( 20 ) unsigned default '1',
`author` tinytext NOT NULL ,
`filesize` tinytext NOT NULL ,
PRIMARY KEY ( `id` )
)

DaDon4130
24.03.2005, 11:52:59
oke!
also die erste Tabelle so :
CREATE TABLE filebase (
`fileid` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`filename` tinytext NOT NULL ,
`on_date` bigint( 20 ) unsigned default '1',
`author` tinytext NOT NULL ,
`filesize` tinytext NOT NULL ,
`categoryid` tinytext NOT NULL
PRIMARY KEY ( `id` )
);

und die zweite so:

CREATE TABLE category (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`catname` tinytext NOT NULL ,
`numfiles` tinytext NOT NULL ,
PRIMARY KEY ( `id` )
);

so?? oder sind irgendwo fehler?

Corvin
24.03.2005, 12:08:22
Ja. Das erste muss so aussehen:

CREATE TABLE filebase(
`fileid` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`filename` tinytext NOT NULL ,
`on_date` bigint( 20 ) unsigned default '1',
`author` tinytext NOT NULL ,
`filesize` tinytext NOT NULL ,
`categoryid` tinytext NOT NULL ,
PRIMARY KEY ( `fileid` )
)

Was hindert dich daran, das ganze einfach mal auszuprobieren?

xabbuh
24.03.2005, 12:15:35
Nicht ganz. Die Spalte categoryid in der Tabelle filebase sollte den gleichen Typ haben wie die Spalte id in der Tabelle category.

DaDon4130
24.03.2005, 12:23:08
oke! also so?

CREATE TABLE filebase(
`fileid` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`filename` tinytext NOT NULL ,
`on_date` bigint( 20 ) unsigned default '1',
`author` tinytext NOT NULL ,
`filesize` tinytext NOT NULL ,
`categoryid` tinytext NOT NULL ,
PRIMARY KEY ( `fileid` )
)

und:

CREATE TABLE category (
`categoryid` tinytext NOT NULL ,
`catname` tinytext NOT NULL ,
`numfiles` tinytext NOT NULL ,
PRIMARY KEY ( `categoryid` )
);

xabbuh
24.03.2005, 12:34:54
Statt TINYTEXT für categoryid nimm INT(11).

DaDon4130
24.03.2005, 12:39:35
oke danke

Ergebnis MYSQL:
CREATE TABLE filebase(
`fileid` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`filename` tinytext NOT NULL ,
`on_date` DATE,
`author` tinytext NOT NULL ,
`filesize` tinytext NOT NULL ,
`dlurl` tinytext NOT NUL,
`categoryid` INT(11) NOT NULL ,
`dlinfo` tinytext NOT NULL,
PRIMARY KEY ( `fileid` )
)

und:

CREATE TABLE category (
`categoryid` INT(11) NOT NULL AUTO_INCREMENT,,
`catname` tinytext NOT NULL ,
`catinfo` tinytext NOT NULL,
PRIMARY KEY ( `categoryid` )
);

-- Nun zum nächsten Schritt , ich würde sagen das wäre die config.php!

So sähe sie nach meinen vorstellungen aus:
Ergebnis CONFIG:
[code]
<?php
$mysql_host = "localhost";
$mysql_user = "DB1700xx";
$mysql_pw = "xxxxxxx";
$mysql_db = "DB1700xx";
$mysql_table ="category";
$mysql_table2 ="filebase";
$main_dir = "http://www.magstar.de/xx";
$urldir = $main_dir;
$url = $main_dir;
$mysql_ce = mysql_connect ($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);
?>

xabbuh
24.03.2005, 13:02:21
Statt TINYTEXT für categoryid nimm INT(11).
Das bezog sich auf beide Tabellen. :-)

|Coding
24.03.2005, 13:03:21
für "on_date" würde ich dir den type DATE oder DATETIME empfehlen.

DaDon4130
24.03.2005, 13:13:14
so ,ich hab das ergennis editiert ,schaut nochmal drüber .. ich glaube da muss mehr hin als wie nur date? hab ich recht?

|Coding
24.03.2005, 13:20:25
schau doch mal im manual wie DATE aufgebaut ist und bestimm für dich, was in deinem fall richtig wäre.

hier: http://dev.mysql.com/doc/mysql/de/datetime.html

DaDon4130
24.03.2005, 14:41:55
oke danke !! sehr guter link , mh..date reicht mir , Zeit ist nicht notwendig! Danke

also nun sind wir mit der MYSQL Struktur für meine Filebase fertig! Das ergebnis ist auf seite 1!

Nun zum Schritt 2:
Damit ich nicht immer alle Connection Infos in einen PHP-Vogang schreiben muss ,hab ich ne config.php geschrieben!
Diese sieht wie folgt aus:

<?php
$mysql_host = "localhost";
$mysql_user = "DB1700xx";
$mysql_pw = "xxxxxxx";
$mysql_db = "DB1700xx";
$mysql_table ="category";
$mysql_table2 ="filebase";
$main_dir = "http://www.magstar.de/xx";
$urldir = $main_dir;
$url = $main_dir;
$mysql_ce = mysql_connect ($mysql_host, $mysql_user, $mysql_pw);
mysql_select_db($mysql_db);
?>


Ich glaube da ist soweit alles richtig ;-) !
Nun zum Schritt 3 :
Hier frage ich mich nun ,womit fange ich am besten an , wahrscheinlich mit der Kategorien Anzeige und der Erstellung von Kategorien.
Also erst die Anzeige oder die Erstellung?

|Coding
24.03.2005, 14:49:09
also nun sind wir mit der MYSQL Struktur für meine Filebase fertig! Das ergebnis ist auf seite 1!
seite 1 ist variabel... bei mir ist alles auf seite 1 :-)
Nun zum Schritt 3 :
Hier frage ich mich nun ,womit fange ich am besten an , wahrscheinlich mit der Kategorien Anzeige und der Erstellung von Kategorien.
Also erst die Anzeige oder die Erstellung?
vielleicht solltest du mit der erstellung anfangen, so sparst du dir rumgefummel in der tabelle mit pma. klappt die erstellung, so kannst du ein paar beispieleinträge verfassen und die ansicht schreiben.

Da_Hero
24.03.2005, 14:49:48
Schritt 3, hätte eigentlich vor Schritt 1 schon kommen müssen und der ist sich einmal grundlegend darüber zu informieren wie man so an die Arbeit geht, was zu beachten ist usw...

Eventuell hiermit...
http://www.amazon.de/exec/obidos/ASIN/3427011542/qid=1111672160/sr=8-4/ref=sr_8_xs_ap_i4_xgl/028-8762789-7890932

DaDon4130
24.03.2005, 14:55:34
danke dir , aber hab schon ein buch über php bestellt ;-P
aber danke nun weiß ich schonmal das man vorher schon mir der erstellung anfangen muss und dabei / bzw. macher dann die Struktur der MYSQL tabellen.
Nun , macht nix , ich mach nun schritt 3. Und poste gleich dann meine Vorstellung ,wie man eine Kategorie erstellt!

|Coding
24.03.2005, 15:07:57
Schritt 3, hätte eigentlich vor Schritt 1 schon kommen müssen und der ist sich einmal grundlegend darüber zu informieren wie man so an die Arbeit geht, was zu beachten ist usw...
warum? du musst erst mal deine datenbank designen, dann die eigentlichen operationen schreiben.

DaDon4130
24.03.2005, 17:36:41
so nun mein versuch eine category zuadden... name der datei ist "cat_add.php" ,ausserdem bin ich noch an der darstellung der category am arbeiten , welche die "category_admin.php" heisst !

Nun meine cat_add.php , die mysql und config ergebnisse wurde vorhe schon von mir gepostet!

Datei als TXT im Anhang!! Bitte kontrollieren bzw. helfe..probiere sie in der Zeit mal aus!

|Coding
24.03.2005, 18:33:16
arbeite lieber mit den superglobalen arrays ($_SERVER, $_COOKIE, $_POST...) also nicht $PHP_SELF sondern $_SERVER['PHP_SELF'].

weitere infos hier: http://de2.php.net/manual/en/language.variables.predefined.php

DaDon4130
24.03.2005, 20:41:58
nun ,hab ich ein problem , meine php codes schreiben nix in die mysql tabelle rein!!
die datei ist verbessert im Anhang!

|Coding
24.03.2005, 21:07:30
ich tippe mal darauf, dass es hieran liegt:

<form method='post' action='<? echo ?>?action=write'>

ein echo das nichts ausgibt, ist wie ein auto ohne sprit :-)

DaDon4130
24.03.2005, 22:52:42
oh yo sorry , daran arbeite ich die ganze zeit ,weil für mich liegt da der fehler drin , habs aber schon mit allen möglichkeiten probiert ,hoffnunglos!

diese möglichkeiten ware:

<form method='post' action='<? echo $PHP_SELF; ?>?action=write'>
und
<form method='post' action='<? echo $_SERVER['PHP_SELF']; ?>?action=write'>


liegt irgendwo anders ein fehler vor?

|Coding
24.03.2005, 23:06:33
die variante mit $_SERVER['PHP_SELF'] ist besser und du solltest auch die variablen $catname und $catinfo über $_POST ($_POST['catname'] und $_POST['catinfo']) ansprechen. vielleicht liegt es auch einfach nur daran, habe das script noch nicht laufen lassen.

DaDon4130
24.03.2005, 23:26:28
die variante mit $_SERVER['PHP_SELF'] ist besser und du solltest auch die variablen $catname und $catinfo über $_POST ($_POST['catname'] und $_POST['catinfo']) ansprechen. vielleicht liegt es auch einfach nur daran, habe das script noch nicht laufen lassen.

oke ,wo soll ich das den alles ändern?

so überall?



<?php
break;
case "write":
///
/// ENDE: Hinzufügen der Kategorien
///
///
/// START: Schreiben der Kategorien
///

if($_POST['catname']=="") /*Wenn falsch dann fehler*/
{
echo "
<DIV align=center>Du hast den Namen vergessen... <br>
[<A href='javascript:history.back();'>zurück zum eintragen!</A>]</DIV>";
}

if($_POST['catname'] != "" ) /*wenn alles erfüllt ist dann eintragen*/
{
$sql = "INSERT INTO $mysql_table (categoryid,catname,catinfo,)
VALUES('','$_POST['catname']','$_POST['catinfo']',)";

$result = @mysql_query($sql);

echo "<DIV align=center>Danke, dein Eintrag wurde erfolgreich hinzugefügt! <br>
[<A href='category_admin.php'>zurück zum Adminbereich</A>]</DIV>";
}
///
/// ENDE: Schreiben der Kategorien
///
}
?>

|Coding
24.03.2005, 23:41:30
soweit richtig, nur das solltest du noch ändern:

$sql = "INSERT INTO $mysql_table (categoryid,catname,catinfo,)
VALUES('','$_POST['catname']','$_POST['catinfo']',)";

in:

$sql = "INSERT INTO $mysql_table (categoryid,catname,catinfo,)
VALUES('','{$_POST['catname']}','{$_POST['catinfo']}',)";

siehe hierzu auch feuervogels post: http://www.selfphp.info/forum/showthread.php?t=8195

DaDon4130
25.03.2005, 00:43:26
oke , ich hab alles geändert ,wie du es mir gesagt hast,doch immer noch kein ergebnis!

daher hab ich folgendes geändert , um einen Fehlercode zu erhalten

<?php
break;
case "write":
///
/// ENDE: Hinzufügen der Kategorien
///
///
/// START: Schreiben der Kategorien
///

if($_POST['catname']=="") /*Wenn falsch dann fehler*/
{
echo "
<DIV align=center>Du hast den Namen vergessen... <br>
[<A href='javascript:history.back();'>zurück zum eintragen!</A>]</DIV>";
}

if($_POST['catname'] != "" ) /*wenn alles erfüllt ist dann eintragen*/
{
$sql = "INSERT INTO $mysql_table (categoryid,catname,catinfo,)
VALUES('','{$_POST['catname']}','{$_POST['catinfo']}',)";
$qry = mysql_query( $sql ) or die( mysql_error() );

$result = @mysql_query($sql);

echo "<DIV align=center>Danke, dein Eintrag wurde erfolgreich hinzugefügt! <br>
[<A href='category_admin.php'>zurück zum Adminbereich</A>]</DIV>";
}
///
/// ENDE: Schreiben der Kategorien
///
}
?>

man beachte: $qry = mysql_query( $sql ) or die( mysql_error() );

und sofort wird ein fehlercode anzeigt ,welcher lautet:
-->You have an error in your SQL syntax near ') VALUES('','03','03',)' at line 1

nun ,was sagt mir das?

|Coding
25.03.2005, 01:01:23
schreib dein query mal so: (der stört sich sicher an den letzten kommas)

$sql = "INSERT INTO
$mysql_table(categoryid,
catname,
catinfo)
VALUES('',
'" . $_POST['catname'] . "',
'" . $_POST['catinfo'] . "')";

DaDon4130
25.03.2005, 01:10:19
schreib dein query mal so: (der stört sich sicher an den letzten kommas)

$sql = "INSERT INTO
$mysql_table(categoryid,
catname,
catinfo)
VALUES('',
'" . $_POST['catname'] . "',
'" . $_POST['catinfo'] . "')";
hahaha Danke !Super Geil klappt!! Danke super geiler support hier noch um 1:10 Nachts !!! TOP!!!!
danke , ich baue jetzt weiter an einer Ansicht und dann an der eigentlichen Filebase.Melde mich wieder..

*EDIT*
Hab da noch nen kleinen Fehler ,der mach alles 2mal!

|Coding
25.03.2005, 01:19:19
hmm... kannst du den aktuellen code mal posten?

DaDon4130
25.03.2005, 01:21:53
jep klaro!
-> Anhang!

|Coding
25.03.2005, 01:25:48
ich tippe jetzt einfach mal darauf:

$qry = mysql_query( $sql ) or die( mysql_error() );

$result = @mysql_query($sql);

ich finde ein query reicht *gg*

DaDon4130
25.03.2005, 01:28:06
jep 100 Punkte!
Klappt ,super danke dir!!

|Coding
25.03.2005, 01:33:22
kein thema.
wenn ich dir aber noch einen tipp geben darf...
arbeite besser mit einzügen, bsp.:
<?php
// einzug
if($a == $b){
//einzug
for($i = 0; $i < 5; $i++){
// einzug
echo 'bla';
}
}
?>
das fördert die übersichlichkeit, gerade bei komplexeren codes.

xabbuh
25.03.2005, 10:08:32
Zum Einrücken noch zwei Links:
- http://tut.php-q.net/einruecken.html
- http://pear.php.net/manual/en/standards.php

Und noch ein Hinweis: Du solltest Benutzereingaben nie ungeprüft in MySQL-Queries verwenden. Die Funktion strip_tags() und mysql_real_escape_string() sind dabei unerlässliche Hilfsmittel.

DaDon4130
25.03.2005, 12:27:17
oke danke für die Infos !thX
Nun , die Kategorien klappen Suppa!!! Kann hinzufügen / löschen /editieren und anzeigen lassen.
Nun komme ich zum wesentlichen , die Files.
Ich hab zwei Mysql Tabellen ,einmal für die Kategorien und einmal für die Files selber... Nun stelle ich mir die Frage , wie kann man es so darstellen lassen.

Zuerst eine Übersicht der Kategorien und wenn man auf diese Kategorie drauf klickt ,dann kommen nur die Files ,welche auch in diese Kategorie hören. Wie kann ich die Files sortieren. Wahrscheinlich hat es etwas damit zutun ,das ich in beiden Tabellen , categoryid drin habe.Nun an euch die Frage, wie kann Files nur mit einer bestimmten categoryid anzeigen lassen und wie krieg ich auf die Kategorie Namen , den Link zu der Auflistung der Files ,welche auch in die Kategorie gehören...puh..ich hoffe ihr könnt mir helfen ,mir fehlt dafür einfach die Erfahrung , soweit ist mein Horizont noch nicht ^^

xabbuh
25.03.2005, 12:34:43
Nun an euch die Frage, wie kann Files nur mit einer bestimmten categoryid anzeigen lassen und wie krieg ich auf die Kategorie Namen , den Link zu der Auflistung der Files ,welche auch in die Kategorie gehören...puh..ich hoffe ihr könnt mir helfen ,mir fehlt dafür einfach die Erfahrung , soweit ist mein Horizont noch nicht ^^
Die entsprechende categoryid kannst du ja ohne Probleme von der Kategorienübersicht an die Detailansicht der Dateien übergeben. In MySQL gibt es so genannte WHERE-Klauseln (http://tut.php-q.net/mysql-update.html#u3), so dass du aus der MySQL-Tabelle nur die Dateien auslesen kannst, die zu eben dieser Kategorie gehören.
Das würde dann so aussehen:

<?php
if(!empty($_GET['categoryid']))
$categoryid = (int)$_GET['categoryid'];

$sql = "SELECT
fileid
FROM
filebase
WHERE
categoryid = $categoryid";
?>

DaDon4130
25.03.2005, 15:56:33
also freunde des php´s , bin gerade noch bei der erstellung , von dem hinzufügen von files. Ich finde es irgendwie doof ,das meine user dann das Passwort eintragen müssen und das auch noch in der internationalen Form , 2004.04.31 oder sowas.

deshalb an euch die frage , wie kann mein script automatisch das heute datum abfragen und einseten?

|Coding
25.03.2005, 16:00:14
passwort, internationale form?... ja ne, is klar :-)



<?php
// akt. datum in der form:
// 25.03.2005 16:00:43
$date = date('d.m.Y H:i:s', time());
?>

DaDon4130
25.03.2005, 16:45:33
mh..geht irgendwie nicht ! hehe...ja ich meinte international time ..haha :-)

meine einbau form ist <input type='hidden' name='on_date' value='<? echo date(Y.d.m); ?>'>
und meine MYSQL Tabelle steht auf date , den mehr brauch ich nicht.
mh..wie lautet blos der richtige command ,sonst added der nämlich "0000-00-00"

|Coding
25.03.2005, 16:49:00
schreib doch in deine mysql abfrage ein "NOW()" an der richtigen stelle.

DaDon4130
25.03.2005, 17:15:19
sry , aber wo hin soll "now" ? gibts den keine möglichkeit in meinem code , das date richtig anzuordnen ! Irgendwie ist da ja ein Fehler , dass er das datum nicht abspeichert. ich hab das damals gemacht so ,ging auch , das liegt an deinem code "date(Y.d.m)" ,das nimmt der nicht an..oder sowas

|Coding
25.03.2005, 17:19:17
das ist aber auch nicht mein code!

meiner sieht so aus:
<?php
// akt. datum in der form:
// 25.03.2005 16:00:43
$date = date('d.m.Y H:i:s', time());
?>

für dich müsste er so aussehen (wenn du es nicht im sql machen willst):
<?php
// akt. datum in der form:
// 2005-03-25
$date = date('Y-m-d');
?>

DaDon4130
25.03.2005, 17:30:15
jep thx!! ich idiot hab das time vergessen..danke coding !!

so sieht jetzt aus , und es klappt!
<input type='hidden' name='on_date' value='<? echo date('Y-m-d', time()); ?>'>

|Coding
25.03.2005, 17:37:02
Ne, das time() kannst du weglassen. Der 2 Parameter von date() ist optional, sprich wenn der nicht angegeben wird, nimmt die Funktion das aktuelle Datum.

xabbuh
25.03.2005, 18:07:11
Aber das Datum brauchst du doch eigentlich erst beim Eintragen. Dafür kannst du die MySQL-Funktion NOW() (http://dev.mysql.com/doc/mysql/de/numeric-functions.html) verwenden, wie |Coding schon gesagt hat:

INSERT INTO
filebase
SET
datum = NOW()

|Coding
25.03.2005, 18:26:56
Ich habe mich auch gewundert warum über's Formular, aber was solls. Im Endeffekt ist es Hose wie Jacke, nur über das SQL-Statement wäre es weniger Schreibarbeit und wenn ich jetzt mal pingelig sein darf, der Traffic würde auch gesenkt :-)

xabbuh
25.03.2005, 18:29:34
Ich habe mich auch gewundert warum über's Formular, aber was solls. Im Endeffekt ist es Hose wie Jacke, nur über das SQL-Statement wäre es weniger Schreibarbeit und wenn ich jetzt mal pingelig sein darf, der Traffic würde auch gesenkt :-)
Nicht zu vergessen, dass auch ein klein wenig schneller ist und man dem Benutzer eine Angriffsfläche weniger gibt, um Daten zu manipulieren.

|Coding
25.03.2005, 18:31:54
Das Formular wäre auch übersichtlicher :-P

DaDon4130
25.03.2005, 19:11:47
ahja ..mh..beim nächsten mal ;-) ..danke für die vielen infos ,ihr beiden.. euch kann man gebrauchen!

|Coding
25.03.2005, 19:17:33
Nicht so viel loben, so wird xabbuh noch eingebildet *gg*

DaDon4130
25.03.2005, 19:21:36
Die entsprechende categoryid kannst du ja ohne Probleme von der Kategorienübersicht an die Detailansicht der Dateien übergeben. In MySQL gibt es so genannte WHERE-Klauseln (http://tut.php-q.net/mysql-update.html#u3), so dass du aus der MySQL-Tabelle nur die Dateien auslesen kannst, die zu eben dieser Kategorie gehören.
Das würde dann so aussehen:

<?php
if(!empty($_GET['categoryid']))
$categoryid = (int)$_GET['categoryid'];

$sql = "SELECT
fileid
FROM
filebase
WHERE
categoryid = $categoryid";
?>



mh..oke. Kapier ich nicht wirklich. Also der zeigt mir dann nur die files an ,die auch in der &categoryid sind? right?

So , also am Anfang sollte mein Script so aussehen:
http://www.clanscripte.net/main.php?content=files

d.h.
(Aufgabe) (status)
-Aufzählung der Kategorien (oke)
-Kategorien mit Links versehen zu der Auflistung bestimmter Files (?)
-Files auflisten (oke)
-Auf die Files ein Link setzen ,welcher zu einer Detailansicht führt, wo dann size , on_date ,beschreibung etc. stehen.
-Download Button ,der erneut ein Link ist zu einer Download seite ,wo steht "er Download sollte nun innerhalb von 5 Sekunden starten. Falls nicht, klicke hier" (?)
-Diese Download seite nur für regestrierte Besucher ,sonst Login (oke)

..Nun helft mir bitte mal bei den Aufgaben ,wo ein (?) steht.

xabbuh
25.03.2005, 19:25:03
mh..oke. Kapier ich nicht wirklich. Also der zeigt mir dann nur die files an ,die auch in der &categoryid sind? right?
Genau. Die entsprechende categoryid wird über die URL mit übergeben. Was genau hast du daran denn nicht verstanden?

-Kategorien mit Links versehen zu der Auflistung bestimmter Files (?)
Wo genau hakt es da?

-Download Button ,der erneut ein Link ist zu einer Download seite ,wo steht "er Download sollte nun innerhalb von 5 Sekunden starten. Falls nicht, klicke hier"
Zum Thema Download gibt es einen Beitrag in den FAQ: http://php-faq.de/q/q-datei-download.html

DaDon4130
25.03.2005, 19:42:21
ja oke ,also fangen wir mal bei den ersten beiden Punkten an , der dritte kommt später.

Also , ich kapiere das irgendwie nicht , wie ich verschiedene "ordner" erstelle ,wo dann die files rein kommen.
und dann noch was ,bislang ist mir nur gelungen ,die kategorien unter einander auf zulisten.
Wie krieg ich den immer zwei stück in eine Reihe?

DaDon4130
25.03.2005, 23:22:27
also freunde des php´s , ich hab nun fast alles geschaft.
Mir bleiben nur noch ein paar fragen.dann hab ich mein den ersten teil meiner filebase!
01. Ich hab die WHERE Clausen kapiert ,aber bin jedoch zu dumm um diese in die praxis umzusetzen.Hier nochmal , ich möchte nur die files abzeige ,die auch in der angeklickten kategorie sind.
Bitte helft mir das in die praxis umzusetzen!! Hab meine filebase.php angehangen ,die klappt soweit ,aber zeigt halt doch noch alle files an und keine spezifischen.
Schaut bitte mal drüber!! BITTE
02.Ich benutze das " <? while ($data = mysql_fetch_array($result)) { ?> tabellen <? } ?> " , und kriege damit aber nur eine spalte pro zeile hin.
Wie kriege ich 2 spalten pro Zeile hin. Also das in jeder Zeile zwei File-category´s angezeigt werden?

xabbuh
25.03.2005, 23:42:17
01. Ich hab die WHERE Clausen kapiert ,aber bin jedoch zu dumm um diese in die praxis umzusetzen.Hier nochmal , ich möchte nur die files abzeige ,die auch in der angeklickten kategorie sind.
Bist du denn sicher, dass die Variable $action den Wert filelist hat, da ja nur dann dein Query mit der entsprechenden WHERE-Klausel an die Datenbank gesendet wird?

02.Ich benutze das " <? while ($data = mysql_fetch_array($result)) { ?> tabellen <? } ?> " , und kriege damit aber nur eine spalte pro zeile hin.
Wie kriege ich 2 spalten pro Zeile hin. Also das in jeder Zeile zwei File-category´s angezeigt werden?
Es gibt in PHP, wie auch in anderen Programmiersprachen, Modulo-Operator (http://de3.php.net/operators.arithmetic), mit dem du dir den Rest einer Division zurückgeben lassen kannst. Dazu definierst du dir eine Variable $i vor der Schleife, deren Wert du bei jedem Durchlauf der Schleife um 1 erhöhst. Nun kannst du bei jedem Durchlauf überprüfen, ob der Rückgabewert der Division von $i durch die Anzahl der Datensätze pro Zeile (also in deinem Fall 2) 0 ist. Wenn dies der Fall ist, beginnst du also eine neue Zeile:

<?php
$numrows = mysql_num_rows($result);
$i = 1;
while($row = mysql_fetch_assoc($result)) {

// neue Zeile beginnen
if($i % 2 === 1)
print '<tr>';

// aktuellen Datensatz anzeigen

// 2. Datensätze angezeigt?
if($i % 2 === 0)
print '</tr>'; // Zeile beenden

$i++;
}
?>

DaDon4130
25.03.2005, 23:49:49
Bist du denn sicher, dass die Variable $action den Wert filelist hat, da ja nur dann dein Query mit der entsprechenden WHERE-Klausel an die Datenbank gesendet wird?


Es gibt in PHP, wie auch in anderen Programmiersprachen, Modulo-Operator (http://de3.php.net/operators.arithmetic), mit dem du dir den Rest einer Division zurückgeben lassen kannst. Dazu definierst du dir eine Variable $i vor der Schleife, deren Wert du bei jedem Durchlauf der Schleife um 1 erhöhst. Nun kannst du bei jedem Durchlauf überprüfen, ob der Rückgabewert der Division von $i durch die Anzahl der Datensätze pro Zeile (also in deinem Fall 2) 0 ist. Wenn dies der Fall ist, beginnst du also eine neue Zeile:

<?php
$numrows = mysql_num_rows($result);
$i = 1;
while($row = mysql_fetch_assoc($result)) {

// neue Zeile beginnen
if($i % 2 === 1)
print '<tr>';

// aktuellen Datensatz anzeigen

// 2. Datensätze angezeigt?
if($i % 2 === 0)
print '</tr>'; // Zeile beenden

$i++;
}
?>


Zu 2:
Werde ich morgen mal ausprobieren!Danke dir !! Hoffe ich kriegs hin.

Zu 1:
Sie sprechen in Rätseln ^^.
Jedoch glaube ich Sie zu verstehen.
wenn du hier schaust http://www.magstar.de/community/filebase.php
siehst du das mein action funktioniert.Jedoch das Korn nicht vom Weizen getrennt wird. Was du auch in dem Link siehst.
Nun nochmal mein wahrscheinlich falscher Code , bzw. der where command sitzt bestimmt falsch.
Siehe hier :

<?php
///
/// ENDE : Anzeige der Katgorien
///
///
/// START : Anzeige der Filelist
///
break;
case "filelist":
?>
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="223353">
<tr>
<td><div align="center" class="admin"></div></td>
</tr>
<tr>
<td align="center"><?
mysql_connect($mysql_host,$mysql_user,$mysql_pw) OR DIE( "Couldn't connect to MySQL server!");
mysql_select_db($mysql_db) or DIE( "Keine Datenbank erreichbar!" );
if(isset($delete)) mysql_query("DELETE FROM $mysql_table2 WHERE fileid='$delete'");
$result = mysql_query("SELECT * FROM $mysql_table2 ORDER BY fileid");
?>
<table width="80%" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td width="20%"><div align="center" class="admin"><strong>-name-</strong></div></td>
<td width="30%"><div align="center" class="admin"><strong>-beschreibung-</strong></div></td>
<td><div align="center" class="admin">-autor-</div></td>
<td class="admin"><div align="center">-gr&ouml;&szlig;e-</div></td>
<td><div align="center" class="admin">-datum-</div></td>
<td class="admin"><div align="center">-catID-</div></td>
</tr>
<? while ($data = mysql_fetch_array($result)) {

if(!empty($_GET['categoryid']))
$categoryid = (int)$_GET['categoryid'];

$sql = "SELECT
fileid
FROM
filebase
WHERE
categoryid = $categoryid";
?>
<tr>
<td align="center" class="admin"><? echo $data[filename]; ?></td>
<td align="center" class="admin"><? echo $data[fileinfo]; ?></td>
<td align="center" class="admin"><? echo $data[author]; ?></td>
<td align="center" class="admin"><? echo $data[filesize]; ?></td>
<td align="center" class="admin"><? echo $data[on_date]; ?></td>
<td align="center" class="admin"><? echo $data[categoryid]; ?></td>
</tr>
<? } ?>
</table>
<div align="center"></div>
</td>
</tr>
</table>


<?php
}
///
/// ENDE : Anzeige der Filelist
///
?>

Dort findest du dein where Code Schnipsel wieder ,aber wahrscheinlich an der falschen Stelle.

xabbuh
26.03.2005, 00:00:53
Die Abfrage mit der WHERE-Klausel setzt du an die Stelle dieser Abfrage: SELECT * FROM $mysql_table2 ORDER BY fileid. Natürlich musst du dementsprechend auch die Zeilen mit if(!empty($_GET['categoryid'])) etc. davor setzen.

DaDon4130
26.03.2005, 16:36:01
oke hab ich gemacht ,schaut nun so aus:

<?
mysql_connect($mysql_host,$mysql_user,$mysql_pw) OR DIE( "Couldn't connect to MySQL server!");
mysql_select_db($mysql_db) or DIE( "Keine Datenbank erreichbar!" );
if(isset($delete)) mysql_query("DELETE FROM $mysql_table2 WHERE fileid='$delete'");
if(!empty($_GET['categoryid']))$categoryid = (int)$_GET['categoryid'];
$result = mysql_query("SELECT * FROM $mysql_table2 WHERE categoryid='$categoryid' ORDER BY fileid");
?>


aber funktioniert leider noch nicht... mh..hab ich irgendwie was falsch gemacht?

xabbuh
26.03.2005, 20:14:44
Schreibe die Abfrage am besten in eine extra Variable und lass dir diese ausgeben. Außerdem solltest du zusätzlich noch mysql_error() verwenden:

<?php
$sql = "SELECT
*
FROM
$mysql_table2
WHERE
categoryid = $categoryid
ORDER BY
fileid";
$result = mysql_query($sql) or die(mysql_error());
?>

DaDon4130
27.03.2005, 00:10:40
schaust du hier kommt ein fehler , schaust du im anhang ,siehst du meine php datei...
schau mal drüber ,ob ich was falsch gemacht habe , ist wahrscheinlich beim Fehldercode
"You have an error in your SQL syntax near 'ORDER BY fileid' at line 7"

xabbuh
27.03.2005, 08:43:46
Wenn du jetzt noch dazugeschrieben hättest, wie die Ausgabe von $sql aussieht, wären wir schon ein Stück weiter. :-)
Kann es vielleicht sein, dass die Variable $cateogoryid keinen Wert hat, da du die entsprechende id der Kategorie nicht per URL übergeben hast?

DaDon4130
27.03.2005, 12:01:21
$result = mysql_query($sql) or die(mysql_error());

<? while ($data = mysql_fetch_array($result)) { ?>
<tr>
<td align="center" class="admin"><? echo $data[filename]; ?></td>
<td align="center" class="admin"><? echo $data[fileinfo]; ?></td>
<td align="center" class="admin"><? echo $data[author]; ?></td>
<td align="center" class="admin"><? echo $data[filesize]; ?></td>
<td align="center" class="admin"><? echo $data[on_date]; ?></td>
<td align="center" class="admin"><? echo $data[categoryid]; ?></td>
</tr>
<? } ?>
so sieht die ausgabe aus.
Also ich denke ich kann die categoryid mit dem link übergeben :
<a href="filebase.php?action=filelist&categoryid">das steht so bei jedem Kategorie Titel.Aber ich glaube das reicht nicht,oda?

|Coding
27.03.2005, 16:59:06
Woher kommt die Eingabe der ganzen Infos? Übergibst Du die per Formular?

DaDon4130
27.03.2005, 22:54:28
Woher kommt die Eingabe der ganzen Infos? Übergibst Du die per Formular?
meinst du wie ich die daten in die mysql tabelle hinzufüge?
das geht per formular!
ausgeben werden sie normal als echo!siehst du ja als profi , und weiteres in der txt ,die angehängt habe ich ein pass posts davor.

xabbuh
28.03.2005, 11:05:18
Also ich denke ich kann die categoryid mit dem link übergeben :
<a href="filebase.php?action=filelist&categoryid">das steht so bei jedem Kategorie Titel.Aber ich glaube das reicht nicht,oda?
Von Prinzip her ist das schon richtig. Allerdings muss categoryid natürlich auch noch ein Wert mitgegeben werden.
Zum Beispiel:
<a href="filebase.php?action=filelist&categoryid=5">

Wobei dieser Link natürlich dynamisch für jede Kategorie erstellt werden muss.

DaDon4130
28.03.2005, 14:24:48
ja ,das geht so ,wenn ich die links klar mit einer bestimmten ID bestimme! Dann klappt alles und die Links werden klar in Kategorien aufgeteilt.
Nun ,muss ich aber das while weg machen , sodass die kategorien sich nicht mehr automatisch anzeigen ,nach id´s .. geht das nicht so alles kategorien durch while angezeigt werden und ihre categoryid mit geben?

xabbuh
28.03.2005, 18:10:45
Nun ,muss ich aber das while weg machen , sodass die kategorien sich nicht mehr automatisch anzeigen ,nach id´s .. geht das nicht so alles kategorien durch while angezeigt werden und ihre categoryid mit geben?
Die Frage habe ich jetzt nicht verstanden. Kannst du die bitte nochmal genauer erläutern?

DaDon4130
28.03.2005, 18:15:38
hehe ,
also ich muss jetzt die categorien links immer selber eintragen. die categoryid wird ja nicht automatisch zu der category mit geschickt

xabbuh
28.03.2005, 18:19:57
Du lässt doch eine Liste der Kategorien dynamisch aus der Datenbank erstellen. Hier können die Links ja auch dementsprechend kreiert werden:

<?php
$sql = "SELECT
categoryid,
catname,
catinfo
FROM
category
ORDER BY
catname";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
print '<a href="index.php?action=filelist&categoryid=' . $row['categoryid'] . '">' . $row['catname'] . '</a>';
}
?>

DaDon4130
28.03.2005, 18:28:29
wow! super das klappt perfekt
nun nur noch den kack rein bauen ,dann hab ich es soweit
<?php
$numrows = mysql_num_rows($result);
$i = 1;
while($row = mysql_fetch_assoc($result)) {

// neue Zeile beginnen
if($i % 2 === 1)
print '<tr>';

// aktuellen Datensatz anzeigen

// 2. Datensätze angezeigt?
if($i % 2 === 0)
print '</tr>'; // Zeile beenden

$i++;
}
?>