PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Logisches Problem Datenbank (http://www.selfphp.de/forum/showthread.php?t=23311)

Mindfanatix 01.06.2010 15:51:07

Logisches Problem Datenbank
 
Hallo zusammen,

da wäre ich also wieder und ich habe ein rein Logisches Problem - bzw. wüsste ich, wie ich es anstellen könnte, denke aber, dass es bestimmt eine bessere Möglichkeit gäbe.

Mein Problem ist folgendes:

Ich habe in der Datenbank mehrere Produkte und erwarte eine Lieferung - Sprich: Ich möchte gerne einen vorhandenen Wert von einer Vielzahl von Produkten mit einer jeweils spezifischen Menge erhöhen.


Ich habe mir das folgendermassen Vorgestellt:



PHP-Code:

<?PHP
 
if($_POST['flag'] == 1) {
       include (
"db.php");

// bis hier ist alles klar ;)

       
$sql="UPDATE `$tabelle` SET
                       LAGERMENGE = '"
.$_POST['LIEFERMENGE']."'+LAGERMENGE"                    
       
WHERE  `BESTELLNUMMER`= echo $line[BESTELLNUMMER];"

// Hier oben bin ich mir nicht ganz im klaren, wie ich das richtig machen könnte

       mysql_connect("
localhost",$dbuser,$dbpass) or die( "<H2>Verbindungsfehler</H2>" . mysql_error());
       mysql_select_db("
$dbname") or die( "<H2>Datenbankverbindungsfehler</H2>" . mysql_error()); 
       mysql_query($sql) or die( "
<H2>Abfragefehler</H2>" . mysql_error()); 
       $meldung = "
Angaben wurden Ge&auml;ndert";
       echo $meldung;
       echo "
<br>";
       echo "
<br>";
   }
else if(!$POST[flag])
      {
    include ("
db.php");
    mysql_connect("
localhost",$dbuser,$dbpass) or die( "<H2>Verbindungsfehler</H2>" . mysql_error());
    mysql_select_db("
$dbname") or die( "<H2>Datenbankverbindungsfehler</H2>" . mysql_error());
    $result = mysql_query("
SELECT FROM `$tabelleWHERE LIEFERANT='GVS Schachermann' ORDER BY `BESTELLNUMMERASC")or die( "<H2>Abfragefehler</H2>" . mysql_error()); ?>

HTML-Code:

<div id="container">
 <div id="header">
  <h1>LIEFERUNG VON GVS</h1>
  <a href="bestand.php">Zum Bestand</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">Neuen Eintrag erstellen</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">&nbsp;</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">&nbsp;</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">&nbsp;</a>&nbsp;&nbsp;&nbsp;
 </div>
 <div id="mainContent">
  <table id="tablelayout" border="1">
  <form action="

PHP-Code:

<? echo $PHP_SELF; ?>

HTML-Code:

" method="post">

<!-- BIS HIER IST AUCH ALLES OK -->

        <input type="hidden" name="flag" value="1" />
        <input type="hidden" name="AKTUALISIERUNG" value="

PHP-Code:

<?php date("d.m.Y"); ?>

HTML-Code:

" />

<!-- Kann ich so eine Aktualisierung ansprechen ? -->

    <tr bgcolor="#CCCCCC">
    <td>NAME&nbsp;&nbsp;</td>
    <td>AKTUELL IM LAGER&nbsp;&nbsp;</td>
    <td>BESTELLNUMMER&nbsp;&nbsp;</td>
    <td>GELIEFERTE MENGE&nbsp;&nbsp;</td>
    </tr>

PHP-Code:

    <?
    while ($line = mysql_fetch_array($result)) {
        ?>

HTML-Code:

        <tr>
          <td id="ta">

PHP-Code:

<?PHP echo $line[NAME];?>

HTML-Code:

&nbsp;&nbsp;</td>
          <td id="ta">

PHP-Code:

<?PHP echo $line[LAGERMENGE];?>

HTML-Code:

&nbsp;&nbsp;</td>
          <td id="ta">

PHP-Code:

<?PHP echo $line[BESTELLNUMMER];?>

HTML-Code:

&nbsp;&nbsp;</td>
          <td id="ta"><input type="text" name="LIEFERMENGE"  value="

PHP-Code:

<? echo $_POST["LIEFERMENGE"]; ?>

HTML-Code:

"></td>
        </tr>

PHP-Code:

<?PHP
// und hier oben ist mein grosses Problem. Hier spreche ich gerade gar nix richtig an, und trotz alledem raucht mir der Kopf, wie ich es anstelle, dass die Variablen für den Jeweiligen Artikel richtig an die UPDATE-Funktion weitergegeben werden. Besonders Hier bräucht ich hilfe.

    
}
    echo 
$result;
    
mysql_free_result($result);
    
mysql_close();
    
?>

HTML-Code:

    <tr>
    <td><input type="submit" value="Eintragen" /></td>
    </tr>
    </form>
  </table>

PHP-Code:

<? } ?>


Hoffentlich seid Ihr nicht böse, wenn ich das gleich mit php und html gliederung eingetragen habe, auch wenn ich finde, dass es vielleicht etwas unübersichtlich wirkt.

Für Vorschläge bin ich offen und auch für jede optimierungsmöglichkeit.


Danke Euch allen schon mal herzlich im Vorraus

cortex 01.06.2010 16:24:06

AW: Logisches Problem Datenbank
 
Zitat:

Zitat von Mindfanatix (Beitrag 136809)
Hoffentlich seid Ihr nicht böse, wenn ich das gleich mit php und html gliederung eingetragen habe, auch wenn ich finde, dass es vielleicht etwas unübersichtlich wirkt.

sorry, es ist definitiv unübersichtlich bzw. unsinnig, zumal die codes nicht im sinne von mvc notiert sind. ich würde das ganze ggfs. noch einmal (übersichtlich und zusammenhängend) posten.

cx

Mindfanatix 02.06.2010 01:01:40

AW: Logisches Problem Datenbank
 
Zitat:

Zitat von cortex (Beitrag 136813)
bitte beachten: neues problem -> neuer thread.

Logisches Problem Datenbank

ps. bitte zukünftig auch einen ausagekräftigen thread-titel vergeben.

cx


Danke für den Hinweis und danke fürs Verschieben bzw. Erstellen eines neuen Thema's.

Da ich leider aus einem Grund den Beitrag nicht mehr verändern kann, poste ich hier nochmals alles zusammen ---> Sieht wirklich furchtbar aus, wenn man HTML und PHP separat bezeichnen will.

Hier also nochmal der Code im Ganzen (weiter unten sind die Teilstücke, welche mir sorgen machen, nochmals extra ausgeschrieben):

PHP-Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//DE" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>..:: CUBA LAGER ¦¦¦ LIEFERUNG GVS ::..</title>
<link href="css/layout.css" rel="stylesheet" type="text/css">
</head>

<body class="oneColElsCtrHdrView">
<?PHP
 
if($_POST['flag'] == 1) {
       include (
"db.php");
       
$sql="UPDATE `$tabelle` SET
                       LAGERMENGE = '"
.$_POST['LIEFERMENGE']."'                    
       WHERE  `BESTELLNUMMER`= echo $line[BESTELLNUMMER];"
;
       
mysql_connect("localhost",$dbuser,$dbpass) or die( "<H2>Verbindungsfehler</H2>" mysql_error());
       
mysql_select_db("$dbname") or die( "<H2>Datenbankverbindungsfehler</H2>" mysql_error()); 
       
mysql_query($sql) or die( "<H2>Abfragefehler</H2>" mysql_error()); 
       
$meldung "Angaben wurden Ge&auml;ndert";
       echo 
$meldung;
       echo 
"<br>";
       echo 
"<br>";
   }
else if(!
$POST[flag])
      {
    include (
"db.php");
    
mysql_connect("localhost",$dbuser,$dbpass) or die( "<H2>Verbindungsfehler</H2>" mysql_error());
    
mysql_select_db("$dbname") or die( "<H2>Datenbankverbindungsfehler</H2>" mysql_error());
    
$result mysql_query("SELECT * FROM `$tabelle` WHERE LIEFERANT='GVS Schachermann' ORDER BY `BESTELLNUMMER` ASC")or die( "<H2>Abfragefehler</H2>" mysql_error()); ?>
<div id="container">
 <div id="header">
  <h1>LIEFERUNG VON GVS</h1>
  <a href="bestand.php">Zum Bestand</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">Neuen Eintrag erstellen</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">&nbsp;</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">&nbsp;</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">&nbsp;</a>&nbsp;&nbsp;&nbsp;
 </div>
 <div id="mainContent">
  <table id="tablelayout" border="1">
  <form action="<? echo $PHP_SELF; ?>" method="post"> 
         <input type="hidden" name="flag" value="1" />
         <input type="hidden" name="AKTUALISIERUNG" value="<?php date("d.m.Y"); ?>" />
    <tr bgcolor="#CCCCCC">
     <td>NAME&nbsp;&nbsp;</td>
     <td>AKTUELL IM LAGER&nbsp;&nbsp;</td>
     <td>BESTELLNUMMER&nbsp;&nbsp;</td>
     <td>GELIEFERTE MENGE&nbsp;&nbsp;</td>
    </tr>
    <?
    while ($line = mysql_fetch_array($result)) {
        ?>
         <tr>
          <td id="ta"><?PHP echo $line[NAME];?>&nbsp;&nbsp;</td>
          <td id="ta"><?PHP echo $line[LAGERMENGE];?>&nbsp;&nbsp;</td>
          <td id="ta"><?PHP echo $line[BESTELLNUMMER];?>&nbsp;&nbsp;</td>
          <td id="ta"><input type="text" name="LIEFERMENGE"  value="<? echo $_POST[LIEFERMENGE]; ?>"></td>
         </tr>
        <?PHP
    
}
    echo 
$result;
    
mysql_free_result($result);
    
mysql_close();
    
?>
    <tr>
     <td><input type="submit" value="Eintragen" /></td>
    </tr>
    </form>
   </table>
   <? } ?>
   </div>
 <div id="footer">
  <a href="bestand.php">Zum Bestand</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">Neuen Eintrag erstellen</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">&nbsp;</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">&nbsp;</a>&nbsp;&nbsp;&nbsp;
  <a href="neu.php">&nbsp;</a>&nbsp;&nbsp;&nbsp;
 </div>
</div>
</body>
</html>



Sorgen bereitet mir vorallem, wie ich die Operation auf alle verschiedenen Zeilen der Datenbank anwenden kann.

Bekannt ist mir, wie ich dies bei einem einzelnen Wert einer Zeile oder auf mehrere Werte in einer Zeile Anwenden kann.

Rein von der Logik müsste ich pro Zeile der Datenbank ein eigenes Formular mit dem jeweiligen Query anlegen.

Jedoch fände ich das sehr aufwendig und wahrscheinlich wärs auch total verkehrt.

Immerhin habe ich es geschafft in zwei Wochen eine recht ordentliche Datenbank aufzubauen. fals wer interesse hat dürft Ihr Euch das auch gerne mal anschauen und mir auch darüber Rat erteilen : cubalager.webtec-srowig.ch/verwaltung/bestand.php

Doch nun komme ich leider nicht mehr weiter, da das leider meine Kenntnisse übersteigt und wende mich daher vertrauensvoll an Euch.

PS: Hier noch die Problematiken Hervorgehoben:


Kann man so etwas überhaupt in der Form erstellen?
PHP-Code:

$sql="UPDATE `$tabelle` SET
                       LAGERMENGE = '"
.$_POST['LIEFERMENGE']."'                    
       WHERE  `BESTELLNUMMER`= echo $line[BESTELLNUMMER];" 


Hier habe ich einfach das Problem, wie ich denn die Variable mit dem Richtigen Value ansprechen kann und wie ich überhaupt das Formular gescheit aufbauen soll.
PHP-Code:

<?
    while ($line = mysql_fetch_array($result)) {
        ?>
         <tr>
          <td id="ta"><?PHP echo $line[NAME];?>&nbsp;&nbsp;</td>
          <td id="ta"><?PHP echo $line[LAGERMENGE];?>&nbsp;&nbsp;</td>
          <td id="ta"><?PHP echo $line[BESTELLNUMMER];?>&nbsp;&nbsp;</td>
          <td id="ta"><input type="text" name="LIEFERMENGE"  value="<? echo $_POST[LIEFERMENGE]; ?>"></td>
         </tr>
        <?PHP
    
}
    echo 
$result;
    
mysql_free_result($result);
    
mysql_close();
    
?>

Danke schon mal für Eure Hilfe, die ich bisher immer sehr zu schätzen wusste ;)


Gruss

Mindfanatix

cortex 02.06.2010 07:37:52

AW: Logisches Problem Datenbank
 
Zitat:

Zitat von Mindfanatix (Beitrag 136818)
Danke für den Hinweis und danke fürs Verschieben bzw. Erstellen eines neuen Thema's.

bitteschön.

Zitat:

Zitat von Mindfanatix (Beitrag 136818)
Da ich leider aus einem Grund den Beitrag nicht mehr verändern kann

beiträge können nach erstellung nur ein paar minuten lang editiert werden, da wir in der vergangenheit leider sehr häufig hiermit zu kämpfen hatten:

Zitat:

Ändere Deine Beiträge (im Nachhinein) nicht dermaßen, dass der Thread zerrisssen wird
[quelle: forenregeln]

zu deinem problem:

Zitat:

Zitat von Mindfanatix (Beitrag 136818)
PHP-Code:

       WHERE  `BESTELLNUMMER`= echo $line[BESTELLNUMMER


1. was hast du damit vor? was soll das echo in einem sql-statement?
2. schau dir nochmal an, wie man mit arrays arbeitet, insbes. wie man sie anspricht.

cx

Mindfanatix 03.06.2010 16:22:17

AW: Logisches Problem Datenbank
 
Danke Cortex,

dass das Müll ist, was da stand ist mir klar (dachte ich könnte irgendwie ein Beispiel geben, wie ich das gerne hätte.)

Habe mir nun eine menge Gedanken gemacht und auch hier und da mal nachgeschaut und denke, ich hätte eine Möglichkeit, weiss aber nicht sie anzuwenden, da ich immer ins Leere laufe:


Hier mal nen Auszug:


Im folgende habe ich mal aufgeführ, wie ich mir vorstellen könnte die nötige Zuordnung für das SQL-Statement zu erstellen. (ist noch etwas gebastel drin mit "$eintrag" und ein Test mit "echo $_POST [LIEFERMENGE & ID];")
PHP-Code:

<?
    $eintrag = 1;
    while ( $line = mysql_fetch_array ( $result ) ) {
        ?>
        
        <tr>
        <td id="ta"><?php
        
echo $line [ID]?></td>
        <td id="ta"><?php
        
echo $eintrag;
        
?></td>
        <td id="ta"><?PHP
        
echo $line [NAME];
        
?>&nbsp;&nbsp;</td>
        <td id="ta"><?PHP
        
echo $line [LAGERMENGE];
        
?>&nbsp;&nbsp;</td>
        <td id="ta"><?PHP
        
echo $line [BESTELLNUMMER];
        
?>&nbsp;&nbsp;</td>
        <td id="ta"><input type="text" name="LIEFERMENGE"
            value="<?
        echo $_POST [LIEFERMENGE & ID];
        ?>"></td><?php
        $eintrag 
++;
        
?>


Dann Dachte ich mir in folgendem Script eine Lösung zu schaffen, wie ich das UPDATE automatisiert auf die verschieden Artikel anwenden kann: (eine Lösung hab ich im Script allerdings noch nicht.)

PHP-Code:

<?php
include ("db.php");
if (
EINTRAGEN == 1) {
    
mysql_query $sql) or die ( "<H2>FEHLER BEIM AUSF&Uuml;HREN DER OPERATION</H2>" mysql_error () );
    
$meldung "Die Lieferung wurde im Lager vermerkt";
    
$sql"UPDATE `$tabelle` SET
    LIEFERMENGE = '" 
$_POST ['LIEFERMENGE&ID'] . "'
       WHERE  `ID`='$ID'"
;
    echo 
$meldung;
}

Meine Idee zur lösung wäre zum Beispiel gewesen:

eine while-Schleife zu erstellen und dort folgendes zu generieren (Nur ein Beispiel (wird wohl nicht so das passende sein)):

PHP-Code:

$eintrag=1
while(
$eintrag){ 
  echo 
"UPDATE $tabelle SET ";
  echo 
$xyz;
  echo 
"=\""
  echo 
$xyz
  echo 
"\"";
  
$eintrag++; 


Allerdings bin ich nun am Punkt wo ich mir sagen muss, dass mir das grad alles gar nix bringt, weil ich nun wie gesagt ins Leere laufe.
Habe gerade einfach keinen Plan, wie ich dies zusammen verbinden könnte, damit das auch gescheit funktioniert.

Vielleicht ist dieser Ansatz aber auch so verquer, dass mir das alles gar nix bringt.

Bitte um aufklärung ;)

Danke

Gruss

Mindfanatix

vt1816 03.06.2010 18:26:58

AW: Logisches Problem Datenbank
 
Zitat:

Zitat von Mindfanatix (Beitrag 136845)
[..]
Bitte um aufklärung ;)

... darum solltest Du evtl. Deine Eltern bitten ;-)


So und nun wieder zum Thema/Problem zurück. Aus Deinem ganzen Geschreibsel werde ich nicht schlau. Kannst Du das auch noch mal abstrakt mit Worten darstellen? Denn ich glaube Du versuchst mit Kanonen auf Spatzen zu schießen, da Dir hier die grundlegenden Basics fehlen. Oder?

Mindfanatix 03.06.2010 19:11:53

AW: Logisches Problem Datenbank
 
Hallo vt1816,

ich bin da genau deiner Meinung, denn mir fehlen wirklich eine menge Grundlagen.
Ob ich mit Spatzen auf Kanonen schieße oder war es umgekehrt weiß ich nicht.

Aber hier erst mal, um was du mich gebeten hast:

folgende Grundlagen sind gegeben:
Lager X
- Produkt A
- Produkt B
- Produkt C

Dies ist der Ablauf:
Lieferant Y bringt Produkt A, B und C.
A, B und C wandern in Lager X.
Der Lagerbestand wird neu berechnet.



Hoffe du kannst damit was anfangen.
Im Grunde sind es um die 100 Artikel und Ziel ist es alle zusammen mit einer neuen Menge zu versehen.
Wenn ich hier weiterkomme kann ich das selbe umgekehrt für den Ausgang selber basteln.

Und nochmal zum Grundwissen: Ich gehöre leider zu den Menschen, welche durch ausprobieren und selber machen lernen. Da php allerdings doch recht komplex ist braucht's doch hin und wieder mal einen Denkanstoss oder Hilfe.

Danke jedenfalls, dass du dir die mühe machst, dir das ganze mal anzuschauen.

Gruß

Mindfanatix

vt1816 04.06.2010 09:32:18

AW: Logisches Problem Datenbank
 
Wie immer gibt es auch hier mehrere Lösungsansätze.

Aus meiner Sicht am einfachsten wäre: Du ließt alle Artikel aus Lager X aus der entsprechenden Datenbanktabelle aus, stellst die notwendigen Daten in Tabellenform in einem Formular dar und läßt das Feld "Menge" zu jedem Artikel (A, B, C) editierbar. Darin änderst Du bei Anlieferung die neu hinzugekommende Menge (neue Menge = alte Menge + gelieferte Menge) und schickst das Formular an die entsprechende Datenbanktabelle.

Hier sind natürlich auch noch Verfeinerungen möglich.

Mindfanatix 04.06.2010 10:49:38

AW: Logisches Problem Datenbank
 
Du sprichst mir aus der Seele,

so wollte ich das eigentlich auch verwirklichen.
Problematik hier für mich:

Wie änder ich denn nun mehrere Zeilen gleichzeitig?

Wie ich von einer Zeile mehrere Spalten änder ist ja kein Problem.
Aber das Ganze nun von einer Spalte in mehreren Zeilen?

Eine Zeile geht ja so:

PHP-Code:

<?php
mysql_query 
$sql ) or die ( "<H2>FEHLER BEIM AUSF&Uuml;HREN DER OPERATION</H2>" mysql_error () );
$sql "UPDATE `$tabelle` SET
                       PLU = '" 
$_POST ['PLU'] . "',
                    NAME = '" 
$_POST ['NAME'] . "',
                    EINHEIT = '" 
$_POST ['EINHEIT'] . "',
                    KATEGORIE = '" 
$_POST ['KATEGORIE'] . "',
                    PREIS = '" 
$_POST ['PREIS'] . "',
                    LAGERMENGE = '" 
$_POST ['LAGERMENGE'] . "',
                    LIEFERANT = '" 
$_POST ['LIEFERANT'] . "',
                    BESTELLNUMMER = '" 
$_POST ['BESTELLNUMMER'] . "',
                    COCKTAILPOSTEN = '" 
$_POST ['COCKTAILPOSTEN'] . "',
                    SAFTREGAL = '" 
$_POST ['SAFTREGAL'] . "',
                    COCKTAILSCHRANK = '" 
$_POST ['COCKTAILSCHRANK'] . "',
                    BARFACH1 = '" 
$_POST ['BARFACH1'] . "',
                    BARFACH2 = '" 
$_POST ['BARFACH2'] . "',
                    BARFACH3 = '" 
$_POST ['BARFACH3'] . "',
                    BARFACH4 = '" 
$_POST ['BARFACH4'] . "',
                    BARFACH5 = '" 
$_POST ['BARFACH5'] . "',
                    CORONAFACH1 = '" 
$_POST ['CORONAFACH1'] . "',
                    CORONAFACH2 = '" 
$_POST ['CORONAFACH2'] . "',
                    CORONAFACH3 = '" 
$_POST ['CORONAFACH3'] . "',
                    WEINREGAL = '" 
$_POST ['WEINREGAL'] . "',
                    KUEHLSCHRANKUKASSE = '" 
$_POST ['KUEHLSCHRANKUKASSE'] . "',
                    BARWANDREGAL = '" 
$_POST ['BARWANDREGAL'] . "',
                    KUEHLSCHRANKBARWANDREGAL = '" 
$_POST ['KUEHLSCHRANKBARWANDREGAL'] . "',
                    KUEHLSCHRANKKUECHE = '" 
$_POST ['KUEHLSCHRANKKUECHE'] . "',
                    KUECHE = '" 
$_POST ['KUECHE'] . "',
                    PERSONALKUEHLSCHRANK = '" 
$_POST ['PERSONALKUEHLSCHRANK'] . "',
                    TRESOR = '" 
$_POST ['TRESOR'] . "'
       WHERE  `ID`='$ID'"
;
?>

Nur, wie schreibe ich das nun anders für mehrere Zeilen?
Da steh ich wirklich auf dem Schlauch

Indyk 04.06.2010 11:00:24

AW: Logisches Problem Datenbank
 
Hallo Mindfanatix,

ich hab mir auf die schnelle nicht alles durchgelesen also hier noch ein hinweis der schon evtl. gefallen ist:
  • $_POST ungeprüft in statements verwenden ist ziemlich uncool und vor allem unsicher. (SQL Injections)

zu deinem problem mit mehreren zeilen:
in der WHERE Klausel gibst du doch an welche Zeilen zu bearbeiten möchtest, eine mögichkeit wäre :
Code:

WHERE ID IN (1, 2, 3, 4, 5)
damit würdest du 5 Zeilen auf einmal bearbeiten , natürlich hätten sie auch alle die selben werte.

Ich hoffe das hilft dir.


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

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