Ankündigung

Einklappen
Keine Ankündigung bisher.

2x MySQL auf einer HTML Seite

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 2x MySQL auf einer HTML Seite

    Hallo, zusammen.

    Ich google mir die Finger wund, aber finde nix. Was aber daran liegt, das mir die richtige Fragestellung nicht googletauglich einfallen will.
    Daher bitte ich um Nachsicht, ggf. um eine passende Formulierung für meine Anfrage.

    Aufgabe: Wir verkaufen Produkte verschiedener Hersteller in verschiedenen Ländern. Es gibt es für jeden Hersteller eine Liste von Länder, in denen wir das dürfen. Also zum Beispiel Hersteller 1 in Land 2 und Land 4, Hersteller 2 in Land 1 und 2.
    Die Nutzer haben ein <Select / Option> Pulldown mit den Herstellernamen. Ein Klick auf einen Herstellernamen soll nun die jeweiligen Länder in einer Liste auf der selben Seite anzeigen.

    Was ich bereits habe und was funktioniert:

    Ich habe eine MySQL Datenbank mit Tabellen für a) Hersteller Namen, b) Ländernamen und c) eine Zwischentabelle. Funktioniert.

    Auf einer Webseite lese ich die Tabelle Hersteller in ein <select / option> Konstrukt ein, aus der die Nutzer sich einen Hersteller auswählen können. Funktioniert.

    Abfrage Hersteller/Land. Funktioniert

    Meine Probleme:

    a) Das Ergebnis aus der <select / option> Hersteller in die Abfrage Hersteller/Land einbauen,
    b) Diese Query durch den Klick auf Hersteller auslösen
    c) Das Ergebnis dieser Abfrage (die entsprechenden Länder) in ein <ul / li> Kontrukt schreiben.

    Zu a:

    PHP-Code:
    $land $db->query('SELECT tbl_land.land ... WHERE ,,, AND tbl_manufacturer.manu = ' x// <- das x soll die Auswahl aus der Option Hersteller sein 
    Zu c:

    PHP-Code:
    <?php
    $land 
    $db->query("SELECT land FROM tbl_land ORDER BY land ASC");
    echo 
    '<ul style="list-style-type:none" class="k" id="aus">';
    while(
    $row $land->fetch_object()) {
    echo 
    '<li>' $row->land '</li>';
    }
    echo 
    '</ul>';

    ?>
    Gruß, Uwe

  • #2
    Zeige mal das create statement, also einen SQL-Dump deiner DB mit Struktur und maximal 10 Beisoieldatensätzen.

    Kommentar


    • #3
      Ich dachte zwar, das sei eher ein PHP/HTML/JS Problem als ein DB Problem, aber gut.

      Code:
      -- phpMyAdmin SQL Dump
      -- version 4.7.4
      -- https://www.phpmyadmin.net/
      --
      -- Host: 127.0.0.1
      -- Erstellungszeit: 03. Nov 2018 um 16:06
      -- Server-Version: 10.1.29-MariaDB
      -- PHP-Version: 7.2.0
      
      SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
      SET AUTOCOMMIT = 0;
      START TRANSACTION;
      SET time_zone = "+00:00";
      
      
      /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
      /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
      /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
      /*!40101 SET NAMES utf8mb4 */;
      
      --
      -- Datenbank: `db_whoiswho`
      --
      
      -- --------------------------------------------------------
      
      --
      -- Tabellenstruktur für Tabelle `tbl_land`
      --
      
      CREATE TABLE `tbl_land` (
      `id_land` int(11) NOT NULL,
      `land` text NOT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Diese Tabelle enthält alle Länder, in denen wir verkaufen';
      
      --
      -- Daten für Tabelle `tbl_land`
      --
      
      INSERT INTO `tbl_land` (`id_land`, `land`) VALUES
      (1, 'Hongkong'),
      (2, 'UK'),
      (3, 'Spanien'),
      (4, 'Portugal'),
      (5, 'Italien'),
      (6, 'Deutschland'),
      (7, 'Österreich'),
      (8, 'Schweiz'),
      (9, 'BeNeLux'),
      (10, 'Frankreich'),
      ...
      (
      
      -- --------------------------------------------------------
      
      --
      -- Tabellenstruktur für Tabelle `tbl_manufacturer`
      --
      
      CREATE TABLE `tbl_manufacturer` (
      `id_manu` int(11) NOT NULL,
      `manu` varchar(150) NOT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
      
      --
      -- Daten für Tabelle `tbl_manufacturer`
      --
      
      INSERT INTO `tbl_manufacturer` (`id_manu`, `manu`) VALUES
      (161, 'Abbbbbb'),
      (162, 'Baaaaaa'),
      (163, 'Cdddddd'),
      (164, 'Effffff'),
      ...
      
      -- --------------------------------------------------------
      
      --
      -- Tabellenstruktur für Tabelle `tbl_region`
      --
      
      CREATE TABLE `tbl_region` (
      `id_region` int(11) NOT NULL COMMENT 'Index',
      `fk_manu` int(11) NOT NULL COMMENT 'Fremdschlüssel zur Tabelle Hersteller (manu)',
      `fk_land` int(11) NOT NULL COMMENT 'Fremschlüssel von dem Land, in dem der Hersteller vertreiben wird',
      `exk` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Exklusiv in diesem Land (J/N)'
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
      
      --
      -- Daten für Tabelle `tbl_region`
      --
      
      INSERT INTO `tbl_region` (`id_region`, `fk_manu`, `fk_land`, `exk`) VALUES
      (1, 162, 7, 0),
      (2, 162, 8, 1),
      (3, 161, 6, 1),
      (4, 161, 7, 1),
      (5, 163, 3, 1),
      (6, 163, 4, 1),
      (7, 163, 5, 1),
      (8, 163, 6, 1),
      (9, 163, 7, 1),
      ...
      (231, 187, 19, 0);
      
      --
      -- Indizes der exportierten Tabellen
      --
      
      --
      -- Indizes für die Tabelle `tbl_land`
      --
      ALTER TABLE `tbl_land`
      ADD PRIMARY KEY (`id_land`);
      ALTER TABLE `tbl_land` ADD FULLTEXT KEY `land` (`land`);
      
      --
      -- Indizes für die Tabelle `tbl_manufacturer`
      --
      ALTER TABLE `tbl_manufacturer`
      ADD PRIMARY KEY (`id_manu`);
      
      --
      -- Indizes für die Tabelle `tbl_region`
      --
      ALTER TABLE `tbl_region`
      ADD PRIMARY KEY (`id_region`),
      ADD KEY `fk_region` (`fk_land`),
      ADD KEY `fk_manu` (`fk_manu`);
      
      --
      -- AUTO_INCREMENT für exportierte Tabellen
      --
      
      --
      -- AUTO_INCREMENT für Tabelle `tbl_land`
      --
      ALTER TABLE `tbl_land`
      MODIFY `id_land` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=40;
      
      --
      -- AUTO_INCREMENT für Tabelle `tbl_manufacturer`
      --
      ALTER TABLE `tbl_manufacturer`
      MODIFY `id_manu` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=190;
      
      --
      -- AUTO_INCREMENT für Tabelle `tbl_region`
      --
      ALTER TABLE `tbl_region`
      MODIFY `id_region` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Index', AUTO_INCREMENT=232;
      
      --
      -- Constraints der exportierten Tabellen
      --
      
      --
      -- Constraints der Tabelle `tbl_region`
      --
      ALTER TABLE `tbl_region`
      ADD CONSTRAINT `tbl_region_ibfk_1` FOREIGN KEY (`fk_land`) REFERENCES `tbl_land` (`id_land`),
      ADD CONSTRAINT `tbl_region_ibfk_2` FOREIGN KEY (`fk_manu`) REFERENCES `tbl_manufacturer` (`id_manu`);
      COMMIT;
      
      /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
      /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
      /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

      Kommentar


      • #4
        Screenshot der PHP Seite

        screen.jpg

        Kommentar


        • #5
          a) Das Ergebnis aus der <select / option> Hersteller in die Abfrage Hersteller/Land einbauen,
          $_GET['manufacturer'] kommt aus der Select Übertragung zuvor, dann:
          PHP-Code:
          $id = (int)$_GET['manufacturer'];
              
          $manu_Id $mysqli->real_escape_string($id);
              
          $sql "
                  SELECT
                      l.land, r.exk AS 'exkl'
                  FROM
                      tbl_region r
                  LEFT JOIN
                      tbl_land l
                      ON r.fk_land = l.id_land
                  WHERE
                      fk_manu = 
          $manu_Id";

              
          $result $mysqli->query($sql); 
          b) Diese Query durch den Klick auf Hersteller auslösen
          Das ist Javascript, das kannst du mit fetch lösen, würde ich aber erst im 2. Schritt machen, erst mal sollte es als Affenformular funktionieren, das Javascript baust du dann später hinzu.
          c) Das Ergebnis dieser Abfrage (die entsprechenden Länder) in ein <ul / li> Kontrukt schreiben.
          PHP-Code:
          // Alle Daten auf einmal holen und in ein assoziatives Array speichern
              
          $array $result->fetch_all(MYSQLI_ASSOC);
              if ( 
          is_array($array) ) {
                  
          // Ausgabe-Variable kreieren
                  
          $html_li null;

                  
          // Array durchlaufen Daten holen und damit Liste erstellen
                  
          foreach ($array as $row){
                      
          $exc null;
                      if ( 
          $row["exkl"] ) { $exc '*'; }

                      
          $html_li .= '<li>'$row["land"].$exc '</li>';  
                  }
               } 
          Das Grundgerüst in HTML dazu könnte so ausehen(ohne CSS)
          HTML-Code:
          <!-- AUSGABE HTML -->
          <!doctype html>
          <html>
          <head>
          <meta charset="utf-8">
          <title>Details</title>
          </head>
          
          <body>  
              <form>
                  <h3>Vertriebgebiete</h3>
                  <label for="manufacturer">Hersteller</label>
                  <select name="manufacturer" autofocus>
                      <?= $html_option; ?>
                  </select>
                  <button name="submit" value="submit">Auswahl ansehen</button>
              </form>
              <h3>Länder (mit * gekennzeite sind exklusiv)</h3>
              <p>Vertrieb in</p>
              <ul>
                  <?= $html_li; ?>
              </ul>    
          </body>
          </html>

          Kommentar


          • #6
            Klasse! Ich setze das so schnell wie möglich um und melde das Ergebnis.

            Vielen Dank für die -aus meiner Sicht - extreme Mühe, die Du Dir gegeben hast! Chapeau!

            Kommentar


            • #7
              Mombi ...

              Kommentar


              • #8
                Sorry, Leute. Case close, GL hat die Prioritäten umgebaut, Projekt wurde gecanceled. Noch mal danke für alles.

                Kommentar


                • #9
                  [QUOTE=haifeif;n1543473(..) Projekt wurde gecanceled. Noch mal danke für alles.[/QUOTE]

                  schade, schien fast fertig.

                  DEFAULT CHARSET=latin1
                  würde ich auch utf8 setzen in der zukunft.

                  Kommentar

                  Lädt...
                  X