Seite 2 von 2

Verfasst: Di 05.Dez, 2006 10:30
von oxpus
Du solltest schon die Feldinhalte der jeweiligen Auswahl als Schlüssel angeben. Damit wäre es einfacher, nach bestimmten Namen, Maschinentypen, etc. zu suchen.
Und daraus kommen ja dann erst die IDs für die Vergleichsliste.

Verfasst: Di 05.Dez, 2006 10:40
von Holger
Danke oxpus, das meinte ich ... also eher so:

Code: Alles auswählen

<form action="visa.php" method="post"> 
Tillverkare&nbsp; 
<select name="top5" size="3" multiple> 
<?php 
$result = mysql_query("SELECT DISTINCT tillverkare FROM maskinlista ORDER BY tillverkare ASC"); 
  while ($r = mysql_fetch_array($result)) 
  { 
    echo('<option value=' . $r['tillverkare'] . '>'); 
    echo($r['tillverkare']); 
    echo('</option>'); 
  } 
?> 
</select> 


Maskintyp&nbsp; 
<select name="top5" size="3" multiple> 
<?php 
$result = mysql_query("SELECT DISTINCT maskintyp FROM maskinlista ORDER BY maskintyp ASC"); 
  while ($r = mysql_fetch_array($result)) 
  { 
    echo('<option value=' . $r['maskintyp'] . '>'); 
    echo($r['maskintyp']); 
    echo('</option>'); 
  } 
?> 
</select> 


</form>
@Bootenks: es ist das erste Mal, dass ich "selber" programmiere. Ich kann das nicht! :wall:

EDIT: ich möchte das Ergebnis der Auswahl jetzt an start2.php weiterschicken. Ich habe in visa.php ja dieses eingebaut:

Code: Alles auswählen

$vergleich = (isset($HTTP_POST_VARS['vergleich'])) ? $HTTP_POST_VARS['vergleich'] : array(); 
$sql_where_ids = ''; 
if(sizeof($vergleich)) 
{ 
for ($i=0; $i<sizeof($vergleich); $i++) 
{ 
$sql_where_ids .= ($sql_where_ids != '') ? ', ' . $vergleich[$i] : $vergleich[$i]; 
} 
} 


if ($sql_where_ids) 
{ 
$sql_where_ids = ' WHERE id IN (' . $sql_where_ids . ') ';
}
kann ich was ähnliches wieder verwenden?
http://www.gremminger.se/service/compare/start1.php
http://www.gremminger.se/service/compare/start2.php

Verfasst: Di 05.Dez, 2006 12:41
von AmigaLink
(aso da hab mich vertippselt... DISTINCT)
*LOL* Das passiert mir auch immer. ^2
Schön das ich da nicht der einzige bin. :D

Verfasst: Di 05.Dez, 2006 13:41
von oxpus
@Holger
Die Auswahllisten (select) haben jetzt den gleichen Namen

Code: Alles auswählen

name="top5"
Das ist schlecht, da dieser Name als Parameter an das Script gesendet wird.
Daher beide Listen unterschiedlich benennen.
Und in script2.php kannst Du dann diesen Wert übernehmen:

Code: Alles auswählen

$top5 = (isset($HTTP_POST_VARS['top5'])) ? $HTTP_POST_VARS['top5'] : '';
(Als Beipsiel).
Und $top5 wäre dann als Bedingung in die Abfrage einzusetzen, so daß dieses hier in etwas rauskäme:

Code: Alles auswählen

$result = mysql_query("SELECT DISTINCT maskintyp FROM maskinlista WHERE feldname LIKE ('" . $top5 . "%') ORDER BY maskintyp ASC");
LIKE als Vergleich und das Prozent hinter dem Wert sind hier besser, damit bei nicht ausgewähltem Feld (Wert ist leer und es steht dann nur % da!) eben alle Daten gezogen werden. Was dann ja auch so sein sollte...

Verfasst: Mi 06.Dez, 2006 12:48
von Holger
Hi! Das klappt sehr gut! Danke!
NUR: ich kann keine Mehrfachauswahl treffen ...
http://www.gremminger.se/service/compare/start1.php

EDIT: eine Idee was ich tun muss um Mehrfachauswahl zu ermöglichen?

Ausserdem:
Ich habe die Felder Gewicht (vikt und vikt2) in INT umgewandelt.
Gibt man nun in
http://www.gremminger.se/service/compare/start1.php
"15000" ein bekommt man schön zwei Maschinen angezeigt, die man dann auch vergleichen kann.
NUR: ich kann nicht mehr NUR Åkerman auswählen und alles andere unberührt lassen, dann wird nichts angezeigt.
Ich habe damit versucht:

Code: Alles auswählen

$Tillverkare = (isset($HTTP_POST_VARS['Tillverkare'])) ? $HTTP_POST_VARS['Tillverkare'] : '';
$Maskintyp = (isset($HTTP_POST_VARS['Maskintyp'])) ? $HTTP_POST_VARS['Maskintyp'] : '';
$Vikt = (isset($HTTP_POST_VARS['Vikt'])) ? $HTTP_POST_VARS['Vikt'] : '';
und

Code: Alles auswählen

$result = mysql_query("SELECT DISTINCT * FROM maskinlista WHERE tillverkare LIKE ('" . $Tillverkare . "%') AND maskintyp LIKE ('" . $Maskintyp . "%') AND vikt < ('" . $Vikt . "%') AND vikt2 > ('" . $Vikt . "%') ORDER BY tillverkare ASC");
Ich vermute mal in dem Letzteren steckt ein Fehler?!?!?! Die ANDs sollen ja nur berücksichtigt werden, wenn in dem Feld Vikt etwas eingegeben wurde, wie bei den zwei anderen Feldern auch ...

Verfasst: Mi 06.Dez, 2006 16:22
von oxpus
1. Mehrfachauswahl wäre hier schlecht, denn die Auswahl landet ja komplett in der SQL-Abfrage.
Oder man müsste auch hier wieder alle Werte einzeln auslesen und in einen Bedingungsstring packen.
Man man man, wird ja richtig zur Arbeit hier...

2. Klammere die letzten beiden nochmal ein, damit diese erst ausgewertet werden und dann der Rest der Bedingungen. Und dazu musst Du das Prozentzeichen da rausnehmen, da $vict ja eine Zahl und ein String ist!

Verfasst: Mi 06.Dez, 2006 16:29
von Holger
Meinst Du so?

Code: Alles auswählen

$result = mysql_query("SELECT DISTINCT * FROM maskinlista WHERE tillverkare LIKE ('" . $Tillverkare . "%') AND maskintyp LIKE ('" . $Maskintyp . "%') AND (vikt < ('" . $Vikt . "') AND vikt2 > ('" . $Vikt . "')) ORDER BY tillverkare ASC");
Ist das richtig geklammert so?

Verfasst: Do 07.Dez, 2006 13:48
von oxpus
Yepp, so meinte ich das.

Verfasst: Do 07.Dez, 2006 13:55
von Holger
Klappt trotzdem nicht. :-(
Ohne Gewicht (Vikt) bekomme ich nichts angezeigt ...

Verfasst: Do 07.Dez, 2006 14:00
von oxpus
Versuchs mal so:

Code: Alles auswählen

$Vikt = (!$Vikt) ? '' : ' AND vikt < ('" . $Vikt . "') AND vikt2 > ('" . $Vikt . "') ';
$result = mysql_query("SELECT DISTINCT * FROM maskinlista WHERE tillverkare LIKE ('" . $Tillverkare . "%') AND maskintyp LIKE ('" . $Maskintyp . "%') " . $Vikt . " ORDER BY tillverkare ASC");

Verfasst: Do 07.Dez, 2006 14:07
von Holger
Weisse Seite :-(

Verfasst: Do 07.Dez, 2006 14:12
von oxpus

Code: Alles auswählen

$Vikt_sql = (!$Vikt) ? '' : "AND vikt < $Vikt AND vikt2 > $Vikt"; 
$result = mysql_query("SELECT DISTINCT * FROM maskinlista WHERE tillverkare LIKE ('$Tillverkare%') AND maskintyp LIKE ('$Maskintyp%') $Vikt_sql ORDER BY tillverkare ASC");

Verfasst: Do 07.Dez, 2006 14:16
von Holger
Jaaaaaaaaaaaaaaaaaaa!!! :hurra:
Wenn ich jetzt noch Mehrfachauswahl bekommen könnte ...

Verfasst: Do 07.Dez, 2006 14:23
von oxpus
Dafür wäre wirklich eine Menge mehr zu machen...

Verfasst: Mo 18.Dez, 2006 16:20
von Holger
Es geht weiter ^a
Ich habe nun ein paar verschiedene Typen: Bagger und Radlader.
Manche Zeilen sollen nur für Radlader angezeigt werden, manche nur für Bagger.
Ich habe das so gelöst:

Code: Alles auswählen

<?php
$vergleich = (isset($HTTP_POST_VARS['vergleich'])) ? $HTTP_POST_VARS['vergleich'] : array(); 
$sql_where_ids = ''; 
if(sizeof($vergleich)) 
{ 
for ($i=0; $i<sizeof($vergleich); $i++) 
{ 
$sql_where_ids .= ($sql_where_ids != '') ? ', ' . $vergleich[$i] : $vergleich[$i]; 
} 
} 


if ($sql_where_ids) 
{ 
$sql_where_ids = ' WHERE id IN (' . $sql_where_ids . ') ';
}
$result = mysql_query("SELECT * FROM maskinlista $sql_where_ids ORDER BY id ASC");
  while ($r = mysql_fetch_array($result)) 
  {
    if ($r['maskintyp'] != 'Hjullastare') 
    {
    echo('<tr><td class="tdborder">Räckvidd</td>');
    }
  } 
?>

<?php
$vergleich = (isset($HTTP_POST_VARS['vergleich'])) ? $HTTP_POST_VARS['vergleich'] : array(); 
$sql_where_ids = ''; 
if(sizeof($vergleich)) 
{ 
for ($i=0; $i<sizeof($vergleich); $i++) 
{ 
$sql_where_ids .= ($sql_where_ids != '') ? ', ' . $vergleich[$i] : $vergleich[$i]; 
} 
} 

if ($sql_where_ids) 
{ 
$sql_where_ids = ' WHERE id IN (' . $sql_where_ids . ') ';
}
$result = mysql_query("SELECT * FROM maskinlista $sql_where_ids ORDER BY id ASC");
  while ($r = mysql_fetch_array($result)) 
  { 
    if ($r['maskintyp'] != 'Hjullastare') 
    { 
    echo('<td class="tdborder">'); 
    echo($r['raeckvidd']);
    echo('m</td>');
    } 
    else 
    { 
       echo(''); 
    } 
  } 
?> 
</tr>


<?php
$vergleich = (isset($HTTP_POST_VARS['vergleich'])) ? $HTTP_POST_VARS['vergleich'] : array(); 
$sql_where_ids = ''; 
if(sizeof($vergleich)) 
{ 
for ($i=0; $i<sizeof($vergleich); $i++) 
{ 
$sql_where_ids .= ($sql_where_ids != '') ? ', ' . $vergleich[$i] : $vergleich[$i]; 
} 
} 


if ($sql_where_ids) 
{ 
$sql_where_ids = ' WHERE id IN (' . $sql_where_ids . ') ';
}
$result = mysql_query("SELECT * FROM maskinlista $sql_where_ids ORDER BY id ASC");
  while ($r = mysql_fetch_array($result)) 
  {
    if ($r['maskintyp'] == 'Hjullastare') 
    {
    echo('<tr><td class="tdborder">Tipplast rak/svängd</td>');
    }
  } 
?>

<?php
$vergleich = (isset($HTTP_POST_VARS['vergleich'])) ? $HTTP_POST_VARS['vergleich'] : array(); 
$sql_where_ids = ''; 
if(sizeof($vergleich)) 
{ 
for ($i=0; $i<sizeof($vergleich); $i++) 
{ 
$sql_where_ids .= ($sql_where_ids != '') ? ', ' . $vergleich[$i] : $vergleich[$i]; 
} 
} 

if ($sql_where_ids) 
{ 
$sql_where_ids = ' WHERE id IN (' . $sql_where_ids . ') ';
}
$result = mysql_query("SELECT * FROM maskinlista $sql_where_ids ORDER BY id ASC");
  while ($r = mysql_fetch_array($result)) 
  { 
    if ($r['maskintyp'] == 'Hjullastare') 
    { 
    echo('<td class="tdborder">'); 
    echo($r['tipplastrak']);
    echo(' - ');
    echo($r['tipplastsvaengd']);
    echo('kg</td>');
    } 
    else 
    { 
       echo(''); 
    } 
  } 
?> 
</tr>
Das ist natürlich weit entfernt von gut!
Wenn ich nämlich zwei Maschinen vergleiche, wird der Titel der Zeile zweimal angezeigt! Wenn ich drei vergleiche, wird der Titel dreimal angezeigt usw ...

Wie kann ich das beheben?

/Holger

Verfasst: Mo 18.Dez, 2006 17:14
von oxpus
Mal eine Basis-Frage:
Warum fragst Du laufend die Angaben mehrfach mit eigenen Abfragen ab?
Ist mehr als unnötig und erschwert dazu auch die Korrektur.
Ich hatte das ja bereits mal erstellt.
Das solltest Du auch erst einmal umsetzen, damit es hier besser vorangeht...

Verfasst: Mo 18.Dez, 2006 19:25
von Holger
Huch?
Das habe ich mich auch schon öfters gefragt.
Es kann ja nicht sein, dass ich immer wieder abfragen muss. Ich hatte mal ein Version, da wurde nur der erste Satz dann angezeigt. Da bin ich wieder zu dieser Version zurück gegangen.
Ich schaue mir das nochmal an.

/H