[PHP/mySQL] MySQL Abfrage in php von "außen" verändern

Oli

dem Board verfallen
MySQL Abfrage in php von "außen" verändern

Hallo,
Hab mich mal wieder in ein anderes Forum im Board verirrt :)

OK zur Frage.
Also ich möchte gern in einem php Script eine SQL Abrage verändern durch einen bestimten Aufruf im Browser. Es geht ganz bestimmt nur weiß ich nicht wie.
Ich dachte mir man könnte die Abfrage mit einer Variable verändern, also Abrage = $Wert
Und diesen $Wert wo der Abfragecode rein soll möchte ich im Browser ändern. Dann kann ich das schön als Links nehmen und muss dan auch nicht mehre Seiten mit den Abfragen erstellen.

Weiß da einer Rat?
OK ich verdrück mich wieder in mein Board :)
Danke im Voraus

Ciao
 
Also ehrlich gesagt, verstehe ich nicht ganz was Du meinst :rolleyes:

Du kannst natürlich MySQL-Abfragen jeglicher art durch PHP ausführen lassen.

Ich erstelle dazu immer zunächst eine data.php in der die DB-Daten zur verbindung reinkommen.
Bsp:
PHP:
// Hostname oder IP des MySQL-Servers
$dbserver = "localhost";
// Username und Passwort zum einloggen in den Datenbankserver
$dbuser = "Username";
$dbpasswort = "Passwort";
// Name der Datenbank
$dbname = "DBName";
Diese include ich dann in meine anderen PHP-Dateien und dort kann ich dann verschiedene DB-Abfragen starten.
Bsp.:
PHP:
$conn=mysql_connect($dbserver,$dbuser,$dbpasswort);
$query = "SELECT * FROM tabelle";
mysql_query($query,$conn);

Vielleicht erzählst Du mal etwas genauer was Du machen willst, ich vermute mal Du willst eine Abfrage per Formular starten - oder ???
 
Beschreib' mal detailierter was Du machen willst. SQL-Anfragen kannst Du Dir selbstverständlich per Strings basteln.

z.B.:


PHP:
if(fall1) then $anfrage="SELECT * FROM tabelle WHERE id=1";
else $anfrage="SELECT * FROM tabelle WHERE id=2";

$result=mysql_query ($anfrage);
etc...
 
Mir geht es ja nicht um die Abfragen selber ich möchte die SQL Abfragen verändern wenn das Script läuft.
Sprich ich drücke einen bestimmten Link und ann ordent sich alles je nach dem wie die Abfrage ist.

Ich arbeite nähmlich meine Releaseliste um das ich das alles online machen kann aber ich möchte noch ein paar Features mit einbauen.
Sobald jemand (User) auf "System" oder "Hersteller" drückt soll sich die Abfrage im php Script verändern, so das man am Schluss eine neu geordete Seite hat mit den Daten nur eben nach "Sysem" oder "Hersteller".

Das Ganze soll von außen beeinflussbar sein.
Der Link besteht ja eigentlich nur aus der URL und die müsste man doch so verändern das sie dem php Script sagt jetzt nimmste die Abfrage und nicht die Standart.

Vielleicht wisst ihr jetzt wa sich meine.
 
Jo das geht auch, zum Beispiel über variablen.

Du übergibst z.B. per Formular einen wert, denn Du dann per if-Abfrage abfangen kannst.

Ich nenne ihn einmal "$ab"
Ist nun der Wert der Variablen $ab 1 wird die Tabellenspalte "firma" abgefragt, ansonsten die Spalte "telefon".

Radioboxen würden dafür so aussehen
Firma: <input type="radio" name="ab" value="1"> Telefon: <input type="radio" name="ab" value="0">

Auf diese weise kann mann natürlich noch mehr Spalten einbringen.

PHP:
if($ab==1)
$abfrage="firma";
else
$abfrage="telefon";

$conn=mysql_connect($dbserver,$dbuser,$dbpasswort);
$query = "SELECT $abfrage FROM tabelle";
mysql_query($query,$conn);

Ich hoffe das hilft Dir etwas weiter.
 
Noch was:

Per Link würde das folgendermassen aussehen :
<a href="datei.php?ab=1">Firma</a>
<a href="datei.php?ab=0">Telefon</a>
 
ich werd´s mit einbauen wenn alles geht :)
Danke, das mit den Links ist gut, das werde ich nehmen :)
 
Hallo,

Hat wunderbar geklappt, nun bin ich richtig scharf darauf noch mehr zu verbessern.
Mir viel ein, ein Suchfeld wäre noch ganz praktisch um Titel raus zusuchen.

Ich mach hier erstmal den Stand der Dinge wie es derzeit im Script mit den Änderungen aussieht.
Davor und dahinter ist natürlich nochwas aber das soll so erstmal reichen.
PHP:
if($kat==1)
$kat="news_system";
elseif($kat==2)
$kat="news_titel";
elseif($kat==3)
$kat="news_release";
elseif($kat==4)
$kat="news_genre";
elseif($kat==5)
$kat="news_hersteller";

$read_news="SELECT * FROM $pc_1 ORDER BY $kat";
$read_news_result=mysql_query($read_news);

Wie ihr seht musste ich das ein bissel an meine Wünsche anpassen, ob das mit den elseif so gut ist weiß ich nicht, war für mich am besten ersichtlich und es geht auch.

Nun, was müsste ich noch einbauen um ein Suchfeld zu bekommen? Dazu müsste cih ja noch eine Whereklausel einbauen mit der $Suchvariable, aber es soll so sein das wenn nichts drin steht auch nichts schieff läuft wenn ich die anderen ORDER BY Abfragen machen will. Es soll zum Schluss was drin stehen :)
Achso und nochwas, ich weiß nicht mehr wo und wie ich das Format beim Datum ändern kann, hab in der Datenbank auf Date umgestellt aber ich hab da jetzt das Format in englisch, man könnte es doch bestmmt in´s deutsche format umwandeln, bei "MySqlAdmin" gibt es aber glaub ich kein bestimmtes Feld wo ich "tt.mm.YYYY" eintragen kann oder?

Achso und nochwas wie kann ich das machen wenn nichts im Datum steht das dort ein Text erscheint wie z.B. "tba" oder "Kein Termin vorhanden" oder "When it´s done". Weil in datum aknn ich ja keine Buchstaben eingeben aber vielleicht kann man wenigstens die Ausgabe beeinflussen.
Und wenn wir dabei sind, wenn im suchfeld der Titel nicht gefunden wird soll dan in einem Feld oder allen oder sonst wo stehen das der Titel net vorhanden ist.


Ich glaub dann wäre die Releaseliste wirklich perfekt wenn ich diese Sachen noch hinbekomme.
Bitte helft mir :)
Danke schon mal.
 
WOW - Das sind aber ne Menge Fragen :D

Also fangen wir mal beim suchfeld an.
Nehmen wir an, Du hast ein Formular, mit einem Suchfeld über die der eintrag mit der Variable "$search" übertragen wird, dann würde die Abfrage folgendermasen aussehen:

PHP:
$query = "SELECT * FROM tabelle where spalte like '%$search%'";
Die "%" sind Wildcards, d.h. es wird nach einem Vorkommen des Suchstringes gesucht, egal ob er innerhalb eines Wortes vorkommt.
Bei Eingabe von "Wald" findet er beispielsweise auch "Waldschrat" oder "Wienerwald".

Wenn Du nach einem genauen Wort suchen willst, dann lass die "%" weg.

....to be continued..... (geht gleich weiter):D
 
....weiter gehts :D

Das mit dem Datum würde ich persönlich per "Timestamps" machen, und beim auslesen wieder umkonvertieren, damit hat man mehr möglichkeiten.
Wenn man annimt, das in der Variablen $zeit ein Timestamp gespeichert ist, würde das umkonvertieren folgendermasse aussehen.
PHP:
$zeit=date("d.m.Y H:i:s",$zeit);
d=Tag
m=Monat
Y=Jahr(4stellig)
y=Jahr(2stellig)
H=Stunden(24)
h=Stunden(12)
i=Minuten
s=Sekunden

Das mit den leeren Feldern abfragen, würde ich auch beim auslesen per if-abfrage machen
Bsp:
if($zeit=="")
$zeit="Kein Termin vorhanden"

Ich hoffe ich konnte Dir etwas helfen.
 
puh...
Das mit den Suchfeld bekomme ich irgendwie nicht hin.
Und dann bin ich totall durch einander gekommen weil ich Besuch bekommen hab. Ich dachte ich mach das mit den suchen noch son extra Link mit dem elseif (index.php?search="Suchname")

Ob du da mal was richtig ändern kannst?


Hab das so:

PHP:
......

echo "<form action=\"index.php?search=$search\" method=\"post\">Titelsuche: <input name=\"$search\" type=\"text\"></form>";


......

elseif($search==$search)
$search="";


$read_news="SELECT * FROM $pc_1 where news_titel like '%$search%' ORDER BY $kat";
$read_news_result=mysql_query($read_news);
 
In deinem Formular sind fehler:

So müsste es funktionieren:
PHP:
echo "<form action=\"index.php\" method=\"post\">Titelsuche: <input name=\"search\" type=\"text\"><input name=\"suche\" value=\"Suchen\" type=\"submit\"></form>"
 
Puh! Hab ich mir einen abgewirkt bis ich darauf gekommen bin das in index.php alleine nach gar nichts in der Abfrage steht also hab ich noch irgend eine ORDER BY genommen (index.php?kat=x).

So jetzt klappt das :) Danke, Suche funktioniert nun auch.

Jetzt muss ich nur noch diese englische Format ins deutsche bekommen und für 0000-00-00 die Ausgabe "Kein Termin" hin bekommen. Ich glaube aber nicht das ich das noch irgendwie richtig machen werde.
Solltest du nochmal Lust haben, eventuell :)

Danke

Ciao
 
Ich sach ja - Nimm Timestamps ;) :D

Dazu sollte ich mal wissen wie das Datum zustande kommt.
Per Usereingabe oder irgendeiner Abfrage ???
 
Morgen,

Mmmh ich habe mir eigentlich gedacht ich kann dieses Standart 0000-00-00 (YYYY-MM-DD) in der Datenbank gleich verändern wie in Acces oder so.
Aber wenn das nicht geht müsste es ja auch per Abfrage gehen, aber das Format was dann in der Abfrage eingestellt ist soll wieder bei allen ORDER BY (Kategorien [Termin, Titel..]) und WHERE (Suche) sein.

Weißt was mir noch eingefallen ist, ich müsste die index.php irgendwei noch verändern das sie das sie die gleiche Abfrage hat wie index.php?kat=3 oder so. Ich könnte zwar die index.php?Kat=3 verinken aber wenn es einen neugierigen User gibt und nur au index.php schaut wird er dort eine MySQL Fehlermeldung finden, weil in den Abfragen die $Werte nicht belegt sind, kommt ja erst bei den elseif.
 
Also den Wert kannst Du in der Datenbank nicht verändern, daher arbeite ich ja bei Datumsfunktionen nur mit Timestamps.
Mit Zeichenkettenfunktionen kannst Du dir den Wert bei der Ausgabe in das gewünschte Format bringen, nur musst Du ihn dann eben vor einer Datenbankabfrage wieder in das ursprüngliche Format verwandeln. Das ist zwar etwas umständlich, aber es geht.
Ein Beispiel:
Angenommen Du hast den Wert 2003-05-04
PHP:
$datum="2003-05-04";  //Das ursprüngliche Datum
$jahr=substr($datum,0,4);  //Das Jahr extrahieren
$monat=substr($datum,5,2); //Den Monat extrahieren
$tag=substr($datum,8,2); //Den Tag extrahieren
echo $tag.".".$monat.".".$jahr; //Wie gewünscht wieder zusammensetzen
Die Ausgabe wäre in diesem Beispiel 04.05.2003
Beim zurücksetzen auf das Datenbankformat, musst Du natürlch wieder die Bindestriche einbauen.
PHP:
$datum = $jahr."-".$monat."-".$tag;

Was die index.php angeht, so könntest Du dort ja eine if-abfrage einbauen, die feststellt ob die Variable "$kat" existiert, und wenn nicht, die Variable $kat anlegt.
PHP:
if(!$kat)
$kat=3
 
Das musst du mir mal erklären :)
Wieso verschiebt sich beim letzten Befehl die Kategorie -Nummer.
Bei mir war 3 nach Termin ordnen

PHP:
 .....
elseif($kat==3)
$kat="news_release";
elseif($kat==4)
$kat="news_genre";
.....

Ich musste es auf 4 umstellen das es richtig war.

PHP:
...
if(!$kat)
$kat=4;
....

Ich meine gut, ich habs herausgefunden (wow!) und es geht aber ich finde das eußerst mysteriös das sich da die Nummern +1 machen.

Achso, das mit dem Datum lasse ich vielleicht, zum Schluss zerschieße ich mir da was, ich werde es vielleicht mal später ausprobieren. Aber wie heißt es so schön "Englisch ist modern" ;)

Jetzt werde ich mal ausprobieren ob ich vielleicht das Suchfeld noch mit den anderen Katgorien ausbauen kann. Dann kann man auch nach Hersteller und so suchen, ich denke da bräuchte ich nur ein OR nehmen in der SQL Abfage. Mal gucken :)

Ciao und erstmal ein dickes Danke! wegen der mega Hilfe.
Hier noch der Link das du dir das mal anschaun kannst, der nomale User sieht das derzeit eh noch nicht, also weltexclusive :D: ReleaseBox v2.0
Design wird noch angepasst, nicht rum nörgeln :)

Ciao
 
Ich nörgel doch nicht :rolleyes: :angel :D

Sieht doch schon ganz gut aus :)
Wenn du nun bei der Ausgabe des Termin's, den obigen Code von mir verwendest, hast Du auch gleich das Datum in Deutscher Schreibweise.
Zerschiessen kannst Du dir dabei nix ;)
 
Mmmhh.. hattest recht, war doch nicht so schwer wie ich gedacht hatte, musste es nur dort einfügen wo die Daten mit den Tabellenspalten erstellt werden.
Jetzt siehts super aus, sogar deutsch :)

Jetzt muss ich nur noch das 00-00-0000 in "When its done" umwandeln :), das muss dann bestimmt auch dort eingefügt werden, vielleicht mit if :)
 
Oben