CnC Foren

CnC Foren (http://www.cncforen.de/index.php)
-   Tech-Support / Tech-Talk (http://www.cncforen.de/forumdisplay.php?f=26)
-   -   php/MySQL Experten: Wie verarbeite ich die Daten weiter? (http://www.cncforen.de/showthread.php?t=44585)

Sven 19-03-2004 11:33

php/MySQL Experten: Wie verarbeite ich die Daten weiter?
 
Ich hab folgendes kleines Script mit dem ich Daten aus einer MySQL Tabelle in ein Dropdown einlesen lasse:
PHP-Code:

<?include("data.php");
$con_dat=@MYSQL_CONNECT($MySQL_Host, $MySQL_User, $MySQL_Passw);
mysql_select_db($db,$con_dat);
$query = "SELECT * FROM getraenke ORDER BY kategorie";
$result = mysql_query($query);
$number = mysql_numrows($result);
print "Kategoriewahl:<p>    
<form action=\"kat_test.php\" method=\"post\">
<select name=\"ID1\"><option value=\"\">Wähle eine Kategorie</option>";
for ($i=0; $i<$number; $i++) {     
$ID = mysql_result($result,$i,"PRIMARY");     
$bez = mysql_result($result,$i,"bezeichnung");     
$txt = mysql_result($result,$i,"text");     
$preis = mysql_result($result,$i,"preis");     
$kat = mysql_result($result,$i,"kategorie");     
print "<option value=\"ID1\">$kat: $bez | $txt | $preis</option>";
}
print "</select><input type=\"submit\" value=\"Absenden\" name=\"submit\">
</form>";mysql_close();
?>

So weit so gut.
Nuir bin ich leider absolut planlos wie ich herausfinde was der Anwender ausgewählt hat und wie ich diese Daten weiterverwenden kann....

Ok, ich bin in der Hinsicht der Volln00b :D

almhirte 19-03-2004 13:37

Also ich denke das da in deinem script bereits ein kleiner Fehler ist.

Das select element hast du ID1 genannt. Über diesen Namen kannst du es dann später als Variable benutzen.

Die option elemente haben als value das was $ID enthält.
Da ist n kleiner Fehler bei dir.
Bei dir steht:
PHP-Code:

print "<option value=\"ID1\">$kat$bez | $txt | $preis</option>"

Es müsste glaub ich etwa so aussehen:
PHP-Code:

echo '<option value="'.$ID.'">'.$kat.': '.$bez.' | '.$txt.' | '.$preis.'</option>'

Dann kriegt jede option einen eindeutigen Wert zugewiesen. Nämlich die ID die bei dir glaub ich der primary key ist. Dieser ist später das was der user ausgewählt hat.
In deiner formular-ziel datei (kat_test.php) kannst du dann etwa so damit umgehen
PHP-Code:

if (isset($ID1))//ID1 ist die gesamte combobox (dropdown)
{
     
//der wert von ID1 ist dann das 
     //was bei dem jeweiligen option als value eingetragen wurde.
     //du musst dir also dein internes mapping für
     //die einzelnen optionen merken



Ich hoffe das ist irgendwie verständlich :crazy:

Sven 19-03-2004 13:40

Jupp, werd ich heute Abend ausprobieren ;) :thx: schonmal

se7en 19-03-2004 14:03

endlich mal ne Frage für mich ;) und da ist sie schon beantwortet :(

Aber ok, eins hab ich noch. Es kann sein, das die Methode nicht funktioniert, d.h. Du die Variable $ID ohne Wert ist. Das hängt dann mit der Option "Register Globals" zusammen (ist ne Einstellung der PHP installation auf dem PHP-Server/Rechner). Dann musst Du $_POST["ID"] verwenden um an den Wert der Variable zu kommen (_POST für die method POST, _GET für method get).

und noch was:
PHP-Code:

 echo "HTML-Text $Variable und dann noch mehr Text"

funktioniert auch :)

Sven 19-03-2004 14:08

Wie ich das nachher umstricke etc. ist erstmal unwichtig.
Stehen hab ich ein Formular zur Dateneingabe, ein Script zum Auslesen und eben dieses Dropdown.
Ziel ist es über das Dropdown einen Datensatz gezielt anzuwählen um ihn dann in einem weiteren Formular editieren zu können.
Damit wären meine Ansprüche an mein erstes Superminiwinzig php/MySQL Projektchen auch schon erfüllt ;)

se7en 19-03-2004 14:13

ein anderer Vorschlag zur For-Schleife:
PHP-Code:

 $query mysql_query("SELECT * FROM Tabelle");
while (
$row mysql_fetch_row($query))
  {
  echo 
"Spalte1" $row[0] . "\n";
  echo 
"Spalte2" $row[1] . "\n";
  ...
  } 


(Wenn Du die Spaltennamen angeben möchtest, ist zu empfehlen wenn später mal die Scripte geändern müssen!):
PHP-Code:

 $query mysql_query("SELECT * FROM Tabelle");
while (
$row mysql_fetch_array($sqlMYSQL_ASSOC))
  {
  echo 
"Spaltenname1" $row["Spaltenname1"] . "\n";
  echo 
"Spaltenname2" $row["Spaltenname2"] . "\n";
  ...
  } 


Sven 19-03-2004 14:39

Ich lerne gerne was dazu ;)

almhirte 19-03-2004 15:06

Zitat:

Zitat von se7en
und noch was:
PHP-Code:

 echo "HTML-Text $Variable und dann noch mehr Text"

funktioniert auch :)

Das ist wohl wahr. Aber bei:
PHP-Code:

 echo "HTML-Text ".$Variable." und dann noch mehr Text"

Sieht man die verwendeten Variablen sofort. Mir ist schon öfter passiert das ich sonst mal eine übersehe wenn so'n String länger wird.

EEBKiller 19-03-2004 15:12

PHP-Code:

<?php
    
require("data.php"); 
    
$con_dat=@mysql_connect($MySQL_Host$MySQL_User$MySQL_Passw); 
    
mysql_select_db($db$con_dat); 
    
$query "SELECT * FROM getraenke ORDER BY kategorie"
    print 
"Kategoriewahl:<br />\r\n";
    print 
"<form action=\"kat_test.php\" method=\"post\" name=\"select\">\r\n";
    print 
"  <select name=\"ID\" onchange=\"select.submit();\">";
    print 
"    <option>Wähle eine Kategorie</option>\r\n"
    while ( 
$result mysql_fetch_array($query)) {      
        print 
"    <option value=\"$result[PRIMARY]\">$result[kategorie]$result[bezeichnung] | $result[text] | $result[preis]</option>\r\n"
    } 
    print 
"  </select>\r\n";
    print 
"  <input type=\"submit\" value=\"Absenden\" name=\"submit\">\r\n";
    print 
"</form>";
    
mysql_close(); 
?>

Und die kat_test.php

PHP-Code:

<?php
    
if (isset($_POST['ID'])) {
        require(
"data.php"); 
        
$con_dat=@mysql_connect($MySQL_Host$MySQL_User$MySQL_Passw); 
        
mysql_select_db($db$con_dat); 
        
$query "SELECT * FROM getraenke WHERE PRIMARY = $_POST[ID]"
        
$result mysql_fetch_array($query);
// Hier kommt der Teil hin, wenn eine Kategorie ausgewählt wurde.    
// Deine Daten stehen dir nun als $result[preis] usw zur verfügung ;)
    
} else {
// Hier kommt der Teil hin, wenn der User zu faul war, ne Kategorie
// zu wählen und einfach nur auf Submit gedrückt hat
    
}
?>

Für fehlende ; übernehme ich keine Haftung, das passiert mir andauernd :D


@ almhirte: Passiert mir relativ selten, dass ich ne Variable in so nem String übersehe. Vorallem arbeite ich überwiegend mit Arrays und die [] fallen einem gewöhnlicherweise sofort ins Auge :D


€DIT @ Sven : Ich würde dir dringend raten, deine spalte PRIMARY in id umzutaufen. Ich weiss nämlich nicht genau, ob PRIMARY nicht sogar ein reserviertes Schlüsselwort ist ;)

Sven 19-03-2004 15:53

Herzlichen Dank nochmal.... blöderweise kann ich jetzt gerade nicht das machen wozu ich die größte Lust hätte: Es direkt ausprobieren. :( :cry:

Also werd ich gegen später alle Vorschläge und Lösungen testen ;)

CaptureX 19-03-2004 17:18

Zitat:

Zitat von se7en
Es kann sein, das die Methode nicht funktioniert, d.h. Du die Variable $ID ohne Wert ist. Das hängt dann mit der Option "Register Globals" zusammen (ist ne Einstellung der PHP installation auf dem PHP-Server/Rechner).

Sollte dies so sein...kannst du aber mal in der php.ini (ich glaube im Windows-Ordner) "Register Globals" auf ON setzen. ;)

PHP-Code:

You should do your best to write your scripts so that they do not require
register_globals to be on;  Using form variables as globals can easily lead
to possible security problems, if the code is not very well thought of.
register_globals On 


:cu:

EEBKiller 19-03-2004 20:33

wer proggt heute noch basierend auf register_globals = on ??? :o: :D

Sven 20-03-2004 15:35

Sodele, jetzt hab ich das so weit laufen ;)
PHP-Code:

<?
// dropdown.php
    require("data.php");
    $con_dat=@mysql_connect($MySQL_Host, $MySQL_User, $MySQL_Passw);
    mysql_select_db($db, $con_dat);
    $query = mysql_query("SELECT * FROM getraenke WHERE kategorie = 'Hauptgerichte'");
    print "Bitte wählen Sie einen Datensatz:\r\n";
    print "<form action=\"kat_test.php\" method=\"post\" name=\"select\">\r\n";
    print "<select name=\"ID\" onchange=\"select.submit();\">";
//    print "    <option>Wähle eine Kategorie</option>\r\n";
    while ($result = mysql_fetch_array($query)) {
        print "<option value=\"$result[0]\"> $result[4]: $result[1] | $result[2] | $result[3]</option>\r\n";
    }
    print "  </select>\r\n";
    print "  <input type=\"submit\" value=\"Absenden\" name=\"submit\">\r\n";
    print "</form>";
    mysql_close();
?> 
<div><a href="ausgabe.php">Daten anzeigen (Hauptgerichte)</a> | <a href="dropdown.php">Datensatz ändern</a> | <a href="form.html">Eingabeformular</a></div>

PHP-Code:

<form action="aendern.php" method="post">
<table>
    <tr>
        <td>ArtNo.:</td><td>Bezeichnung</td><td>Beschreibung</td><td>Preis</td><td>Kategorie</td>
    </tr>
    <tr>
<?php
// kat_test.php 
    
if (isset($_POST['ID'])) {
        require(
"data.php"); 
        
$con_dat=@mysql_connect($MySQL_Host$MySQL_User$MySQL_Passw); 
        
mysql_select_db($db$con_dat); 
        
$query mysql_query("SELECT * FROM getraenke WHERE ArtNo = $_POST[ID]"); 
        
$result mysql_fetch_array($query);
        print 
"<input type=\"hidden\" name=\"ArtNo\" value=\"$result[0]\">";
        print 
"<td>$result[0]</td>";
        print 
"<td><input name=\"bezeichnung\" value=\"$result[1]\"></td>";
        print 
"<td><input name=\"beschreibung\" value=\"$result[2]\"></td>";
        print 
"<td><input name=\"preis\" value=\"$result[3]\"></td>";
        print 
"<td><input name=\"kategorie\" value=\"$result[4]\"></td>"

else { 
    print 
"Sie haben keinen Eintrag gewählt";
    } 
?>
    </tr>
</table>
<table>
 <tr>
 <td>
   <input type="submit" value=" Absenden ">
   <input type="reset" value=" Abbrechen">
  </td>
 </tr>
</table>
<div><a href="ausgabe.php">Daten anzeigen (Hauptgerichte)</a> | <a href="dropdown.php">Datensatz ändern</a> | <a href="form.html">Eingabeformular</a></div>
</form>

PHP-Code:

<?
// aendern.php
include("connect.php");
if(!$bezeichnung || !$beschreibung || !$preis || !$kategorie ) {
        echo "Ein Feld wurde leer gelassen!";
        exit;
}
else {
        $sql = "UPDATE getraenke SET bezeichnung='$bezeichnung', text='$beschreibung', preis='$preis', kategorie='$kategorie' WHERE ArtNo = $ArtNo ";
                include("send_sql.php");
}

if ($res=send_sql($db, $sql)) {
        echo "Datensatz geändert";
    }
mysql_close;
?>
<div><a href="ausgabe.php">Daten anzeigen (Hauptgerichte)</a> | <a href="dropdown.php">Datensatz ändern</a> | <a href="form.html">Eingabeformular</a></div>

Vielen Dank bis da hin :thx:

Nu mal weiter gefragt:
Wie bekomm ich das eigentlich hin das alles auf eine Seite zu packen?

redroach 20-03-2004 16:35

du lässt das formular einfach die skriptdatei selbst nochmal aufrufen.
sprich:

PHP-Code:

<?
// dropdown.php
    require("data.php");
    $con_dat=@mysql_connect($MySQL_Host, $MySQL_User, $MySQL_Passw);
    mysql_select_db($db, $con_dat);
    $query = mysql_query("SELECT * FROM getraenke WHERE kategorie = 'Hauptgerichte'");
//######## hier der test, ob der 'abschicken'-button gedrückt wurde ######
if ($_POST[submit])  /*###weiss nicht mehr genau, welcher wert da übermittelt
                                   wird, evtl. anderer test######*/
{
    //
    //hier deine bearbeitung der tabelle
    //
}
else
{                       //###falls nicht 'abschicken'gedrückt wurde, zeige formular####
    print "Bitte wählen Sie einen Datensatz:\r\n";
//######hier dropdown.php im formular rufen############
    print "<form action=\"dropdown.php\" method=\"post\" name=\"select\">\r\n";
    print "<select name=\"ID\" onchange=\"select.submit();\">";
//    print "    <option>Wähle eine Kategorie</option>\r\n";
    while ($result = mysql_fetch_array($query)) {
        print "<option value=\"$result[0]\"> $result[4]: $result[1] | $result[2] | $result[3]</option>\r\n";
    }
    print "  </select>\r\n";
    print "  <input type=\"submit\" value=\"Absenden\" name=\"submit\">\r\n";
    print "</form>";
}
    mysql_close();
?> 
<div><a href="ausgabe.php">Daten anzeigen (Hauptgerichte)</a> | <a href="form.html">Eingabeformular</a></div>


Sven 24-03-2004 16:08

Ich mach einfach hier mal weiter.....
PHP-Code:

<table class="karte" width="75%">
<?
    require("admin/data.php");
    $con_dat=@MYSQL_CONNECT($MySQL_Host, $MySQL_User, $MySQL_Passw);
    mysql_select_db($db,$con_dat);
    $result=mysql_query("SELECT * FROM speisen WHERE uebersicht = 'ueber'");
    $kats=mysql_query("SELECT DISTINCT kategorie FROM speisen ORDER BY 'kategorie'");
    // Zur Kontrolle:
        $num_entries_kat = mysql_num_rows($kats);
        $num_entries_speisen = mysql_num_rows($result);
        echo "Kat:".$num_entries_kat."<br>";
        echo "Speisen:".$num_entries_speisen."<br>";
    // Ende Kontrolle
    while($kateg=mysql_fetch_array($kats)) {
        print "<tr><td class=\"teiler\" colspan=\"4\">".$kateg['kategorie']."</td></tr>";
        while($liste=mysql_fetch_array($result)) {
            if($liste[4]==$kateg['kategorie']) {
                print "<tr><td>".$liste[1]."</td><td>".$liste[2]."</td><td>".$liste[3]."</td><td>".$liste[4]."</tr>";
            }
        }
    }
?>
</table>

Das soll für jede Kategorie alle Speisen anzeigen deren Kategorie der aktuellen Kategorie entspricht und bei der in der Spalte 'uebersicht' der Wert 'ueber' steht.
Das funzt aber leider nur für die erste Kategorie, dann ist Feierabend :cry:

Ansehen könnt ihr euch das Ergebnis hier:
http://www.berliner-hof.net/ausgabe_ueber.php

se7en 24-03-2004 16:37

ich hab zwar keine Ahung wie die Tabelle "Speisen" aussieht, aber ich denke so geht es und Du hast dir ein SQL-Statement gespart: (iss untestet ;))

PHP-Code:

$kats=mysql_query("SELECT * FROM speisen ORDER BY 'kategorie'";
$temp="";
while(
$kateg=mysql_fetch_array($kats)) { 
  if(
$temp!=$kateg['kategorie']) {
    print 
"<tr><td class=\"teiler\" colspan=\"4\">".$kateg['kategorie']."</td></tr>"; }
  
$temp=$kateg['kategorie'];
  print 
"<tr><td>".$kateg[1]."</td><td>".$kateg[2]."</td><td>".$kateg[3]."</td><td>".$kateg[4]."</tr>"



Sven 24-03-2004 17:37

Hmm, nee, funzt nicht.
Mit der Version bekomm ich alle Speisen angezeigt - aber ohne jegliche Überschrift....

Tabelle:
Code:

ArtNo        |        Bezeichnung        |        Text        |        Preis        |        Kategorie        |        Uebersicht
1        |        Schnitzel        |        Wiener        |        1.50        |        Haupt                |        ueber
2        |        Wurst                |        Bock        |        0.20        |        Happen                |       
3        |        Suppe                |        Lecker        |        1.00        |        Suppen                |        ueber


EEBKiller 24-03-2004 19:21

Zitat:

Zitat von Sven
[...]Das funzt aber leider nur für die erste Kategorie, dann ist Feierabend :cry:
http://www.berliner-hof.net/ausgabe_ueber.php

Weil SQL grunsätzlich nicht 2 Querys gleichzeitig verarbeitet. Du musst zuerst einen in ne Var Puffern und dann das gepufferte mit nem foreach wieder auslesen und den 2. Query starten ;)

PHP-Code:

<table class="karte" width="75%">
<?php
        
require("admin/data.php");
        
$con_dat = @MYSQL_CONNECT($MySQL_Host$MySQL_User$MySQL_Passw);
        
mysql_select_db($db,$con_dat);
        
$kats mysql_query("SELECT DISTINCT kategorie FROM speisen ORDER BY 
kategorie"
);
        
$kat_data = array();
// Puffert erstmal die Kategorien
        
while($kat_temp mysql_fetch_array($kats)) {          
            
$kat_data[] = $kat_temp;
        } 
// Ruft die Kategorie wieder auf und dann dazu die Speisen
        
foreach($kat_data as $elem) {
            
$result mysql_query("SELECT * FROM speisen WHERE uebersicht = 'ueber' AND kategorie = '$elem[kategorie]'");
            print 
"<tr><td class=\"teiler\" colspan=\"4\">".$elem['kategorie']."</td></tr>";
            while(
$liste mysql_fetch_array($result)) {
                print 
"<tr><td>".$liste[1]."</td><td>".$liste[2]."</td><td>".$liste[3]."</td><td>".$liste[4]."</tr>";
            }
        }
?>
</table>

Sollte schon eher funzen, allerdings hab ichs ned getestet ;)


€DIT: "DISTINCT" is goil, allerdings braucht man es nur, wenn man seine DB nicht normalisiert hat....

Sven 24-03-2004 23:10

Funzta wunderherrlich :freu: :thx:

se7en 26-03-2004 15:46

Zitat:

Zitat von Sven
Hmm, nee, funzt nicht.
Mit der Version bekomm ich alle Speisen angezeigt - aber ohne jegliche Überschrift....

ups, öh... die Schleife hab ich ja auch falsch... naja funzt ja anders schon längst :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:18 Uhr.

Powered by vBulletin Version 3.7.3 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.