Datenbankfeld auslesen, durch zuvor ausgelesenes Feld

Fabian17

Fabian23
ID: 304783
L
18 Mai 2007
1.674
105
Moin,

habe da mal wieder eine Frage gg


Ich habe da wieder mein "Auto-Portal"
indem es wie man sich denken kann um Autos geht, wo sich jeder User einen Topic erstellen kann indem er sich und sein Auto vorstellen kann.
Beim erstellen des Topics wird dann ja eine eindeutige ID vergeben.

index.php?site=blabla&topic=TopicID

Diese TopicID gibt der User in seinem Profil in ein Feld ein was dann die unten stehende ShowRoom Grafik einstellt (Durch Klick auf den Button) kommt er dann auf seinen Thread. Die Verlinkung wird halt durch die ID eingestellt die der User zuvor eingibt.

PHP:
// Showroom
function getshowroom($userID) {
	$ds=mysql_fetch_array(safe_query("SELECT * FROM ".PREFIX."user WHERE userID='$userID'"));
	return $ds['showroom'];
}

Damit lese ich die ID aus der user Table, mit einer Ähnlichen dann das Bild (man kann wählen zwischen verschiedenen)

PHP:
if(getshowroom($dr['poster'])=="") $showroom=''; 
  else $showroom='<a href="index2.php?site=forum_topic&topic='.getshowroom($dr['poster']).'"><img src="../images/showroom/'.getshowroombild($dr['poster']).'.png" border="0"/></a>';

picture.php


Mein eigentliches Problem ist jetzt aber folgendes:

Wie man im Bild oben Sieht füge ich den Topics den Namen in geänderter Form mit bei sodass Google etc sich daran Orientieren können quasi Lesbare Urls.

Und genau selbes möchte ich bei dem Showroom Button auch

Sprich das aus derzeit:
https://www.example.de/index2.php?site=forum_topic&topic=56
ein:
https://www.example.de/index2.php?site=forum_topic&topic=56-Arthur--Audi--A6

wird.
Erstellt wird die Adresse im Code per

&topic=$topicID-$topicseotitle

$topicseotitle liest aus der Tabelle Forum_Topics den Namen aus

SELECT topicseotitle from database WHERE topicID=$topicID

soo.

Ich brauch jetzt die function um selbiges auszulesen ABER
die TopicID kommt ja aus der database_user

Sprich:

SELECT topicseotitle from database WHERE topicID=$topicIDausDerUserDatabase

Und genau da komme ich partou nicht weiter -.-
Und frage deshalb euch um Mithilfe.
 
Vorweg:

  • Wieso selektierst du alle Attribute, wenn du nur eines brauchst? Rechenzentrum heizen? :LOL:
  • Die User-ID is ein String? 8O
Zum Problem:
Die ID steht doch in der URL. Du musst sie doch nur vom Seo-Anhängsel befreien. Oder hab ich das Problem nicht verstanden?
 
Vorweg:

  • Wieso selektierst du alle Attribute, wenn du nur eines brauchst? Rechenzentrum heizen? :LOL:
  • Die User-ID is ein String? 8O
Zum Problem:
Die ID steht doch in der URL. Du musst sie doch nur vom Seo-Anhängsel befreien. Oder hab ich das Problem nicht verstanden?

zu 1: Da hast du nicht Unrecht, hab ich mal auf die 1 Spalte gemacht :)
zu 2: String? naja ne, ist ne Zahl &site=profile&id=1 zB

Die ID steht natürlich in der Url aber nur wenn man auch in dem Thread ist

bsp:

Ich befinde mich gerade in /index2.php?site=forum_topic&topic=44-Der--Golf--3-GTi

Dann gilt die TopicID ja nur für den Der Golf 3 Thread.

Mein ShowRoom Button geht aber auf /index2.php?site=forum_topic&topic=56

Da sind dann ja die IDs vertausch d.H ich kann die so net abgreifen.

Die ID die beim ShowRoom Button steht trägt der User selbst in seinem Profil ein.
Ebenfalls als $variable Schreibt der User da also 214 rein so Verlinkt der Button auf topic=214

Um an index2.php?site=forum_topic&topic=56-Arthurs--Audi--A6 zu kommen braucht man ja nur SELECT linkname from database WHERE ID = 56 schreiben.

Ich habe aber das Problem das ich die ID ja nicht aus der URL bekomme, sondern aus dem Userprofil.

SELECT topicseoname FROM PREFIX_forum_topics WHERE topicID=(die id, die ich aus den Userprofilen grabbe)

Und das "Grabben" bekomm ich nicht hin.
 
Meinst Du so eine Query:

PHP:
SELECT A.topicseotitle from 
Forum_Topics A 
INNER JOIN user B
ON A.topicID = B.topicID
WHERE B.userID='$userID'
 
zu 2: String? naja ne, ist ne Zahl &site=profile&id=1 zB
Wieso castet du dann erst umständlich auf String, wenn die DB den String dann wieder zum Integer zurückcasten muss?
Ich habe aber das Problem das ich die ID ja nicht aus der URL bekomme, sondern aus dem Userprofil.
Ok, klar.

Dann gibts mehrere Möglichkeiten:

  • Anstatt dem User nur die Thread-ID eintragen zu lassen, kannst du ihm ja die ganze URL eintragen lassen. Das is genauso dirty, wie die jetzige Lösung. V.a. musst du dann die URL validieren, nicht, dass dir einer ne fremde Webseite einträgt.
    .
  • Schön wäre es, wenn man in dem Auto-Vorstell-Thread direkt einen Button hätte, um den Thread in die DB einzutragen.
    .
  • Ansonsten musst du die Seo-URL selber zusammenbauen. Hier in der DB nachgucken, was an die entsprechende Thread-ID angefügt werden muss.
    .
  • Befindet sich der Auto-Vorstell-Thread in einem extra Unterforum mit speziellen Rechten, sodass der User dort eh nur maximal einen Thread haben kann? Oder is immer nur der aktuellste Thread in diesem Unterforum der ShowRoom-Thread?
    Falls ja, kannst du den Thread automatisch identifizieren lassen. Das wäre die Optimal-Lösung, da der User nichts tun muss, außer sein Auto vorstellen. Du baust dann einfach nur einen Link index.php?site=showroom&user=userID und lässt das Script in diesem Fall den passenden Thread automatisch finden und leitet per 302 (HTTP/1.0) oder 303 (HTTP/1.1) drauf. (Ein Cache für die Zuordnung User-ID <-> ShowRoom-Thread-ID bietet sich an.)
 
301 ist aus SEO-Sicht deutlich besser! Ist ja auch immerhin eine dauerhafte Weiterleitung, oder nicht? :think:
Ist aber völlig falsch!

301 bedeutet, dass die Weiterleitung permanent ist, richtig. Das bedeutet aber auch, dass der Agent die alte URL als nicht mehr gültig betrachten soll. Und das ist hier nicht gewünscht.
 
Okay da muss man dann entscheiden was einem wichtiger ist: rfc oder seo. Ich würde mich immer für letzteres entscheiden :p
 
Wieso sollte es SEO-technisch einen Unterschied machen? Der Thread - das Ziel der Weiterleitung - is ja sowieso indiziert. Es gibt nur noch einen weiteren Link drauf.

Ich mein, man könnte es auch wie das Forum mit &goto=newpost/lastpost etc. machen und duplicate Content betreiben. Also einfach gar keine Weiterleitung, sondern versuchen, intern das Forum zur Ausgabe des Threads zu triggern. Ob das so einfach geht (sprich: Link zu weiteren Sieten des Threads, Abo, Moderation, undundund), is ne andere Frage.
 
Bei 302 Weiterleitungen gehen die meisten Suchmaschinen-Roboter davon aus, dass es die Zwischenseite noch gibt bzw. sie in Kürze wieder vorhanden sein wird. Dementsprechend wird die Zwischenseite von der suma bewertet und erhält die eingehenden Backlinks.

Bei 301 Weiterleitungen ist die gewünschte Seite betroffen und die Zwischenseite in aller Regel bei Folgebesuchen des Bots ausgelassen, was hier imho erwünscht ist, da sich eh nichts ändert. ;)
 
Ach die soll sich auch ändern können... dann bin ich ruhig und habe nichts gesagt. Dachte das wäre ein fixer Thread der einem Mitglied zugeordnet wäre :roll:
 
So hab die Methode von transversalis ausprobiert.

Geht jedoch nicht,



In diesem Beispiel ist ja die ID 56 die trägt der User dann in seinem ShowRoom Feld ein

Danach bekommt er:


Der User kann allerdings auch 21 oder so eingeben dann wird der Banner halt auf den Topic #21 verlinkt.

----
Obiger Link, Hinter der 56 seht ihr ja "-Arthurs--Audi--A6"
Dieses Feld lese ich aus der Foren Table aus. Per where ID = 56
Das Klappt auch soweit.

Nur diesesmal kann ich die ID nicht aus der Url Grabben, da die TopicIC in der user Table gespeichert ist.

Ich muss also erst die ID aus der User Table holen, damit ich dann mit der ID den Titel aus der foren Table holen kann.

Also 2 Querys in einem oder?

Und genau das Funktioniert nicht :/

Gedanken gang:
$idholer = SELECT showroomID FROM user WHRE userID=(dem User seine ID)

$title = SELECT Titel FROM forum WHERE topicID=$idholer

Würde soetwas gehen? wenn ja wie baue ich soetwas
mit LEFT.JOIN oder so in der Art?
 
Das sollte sich zusammenfassen lassen zu

PHP:
SELECT Titel
FROM forum A
INNER JOIN user B
ON B.showroomID = A.topicID
WHERE userID = (dem User seine ID )

Öhm,

SELECT`topicseoname` from "PREFIX"_forum_topics A
INNER JOIN "PREFIX"_user B
ON B.showroomID = A.topicID
WHERE userID = "$userID"

Richtig?

Hab das jetzt so eingebaut:
PHP:
//
function getshowroomtopic($userID) {
	$ds=mysql_fetch_array(safe_query("SELECT `topicseoname` FROM ".PREFIX."_forum_topics A INNER JOIN ".PREFIX."_user B ON B.showroomID = A.topicID WHERE userID='$userID'"));
	return $ds['topicseoname'];
}

Dabei gibts den Fehler:

# Query failed: errorno=1146
# error=Table 'tuningschmiede.ws_XpR__forum_topics' doesn't exist
# query=SELECT `topicseoname` FROM ws_XpR__forum_topics A INNER JOIN ws_XdR__user B ON B.showroomID = A.topicID WHERE userID='1'
 
Zuletzt bearbeitet:
Zwischen Tabellenprefix und Tabellenname steht im Allgemeinen ein Punkt, kein Unterstrich.
Also eher:

PHP:
"SELECT `topicseoname` FROM ".PREFIX.".forum_topics"

sofern in PREFIX der korrekte Tabellenprefix drinsteht ergibt das dann den richtigen Tabellennamen. Der würde bei Dir dann ws_XpR_.forum_topics lauten.

Wenn Du statt dem Punkt einen Unterstrich verwendest, dann interpretiert mySQL den kompletten String als Tabellennamen ( ws_XpR__forum_topics ) und setzt als Prefix automatisch die aktuelle UserID davor.
Daher kommt es bei Dir zu dem Namen tuningschmiede.ws_XpR__forum_topics, den das System so aber nicht findet.

Wenn allerdings nicht die Notwendigkeit besteht, je nach Prefix unterschiedliche Tabellen anzusprechen, würde ich den kompletten Namen in den String packen und auf die Variable verzichten.

Also
PHP:
"SELECT `topicseoname` FROM ws_XpR_.forum_topics"

sofern ws_XpR_ tatsächlich der richtige Prefix ist
 
Zuletzt bearbeitet:
Öhm,

SELECT`topicseoname` from "PREFIX"_forum_topics A
INNER JOIN "PREFIX"_user B
ON B.showroomID = A.topicID
WHERE userID = "$userID"

Richtig?

In PREFIX hast du doch schon den Unterstirch drin. Lass den aus dem Query raus.
PHP:
function getshowroomtopic($userID) {
    $ds=mysql_fetch_array(safe_query("SELECT `topicseoname` FROM ".PREFIX."forum_topics A INNER JOIN ".PREFIX."user B ON B.showroomID = A.topicID WHERE userID=$userID"));
    return $ds['topicseoname'];
}

Zwischen Tabellenprefix und Tabellenname steht im Allgemeinen ein Punkt, kein Unterstrich.
Also eher:
Ich glaube, du verwechselst gerade einen Prefix mit einem Datenbank- oder Schemennamen. Ein Prefix hat damit ersteinmal nichts zu tun.
 
Ich glaube, du verwechselst gerade einen Prefix mit einem Datenbank- oder Schemennamen.

Das ist schon möglich. Nachdem ich die konkreten Daten von Fabians Tabellendesign nicht kenne, kann ich nur vermuten, wo der "table not found"-Fehler liegt. Meine Vermutung war, dass es sich bei PREFIX um den Tabellenqualifier handelt, der irrtümlich mit Unterstrich statt mit Punkt verkettet wurde.
 
Beim ".PREFIX." lag tatsächlich ein Fehler vor

Hatte ".PREFIX."_forum dabei wars ja nur ".PREFIX."forum

jetzt erhalte ich aber folgenden Fehler:

# Query failed: errorno=1052
# error=Column 'userID' in where clause is ambiguous
# query=SELECT `topicseoname` FROM ws_XpR_forum_topics A INNER JOIN
ws_XpR_user B ON B.showroom = A.topicseoname WHERE userID=''