AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mysql mit PHP und Formular

Ein Thema von stOrM · begonnen am 15. Jul 2008 · letzter Beitrag vom 17. Jul 2008
Antwort Antwort
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#1

Mysql mit PHP und Formular

  Alt 15. Jul 2008, 08:48
Hallo,
ich steh grad vor einem deftigem Problem, ich dazu sagen ich hab 0 (in worten null!) Ahnung von irgendwelchen webbasierten Sprachen.
Das Problem ist folgendes, ein sehr guter Freund von mir steht vor dem Problem das er im eigenen Lan (Netwerkfestplatte) eine Menge an Treibern rumfliegen hat (liegen alle als Ziparchiv vor) das Problem ist das wiederfinden dieser Treiber (Treiber für Mainboards diverser Hersteller)

Jetzt hab ich mir folgendes überlegt, erst einmal hab ich mittels Xampp einen internen Webblog gebaut (Wordpress) welcher nur im Lan laufen wird wegen der Sicherheit dort soll es eine spezielle Seite geben über die man ein Suchformluar ausfüllen kann, das Formular ist folgendermaßen aufgebaut:

1. Sockel (z.B. 939 oder AM2)
2. Hersteller (z.B. Asus, Gigabyte usw.)
3. Bezeichnung (z.B. ALiveNF5SLI)
4. Submit Button

Im Mysql Server gibt es pro Hersteller eine Tabelle die alle gleich aussehen, Felder der Tabellen sind:

1. ID
2. Sockel
3. Bezeichnung
4. Bemerkung
5. Url
6. OperatingSystem

Url ist der lokale Pfad auf das Verzeichnis der Netzwerkplatte für den Treiber.

Nachdem ausfüllen des Formulars und klick auf den Submit Button wird unterhalb des Formulars eine Tabelle mit dem ResultSet der Suchanfrage gefüllt.

Mein Problem ist aufgrund der nichvorhandenen Kenntnisse im Bereich Webprogrammierung mit PHP und HTML, Javascript usw. das folgende Probleme auftreten:

1. Beim ersten Aufruf der Seite gibt es einen SQL Query Fehler (meine Vermutung ist das eine Variable zu diesem Zeitpunkt nicht gefüllt ist, beim erstmaligem klick auf Submit ist dann alles OK.)

2. Dem ganzen Fehlt noch eine gewissen Logik wie z.B. die Überprüfung der durch den User gemachten Eingaben im Formular, wenn jemand z.B. eine Suche ausführen will, die den Sockel und den Hersteller beinhaltet jedoch nicht die Bezeichnung, dementsprechend muss das Query ja dann dynamisch gebaut werden. Oder falls der User gar nichts auswählt und einfach Submit klickt,dann sollte unterhalb des Formulars halt eine Bemerkung ala: 'Bitte folgende Felder ausfüllen erscheinen' vielleicht wäre das ja in einem seperaten Div möglich?

Ich zeig mal was ich bisher hab vielleicht steigt ja jemand durch?

Code für die Table unterhalb des Suchformulars (ZebraTable):

Code:
<script type="text/javascript">

var Event = {
   add: function(obj,type,fn) {
      if (obj.attachEvent) {
         obj['e'+type+fn] = fn;
         obj[type+fn] = function() { obj['e'+type+fn](window.event); }
         obj.attachEvent('on'+type,obj[type+fn]);
      } else
      obj.addEventListener(type,fn,false);
   },
   remove: function(obj,type,fn) {
      if (obj.detachEvent) {
         obj.detachEvent('on'+type,obj[type+fn]);
         obj[type+fn] = null;
      } else
      obj.removeEventListener(type,fn,false);
   }
}

function $() {
   var elements = new Array();
   for (var i=0;i<arguments.length;i++) {
      var element = arguments[i];
      if (typeof element == 'string') element = document.getElementById(element);
      if (arguments.length == 1) return element;
      elements.push(element);
   }
   return elements;
}

String.prototype.trim = function() {
   return this.replace(/^\s+|\s+$/,"");
}

function addClassName(el,className) {
   removeClassName(el,className);
   el.className = (el.className + " " + className).trim();
}

function removeClassName(el,className) {
   el.className = el.className.replace(className,"").trim();
}

var ZebraTable = {
   bgcolor: '',
   classname: '',
   stripe: function(el) {
      if (!$(el)) return;
      var rows = $(el).getElementsByTagName('tr');
      for (var i=1,len=rows.length;i<len;i++) {
         if (i % 2 == 0) rows[i].className = 'alt';
         Event.add(rows[i],'mouseover',function() { ZebraTable.mouseover(this); });
         Event.add(rows[i],'mouseout',function() { ZebraTable.mouseout(this); });
      }
   },
   mouseover: function(row) {
      this.bgcolor = row.style.backgroundColor;
      this.classname = row.className;
      addClassName(row,'over');
   },
   mouseout: function(row) {
      removeClassName(row,'over');
      addClassName(row,this.classname);
      row.style.backgroundColor = this.bgcolor;
   }
}

window.onload = function() {
   ZebraTable.stripe('mytable');
}

</script>
<style type="text/css">

body {
   background: #fff;
}

table {
   border-collapse: collapse;
   width: 50%;
   margin: 24px;
   font-size: 1.1em;
}

th {
   background: #3e83c9;
   color: #fff;
   font-weight: bold;
   padding: 2px 11px;
   text-align: left;
   border-right: 1px solid #fff;
   line-height: 1.2;
}

td {
   padding: 6px 11px;
   border-bottom: 1px solid #95bce2;
   vertical-align: top;
}

td * {
   padding: 6px 11px;
}

tr.alt td {
   background: #ecf6fc;
}

tr.over td, tr:hover td {
   background: #bcd4ec;
}

</style>
Die eigentliche Routine zum Connect auf den Mysql Server (Table) usw...:

Code:
<?php
include("dbconnect.php>");

$global_dbh = mysql_connect($hostname, $username, $password)
or die("Could not connect to database");

mysql_select_db($db, $global_dbh)
or die("Could not select database");

function display_db_query($query_string, $connection, $header_bool, $table_params) {
   // perform the database query
   $result_id = mysql_query($query_string, $connection)
   or die("display_db_query:" . mysql_error());
   // find out the number of columns in result
   $column_count = mysql_num_fields($result_id)
   or die("display_db_query:" . mysql_error());
   // Here the table attributes from the $table_params variable are added
   print("<TABLE width=\“50%\“ id=mytable $table_params >\n");
   // optionally print a bold header at top of table
   if($header_bool) {
      print("<TR>");
      for($column_num = 0; $column_num < $column_count; $column_num++) {
         $field_name = mysql_field_name($result_id, $column_num);
         print("<TH>$field_name</TH>");
      }
      print("</TR>\n");
   }
   // print the body of the table
   while($row = mysql_fetch_row($result_id)) {
      print("<TR ALIGN=LEFT VALIGN=TOP>");
      for($column_num = 0; $column_num < $column_count; $column_num++) {
         print("<TD>$row[$column_num]</TD>\n");
      }
      print("</TR>\n");
   }
   print("</TABLE>\n");
}

function display_db_table($tablename, $socket, $connection, $header_bool, $table_params) {

  if($socket == "All")
    {
  $query_string = "SELECT * FROM $tablename";
    }
  else
    {
     $query_string = "SELECT * FROM $tablename WHERE sockel = '$socket'";
    }

    display_db_query($query_string, $connection,
   $header_bool, $table_params);
}
?>
Das Suchformular:

Code:
<form action="searchform.php" method="post">
<form name="form1" method="post" action="">
  <label>Socket
  <select name="Socket" id="Socket">
    <option value="AM2">AM2</option>
    <option value="AM2+">AM2+</option>
    <option value="939">939</option>
    <option value="All" selected>All</option>
  </select>
  </label>






<label>Manufacturer
<select name="Manufacturer" id="Manufacturer">
  <option value="Asrock">Asrock</option>
  <option value="Abit">Abit</option>
  <option value="Asus">Asus</option>
  <option value="Gigabyte">Gigabyte</option>
  <option value="Msi">Msi</option>
</select>
</label>






<label>Search
<input type="submit" name="Search" value="Submit">
</label>
</form>
Durchführen der Suche sowie Füllen der Variablen:

Code:
<?php

$table = $_POST['Manufacturer'];
$sock = $_POST['Socket'];
//$bez = $_POST['bezeichnung'];

display_db_table($table, $sock, $global_dbh, TRUE, "border='0'");
?>
Viele Grüße
Marc
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Mysql mit PHP und Formular

  Alt 15. Jul 2008, 09:23
Wenn der Nutzer das erste Mal auf die Seite geht ist das $_POST Array ja noch leer. Du kannst also in deiner Methode display_db_table ein entsprechendes If einbauen (isset($_POST['Manufacturer'])) um zu prüfen, ob du überhaupt ne Suche machen musst.

Die Sollfelder kannst du sowohl auf dem Client (via Javascript) als auch auf dem Server (via PHP) durchführen. Um die Serverprüfung wirst du nicht herum kommen, da du sonst wieder falsche Queries zusammenbastelst.

Wenn das nur Quick & Dirty werden soll, würd ich einfach ein String-Array mit den verschiedenen Meldungen füllen ("Geben Sie ein Modell ein"...). In der Ausgabe dann prüfen, ob das Array Einträge enthält. Wenn nein, mach deine Query und gib die Tabelle aus. Wenn ja mach ne Schleife durch das Array und gib die Meldungen aus.

Und wenn du es dann ganz ordentlich machen möchtest, musst du deine Suche noch gegen SQL Injections absichern. Da gibt's ne eigene Rubrik auf PHP.net für.
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Mysql mit PHP und Formular

  Alt 15. Jul 2008, 09:57
Bahnhof!

Hallo, erstmal vielen Dank für deine Antworten.
Nur ich schrub ja ich hab null Plan davon, daher kan ich das nicht wirklich umsetzen was du gepostet hast.

Was sql injection angeht ist mir völlig egal, von daher muss da nix gemacht werrden. Es muss halt nur lauffähig sein mehr nicht.
Vielleicht könntest Du mir etwas mehr helfen dabei, bzw. ausführlicher vielleicht als Codeergänzung zu meinem Bisherigen damit ich das auchkapiere

Viele Grüsse
Marc
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Mysql mit PHP und Formular

  Alt 16. Jul 2008, 20:35
Wirklich niemand der helfen könnnte?
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Mysql mit PHP und Formular

  Alt 17. Jul 2008, 09:24
Code:
function display_db_table($tablename, $socket, $connection, $header_bool, $table_params) {

  if ((isset($tablename)) && (isset($socket))) {


     if($socket == "All")
        $query_string = "SELECT * FROM $tablename";

     else
        $query_string = "SELECT * FROM $tablename WHERE sockel = '$socket'";
   
     display_db_query($query_string, $connection, $header_bool, $table_params);

  }

}
Das sollte den SQL Fehler beim ersten Aufruf verhindern
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz