Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP / MySQL] Abfrageeditor basteln (https://www.delphipraxis.net/141694-%5Bphp-mysql%5D-abfrageeditor-basteln.html)

Luckie 14. Okt 2009 09:30


[PHP / MySQL] Abfrageeditor basteln
 
Ich habe hier eine private Adressdatenbank. Da habe ich schon ein paar Abfragen erstellt, die über Links verfügbar sind. Jetzt wäre ich aber gerne noch etwas flexibel und würde gerne beliebige Abfragen formulieren können. Ich dachte da ein eine Eingabefeld für die Abfrage und an eine Schaltfläche zum Abschicken der Abfrage. Soweit kein Problem. Nur wie bekomme ich jetzt das Ergebnis der Abfrage gescheit formatiert ausgegeben? Ich kann ja keine Tabelle mit fest vorgegebenen Spalten, da die Spaltenanzahl ja nicht fest steht.

Wie löst man so ein Problem am besten?

Eigentlich müsste ich ja nur wissen, welche Spalten in der Ergebnismenge enthalten sind.

himitsu 14. Okt 2009 09:37

Re: [PHP / MySQL] Abfrageeditor basteln
 
Dann erstell doch einfach eine Tabelle mit dynamischer Spaltenanzahl?

je Eintrag/Row einen Block mit <tr> anfangen (am Ende natürlich mit </tr> wieder schließen)
und dann einfach je Feld/Col einfach einen <td>...</td>-Eintrag dort rein :gruebel:

[edit]
Zitat:

Eigentlich müsste ich ja nur wissen, welche Spalten in der Ergebnismenge enthalten sind.
du kannst natürlich auch den Aufbau der Tabelle abfragen :angel2:

[add]
http://dev.mysql.com/doc/refman/5.1/de/describe.html
http://dev.mysql.com/doc/refman/5.1/...w-columns.html

Luckie 14. Okt 2009 10:00

Re: [PHP / MySQL] Abfrageeditor basteln
 
Zitat:

Zitat von himitsu
Dann erstell doch einfach eine Tabelle mit dynamischer Spaltenanzahl?

Das muss ich ja sowieso. Nur wie komme ich an die betroffenen Spalten dran?

Zitat:

[edit]
Zitat:

Eigentlich müsste ich ja nur wissen, welche Spalten in der Ergebnismenge enthalten sind.
du kannst natürlich auch den Aufbau der Tabelle abfragen :angel2:
Was will ich mit dem Aufbau der Tabelle? Ich brauche die vom Query betroffenen Felder.

Zum Beispiel:
SQL-Code:
SELECT name, vorname FROM adressen WHERE name='himitsu'
So, die Tabelle Adressen besteht natürlich aus wesentlich mehr Feldern, aber ich bräuchte jetzt nur eine Tabelle mit zwei Spalten. Stehen die betroffenen Spalten irgendwie in der Ergebnismenge drin?

chaosben 14. Okt 2009 10:13

Re: [PHP / MySQL] Abfrageeditor basteln
 
Zitat:

Zitat von Luckie
Stehen die betroffenen Spalten irgendwie in der Ergebnismenge drin?

Ja, wenn du die Ergebnisse z.B. mit mysql_fetch_assoc liest, bekommst du eine assoziatives Array. Dann nur noch schnell die Feldnamen auslesen (foreach (array as $Spaltenname => $Wert)) und fertig.

himitsu 14. Okt 2009 10:15

Re: [PHP / MySQL] Abfrageeditor basteln
 
Zitat:

Ich brauche die vom Query betroffenen Felder.
ok :wall:

nja, wenn du z.B. über mysql_fetch_assoc eine Zeile ausließt, dann hast du doch im zurückgegebenen Array die Anzahl drinnen?
= Anzahl der Felder im Array

Luckie 14. Okt 2009 10:18

Re: [PHP / MySQL] Abfrageeditor basteln
 
Ah, danke, das wollte ich wissen. Nur leider scheint die verlinkte Seite nicht zu funktionieren, aber ich weiß ja jetzt wo nach ich suchen muss.

@himitsu:
Bisher mache ich es so:
Code:
$query = "SELECT name, vorname, priv_gebdat FROM adressen WHERE (name <> '' OR vorname <> '') AND priv_gebdat <> '0000-00-00' ORDER BY priv_gebdat";
               $resultset = mysql_query($query);
               echo "<tr><th>Name</th><th>Vorname</th><th>Geburtsdatum</th></th><th class=\"screenonly\">Aktionen</th></tr>\n";
               while($row = mysql_fetch_object($resultset))
               {
                  echo "<tr>
                     <td>".$row->name."</td>
                     <td>".$row->vorname."</td>
                     <td>".$row->priv_gebdat."</td>
                     <td class=\"screenonly\">[url='./details.php?id=".$row->id."'][img]./images/view.jpg[/img][/url]
                        [url='./form.php?id=".$row->id."'][img]./images/edit.jpg[/img][/url]
                        [url='./delete.php?id=".$row->id."'][img]./images/delete.jpg[/img][/url]
                     </td>
                     </tr>";
               }

Luckie 14. Okt 2009 10:25

Re: [PHP / MySQL] Abfrageeditor basteln
 
Kommando zurück!

@chaosben: Das kann ich auch nicht brauchen:
Code:
while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];
    echo $row["userstatus"];
}
Da muss ich ja sogar den Namen der Felder wissen, um an die Daten zu kommen. Aber gerade die weiß ich ja nicht, weil sie ja beliebig, in Abhängigkeit der Abfrage, sein können. Sie Beispiel oben.

himitsu 14. Okt 2009 10:26

Re: [PHP / MySQL] Abfrageeditor basteln
 
in kurz würde ich es wohl etwa so machen
Code:
while($row = mysql_fetch_assoc($resultset))

  echo "<tr>";
  foreach($row as $col)
  { 
    echo "<td>".$col."</td>
  }
  echo "</tr>";
und im Notfall könnte man aus dem ersten Datensatz noch die Feldnamen auslesen
Code:
$b = true;
while($row = mysql_fetch_assoc($resultset))

  if ($b) {
    echo "<tr>";
    foreach($row as $name => $value)
    { 
      echo "<td>".$name."</td>
    }
    echo "</tr>";
    $b = false;
  }
  echo "<tr>";
  foreach($row as $col)
  { 
    echo "<td>".$col."</td>
  }
  echo "</tr>";
[add]
bei mysql_fetch_object mußt du die Felder ja auch wissen
und ob jetzt nun mysql_fetch_object mit $row->vorname
oder mysql_fetch_assoc mit $row["vorname"], macht ja nun keinen großen unterschied.

aber bei dem assoziativen Array kannst du ja Namen und Values auslesen (bei Object wüßte ich jetzt nicht, ob/wie das gehen könnte)

chaosben 14. Okt 2009 10:30

Re: [PHP / MySQL] Abfrageeditor basteln
 
Zitat:

Zitat von himitsu
und im Notfall könnte man aus dem ersten Datensatz noch die Feldnamen auslesen

Nicht nur im Notfall ... genau das ist der tiefere Sinn. :-) (foreach-Anweisungen sind sowas schönes)

//edit:
Noch schöner gehts natürlich mit einer Schleife von 0 bis mysql_num_fields - 1 und der Funktion mysql_field_name.

Ein 3faches Wuppdi auf eine Referenz! :)

Luckie 14. Okt 2009 11:25

Re: [PHP / MySQL] Abfrageeditor basteln
 
Ok, soweit funktioniert das. Nur wenn ich das Formular abschicke macht er mir so was:
Code:
select name, vorname from adressen where name=\'puff\' order by name, vorname
also diese komischen Schrägstriche. Das führt natürlich zu einer ungültigen Abfrage. Gut, die bekomme ich mit str_replace weg, aber woher kommen die?

himitsu 14. Okt 2009 11:31

Re: [PHP / MySQL] Abfrageeditor basteln
 
wo die jetzt genau herkommen, kann ich auch nicht sagen ... eventuell ja vom Browser

ich mach diese immer so weg
Code:
stripslashes($_POST['abfrage'])

mirage228 14. Okt 2009 11:33

Re: [PHP / MySQL] Abfrageeditor basteln
 
Bei Google suchengpc_magic_quotes
Kannste Abfragen und dann ggf. die slashes mit addslahes / stripslashes wegmachen oder dazupacken (je nach Bedarf).

himitsu 14. Okt 2009 12:16

Re: [PHP / MySQL] Abfrageeditor basteln
 
Zitat:

Zitat von mirage228
Bei Google suchengpc_magic_quotes
Kannste Abfragen und dann ggf. die slashes mit addslahes / stripslashes wegmachen oder dazupacken (je nach Bedarf).

ich leß da grad as von
Zitat:

Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und wird in PHP 6.0.0 ENTFERNT. Sich auf dieses Feature zu verlassen ist in keiner Weise empfehlenswert.
heißt das, daß ab dann nicht mehr gequotet wird oder wird es dann immer gemacht?

Valle 14. Okt 2009 12:23

Re: [PHP / MySQL] Abfrageeditor basteln
 
Das heißt, dass es ab dann (PHP 6) nicht mehr gequoted wird. Solange aber noch keiner PHP 5.3 oder PHP 6 benutzt sollte man auch weiterhin die genannten Funktionen verwenden. In meinem Framework prüfe ich, ob magic_quotec_gpc oder magic_quotes_runtime aktiviert sind - wenn ja wird das Script abgebrochen, da das automatische maskieren, automatische entmaskieren und anschließend das manuelle (in meinem Code) wieder maskieren zu viel Rechenaufwand kostet. Also php.ini verändern. ;-)

Liebe Grüße,
Valle

himitsu 14. Okt 2009 12:51

Re: [PHP / MySQL] Abfrageeditor basteln
 
Zitat:

Zitat von Valle
ab dann (PHP 6) nicht mehr gequoted wird

das wollte ich wissen ... so, dann bastel ich mir mal aus all diesen Infos einen Dequoter und laß nachfolgend im Code die vielen stripslashes einfach weg :angel2:

so, jetzt muß ich nur noch rausfinden, wie/ob man in PHP auch parameter als VAR-Parameter übergeben kann, um da etwas speichersparender arbeiten zu können :stupid:

Valle 14. Okt 2009 13:23

Re: [PHP / MySQL] Abfrageeditor basteln
 
Zitat:

Zitat von himitsu
das wollte ich wissen ... so, dann bastel ich mir mal aus all diesen Infos einen Dequoter und laß nachfolgend im Code die vielen stripslashes einfach weg :angel2:

Siehe phpMyAdmin-SVN in libraries/common.inc.php ca. Zeile 200:

Code:
// remove quotes added by php
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    PMA_arrayWalkRecursive($_GET, 'stripslashes', true);
    PMA_arrayWalkRecursive($_POST, 'stripslashes', true);
    PMA_arrayWalkRecursive($_COOKIE, 'stripslashes', true);
    PMA_arrayWalkRecursive($_REQUEST, 'stripslashes', true);
}
Zitat:

Zitat von himitsu
so, jetzt muß ich nur noch rausfinden, wie/ob man in PHP auch parameter als VAR-Parameter übergeben kann, um da etwas speichersparender arbeiten zu können :stupid:

Und da guckst du am besten mal hier. ;-)

Liebe Grüße,
Valle

himitsu 14. Okt 2009 13:51

Re: [PHP / MySQL] Abfrageeditor basteln
 
so, ich hab jetzt diese Funktion und sie scheint zu funktionieren :)
Code:
function RemoveMagicQuotes(&$Array) {
  if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
    foreach ($Array as $Key => $Value)
      if (is_string($Value)) {
        $Array[$Key] = stripslashes($Value);
      } elseif (is_array($Value))
        RemoveMagicQuotes($Array[$Key]);
}
RemoveMagicQuotes($_GET);
RemoveMagicQuotes($_POST);
RemoveMagicQuotes($_COOKIE);
RemoveMagicQuotes($_SERVER);

Zitat:

am besten mal hier.
Danke :kiss:

hatte zwar 'ne ganze Weile im php.net rumgesucht, aber es nicht gefunden :cry:

und nach VAR-Parameter braucht man nicht zu suchen ... da bin ich jedenfalls immer nur auf "variable Parameter" gekommen und das ist ja nun was ganz Anderes.

Klaus01 14. Okt 2009 14:01

Re: [PHP / MySQL] Abfrageeditor basteln
 
Zitat:

Zitat von himitsu
und nach VAR-Parameter braucht man nicht zu suchen ...

Vielleicht hilft call by reference

Grüße
Klaus

himitsu 14. Okt 2009 14:58

Re: [PHP / MySQL] Abfrageeditor basteln
 
joar danke nochmal, aber hatte es ja nun schon gefunden ... bzw. Valle hatte es
Code:
<?PHP

  echo $_GET['Test'], '
';

  function RemoveMagicQuotes(&$Array) {
    if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
      foreach ($Array as $Key => $Value)
        if (is_string($Value)) {
          $Array[$Key] = stripslashes($Value);
        } elseif (is_array($Value))
          RemoveMagicQuotes($Array[$Key]);
  }
  RemoveMagicQuotes($_GET);
  RemoveMagicQuotes($_POST);
  RemoveMagicQuotes($_COOKIE);
  RemoveMagicQuotes($_SERVER);

  echo $_GET['Test'];

?>
.../a.php?Test=a'b
Zitat:

a\'b
a'b
PS: in dem phpMyAdmin-Code werden zwar auch noch die Keys mit dequotet, aber ich nutze eh keine Namen, wo dieses nötig wäre :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz