PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   DropDown Probleme (http://www.selfphp.de/forum/showthread.php?t=17642)

Luke85 11.09.2007 08:14:28

DropDown Probleme
 
Hey Leutz!
Ich benötige einen Tipp von euch, wie ich das optimal verwirkliche. Habe ein Ausleseformular, dass die Datensätze aus der Datenbank in die Tabelle lädt.
Über die Auswahl eines DropDownmenüs sollen die einzelnen Produkte ausgewählt gewählt werden. Die Produktnummer, der Primarykey in der Datenbank, wird bereits ins DropDown geladen. Ab hier hänge ich fest: Wenn ich einen Datensatz auswähle wird dieser nicht reingeladen.
Wie heißt der Befehl, der mir das ermöglicht? Hier mal der Code, vllt. ist das nur eine kleine Geschichte.

PHP-Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Daten ausgeben</title>
<script type="text/javascript" src="format.js"></script>

</head>

<body>

<?php

// Verbindung wird zur Datenbank aufgenommen
   
$db  mysql_connect ("localhost","benutzer","");

// SQL-Anfrage an Datenbank "Produkt"  
   
$res mysql_db_query("produkt""select DISTINCT * from test ORDER BY Produktnummer ASC");
   
// Liefert Anzahl betroffener Datensätze
   
$num mysql_affected_rows();

   for (
$i=0$i<$num$i++)
   {
      
$ty mysql_result($res$i"Typ");
      
$tn mysql_result($res$i"Teilung");
      
$fb mysql_result($res$i"Frequenzbereich");
      
$ed mysql_result($res$i"Einfuegungsdaempfung");
      
$rd mysql_result($res$i"Rueckflussdaempfung");
      
$is mysql_result($res$i"Isolation");
      
$im mysql_result($res$i"Impedanz");
      
$wi mysql_result($res$i"Widerstand");
      
$sz mysql_result($res$i"Schalterzeit");
      
$st mysql_result($res$i"Schalttyp");
   }
 

             
?>

<form action="daten_ausgeben_beta2.php" method="get" name="focusform">
<table width="400" border="1" cellspacing="0" cellpadding="0">
<tr>
    <td width="350">
            <td width="200">
            <strong>Produktnummer: 
            <select name="Produktnummer" onChange="produkt()">

            <?php
            
for ($i=0$i<$num$i++)
                {
                  
$pn mysql_result($res$i"Produktnummer");
                    echo 
"<option value= '$pn'>$pn</option>";
                } 
            
?>
            </select></strong>
            </td>
    </td>
</tr>  
  <tr>
    <td>Teilung</td>
    <td><input id="pn" name="Teilung" size="80" value="<?php echo "$tn" ?>" readonly="readonly"></td>
  </tr>
  <tr>
    <td>Frequenzbereich</td>
    <td><input name="fb" size="80" value="<?php echo "$fb" ?>" readonly="readonly"></td> 
  </tr>
  <tr>
    <td>Einfügungsdämpfung</td>
    <td><input name="ed" size="80" value="<?php echo "$ed" ?>" readonly="readonly"></td>
  </tr>
  <tr>
    <td>Rückflußdämpfung</td>
    <td><input name="rd" size="80" value="<?php echo "$rd" ?>" readonly="readonly"></td>    
  </tr>
  <tr>
    <td>Isolation</td>
    <td><input name="is" size="80" value="<?php echo "$is" ?>" readonly="readonly"></td>
  </tr>
  <tr>
    <td>Impedanz</td>
    <td><input name="im" size="80" value="<?php echo "$im" ?>" readonly="readonly"></td>
  </tr>
  <tr>
    <td>Widerstand</td>
    <td><input name="wi" size="80" value="<?php echo "$wi" ?>" readonly="readonly"></td>
  </tr>
  <tr>
    <td>Schalterzeit</td>
    <td><input name="sz" size="80" value="<?php echo "$sz" ?>" readonly="readonly"></td>
  </tr>
  <tr>
    <td>Schalttyp</td>
    <td><input name="st" size="80" value="<?php echo "$st" ?>" readonly="readonly"></td>
  </tr>
  <tr>
  <td></td>
  <td><input type="reset"></td>
  </tr>  
</table>
</form>        
</body>
</html>


Raketenmann 11.09.2007 11:24:06

AW: DropDown Probleme
 
Es gibt keinen Befehl, der dir das ermöglicht. Du mußt das schon über Schleifen machen, nur in deiner Schleife werden die Variablenwerte immer wieder überschrieben, so wird das nix mit der Ausgabe.

PHP-Code:


// Verbindung wird zur Datenbank aufgenommen 
$db=mysql_connect ("localhost","benutzer",""); 

// SQL-Anfrage an Datenbank "Produkt"   
$res=mysql_query("SELECT * FROM test ORDER BY Produktnummer ASC");

$pr_nrn=array();

// Hier die Nrn. sammeln und falls etwas bestimmtes ausgewählt wurde, betreffenden Ds merken (show_produkt)
while($row=mysql_fetch_array($res))
    {
        
$pr_nrn[]=$row['Produktnummer'];
        
        if(isset(
$_GET['produkt']) && $_GET['produkt']==$row['Produktnummer'])
            {
                
$zeige_produkt=$row;            
            }    
    }


// Ab hier Ausgabe

// Zuerst die Asuwahl der Produktnummern in einem <select>
echo '
<form name="produktwahl" method="get" action="'
.$_SERVER['PHP_SELF'].'">
<select name="produkt" onchange="document.produktwahl.submit()">
<option value="-1">Bitte wählen</option><option value="-1"></option>'
;

for(
$z=0;$z<count($pr_nrn);$z++)
    {
        
// Da die Produktnummer im value Attribut steht, kannst du als Bezeichnung der options natürlich auch was anderes als die Nummer verwenden...
        
if(isset($_GET['produkt']) && $_GET['produkt']==$pr_nrn[$z])
            {
                echo 
'<option value="'.$pr_nrn[$z].'" selected>'.$pr_nrn[$z].'</option>';
            }
        else
            {
                echo 
'<option value="'.$pr_nrn[$z].'">'.$pr_nrn[$z].'</option>';
            }
    }

echo 
'</select></form>';


// Wenn ein Produkt gewählt wurde, zeige es in einer Tabelle
if(isset($zeige_produkt))
    {
        
$bezeichner=array('Produktnummer','Teilung','Frequenzbereich');  // usw.
        
        
echo '
        <br>
        <table>'
;
        
        for(
$z=0;$z<count($bezeichner);$z++)
            {
                echo 
'
                <tr>
                <td>'
.$bezeichner[$z].'</td>
                <td>'
.$zeige_produkt[$z].'</td>
                </tr>'
;    
            }
        
        echo 
'
        </table>'
;
    } 

Du mußt dabei beachten, dass das Array $bezeichner in Anzahl und Reihenfolge der Elemente mit den Spalten deiner Tabelle übereinstimmen muß. So wie es jetzt ist, werden immer nur die ersten drei Merkmal ausgegeben.

Wenn du es noch verfeinern willst, kann du auch die Spaltennamen von MySQL beziehen und $bezeichner damit füllen.

Hatte sich dein JavaScript-Vorschau-Problem damit auch erledigt?

Luke85 11.09.2007 11:44:49

AW: DropDown Probleme
 
Danke dir Raketenmann.
Ich habe mir schon gedacht, dass es nur über Schleifen geht. Dein Skript bleibt aber in Zeile "...while($row=mysql_fetch_array($res))..." stecken. Sehe jetzt nicht wieso, aber er macht nicht weiter.
Das mit der Vorschau hatte nicht so geklappt wie ich es mir vorgestellt habe. Deshalb möchte ich diese Ausgabe schreiben und dann nach erfolgreichem Einfügen, die Daten per Button ansehen. Umständlich aber naja.

Raketenmann 11.09.2007 12:00:39

AW: DropDown Probleme
 
Jaja... wenn man es nicht ausprobiert ;-)

Also du kannst die while-Zeile mal ändern in
PHP-Code:

while($row=mysql_fetch_array($res,MYSQL_NUM)) 

Das ist aber nicht der Fehler, den du aktuell hast...


Schreibe mal unter die Zeile $res=... folgendes:
PHP-Code:

// SQL-Anfrage an Datenbank "Produkt"    
$res=mysql_query("SELECT * FROM test ORDER BY Produktnummer ASC"); 

echo 
mysql_error(); 

EDIT
Ich hätte deine DB Verbindung nicht ändern sollen, also da wo das hier steht
PHP-Code:

// Verbindung wird zur Datenbank aufgenommen 
   
$db  mysql_connect ("localhost","benutzer",""); 

muß das hier hin:
PHP-Code:

$db_server "localhost"// zum Bsp.
$db_name "";  // mußt du füllen
$db_user "";  // mußt du füllen
$db_passwort "";  // mußt du füllen

MYSQL_CONNECT($db_server,$db_user,$db_passwort) or die ("Konnte keine Verbindung zur Datenbank herstellen");
mysql_select_db($db_name) or die("Auswahl der Datenbank fehlgeschlagen"); 


Luke85 11.09.2007 12:06:30

AW: DropDown Probleme
 
Okay Fehler wurde ausgemerzt. Die Angabe des Datenbanknamens hat gefehlt. Danke dir ;)

Doch im DropDownMenü sehe ich nicht die Bezeichnung bzw. die Produktnummer ist nicht sichtbar, sprich es ist leer. Jedoch sind 4 Datensätze vorhanden, man kann diese auch auswählen.
Beim zweiten und letzten "unsichtbaren", wenn dieses angeklickt wird, erfolgt die Ausgabe. Aber nur dort.

Raketenmann 11.09.2007 12:16:50

AW: DropDown Probleme
 
Mann... vielleicht sollte ich auch man hingucken, was ich mache...

Also das mit dem hier:
PHP-Code:

while($row=mysql_fetch_array($res,MYSQL_NUM)) 

war etwas unüberlegt, weil direkt danach ein assoziativer Index 'Produktnummer' verwendet wird...

Ich gehe davon aus, dass Produktnummer die erste Spalte in der DB Tabelle ist
PHP-Code:

while($row=mysql_fetch_array($res,MYSQL_NUM)) 
    { 
        
$pr_nrn[]=$row[0]; 
         
        if(isset(
$_GET['produkt']) && $_GET['produkt']==$row[0]) 
            { 
                
$zeige_produkt=$row;             
            }     
    } 

Das ist der schnellste Weg es zu ändern, ansonsten müsste unten noch die Ausgabe angepasst werden.

Luke85 11.09.2007 12:35:07

AW: DropDown Probleme
 
Es geht, wow. Du bist mein Ausgabeheld ;D!
Dann werde ich jetzt eine Gescheite Ausgabetabelle schreiben, damit es gut formatiert aussieht und diese dann ins Echo setzten.

Dann kann man ja jetzt einen "Änder" Button einfügen, damit der ausgewählte Datensatz verändert werden kann oder?

Raketenmann 11.09.2007 13:17:37

AW: DropDown Probleme
 
Klar...

Du schreibst einfach die Produktnr in ein Hidden-Input des Ändern-Formulars oder hängst die Nr an den Button. Dann weiß dein Update Skript "wo es lang geht". ;-)

Luke85 12.09.2007 09:32:04

AW: DropDown Probleme
 
Kann das überhaupt so funktionieren, zwei unterschiedliche Anfragen an die MySQL-Datenbank in einer PHP-Datei?

Raketenmann 12.09.2007 09:56:17

AW: DropDown Probleme
 
Zitat:

Zitat von Luke85 (Beitrag 106630)
Kann das überhaupt so funktionieren, zwei unterschiedliche Anfragen an die MySQL-Datenbank in einer PHP-Datei?

Wenn man das richtig macht... Ja.


Ehrlich gesagt, verstehe ich nicht im geringsten was du da machst. Welche Ausgabe? Ich sehe nur den Versuch etwas in der DB-Tabelle "upzudaten". Aber woher kommen denn die Werte für $data? Fehlt da was? Kannst du mal den Rest zeigen und bitte ein paar Kommentare und Leerzeilen einfügen.

Schon mal soviel: Die Zählung des Feldindex bei mysql_field_name() beginnt bei 0. Wenn du $i mit 1 initialisierst, "vergißt" du das erste Feld. Das Gleiche gilt auch für das Array $data, das mit leeren eckigen Klammern, also per "Autoindex", erzeugt wird - das erste Element hat den Index 0.


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:06:19 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.