| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

27-11-2002, 12:16
|
|
gfx-freak
Junior Member
|
|
Registriert seit: Nov 2002
Beiträge: 83
|
|
navi
hi all!
besonders an tob gg !
Also folgendes jeder kennt doch von euch web.de und andere freemail anbieter als bsp.!
Meine Frage die haben eine User spezifische Navigation, jeder User bekommt seinen DB Inhalt per Navi angezeigt // und nicht den allgemeinen Inhalt wie es bei standard seiten der Fall ist...
Also weiss jmd wie man dieses realisiert, das man für jeden User spezifisch seine Navigation bauen kann ? Die dann nach betätigung eines Links seinen persönlichen DB Inhalt ausliest...
Danke für Tipps, hilfen etc !
|

27-11-2002, 13:01
|
|
Titus
PHP Master
|
|
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
|
|
create table nav (
nav_id bigint unsigned auto_increment not null,
parent_id bigint unsigned,
description varchar(100),
href varchar(255),
primary (nav_id),
index (parent_id)
);
dann die ids entweder (a) als serialisiertes Array im Cookie oder (b) in einer weiteren Tabelle speichern:
create table nav2user (
nav_id bigint unsigned not null,
user_id bigint unsigned not null,
primary (nav_id, user_id)
);
und für (b) noch eine user-Tabelle:
create table nav2user (
user_id bigint unsigned auto_increment not null,
uname varchar (10),
passwd varchar(50),
primary (user_id),
index (uname)
);
und dazu passend ein Login ...
__________________
mein Sport:  mein Frühstück:  meine Arbeit:
Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
|

27-11-2002, 13:33
|
|
gfx-freak
Junior Member
|
|
Registriert seit: Nov 2002
Beiträge: 83
|
|
jaaa danke für die schnelle antwort :] !!
Habe nun folgenden Mysql Dump gemacht!:
PHP-Code:
------------------------------
LOGIN !
------------------------------
CREATE TABLE `users` (
`user_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` VARCHAR( 10 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
`kdn` VARCHAR( 10 ) NOT NULL ,
INDEX ( `user` )
);
------------------------------
Navi tables
------------------------------
CREATE TABLE `nav` (
`nav_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`parent_id` BIGINT UNSIGNED NOT NULL ,
`description` VARCHAR( 100 ) NOT NULL ,
`href` VARCHAR( 255 ) NOT NULL ,
INDEX ( `parent_id` )
);
CREATE TABLE `nav2userids` (
`nav_id` BIGINT UNSIGNED NOT NULL ,
`user_id` BIGINT UNSIGNED NOT NULL ,
PRIMARY KEY ( `nav_id` , `user_id` )
);
Mal kurz überlegen wie ich weiter vorgehe ich meld mich gleich wieder gg
bin aber noch offen für weitere ideen, und nochmal DANKE an dir titus !!
|

27-11-2002, 14:14
|
|
gfx-freak
Junior Member
|
|
Registriert seit: Nov 2002
Beiträge: 83
|
|
Frage:
Bin gerade dabei aber wäre sehr nice wenn mir mal jmd ne Beispiels Abfrage schreiben könnte zu dem mysql dump, die einen link mit content ausliest, darstellt (individuell für den user durch die ids..) und anschliessend nach klick seinen db inhalt raussucht, mysql_query...
Nen Beispiel COde wäre n1 nur des Verständnisses wegen ! User helfen User..
Danke ! ;/
Danach gehen wir einen saufen ;p
Geändert von gfx-freak (27-11-2002 um 14:44 Uhr)
|

27-11-2002, 16:14
|
|
syn
Newbie
|
|
Registriert seit: Nov 2002
Beiträge: 30
|
|
ich hoffe, das das so klappt.
So wird natürlich der parent nicht berücksichtigt.
(Soll heißen die Navigation bleibt auf einer ebene)
Query1:
$sql1 = " select nav.nav_id from nav, nav2userids,users ";
$sql2 = " where ((nav.nav_id=nav2userids.nav_id) and ";
$sql3 = " (nav2userids.user_id=users.user_id) and ";
$sql4 = " users.user_id="$user_id") ";
$sql = $sql1.$sql2.$sql3.$sql4;
...
$navIdDB[0] = $rueck[0];
...
Query2:
$sql = " select * from nav where parent_id=".$navIdDB[0] ." ";
...
while(...)
{
$navIdDB[] = $rueck2[0];
}
Andreas
__________________
....... .:[s| Y|n]:. . .:[www. syntheme.de]:. . .:[ :-)]:. .......
Geändert von syn (27-11-2002 um 16:22 Uhr)
|

28-11-2002, 13:03
|
|
Titus
PHP Master
|
|
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
|
|
hab ich hier auch schon mehrfach gepostet ...
PHP-Code:
function menu($user_id=0; $parent=0; $level=0)
{
$res = mysql_query("select n.* from nav n".
($user_id ? ', nav2userids z' : '').
" where n.parent_id=$parent".
($user_id ? " and z.nav_id=n.nav_id and z.user_id=$user_id" : '').
" order by n.nav_id")
or die (mysql_error());
while ($row = mysql_fetch_assoc($res))
echo ($level ? str_repeat(' ', $level) : ''),
'- <a href="', $row['href']', ">',
htmlentities($row['description']), '</a><br>';
}
menu($user_id);
Man kann auch noch der nav ein Feld pos int unsigned und einen index (unsigned) verpassen, dann kann die Reihenfolge der Menüpunkte selbst bestimmt werden, indem die order-by-Klausel auf 'n.pos' geändert wird.
__________________
mein Sport:  mein Frühstück:  meine Arbeit:
Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
|

29-11-2002, 10:37
|
|
gfx-freak
Junior Member
|
|
Registriert seit: Nov 2002
Beiträge: 83
|
|
Ok! Danke Titus !!
Ich teste das mal aus und melde mich dann , nur mal ne Frage nebenbei woher kannste das so perfekt ? studierste ? ! Nochmal danke bin mal testen
|

29-11-2002, 13:41
|
|
Titus
PHP Master
|
|
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
|
|
Ähm ... im Eifer des Gefechts vergessen, die Rekursion einzubauen.
Hier ist sie:
PHP-Code:
function menu($user_id=0; $parent=0; $level=0)
{
$res = mysql_query("select n.* from nav n".
($user_id ? ', nav2userids z' : '').
" where n.parent_id=$parent".
($user_id ? " and z.nav_id=n.nav_id and z.user_id=$user_id" : '').
" order by n.nav_id")
or die (mysql_error());
while ($row = mysql_fetch_assoc($res))
{
echo ($level ? str_repeat(' ', $level) : ''),
'- <a href="', $row['href'], '">',
htmlentities($row['description']), '</a><br>';
menu($user_id, $row['nav_id'], $level+1);
}
}
menu($user_id);
---
edit: Parse Error korrigiert
__________________
mein Sport:  mein Frühstück:  meine Arbeit:
Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
|

29-11-2002, 16:18
|
|
gfx-freak
Junior Member
|
|
Registriert seit: Nov 2002
Beiträge: 83
|
|
mhh? Rekursion
ich hab mal was interessantes gefunden was profis und anfänger als bsp am coden unterscheidet:
Anfänger:
if($a>1) {
$b=2;
}
else {
$b=3;
}
Profi:
$b = ($a>1) ? 2:3;
und deine Programmierart ist echt schon profi like gg.
Kannste mal kurz erklären was ne Rekursion ist wär nice oder ich such einfach mal nach. Erstmal danke !! gg ich bau das ein und teste mal, über weitere Tipps würde ich mich freuen .. Danke !
|

29-11-2002, 16:23
|
TBT
 Moderator
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.776
|
|
Zitat:
Original geschrieben von gfx-freak
Profi:
$b = ($a>1) ? 2:3;
|
die Klammer ist unnötig !
|

29-11-2002, 16:26
|
|
slarti
Member
|
|
Registriert seit: Jun 2002
Ort: berlin
Beiträge: 448
|
|
recursion:
dat is ne funktion, die sich sozusagen selber wieder aufruft. super schnell, nicht sehr speicherfreundlich,
und für anfänger ziemlich gefährlich.
einfaches beispiel: potenzen berechnen:
function pow($zahl,$potenz){
if($potenz==1)return $zahl;
else return $zahl*pow($zahl,--$potenz);
}
__________________
eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùûä¶³Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");
|

30-11-2002, 01:23
|
|
Titus
PHP Master
|
|
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
|
|
Zugegeben, Rekursion verbraucht mehr Speicher; aber in diesem Fall ist es wohl vertretbar (wenn das Menü nicht allzuweit verschachtelt ist). Gefährlich wird´s nur, wenn man die Abbruch-Bedingung versaut.
Außerdem muss man (gerade als Anfänger) bei der Umwandlung eines rekursiven Algorithmus in sein iteratives Pendant extreme Vorsicht walten lassen, sonst gibt das Murks.
Drittens ist der rekursive Code meist leichter zu verstehen; das war für mich ein weiterer Grund, hier die rekursive Version zu posten.
__________________
mein Sport:  mein Frühstück:  meine Arbeit:
Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
|

30-11-2002, 01:41
|
|
Titus
PHP Master
|
|
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
|
|
Zitat:
Original geschrieben von gfx-freak
Profi:
$b = ($a>1) ? 2:3;
|
ich erweitere die Aufzählung mal:
leicht Verrückter:
function sgn($x) { return $x>0?1:$x<0?-1:0; }
$b = (int)(ceil(sgn($a-1)+0.1)*0.5+2.5);
Irrer:
switch(substr($a-1,$b=0,1)){case'-':$b--;default:$b+=3;}
PS: Wieso gibt´s in PHP eigentlich noch keine sgn-Funktion?
__________________
mein Sport:  mein Frühstück:  meine Arbeit:
Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
|

01-12-2002, 15:03
|
|
gfx-freak
Junior Member
|
|
Registriert seit: Nov 2002
Beiträge: 83
|
|
Erstmal danke an alle für die ausführlichen erläuterungen gg !
@ Titus
Irrer:
switch(substr($a-1,$b=0,1)){case'-':$b--;default:$b+=3;}
das ist irre !! 
wo habt ihr das so professionell gelernt ? studiert, oder einfach nachgedacht :] ... danke alex
|

03-12-2002, 14:25
|
|
gfx-freak
Junior Member
|
|
Registriert seit: Nov 2002
Beiträge: 83
|
|
PHP-Code:
function menu($user_id=0, $parent=0, $level=0)
{
$res = mysql_query("select n.* from sisdb_nav n".($user_id ? ', sisdb_nav2userids z' : '').
" where n.parent_id=$parent".($user_id ? " and z.nav_id=n.nav_id and z.user_id=$user_id" : '').
" order by n.nav_id")or die (mysql_error()); while ($row = mysql_fetch_assoc($res))
{
echo ($level ? str_repeat(' ', $level) : ''), '- <a href=\"', $row['href']'" \">',
htmlentities($row['description']), '</a><br>'; menu($user_id, $row['nav_id'], $level+1);
}
}
menu($user_id);
jungz wo isn da der parse error ? muss bei href sein aber was da falsch ?!
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|