WinFuture-Forum.de: Datenbankabfrage mit JOIN - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 4 Seiten +
  • 1
  • 2
  • 3
  • 4

Datenbankabfrage mit JOIN zwei gleichnamige Spalten in den jeweiligen Tabellen.

#16 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 29. September 2011 - 16:58

Intval() oder mysql_real_escape_string() sind auch ne Option. Einfacher und vorallem Codesparender gehts mit Prepared Statements. ;)
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

Anzeige



#17 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 29. September 2011 - 17:47

Beitrag anzeigenZitat (CryztaN: 29. September 2011 - 16:58)

Intval() oder mysql_real_escape_string() sind auch ne Option. Einfacher und vorallem Codesparender gehts mit Prepared Statements. ;)


Ja mit dieses real_escape_string Ding hab ich im Zweifel auch noch ab und zu eingebaut, werd mich aber bei allen künftigen Sachen ab jetzt immer an die prepared Statements halten. Das macht einen sehr schönen Eindruck. Muß mir das nur alles mal in Gänze genau angucken. Wie gesagt mach ich ja eigentlich nichts Öffentliches also nichts im Web. Mein derzeitiges Projekt läuft nur im LAN mit 4 vertrauenswürdigen Benutzern. Ich will zwar deswegen nicht auf die Sicherheit verzichten aber kann das ganz in Ruhe machen und ausprobieren, dass ich für den Fall der Fälle, doch mal Öffentliches machen zu müssen/dürfen/sollen/können gerüstet bin.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#18 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 29. September 2011 - 18:01

Richtig ;)
Was du dir noch anschauen könntest wären Klassen und Functionen - OOP eben. (Objektorientiertes Programmieren).
Suche noch fleissige Helfer für mein Projekt - falls du Lust und Zeit hast schreib mir ne pn ;)
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#19 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 29. September 2011 - 18:15

Beitrag anzeigenZitat (CryztaN: 29. September 2011 - 18:01)

Richtig ;)
Was du dir noch anschauen könntest wären Klassen und Functionen - OOP eben. (Objektorientiertes Programmieren).
Suche noch fleissige Helfer für mein Projekt - falls du Lust und Zeit hast schreib mir ne pn ;)



Ja Funktionen sind kein Problem aber Klassen sind mir zu hoch. Die sind in meinem Denkspektrum nicht logisch. Genau wie dieses ->bindValue, das macht auch irgendwie nix weiter, als das gar keine Ausgabe mehr kommt bei mir. Nicht angezeigte Daten sind ja bestimmt super sicher aber zwei, drei Datensätze hätte ich schon gern gesehen.

Ansonsten hab ich aber im Moment sehr wenig Zeit für außerplanmäßige Projekte. Ich mach noch sehr, sehr viele andere Sachen nebenbei.

Dieser Beitrag wurde von Holger_N bearbeitet: 29. September 2011 - 18:17

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#20 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 29. September 2011 - 18:35

So schwer ist des mit den klassen nicht :)
$kl = new klasse();
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#21 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 29. September 2011 - 20:12

Beitrag anzeigenZitat (CryztaN: 29. September 2011 - 18:35)

So schwer ist des mit den klassen nicht :)
$kl = new klasse();



Ich hab nur keine Vorstellung davon, was so eine Klasse macht bzw. was man damit überhaupt machen kann. Ich hab ja mit C++ aufgehört, weil mir das zu komplex war. In sich ist ja alles vielleicht logisch aber man konnte die Logik von außen nicht erkennen und ich hab nie verstanden, was "objektorientiert" in dem Zusammenhang heißt. Ich orientiere mich doch immer an dem Objekt, an dem ich arbeite.

Also bindValue hab ich immer noch nicht sinnvoll eingebaut bekommen. Wenn man irgendwas reinschreiben kann, dann hat es doch gar keine Bedeutung.

Dieser Beitrag wurde von Holger_N bearbeitet: 29. September 2011 - 20:41

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#22 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 30. September 2011 - 05:42

Naja mit bindValue setzt du platzhalter in deinem sql statement. Also wenn du irgendwo einen benutzer eingeben laesst nach was selectiert werden soll (einfaches suchscript zb) dann kannst du mit den platzhaltern verhindern, das er sowas hier eingibt: '; drop database db; --
Diese wuerde nach ' ' selectieren und anschliesend deine db löschen.
Wenn du select ... Where wort=:wort"; als platzhalter waehlst, verhinderst du es.

Klassen:
 
       Class klasse {
              Public function GetNameById($id) {
                    $db = $sql->prepare("SELECT * FROM user WHERE uid=:id;");
                    $db->bindValue(':id',$id);
                    $db->execute();
                    $fetch = $dv->fetch;

                   return $fetch['username'];
             }
       }




In einer anderen php datei steht dann:
           Include("name der klassen php datei");
           $kl = new klasse();

           echo $kl->GetNameById(12);



$kl wird ein Objekt der Klasse "klasse" und mit $kl->GetNameById(--id die du willst--); fuehrst du die funktion in der Klasse aus.

Hier selectierst du nach namen etc in der die uid=12(siehe eingaben oben).
Ausgegeben wird somit der Name der eindeutig zu dieser Id passt.

Man sollte php code vom html Code bestmöglichst trennen.
Das selbe wie design vom inhalt ;)

Ich hoffe ich konnts etwas erklaeren.

Lg

Naja mit bindValue setzt du platzhalter in deinem sql statement. Also wenn du irgendwo einen benutzer eingeben laesst nach was selectiert werden soll (einfaches suchscript zb) dann kannst du mit den platzhaltern verhindern, das er sowas hier eingibt: '; drop database db; --
Diese wuerde nach ' ' selectieren und anschliesend deine db löschen.
Wenn du select ... Where wort=:wort"; als platzhalter waehlst, verhinderst du es.

Klassen:
 
       Class klasse {
              Public function GetNameById($id) {
                    $db = $sql->prepare("SELECT * FROM user WHERE uid=:id;");
                    $db->bindValue(':id',$id);
                    $db->execute();
                    $fetch = $dv->fetch;

                   return $fetch['username'];
             }
       }




In einer anderen php datei steht dann:
           Include("name der klassen php datei");
           $kl = new klasse();

           echo $kl->GetNameById(12);



$kl wird ein Objekt der Klasse "klasse" und mit $kl->GetNameById(--id die du willst--); fuehrst du die funktion in der Klasse aus.

Hier selectierst du nach namen etc in der die uid=12(siehe eingaben oben).
Ausgegeben wird somit der Name der eindeutig zu dieser Id passt.

Man sollte php code vom html Code bestmöglichst trennen.
Das selbe wie design vom inhalt ;)

Ich hoffe ich konnts etwas erklaeren.

Lg
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#23 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 30. September 2011 - 08:29

Paah - weißt du was mein Fehler war? Ich machte Abfragen bis jetzt immer mit Apostrophen und Akzenten also

SELECT * FROM `tabelle` WHERE `xxx` = 'yyy' ;



weil ich ich früher nie die Syntax hinbekommen hab, dann in phpmyAdmin einfach eine Beispielabfrage gemacht habe und mir den dort angezeigten Code rauskopiert hab und mit diesen Dingern funktioniert das mit den Platzhaltern nicht.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#24 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 30. September 2011 - 08:40

Und genau bei 'diesen' dingern ist das Problem. Gibt ein User bsp ein : " '; DROP DATABASE iwas; -- "
ein so zerstört er dein system ;) Platzhalter verwerden, wird das nicht mehr funktionieren ;).
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#25 Mitglied ist offline   TO_Webmaster 

  • Gruppe: Moderation
  • Beiträge: 3.212
  • Beigetreten: 27. März 02
  • Reputation: 82
  • Geschlecht:Männlich

geschrieben 30. September 2011 - 08:45

Beitrag anzeigenZitat (Holger_N: 28. September 2011 - 20:02)

Gibts da eine saubere Möglichkeit, beispielsweise in der Zeile:

$var1[] = $abfrage['id'];

eindeutig festzulegen, dass es die id aus der ersten Tabelle sein soll?


SELECT *, t1.id AS id1, t2.id AS id2 FROM tabelle_1 AS t1 LEFT JOIN tabelle_2 AS t2 ON t1.spalte2 = t2.id;


Dann id1 und id2 verwenden.

MfG TO_Webmaster
The old reverend Henry Ward Beecher
called a hen the most elegant creature.
The hen pleased for that,
laid an egg in his hat.
And so did the hen reward Beecher.
1

#26 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 30. September 2011 - 08:47

Musst du dabei nicht auch tabelle_1.id as id1, tabelle_2.id as id2 schreiben?
t1 und t2 dürfte nicht identifizierbar sein.
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#27 Mitglied ist offline   TO_Webmaster 

  • Gruppe: Moderation
  • Beiträge: 3.212
  • Beigetreten: 27. März 02
  • Reputation: 82
  • Geschlecht:Männlich

geschrieben 30. September 2011 - 08:49

Beitrag anzeigenZitat (CryztaN: 30. September 2011 - 08:47)

Musst du dabei nicht auch tabelle_1.id as id1, tabelle_2.id as id2 schreiben?
t1 und t2 dürfte nicht identifizierbar sein.


Doch, das geht.

MfG TO_Webmaster
The old reverend Henry Ward Beecher
called a hen the most elegant creature.
The hen pleased for that,
laid an egg in his hat.
And so did the hen reward Beecher.
0

#28 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 220
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 30. September 2011 - 08:50

Ach, weiter hin kommt ja noch tabelle_1 as t1. Jetzt erst gesehen.
Hatte ich garnicht bedacht, dies so zu lösen :o.
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#29 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 30. September 2011 - 09:11

Beitrag anzeigenZitat (TO_Webmaster: 30. September 2011 - 08:45)

SELECT *, t1.id AS id1, t2.id AS id2 FROM tabelle_1 AS t1 LEFT JOIN tabelle_2 AS t2 ON t1.spalte2 = t2.id;


Dann id1 und id2 verwenden.

MfG TO_Webmaster



Danke, da ham wirs ja. Sooo ist das eindeutig.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#30 Mitglied ist offline   TO_Webmaster 

  • Gruppe: Moderation
  • Beiträge: 3.212
  • Beigetreten: 27. März 02
  • Reputation: 82
  • Geschlecht:Männlich

geschrieben 30. September 2011 - 10:01

Wobei es evtl. noch schöner wäre, statt * nur die Spalten auszuwählen, die du brauchst: t1.id, t1.foo, t2.bar, ...

MfG TO_Webmaster
The old reverend Henry Ward Beecher
called a hen the most elegant creature.
The hen pleased for that,
laid an egg in his hat.
And so did the hen reward Beecher.
0

Thema verteilen:


  • 4 Seiten +
  • 1
  • 2
  • 3
  • 4

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0