Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „MySQL: WHERE Variable LIKE mit Variable aus Liste“

B

BeastyK

Guest

Hallo Leute,

ist es möglich eine Variable in der Form

SELECT * FROM Datenbank WHERE Variable aus Liste LIKE...

zu verwenden?

Mein Code sieht (hab die DB nur anders genannt) so aus:
Code:
[FONT=monospace]
<?php

$suche = "0";
$suche = $_GET['suche'];
$name = $_GET['tabname'];
$query_Abfrage = "SELECT * FROM Datenbank WHERE Datenbank.'$name' LIKE '%$suche%'";
$Abfrage = mysql_query($query_Abfrage, $Datenbank) or die('Ungültige Abfrage: ' . mysql_error());
$row_Abfrage = mysql_fetch_assoc($Abfrage);
$totalRows_Abfrage = mysql_num_rows($Abfrage);
?>
.
.
.
</pre>
    <form id="form1" name="form1" method="get" action="">
      <label>
      <p>Suche
        <input type="text" name="suche" id="suche" /> 
        <select name="tabname" id="tabname">
          <option value="Beschreibung">Beschreibung</option>
          <option value="Anweisungen">Anweisungen</option>
          <option value="Ort">Ort</option>
        </select>
        <input type="submit" name="start" id="start" value="Senden" />
      </p>
</form>
    <pre>[/FONT]
Eine zweite Frage (ohne einen neuen Thread zu öffnen) wäre wie man mit WHILE-Schleife so etwas wie "Keine Daten vorhanden!" ausgibt wenn die Suche keinen Treffer ergibt. Meine Tabelle die ich eingerichtet hab ist dann einfach leer, hätte aber lieber so einen Satz da stehen anstatt die Tabelle leer zu sehen.

Danke für jede Antwort
Andi
 

tgreve

********

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

zur ersten frage:
du musst erstmal mit der datenbank verbinden:
PHP:
<?php
$verbindung = mysql_connect($Server,$Benutzer,$Kennwort);
if ($verbindung)
    mysql_select_db($Datenbank,$verbindung);
else
    die("Kann nicht mit Datenbank verbinden");
?>
Dann muss deine Abfrage so aussehen:
PHP:
<?php
$sql = "SELECT * FROM tabelle WHERE Adresse LIKE '%".$suche."';";
$Abfrage= mysql_query($sql,$verbindung);
?>
zur zweiten frage:
PHP:
<?php
$daten_vorhanden = 0;
while ($row_Abfrage = mysql_fetch_assoc($Abfrage))
{
      $daten_vorhanden = 1;
      $variable1 = $row_Abfrage[variable1];
      ?>
      <input name="variable1" value="<?php echo "$variable1"; ?>" />
      <?php
}

if ($daten_vorhanden == 0)
echo "Keine Daten vorhanden!<br />";
?>
hoffe ich habe dich richtig verstanden
 
Zuletzt bearbeitet:
B

BeastyK

Guest

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

Hallo tgreve,

also zu 1) ich habe nicht den gesamten Code hier gepostet, die Anbindung an der Datenbank ist vorhanden!

zu 2) ich möchte gerade den Bereich hinter WHERE, bei dir also "Adresse" variabel gestalten. Mit einem List/Menu die Auswahl treffen wo ich in der Tabelle suchen möchte.
Hab jetzt mit WHERE Beschreibung LIKE '%$suche%' OR Anweisung LIKE '%$suche%' OR Ort LIKE '%$suche%' gearbeitet.
Das ist aber nicht dasselbe wie sich eins mit ner Liste rauspicken und nur dort zu suchen.

zu 3) klingt interessant und muß ich mal versuchen umzusetzen!!!

Danke
Andi
 

yezinia

Noch nicht viel geschrieben

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

PHP:
$sql = "SELECT * FROM `tabelle` WHERE `".$suchOrt."` LIKE '%".$suchTerm."%';"

sowas wahrscheinlich und wenn mein Gefühl mich nicht täuscht dann auch mit ner mehrfachauswahl...
 

Doitsu

Aktives Mitglied

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

Erstmal was allgemeines: Wenn ihr schon die 'Gaensefuesschen' (") benutzt, dann geht nicht aus dem String raus (" . $xy . ") um eine Variable zu schreiben - wenn man dies sowieso macht, sollte man auch die Hochkommata (') benutzen.
die("Kann nicht mit Datenbank verbinden");
Warum bekommt man bei so was immer ein die() vorgeschlagen? Finde das ziemlich destruktiv.


@ TE:
dein Fehler war eig. nur, dass du Hochkommata benutzt hast, wo Backtick (`) hin kommen muesste (um 'Datenbank' kommen auch welche)
$query_Abfrage = "SELECT * FROM Datenbank WHERE Datenbank.'$name' LIKE '%$suche%'";

zum 2 Ding:

An sich hast du die Loesung schon im Code drin ..
$totalRows_Abfrage = mysql_num_rows($Abfrage);
Du musst sie nur noch benutzen.
PHP: mysql_num_rows - Manual
 

Chriss1987

me.drinkCoffee();

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

Hi,

oh ja, wenn du die Seite dann mal veröffentlichst, sag Bescheid und poste mal den Link, bin mal gespannt, wie schnell deine DB dann per SQL-Injection lahmgelegt wird... ;)
Hierzu der Hinweis, dass Benutzereingaben, grade bei DB-Abfragen, validiert werden müssen. Z.B. könntest du ein Array anlegen, in dem die Spaltennamen, die zur Suche zugelassen sind, hinterlegt sind und dann vergleichen, ob der übermittelte Spaltenname zugelassen ist... Nur mal als kleinen Gedankenanstoß... ;)

@Doitsu:
Erstmal was allgemeines: Wenn ihr schon die 'Gaensefuesschen' (") benutzt, dann geht nicht aus dem String raus (" . $xy . ") um eine Variable zu schreiben - wenn man dies sowieso macht, sollte man auch die Hochkommata (') benutzen.
Ich glaube mal, das ist Geschmackssache, mir widerstrebt eine Notation, in der die Variablen einfach mit zwischen den "Gänsefüßchen" steht, da man so keine einheitliche Notation erreichen kann, wenn man z.B. auf ein Objekt oder Array zugreifen möchte. Flexibler ist meiner Meinung nach (und auch das ist Geschmackssache und jedem selbst überlassen), Strings mit zu formatieren, so ist eine einheitliche Notation möglich und die Variablen können ggf. auch schnell mit Objekten ö.ä. getauscht werden. :)

@TO: zu deinen Fragen wurde sonst glaub alles gesagt. Abfragen, ob Datensätze gefunden wurden kannst du, wie Doitsu schon sagte, mit mysql_num_rows. Variabel eine Spalte, in der zu suchen ist, zu übergeben, steht ja auch schon in den Antworten, achte aber, wenns geht ein wenig auf Sicherheit!;)

Schöne Grüße aus dem Sauerland! :)
Chriss
 

saila

Moderatorle

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

Hi,

alles gesagt ist noch nicht ;) Vielmehr sollte man auch Abstand von einem SELECT mit * nehmen, da hier die komplette Tabelle ausgelesen wird. Je nach Größe dieser, wird ab einem bestimmten Zeitpunkt eine Temporäre Tabelle nur aus diesem Grund erstellt und das kann dann wiederum zu einem Scriptabbruch führen, weil die Zeit von 30 oder 60 Sekunden (je nach php.ini Einstellung) abgelaufen ist.
 

Chriss1987

me.drinkCoffee();

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

...Vielmehr sollte man auch Abstand von einem SELECT mit * nehmen, da hier die komplette Tabelle ausgelesen wird. ...

Hi salia,

da hast du natürlich Recht, das habe ich übersehen! ;)
Hoffe, sonst ist ersteinmal alles gesagt!?

Schöne Grüße aus dem Sauerland!;)
Chriss
 
B

BeastyK

Guest

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

Guten Abend Leute,

heute war nicht so mein Tag und ich hab etwas abgeschaltet, so sorry guys that I didn't answer!
Nun hab ich mir eure Antworten angeschaut und was soll ich sagen ...Ihr seid Kings!!!!
Aber kurz mal ne Zwischenfrage, was bedeutet @TE oder @TO (da muß ich gepennt haben als das in der Schule mal dran war *g*)?
Hab mich an Doitsu orientiert und mir sein Backtick anstatt Hochkommata zu Herzen genommen. Komischerweise fiel mir das dort erst in die Augen.
Nun mal zu ein paar anderen Anmerkungen (die ich aber richtig fand und gut das sie hier kurz angesprochen wurden):

@Chriss1987: Zum Thema Sicherheit der Datenbank.
Ich glaube du meinst bei Spaltennamen der DB die Fields/Felder, die kann sich der Internetrocker nur über ein Menu/Liste auswählen und nicht irgendwas angeben was die DB nicht kennt. Hier sind das, wie man aus dem Code den ich am Anfang gepostet hab, die Felder Beschreibung, Anweisungen und Ort.
Die relevanten Daten zur DB Anbindung liegen in einem übergeordneten Ordner (cool, übergeordneter Ordner!) in ../Connections/.. und wird mit
require_once(...) am Anfang der Seite reingeladen.
Ist das sicher genug oder gibs da noch andere Möglichkeiten?

Zu dem Select * muß ich sagen das ich bestimmt auf ne Menge der Felder verzichten kann und mir, wenn es soweit ist, die richtigen 5 oder 6 raussuchen werde :D

Ist auf jedenfall richtig gut von euch das ihr geholfen habt!!! Dickes Dankeschön an der Stelle!

Ich frag mich nur wo ihr das mit dem Backtick statt Hochkommata her habt. Wenn ich überleg was ich gegoogelt und gelesen hab und nix hat geholfen *grummel*.

Wünsch Euch allen ne schöne Nacht
Andi
 

Doitsu

Aktives Mitglied

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

@TE : '@Thread Ersteller', TO heisst das gleiche nur halt Englisch.

Ich glaube du meinst bei Spaltennamen der DB die Fields/Felder, die kann sich der Internetrocker nur über ein Menu/Liste auswählen und nicht irgendwas angeben was die DB nicht kennt.
Und was, wenn ich einfach mal deinen Quelltext manipuliere?

Die relevanten Daten zur DB Anbindung liegen in einem übergeordneten Ordner (cool, übergeordneter Ordner!) in ../Connections/.. und wird mit
require_once(...) am Anfang der Seite reingeladen.
Ist das sicher genug oder gibs da noch andere Möglichkeiten?
Kommt drauf an, wenn es eine rein Text Datei ist, ist es nicht sicher. :) Dazu evtl noch bissl mehr Sicherheit per htaccess holen - sollte aber an sich kein Problem sein.

Ich frag mich nur wo ihr das mit dem Backtick statt Hochkommata her habt. Wenn ich überleg was ich gegoogelt und gelesen hab und nix hat geholfen *grummel*.
Weil zu MySQL Backtick gehoert, man kann diese aber auch ganz weg lassen - finde es mit aber schoener.. Allerdings nur um MySQL eigene Sachen zu kennzeichen (Spalte, Datanbank), Strings gehoeren weiterhin in ' oder ".
MySQL :: MySQL 5.0 Reference Manual :: 8.2 Schema Object Names
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

Alsoo zum Thema "maskieren": Die Maskierung im Scriptcode hat letztlich nur einen Hintergrund - Performance oder verzicht auf Performance und Suche nach Variablen und somit doppeltes parsen.

Wir hatten schon mehrfach das Thema. Hier noch mal das Beispiel:
echo "bassdfsadf $var asfsafa $varA asfsafsafasf $varB"; veranlasst php doppelt zu parsen. Und zwar wird in diesem Beispiel innerhalb des echo nach Variablen gesucht und passend ersetzt. Gleiches gilt somit auch für den Aufbau eines Query-Strings.

während

echo 'asfdasfasf '. $var .' asfasfasfsf '. $varA .' asfdasdfasfs '. $varB .' asdfsfd'; nur einmal geparst wird. Die Variablen werden betrachtet wie normaler Quellcode des Script.

Ein Query-String sollte somit wie folgt aufgebaut sein:
PHP:
<?php
$query = 'SELECT fieldA, fieldB FROM table WHERE fieldA = "'. mysql_real_escape_string($var) .'" LIMIT x';
?>
Das gleiche gilt für INSERT als auch für UPDATE.

Bei der Verwendung der ADODB-Klasse (in der Regel für Shopsysteme wie z.B. XT oder OS), kann dies zu Problemen führen. Deshalb sollte man ggf. die Klasse anpassen, um ein Fehlverhalten zu unterbinden.
 
B

BeastyK

Guest

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

Guten Morgen :)

Mir war ja klar das ich mit TE/TO gemeint war und nun gibs für die Buchstabenschnipsel auch einen Sinn :p

@Doitsu
Sicherheit:

Zitat:
Ich glaube du meinst bei Spaltennamen der DB die Fields/Felder, die kann sich der Internetrocker nur über ein Menu/Liste auswählen und nicht irgendwas angeben was die DB nicht kennt.

Und was, wenn ich einfach mal deinen Quelltext manipuliere?
Achsoooo, du willst es dir auf meiner Seite gemütlich machen und ein wenig Spaß haben :lol: , mhhhhhh....nein, das find ich nicht so gut, also (wie du ja gepostet hast: htaccess fürs Volk!
War es nicht so das einige Provider htaccess nicht unterstützen?
Hab vor, laß mich überlegen, 10 Jahren meine erste Internetseite bei Tripod mit htaccess gesichert, ich glaub das krieg ich wieder hin *g*.
Oder meinste mit
Kommt drauf an, wenn es eine rein Text Datei ist, ist es nicht sicher. :)
das ich die PHP-Datei in Connections noch anders schützen muß, ich mein man könnte sie ja theoretisch mit nem Editor öffnen etc.

PS.: thx for the link!

@saila

Gilt die Performanceoptimierung sowohl für das Hochkommata wie für den Backstick? Scheint mir mehr auf das Hochkommata und damit den PHP Scriptanteil abzuzielen, oder?
Das es eine Frage der Performance ist wußte ich aber nicht, also thx :blumen:
Ohja, da fällt mir ein das ich ja weiß das '% ... %' die Buchstabenfolge in den Strings der Felder sucht, aber wozu dient der Punkt in '.$Variable.' ?

Hab zwar im Link (SQL Manual) von Doitsu etwas gesucht, bin aber dann in der Informationsflut untergegangen.

Gruß
Andi
 

saila

Moderatorle

AW: MySQL: WHERE Variable LIKE mit Variable aus Liste

Alsoooo :) wir wissen ja nun, dass PHP doppelt parsen muss, wenn "asfasfsaf" (backstick) verwendet wird. Wenn also ein ' anstatt " (backstick) verwendet wird, parst php diesen Teil nicht eigens und da in $query = 'xy' ja noch eine Variable rein muss, muss diese auch separiert werden. Das geht nun wiederum mit

$var = 'Hupe';
$query = 'Na du '. $var;

Und wenn du Linux auf dem Rechner hast, kannst du über die Console das schön testen. Ein Link noch zur Ergänzung: PHP: Operatoren zur Programmausfhrung - Manual

So - und nun habe ich vor lauter psd-tutorials mein vhost immer noch nicht umgesetzt......
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.189
Beiträge
2.582.077
Mitglieder
67.259
Neuestes Mitglied
SaschMasch1312
Oben