SQL Table, umschreiben mit PHP / Komplexe Struktur

Fabian17

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

die ersten 3Fragen konnten dank einiger User beantwortet werden.

Jedoch bleibt 1 Frage über

Frage #4
 
Zuletzt bearbeitet:
Moin.

Hä? :hö: Was willst du verschieben? Ich blick das Problem grade noch nicht so ganz.
 
Verschiebe heißt halt nur dieser Platzhalter,

in der PHP Datei lese ich die Daten aus der MySQL aus, liste diese als Auswahlliste, und brauche diese Funktion so, das es reicht wenn ich in der dazugehörigen html template Datei

$verschiebe bzw $irgendeinname schreibe und an dieser Stelle dann im Browser die Auswahlliste angezeigt werden soll.

Habe das schoneinmal so Probiert (klappt aber nicht)
PHP:
$irgendnName='
$sql = 'SELECT databaseID, name FROM ws_KF9_database';
$result = mysql_query ($sql);

<select name="test">
while($array = mysql_fetch_assoc($result))
{
<option value="'.$array['databaseID'].'">'.$array['name'].'</option>
}
</select>
';

Meine Theorie wäre das ich bei meinem Codeblock nur $irgendnName ins Template schreibe und dort die Auswahlliste angezeigt wird. Klappt nur nicht :yawn:
 
Ah :idea: Ich glaube, ich weiß, was du mit diesem komischen Code meinst.

PHP:
$variable = 'Code ausführen';
geht nicht. Wenn du die Trennung zwischen Logik und Template hast, dann musst du das auch trennen:

  • In der Logik - dem PHP-Script - bereitest du die Daten vor. Dort machst du die DB-Verbindung, stellst deine Anfrage und liest die Daten aus (hier: eine Liste von Datenbank-IDs und -Namen).
    .
  • Im Template formatierst du sie dann entsprechend (hier: baust ein <select>-Element und nimmst die vorbereiteten Daten als <option>-Elemente innenrein).
Kommt jetzt halt drauf an, welches Template-System du verwendest.
 
Genau das will ich bewerkstelligen ;)

$irgendwas = verarbeite_script

PHP:
$sql = 'SELECT databaseID, name FROM database';
$result = mysql_query ($sql);
while($array = mysql_fetch_assoc($result))
{
     $verschiebe .= '
	 <select name"selected">
	 <option value="'.$array['databaseID'].'">'.$array['name'].'</option>
	 </select>';
}

Soweit bin ich jetzt mittlerweile gekommen,

Jedoch wird jetzt JEDER Eintrag in eine Separate Auswahlbox gefüllt -.-,
ich denke auch das der Fehler in der 6 & 8 Zeile liegt,
<select name"selected"> und
</select>

sollte nicht mit im Array liegen, nur wie bekomme ich die da freigestellt?

Das Template CMS ist das webspell... CMS, was nicht jedermanns Sache ist.

EDIT, TeilProblem gelöst, habe einfach die Betreffenden Zeilen direkt ins Template geschrieben, wie ich das nur übersehen konnte oO.
 
PHP:
$foo = '<select>';
while(...) {
    $foo .= '<option>...</option>';
}
$foo .= '</select>';
 
PHP:
$foo = '<select>';
while(...) {
    $foo .= '<option>...</option>';
}
$foo .= '</select>';

So gehts auch, welche Variante wäre denn Taktisch gesehen die bessere?, alles im PHP schreiben, oder die Variante mit ins Template schreiben?

EDIT:

Habe noch eine 2te Frage, jedoch ein etwas anderes Thema:

PHP:
<?
if ($site == "data" and $id == "5") { echo 'Bla Blubb';}
else { echo 'BlibBlaBlub'; }?>

mit der dazugehörigen URL: index.php?site=data&action=show&id=5

Obiger Codeblock ist in meiner Index enthalten und soll wenn die bedingungen Site = X and id = X erfüllt sind nur dann angezeigt werden,

Nur bekomm ich die ID nicht ausgelesen,

d.h das was eigentlich nur bei beiden Bedingungen angezeigt wird, wird auch angezeigt wenn nur die $site == "data" erfüllt ist angezeigt.

Wie kann ich diese 2te Bedingung bewerkstelligen?,

=> wollte wegen der Frage keinen zweiten Thread aufmachen.
 
Zuletzt bearbeitet:
Wie theHacker schon sagte, hat HTML-Code wenig mit der Logik zu tun, und gehört deshalb ins Template.

Im besten Fall übergibst du nicht mal das "<option>" mit, sondern nur ein Array mit den Elementen, die du aus der DB hast, und das Templatesystem stellt es dann entsprechend dar (ob als Dropdownbox, Radio-Buttons oder was auch immer)

Edit: Zur 2. Frage:
Auf Variablen, die du per POST (meist Formulare) oder GET (an die URL angehängt) bekommst, solltest du generell über die Superglobals $_POST['var'] bzw. $_GET['var'] zugreifen.
Wenn du das so machst, kannst du nämlich das "register_globals"-Feature ausschalten, wodurch übergebene Parameter nicht mehr als normale Variablen verfügbar sein, was deinen Code sicherer macht, da nicht jeder dir irgendwelche Variablen einschleusen kann.
Dein Problem liegt hier nämlich wahrscheinlich daran, dass irgendwo vorher im Script eine Variable namens $id auf 5 gesetzt wird, und du dann überhaupt nicht mehr den übergebenen Wert bekommst. (Wäre zwar ein großer Zufall, dass es gerade die 5 ist, aber sonst sieht der Code ok aus)
 
Zuletzt bearbeitet:
Edit: Zur 2. Frage:
Auf Variablen, die du per POST (meist Formulare) oder GET (an die URL angehängt) bekommst, solltest du generell über die Superglobals $_POST['var'] bzw. $_GET['var'] zugreifen.
Wenn du das so machst, kannst du nämlich das "register_globals"-Feature ausschalten, wodurch übergebene Parameter nicht mehr als normale Variablen verfügbar sein, was deinen Code sicherer macht, da nicht jeder dir irgendwelche Variablen einschleusen kann.
Dein Problem liegt hier nämlich wahrscheinlich daran, dass irgendwo vorher im Script eine Variable namens $id auf 5 gesetzt wird, und du dann überhaupt nicht mehr den übergebenen Wert bekommst. (Wäre zwar ein großer Zufall, dass es gerade die 5 ist, aber sonst sieht der Code ok aus)

Habe vor den Code ein

$id=(int)$_GET['id'];

gesetzt, hat aber leider nichts dran geändert, um an die ID zu kommen.
Hat jedoch leider keine Wirkung, geht denn Theoretisch das,was ich vorhabe?
 
Achso, also hast du deine Variable zu einem Integer gemacht.
Dann solltest du auch bei der Bedingung nicht auf einen String ("5") prüfen, sondern auf einen Integer (5). Das ist zwar wahrscheinlich nicht die Lösung des Problems, da PHP sehr tolerant ist was das Vergleichen von unterschiedlichen Datentypen angeht, aber es ist immer besser darauf zu achten.

Abgesehn davon ist der Code wie gesagt i.O.

Du könntest dir mal mit var_dump($_GET) das Array in Rohform ausgeben lassen, um zu sehen, ob da alles ok ist.

Und nopaste am besten mal den kompletten Code (zB: https://nopaste.php-quake.net/)
 
PHP:
$foo = '<select>';
while(...) {
    $foo .= '<option>...</option>';
}
$foo .= '</select>';
Nur als Alternative: Code so lassen, wie er ist und lediglich durch die folgenden Zeilen umgeben:
PHP:
ob_start();

// Der auszuführende Code

$contents = ob_get_clean();
Und schon ist die eigentliche Ausgabe in $contents gespeichert.

[edit]

Zu Deinem anderen Problem: Ersetz das "and" mal durch ein "&&" oder klammer die beiden bool'schen Ausdrücke. "and" und "&&" werden unterschiedlich verarbeitet, wenn ich mich grad nicht komplett täusche.
 
Aber mir ist grad aufgefallen, dass das dennoch nicht des Rätsels Lösung sein kann, beide Operatoren kommen ja in der Abfolge nach ==, also kommt sich da auch nix ins Gehege, sprich der Fehler muss schon vorher sein...
Nicht dieses Rätsel. Das Problem "&& vs. and" tritt nur auf, wenn Zuweisungen im Spiel sind:
PHP:
$x = $a = $b = false;

$a = true and $x;
var_dump($a); // true (!)

$b = true && $x;
var_dump($b); // false
 
[edit]

Zu Deinem anderen Problem: Ersetz das "and" mal durch ein "&&" oder klammer die beiden bool'schen Ausdrücke. "and" und "&&" werden unterschiedlich verarbeitet, wenn ich mich grad nicht komplett täusche.

Nice ;)

and durch && ersetzt und Siehe da es geht :)

PHP:
<?
if ($site == "data" && $id == "5") { echo 'LaLeLu';}
else { echo 'FooFooFoo'; }?>

Erweiterung geht nun auch ;) auf and in && umwechseln muss man ersteinmal kommen, denn or ging ganz normal (dachte daher das and) idr auch gehen müsste. Bisher läuft alles zufriedenstellend.

if ($site == "data" && $id == "5" or &id == "6" or & id == "7") { ....

Besten dank bis oberhalb der Linie schoneinmal.
________________

Eine Frage wäre da dann doch noch... diesesmal nur mit PHP & MySQL,

=>, webspell CMS integrierte Datenbankfunktion (kein MySql oÄ), das ist eine Funktion im CMS die zb Inventuren oder soetwas ermöglicht, man kann im Admin Menü Variablen erstellen zb Name = $name
diese dann wiederrum in einem eigenen Template wieder ausgeben wie in einer Inventur zB.

und Genau für dieses CMS gingen meine bisherigen Fragen, ich habe vor bzw habe schon angefangen diese Funktion zu erweitern, habe schon in deren Forum gefragt, jedoch konnte mir in 1Monat wartezeit niemand dort so richtig Helfen.

1. Frage:

bild.jpg


Auf diesem Bild sieht man wie ich oben bereits beschrieben habe die Einzelnen "Datenbanken" und deren IDs, die Namen und identifier = die Variable zb im Oberen Name = $name

Da es ja mehrere Datenbanken geben kann, sind so die databaseIDs unterschiedlich (wäre ja unschlau wenn nicht)

die database_fieldIDs sind gebunden an die databaseID allerdings Fortlaufende gehalten.

So...

bild1.jpg


Auf diesem Bild sieht man dann die Inhaltstable der "Datenbank vomCMS" dort finden sich auch die database_fieldIDs wieder. und deren DatabaseID.
data_entryID ist einfach nur eine ID für den jeweiligen Eintrag, in diesem Fall hat er die ID #1 und ist der Hund "Chana".

Da jetzt schon das Wort Hund gefallen ist, es geht um eine Webseite für ein Tierheim. Die haben nunmal Tiere und die werden dort auf der Seite vorgestellt.
Und da Tiere hoffentlich auch vermittelt werden an Freundliche Besitzer werden diese Vermittelt da wäre dann auch schon quasi meine Frage.

Ich habe 2 von diesen Datenbank funktionen (KEIN MySQL, das betone ich immer da im alten Forum alle dachten ich hätte 5 sql datenbanken etc)

die Datenbank #1 ist Tiervermittlung
die Datenbank #2 ist Vermittelte Tiere

Wie man nun auf Bild #2 sehen kann hat die Datenbank #1 den Hund Chana. angenommen dieses Tier ist nun vermittelt und soll rüber in diie Datenbank #2 gehen, soweit so gut, ich habe es schonmal geschafft die databaseID umzuschreiben auf die neue Datenbank sprich

UPDATE databaseID SET neue ID

1 in 2

So wären schoneinmal die ganzen databaseID umgeändert.

=> Das Problem ist nun wie bereits oben geschildert (Erstes Bild) sind die database_fieldIDs an die databaseIDs gehängt.

Ich habe ja jetzt die databaseID geändert somit passen allerdings die database_fieldIDs nicht mehr zu der Zuordung

Sprich:

1.jpg


Ich ändere die databaseID von oben 1 in unten 2

2.jpg


die database_fieldID ist im ersten Bild 1 im zweiten Bild auch 1, müsste aber wie Bild 1: 10 Sein,

und genau das ist mein Problem.

Ich brauche einen sql update Query der die fieldIDs umschreibt in die von der databaseID benötigten databasefield_IDs

Das ist die einzigste Schwachstelle die das Script noch hat. Und an dem Problem knabbere ich seit ca 1,5 Monaten. Und bekomm es einfach nicht hin, entweder ist die ganze table gelöscht, oder alle Einträge bekommen die Selbe ID.

Danke und Vielen Vielen Dank für Tipps im Vorraus,
Fabi
 
Versuch doch mal sowas:

PHP:
UPDATE datatable SET database_fieldID = (SELECT db2.database_fieldID FROM (SELECT database_fieldID FROM dbtable WHERE databaseID = 1) AS db1 INNER JOIN (SELECT database_fieldID FROM dbtable WHERE databaseID = 2) AS db2 ON db1.identifier = db2.identifier WHERE db1.database_fieldID = (SELECT database_fieldID FROM datatable WHERE database_dataID = 1)) WHERE database_dataID = 1

database_dataID muss dann entsprechend angepasst werden.