Zur Navigation

Datenbankabfragen Problem

1 Peter

Hallo liebe Forumgemeinde,

irgendwie komme ich nicht weiter mit meiner Datenbankabfrage.
Die Datenbank hat vier Felder:
breite( unique)
mitnehmer
halter
preis

Wenn ich als Beispielbreite 1300mm eingeben würde, sollten folgende Werte zurückgegeben werden:

mitnehmer = 3
halter = 3
preis = 107.00

Hier die Datenbankabfrage:
  // Datenbankabfrage
  
   $sqlab= "select breite, $mitnehmer, $halter, $preis from jalou"; 
   $sqlab .= " where breite like '" . $breite . "%'";

   $res = mysql_query($sqlab) OR die(mysql_error());
   $num = mysql_num_rows($res);
   if ($num==0) echo "keine passenden Datensätze gefunden". "<br>";

   while ($dsatz = mysql_fetch_assoc($res))
   {
      $preis = $dsatz["$preis"];
      $mitnehmer = $dsatz["$mitnehmer"];
      $halter = $dsatz["$halter"];      
         }
?>

Hier der Link zur Seite:
http://www.windeko.de/php/fokus01.php

Was habe ich falsch gemacht?
Für eure Hilfe Danke ich euch schon im voraus.

Viele Grüße
Peter

30.03.2008 16:19

2 Jörg Kruse

Wie nimmst du $breite denn auf? Dem Namen des Eingabefeldes entsprechend, sollte es wohl so aufgenommen werden:

$breite = $_POST['EinB'];

30.03.2008 17:46

3 Peter

Hallo Jörg,

wenn ich
$breite = $_POST['EinB'];
einsetze, haut es auch nicht hin.

Eingabe (EinB) = 1369 wird durch die Funktion "anz" in (breite) = 140 umgerechnet.

Wenn ich aber $breite = EinB setze überträgt er die 1369 und nicht die 140.

30.03.2008 18:27

4 Jörg Kruse

Tut mir leid, aber ich verstehe das Problem noch nicht ganz:

Was wird übertragen, und was sollte stattdessen übertragen werden?

Vielleicht postest du zum besseren Verständinis auch nochmal die relevanten Abschnitte, in welchen der Wert vor dem Absenden überarbeitet wird und in welchem dieser nach der Übertragung aufgenommen wird

30.03.2008 18:49 | geändert: 30.03.2008 18:49

5 Peter

Im grunde ist es genauso, wie bei der Jalousie-Geschichte.

Der Kunde gibt die Anlagenbreite in mm an. [Feld 'EinB']
Nach verlassen des Feldes wird die Funktion "anz()" den Wert aus 'EinB' in volle cm im zehner Raster umwandeln und in den Feld 'breite' eintragen.

In der Datenbank sind die Datensätze nach den Rasterbreiten eingeteil:

80,90,100 usw. bis 300.

Wenn das Feld einen Wert von z.B. 120 zugewiesen bekommt
soll es per Datenbankabfrage den Datensatz "120" zurück geben
Die "120" ist in desem Falle der Wert des Indexfeldes "breite" in der Datenbank.
Die drei anderen Werte der Felder(mitnehmer,halter,preis) sollen dann ausgegeben werden.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
 <title>Fokus</title>
 <?php
   include "connect.inc.php";
   ?>
</head>
<body>

<?php
  // lokale Variablen setzen
  $vars = array("EinB", "breite", "mitnehmer", "halter", "preis");
 
  foreach ($vars as $var)
    $$var = $_POST[$var];
 
  if ($sender)
    printf("Die Daten wurden von %s aus verschickt.",
           htmlentities($sender));
   // defaultwerte setzen        
   if (!isset($breite))
     $breite = '80';
   if (!isset($mitnehmer))
     $mitnehmer = '2';  
   if (!isset($halter))
     $halter = '2';  
   if (!isset($preis))
     $preis = '74.60';   
  // Datenbankabfrage
  $breite = $_POST['EinB'];
  
   $sqlab= "select breite, $mitnehmer, $halter, $preis from jalou"; 
   $sqlab .= " where breite like '" . $breite . "%'";

   $res = mysql_query($sqlab) OR die(mysql_error());
   $num = mysql_num_rows($res);
   if ($num==0) echo "keine passenden Datensätze gefunden". "<br>";

   while ($dsatz = mysql_fetch_assoc($res))
   {
      $preis = $dsatz["$preis"];
      $mitnehmer = $dsatz["$mitnehmer"];
      $halter = $dsatz["$halter"];      
         }
?>

<form name="fokus" action="fokus01.php" method="post">
<input type="hidden" name="sender" value="fokus01.php">
Breite in mm <input type="text"size="5" name="EinB" onblur="anz(this.value,this.name)" 
value="<?php
      printf("%s", htmlentities($EinB));
         ?>"/><br />

  Rasterbreite: <input name="breite" size="5"
    value="<?php
      printf("%s", htmlentities($breite));
         ?>"> in cm<br><br>
Tr&auml;ger <input type="text" size="5" name="halter"
    value="<?php
      printf("%s", htmlentities($halter));
         ?>"/><br />
  Mitnehmer: <input name="mitnehmer" size="5"
    value="<?php
      printf("%s", htmlentities($mitnehmer));
    ?>"> in cm<br><br>
 <?php
 echo "Der Grundpreis der Technik betr&auml;gt : " . $preis . " €";
 ?><br><br>
  <input type="submit" value="Grundpreis berechnen">
</form>
<script type="text/javascript">
var doc = document.fokus;

function anz(a,c){
d = c;
a = parseFloat(a.replace(/,/gi,'.'));
b = Math.ceil(a/100)*10;
if (b<=80){
     b=80;}
if (doc.EinB.getAttribute("name", 0) == d){
doc.breite.value = b;}

}
</script>

</body>
</html>

30.03.2008 19:24

6 Jörg Kruse

Nach verlassen des Feldes wird die Funktion "anz()" den Wert aus 'EinB' in volle cm im zehner Raster umwandeln und in den Feld 'breite' eintragen.

Dann wäre folgende Aufnahme wohl korrekt:
$breite = $_POST['breite'];

... was aber wohl schon durch diesen Abschnitt gewährleistet ist:
// lokale Variablen setzen
  $vars = array("EinB", "breite", "mitnehmer", "halter", "preis");
 
  foreach ($vars as $var)
    $$var = $_POST[$var];

Lass dir mal den Wert nach der Übertragung (vor der SQL-Abfrage) ausgeben:
echo $_POST['breite'];

.. ob dieser dort korrekt angekommen ist. Daran kann man dann sehen, ob der Fehler vor oder nach der Übertragung zu suchen ist

30.03.2008 20:14

7 Rudy

Die "120" ist in desem Falle der Wert des Indexfeldes "breite" in der Datenbank.
Die drei anderen Werte der Felder(mitnehmer,halter,preis) sollen dann ausgegeben werden.

Dann verstehe ich bei diesem Select Bahnhof.
$sqlab= "select breite, $mitnehmer, $halter, $preis from jalou"; 
   $sqlab .= " where breite like '" . $breite . "%'";

1) Warum like?
2) Warum $mitnehmer, $halter, $preis?

30.03.2008 20:35

8 Peter

@ Jörg
Lass dir mal den Wert nach der Übertragung (vor der SQL-Abfrage) ausgeben:
echo $_POST['breite'];

habe ich gemacht, es werden Werte für breite und die defaultwerte von mitnehmer und halter übergeben.

Hallo Rudy,
1) Warum like?
2) Warum $mitnehmer, $halter, $preis?
zu 1, bei der Jalousie hatte es nur so funktioniert, da suchte ich aber auch nur ein Feld von den ganzen.
zu 2, das sind die Felder, von den ich die Werte benötige.

30.03.2008 21:41 | geändert: 30.03.2008 21:48

9 Jörg Kruse

es werden Werte für breite und die defaultwerte von mitnehmer und halter übergeben.

Wenn die Werte korrekt übertragen wurden, liegt das Problem wohl in der SQL-Abfrage. Diesbezüglich hat Rudy ja bereits Hinweise geliefert. Du kannst dir einen möglichen Fehler der SQL-Abfrage auch ausgeben lassen (nach der SQL-Abfrage):

echo mysql_error();

zu 2, das sind die Felder, von den ich die Werte benötige.

Sind die Bezeichner der Felder denn identisch mit den Werten der betreffenden Variablen? Andernfalls sind die "$" überflüssig

30.03.2008 22:27 | geändert: 30.03.2008 22:29

10 Rudy

Sind die Bezeichner der Felder denn identisch mit den Werten der betreffenden Variablen? Andernfalls sind die "$" überflüssig

Wenn nicht falsch...

30.03.2008 22:42