Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
select? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
select?


 
nakg
05-03-2004, 09:01 
 
Hi leute hoffe irgendwer kann mir helfen!!!
habe eine gruppe von checkboxen
<input type="checkbox" name="checkbox[]" value="$VS">
<input type="checkbox" name="checkbox[]" value="$HS">
<input type="checkbox" name="checkbox[]" value="PTS">
usw....
(das $ steht nicht für eine var)
in meiner mysql db sieht die tabelle folgendermasen aus:
skz art
666666 $HS
111111 $VS $HS
222222 $HS $VS
333333 BRS MUS
444444 PTS $VS
555555 $VS

jetzt soll mittels checkboxen eine auswahl getroffen werden (auch mehrfachauswahl)
d.H es ist zb die checkbox mit der value $VS und die Checkbox mit der value $HS ausgewählt
--> jetzt soll ein select alle skz aus der db auslesen wo im feld art $VS und $HS enthalten sind ( also für $VS $HS sind das 666666,111111,222222,444444,555555 )
wenn jetzt aber nur die checkbox mit der value $VS ausgewählt ist soll alle skz wo $VS in art enthalten sin ausgelesen werden (also
111111,222222,444444,555555)

hab schon stunden an der problemlösung gebastelt aber es funkt einfach nicht
hoffe es kann mir wer helfen und sagen wie man so ein prob löst

 
mrhappiness
05-03-2004, 09:20 
 
$sql="SELECT *
FROM TABELLE
WHERE art IN ('".implode("', '", $_POST['checkbox'])."')";probier das mal

das setzt allerdings voraus, dass du deine datenbankstruktur korrigierst

aus 44444 $HS $VS musst du die zwei datensätze 44444 $HS und 44444 $VS machen

 
nakg
05-03-2004, 12:42 
 
genau das ist mein problem kann die datenbankstruktur nicht ändern
da laufen andere prog die genau auf diese struk zugreifen

 
wahsaga
05-03-2004, 13:17 
 
Original geschrieben von nakg
genau das ist mein problem kann die datenbankstruktur nicht ändern
da laufen andere prog die genau auf diese struk zugreifen
ist denn wenigstens die "reihenfolge" fest vorgegeben, in denen $VS, $HS, MUS etc. im feld art vorzufinden sind, wenn sie denn auftauchen?

dann sähe der vorschlag von happi doch gar nicht mal so schlecht aus - statt "WHERE art IN" prüfst du dann halt auf "WHERE art =", und setzt dir die checkbox-values nicht mit IN(...) und durch kommata getrennt, sondern als einfachen textstring und durch space getrennt zusammen.

$art = implode(" ", $_POST['checkbox']));

$sql = "... WHERE art = '".$art."'";

musst nur darauf achten, dass auch die checkboxen in deinem formular in dieser "richtigen" reihenfolge sind.


und vergiss nicht, den typen, der das datenmodell verbrochen hat, zur sau zu machen :-)

 
Wurzel
05-03-2004, 13:36 
 
like scheint mir hier sinniger ... also

foreach($_POST['checkbox'] as $v)
{
$out[] = "art LIKE '%". $v. "%'";
}
$sql = ".... WHERE ". implode(" AND ", $out) ." ...";

 
mrhappiness
05-03-2004, 13:37 
 
aber trotzdem mit OR or?

 
nakg
05-03-2004, 14:18 
 
danke für die antwort wurzel
blicke bei deinem code jetzt gar nicht mehr durch
währe echt super wenn du dir noch ein wenig zeit nehmen könntest und mir das erklärst

 
Wurzel
05-03-2004, 14:25 
 
Original geschrieben von nakg
--> jetzt soll ein select alle skz aus der db auslesen wo im feld art $VS und $HS enthalten sind ( also für $VS $HS sind das 666666,111111,222222,444444,555555 )

@happy
... ich würds als AND interpretieren ... kann man ja flexibilisieren ;)


@nagk
// für jedes element im array $_POST['checkbox'] ....
foreach($_POST['checkbox'] as $v)
{
// ... füllen wir ein neues array ($out) mit dem string ...
$out[] = "art LIKE '%". $v. "%'";
}
// implode fügt nun die strings zusammen mit einem AND dazwischen
$sql = ".... WHERE ". implode(" AND ", $out) ." ...";probier einfach mehrere markierungen aus und lass dir $sql mal mit echo ausgeben, dann wirds klarer

 
nakg
05-03-2004, 14:35 
 
d.h.:


meine sql lautet dann so ?


$result = mysql_query("Select skz from schulen Where ". implode("
AND ", $out) ." ...";

..... sorry jetzt geht gar nichts mehr

probier einfach mehrere markierungen aus und lass dir $sql mal mit echo ausgeben, dann wirds klarer ....... ??????????? verstehe nicht was du meinst

 
Wurzel
05-03-2004, 14:41 
 
das ist ja auch schwachfug ....
$sql = "Select skz from schulen Where ". implode(" AND ", $out) ."";
echo $sql;
// ^^ du sollst gucken, was dabei rauskommt

dann kannst du dir auch gleich angewöhnen, or die(mysql_error()) zu benutzen $result = mysql_query($sql) or die(mysql_error());

 
nakg
05-03-2004, 15:05 
 
hab hier jetzt mal meinen gesamten code + fehlermeldung !

<?php
require("connect.inc.php");
?>
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
foreach($_POST['checkbox']as $v){

$out[]="art Like '%".$v."%'";
}

$sql = "Select skz From schulen Where ".implode(" AND ", $out)."";
echo $sql;

$result = mysql_query($sql)or die (mysql_error());

echo "<form method=post action=mail.php>";
echo("<table BORDER=1>");
echo("<tr>");
echo("<td BGCOLOR=\"#00FF33\"><B>mailadressen</B></td>");
echo("<td BGCOLOR=\"#FF0000\"><B>auswahl</B></td>");
echo("<td BGCOLOR=\"#FFFF00\"><B>skz</B></td>");
echo("</tr>");

while ($ds = mysql_fetch_array($result)) {
$skz = $ds['skz'];
echo $skz."<br>";
echo("<tr>");
//echo "<TD>" . $mail ."</TD>";
echo("<td> <input type=checkbox name=box[] value=$skz checked > </td>");
echo "<TD>" . $skz ."</TD>";
echo("</tr>");
}
echo("</table>");



?>

Betreff:<br>
<input type="text" name="betreff" value="<?php echo $_POST['betreff']; ?>" readonly="readonly"><br>

Text:<br>
<textarea name="text" cols="100" rows="20" readonly="readonly" ><?PHP echo $text;?></textarea>
<input type="submit" name="Submit" value="Abschicken">
</form>
</body>
</html>


ergebnis wenn checkbox $VS : es werden alle skz ausgegeben wo $VS dabei steht
aber wenn 2 oder mehr checkboxen gesetzt sin wird nicht ausgegeben

wenn garkeine checkbox gesetzt ist folgende fehlermeldungen:
Warning: Invalid argument supplied for foreach() in /srv/www/htdocs/php_mail/scripts/auswahl.php on line 34

Warning: implode() [function.implode]: Bad arguments. in /srv/www/htdocs/php_mail/scripts/auswahl.php on line 39
You have an error in your SQL syntax near '' at line 1

 
Wurzel
05-03-2004, 15:12 
 
Original geschrieben von nakg
ergebnis wenn checkbox $VS : es werden alle skz ausgegeben wo $VS dabei steht
aber wenn 2 oder mehr checkboxen gesetzt sin wird nicht ausgegeben kann es sein, dass es keine passenden datensätze für die entsprechende query gibt?

wenn garkeine checkbox gesetzt ist folgende fehlermeldungen:
Warning: Invalid argument supplied for foreach() in /srv/www/htdocs/php_mail/scripts/auswahl.php on line 34das musst du abfangen ... zb if(!isset($_POST['checkbox']) || empty($_POST['checkbox']))
{
die('nix selektiert');
}
else
{
.....
}

btw: bitte formatier deinen code mit den php-tags um

 
nakg
05-03-2004, 15:25 
 
datensätze für query sind da

hab mal händisch ein statement geschrieben nur zu testen das lautet so
$sql = "SELECT skz FROM schulen Where art LIKE '%\$VS%' AND art LIKE '%\HS%' ";

da funkt das is halt ohne checkboxen denke das hängt mit dem \ zusammen kann das sein

wenn ich mir echo $sql;
ausgeben lasse lautet das ergebnis für $VS und $HS
Select skz From schulen Where art Like '%$VS%' AND art Like '%$HS%'
also schon fast richtig der string

das mit dem fehlermeldungen abfangen funkt 1 a

 
nakg
05-03-2004, 15:38 
 
vielen vielen dank für die hilfe habs jetzt mi or statt and versucht und fürs erste funkt das so halbwegs

ja ja aller anfang ist schwer ... hoff bekomme bei weitern fragen auch wieder so schnell hilfe ...
danke

 
Wurzel
05-03-2004, 15:57 
 
probiers mal damit:foreach($_POST['checkbox']as $v){

$out[]="art Like '%" . str_replace('$', '\$', $v) . "%'";
}

- -

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