Content Management System - CMS : eXV2 
Home
News
Forum
Downloads
Download Module
Sitemap
Partnerseiten
RSS News
Kontakt/Info
Sprache
EnglishFrench
Suchen
Login
Nickname
Passwort

Registrieren?
Passwort?
Navigation
 Home News  Forum Neueste Beiträge  Downloads Download Module eXV² Themes  Weblinks Tutorial Changelog 2.3.1 Jobcenter Gebrauchtmarkt OSMap  Sponsor Kalendersystem Sitemap Partnerseiten RSS News Kontakt/Info Webseiten Wetter
Willkommen im Free Web CMS : eXV² Forum!
  Forenarchiv
     Allgemeines
  "makemeCnameCheckArray"

Forum : Allgemeines

Titel : "makemeCnameCheckArray"

© 2004-2012 www.exv2.de
http://www.exv2.de

URL dieser Diskussion
http://www.exv2.de/modules/newbb_plus/viewtopic.php?topic_id=4234&forum=8


 molli :

14.12.2008 00:49
 Hallo zusammen,
ich sitze hier wieder mal vor einem für mich unlösbaren Problem und bitte euch deshalb einmal mehr um eure Hilfe. Und zwar versuche ich verzweifelt eine Funktion wie die "makeCnameSelectArray" in der "func_makeCnameSelectArray.php" hinzukriegen. Allerdings sollen die Kategorien nicht als Select-Felder sondern mit checkboxen dargestellt bzw. ausgewählt werden können, das ist der Sinn der Sache. Ich habe also die "func_makeCnameSelectArray.php" kopiert und in "func_makeCnameCheckArray.php" umbenannt sowie die Funktionen in "makeCnameCheckArray" und getChildCArray. Alles was verdächtig nach Selectfeld aussah, hab ich entfernt (Sorry das ich wie ein Metzger und nicht wie ein Chirurg vorgeh, bin und bleib halt ein blutiger Anfänger). Das ganze funktioniert auch soweit ganz gut, spreche ich die Funktion in einer form mit einer checkbox an, ist sie nicht abgeneigt nur wenn's zur Sache geht, zickt sie rum (wie im wahren Leben) d. h. ich bekomm die Kategorien als Liste mit Checkboxen aber der array wird nicht übernommen bzw. behalten. Wenn mir also jemand da draussen helfen kann und will schon mal vielen Dank im Voraus

Gruß Oli

 Nobse :

14.12.2008 13:20
 Entweder mal hier den Code Posten von der Function und dem teil des Forms oder wo kann man sich das ansehen

 bama :

14.12.2008 18:28
 Hi Oli,

die function makeCnameSelectArray gibt ein array zurück, und kein selectfeld
Zitat:
Alles was verdächtig nach Selectfeld aussah, hab ich entfernt

Select gehört aber hier zur Datenbankabfrage

wie Nobse schon sagte, etwas mehr input bräuchten wir schon, vor allem, was als Ergebnis raus kommen soll
z.B.

1.Kategoriename
() 1.Child
() 2.Child

soll alles mit Checkboxen versehen sein, oder nur die Child?

 molli :

14.12.2008 23:47
 Hallo Nobse, hallo Hans,

also Childs (ich vermute, das sind in meinem Fall die csid's) hab ich keine angelegt. Sinn und Zweck ist es, eine Auswahl von mehreren Kategorien zu ermöglichen.

hier noch der Code:

Code:
So wird die Kategorienliste im form aufgerufen:


$catarray = inc_function("makeCnameCheckArray", array("boogy_cat","title","sort","cid","csid","","",0),"");
$temp = ExoopsFormProducer::f_checkbox("", "cid", $cid, $catarray); $form .= $temp->render();

Die Funktion "makeCnameCheckArray" funktioniert insofern, dass die Kategorienliste mit den Auswahlkästchen dargestellt wird. Man kann auch die einzelnen Kategorien auswählen und wenn man jetzt direkt speichert, wird's auch in die DB übernommen. Mein Problem ist aber, dass ich noch über eine weitere "form" und noch eine preview.form muss, bis die Daten gesendet werden. Die Funktion "f_hidden(""cid", $cid);" hab ich eingebunden bringt aber auch nichts, nach dem ersten submit ist alles weg.

function makeCnameCheckArray($table, $title, $order="", $t_id="", $s_id="", $c_id=0, $ex_child=0, $ausw=1) {
global $db, $myts;
$sql = "SELECT ".$t_id.", ".$title." FROM ".$db->prefix($table)." WHERE ";
if ($c_id > 0){
$sql .= "cid = ".$c_id." and ";
}
$sql .= $s_id."=0";
if ($order != "") {
$sql .= " ORDER BY ".$order;
}
//echo $sql;
$result = $db->query($sql);
if($ausw == 1){
$ret = array();
}else{
$ret = array();
}
while ( list($catid, $name) = $db->fetch_row($result) ) {
if ($ex_child == 0){
$ret[$catid] = $myts->makeTboxData4Show($name);
}
$arr = getChildCArray($table, $t_id, $s_id, $catid, $order);
foreach ($arr as $option) {
$option['prefix'] = str_replace(".", "--", $option['prefix']);
$catpath = $option['prefix']." ".$myts->makeTboxData4Show($option[$title]);
$ret[$option[$t_id]] = $myts->makeTboxData4Show($catpath);
}
}
return $ret;
}



function getChildCArray($table, $t_id, $s_id, $sel_id=0, $order="", $parray = array(), $r_prefix="") {
global $db;
$sql = "SELECT * FROM ".$db->prefix($table)." WHERE ".$s_id."=".$sel_id."";
if ($order != "") {
$sql .= " ORDER BY ".$order." ";
}
//echo $sql;
$result = $db->query($sql);
$count = $db->num_rows($result);
if ($count == 0) {
return $parray;
}
while ( $row = $db->fetch_array($result) ) {
$row['prefix'] = $r_prefix.".";
array_push($parray, $row);
$parray = getChildCArray($table, $t_id, $s_id, $row[$t_id], $order, $parray, $row['prefix']);
}
return $parray;
}


Vielen Dank und viele Grüße
Oli

 bama :

15.12.2008 12:06
 Zitat:
Mein Problem ist aber, dass ich noch über eine weitere "form" und noch eine preview.form muss


schau dir mal die register.php an, da gibt es ein Feld: user_intrest
register.php wird auch mehrmals aufgerufen, die Daten werden vor und zurück geschickt
ich habe das mit einem String gelöst, diesen kannst du einfach über hidden weitergeben

 molli :

22.12.2008 01:41
 Hallo Hans,

erstmal ein dickes "DANKESCHÖN" , ohne Dich hätte ich mich bestimmt schon vor den Zug gelegt!

DANKE!

Es hat zwar etwas gedauert, doch jetzt hab ich's endlich hinbekommen. Allerdings ist das bisschen Stolz, der da mal kurz aufkam, schon wieder umgeschlagen in ein tiefe Depression – ICH KRIEG DIE DATEN NICHT MEHR AUSGELESEN - verflixt, verflixt, verflixt.

Ich weiß ich verlange Euch viel ab, wenn ich euch schon wieder um Hilfe bitte, aber vielleicht habt ihr in dieser besinnlichen Zeit noch etwas Barmherzigkeit für mich übrig.

Mein Problem ist folgendes:

bekommt man z.B. den/die Array/Variable $cid=3
geliefert (das Modul basiert auf ViSo)

dann soll die SQL Abfrage die Kategorienamen bzw. die Kategorieeinträge (je nach dem welche Tabelle angesprochen wird) ausgeben, die in der cid-Spalte den Wert 3 enthalten.

steht jetzt in der Zelle nur eine 3, funktioniert das ganze wie gewohnt;
steht jetzt aber 2|3 oder 2|3|4|5 funktioniert's natürlich nicht mehr.

Ich habe versucht das irgendwie so zu lösen

Code:
function index() {
ob_start();

global $db, $boogyConfig, $sortBlock, $orderby, $debut, $xoopsConfig, $xoopsUser, $myts, $meta;

$mytree = new XoopsArbre($db->prefix("boogy_kat"),"cid","csid");

isset($_GET['cid']) ? $cid=$_GET['cid']:$cid="0";
isset($_GET['orderby']) ? $orderby = $_GET['orderby']:$orderby = "tid DESC, date DESC";
isset($_GET['sort']) ? $sort = $_GET['sort']:$sort = "";

if ($debut=="") { $debut=0; }

$tableContent = "";

$value = $cid;

$cid = explode('|',$cid['cid']);
$value0 = $cid[0];
$value1 = $cid[1];
$value2 = $cid[2];
$value3 = $cid[3];
$value4 = $cid[4];
$value5 = $cid[5];
$value6 = $cid[6];


$sql = "SELECT lid, cid, title, tid, description, date, valid FROM ".$db->prefix("boogy_desc")." WHERE (valid='Yes') AND cid='$value0' OR cid='$value1' OR cid='$value2' OR cid='$value3' OR cid='$value4' OR cid='$value5' OR cid='$value6'";
$result=$db->query($sql);

$numrows = $db->num_rows($result);


list($numrows) = $db->fetch_row($db->query("SELECT COUNT(*) FROM ".$db->prefix("boogy_desc")." WHERE valid='Yes'and cid='$value0' OR cid='$value1' OR cid='$value2' OR cid='$value3' OR cid='$value4' OR cid='$value5' OR cid='$value6'"));

$tableContent .= boogyOpenTable();

$cid = $value;

$tableContent .= table_listsortb($result,$cid,$orderby,$sort,$debut);
$tableContent .= boogyCloseTable();

$tableContent .= infoBlock($debut, $boogyConfig['nb_affichage'], $numrows, $orderby, $sort);

$tableContent .= boogyOpenTable();
$tableContent .= table_listb($result,$cid,$orderby,$sort,$debut);
$tableContent .= boogyCloseTable();

$tableContent .= boogyOpenTable();
$tableContent .= boogyCloseTable();


if($numrows >= $boogyConfig['nb_affichage']){

$tableContent .= boogyOpenTable();
$pagenav = new XoopsPageNav($numrows, $boogyConfig['nb_affichage'], $debut, "cid=$cid&orderby=$orderby&sort=$sort&debut", "");
$tableContent .= $pagenav->renderNav(10, 3);
$tableContent .= boogyCloseTable();
}



echo $tableContent;

}



wie gesagt – versucht.

Viele Grüße

Oli

 Nobse :

22.12.2008 11:58
 Hoffe hab dich richtig verstanden

dein $cid ist vom GET und hat den Wert 1|3|4 z.B

in der tabellenfeld cid steht immer nur ein wert z.B 3

dann kannst das so abfragen

WHERE cid in (1,3,4)

brauchst also blos von deinem GET die | durch , ersetzen und dann

WHERE cid in $cid

 bama :

22.12.2008 14:55
 probiere doch mal die Datenbankabfrage wie folgt:

PHP Code:
1: <?php
2:     $cid 
= isset($_GET['cid']) ? $_GET['cid'] : "0";
3:     
$orderby = isset($_GET['orderby']) ? $_GET['orderby'] : "tid DESC, date DESC";
4:     
$sort = isset($_GET['sort']) ? $_GET['sort']: "";
5:     
$start = isset($_GET['start']) ? intval($_GET['start']) : 0;
6:     
$limit = isset($_GET['limit']) ? intval($_GET['limit']) : 0;
7:     
8:     
$where_query "";
9:     if ( 
is_array($cid) && count($cid) > ) {
10:         
$where_query " WHERE valid='Yes' AND (";
11:         foreach ( 
$cid as $c ) {
12:             
$where_query .= " cid='$c' OR";
13:         }
14:         
$where_query substr($where_query0, -3);
15:         
$where_query .= ")";
16:     }elseif(
$cid 0){
17:         
$where_query " WHERE valid='Yes' AND cid='".$cid."' ";
18:     }else{
19:         
$where_query " WHERE valid='Yes'";
20:     }
21:     
22:     
$sql "SELECT lid, cid, title, tid, description, date, valid FROM ".$db->prefix("boogy_desc")."".$where_query." ORDER BY ".$orderby." ";
23:     
24:     
$numrows $db->num_rows($db->query($sql));
25:     
26:     
$result=$db->query($sql,$limit,$start);
27:     while ( 
$myrow $db->fetch_array($result) ) {
28:         
//hier dann deine "eiterverarbeitung
29:         
$xxxxx $myts->makeTboxData4Show($myrow['title']);
30:         
// usw.
31:     

32:
?>




$start und $limit benötigst du dann für XoopsPageNav
$orderby und $sort musst du noch anpassen, im default von $orderby hast du ja die Sortierung schon drinnen

 molli :

23.12.2008 00:47
 Hallo Nobse, hallo Hans,

erstmal noch ein herzliches Dankeschön für Eure Hilfe und die damit verbundene Mühen. Leider ist es noch nicht ganz das was mir weiter hilft. Ich hab beide Varianten ausprobiert die auch funktionieren allerdings nur dann wenn ein einziger Wert in der sql Zelle steht. Ich versuch's nochmal etwas genauer zu erklären.

Also die cid3 die über get kommt ist die Kategorien-id z.B. (KategorieA hat die cid=1, KategorieB cid=2 und KategorieC cid=3) diese id's sind einzigartig und kommen aus der Tabelle boogy_cat.

In der Tabelle boogy_desc liegen die Einträge und je nachdem welche Kategorie bzw. Kategorien gewählt wurden, können jetzt in der Spalte cid dieser Tabelle folgende Werte stehen z.B.( 3 wenn nur die KategorieC gewählt wurde, 2|3 wenn KategorieB + C und 1|2|3 wenn KategorieA + B +C gewählt wurden usw.).


Die sql Abfrage müsste also irgendwie so aussehen:

KategorieC = $cid= 3

gehe her wähle lid, cid, title, tid, description, date, valid von Tabelle boogy_desc schau in der Spalte cid nach einer 3

Da das ganz aber noch etwas dümmer ist als ich, wird er – wenn z.B. die 1|2|3 drin steht – das als ganzen Wert ansehen und die 3 darin nicht erkennen. Ich hatte schon versucht die cid's auszulesen und zu exploden und anschließen zu vergleichen – naja funktioniert hat's nicht – nur für den Fall, dass das doch möglich ist, würde sich das auf die Suchgeschwindigkeit auswirken? Wichtig wäre noch, dass das $result wenn es vielleicht irgendwie zustande kommt, so "robust" ist, dass man die funktionen table_listsortb und table_listb weiterhin ansprechen kann.

Ich doch nix verstehen.

Viele Grüße

Oli

 bama :

23.12.2008 11:15
 sorry, hatte nicht mehr dran gedacht, dass bei dir $cid als String besteht, nicht als array, wie normal von einem check array

$cid = isset($_GET['cid']) ? explode("|",$_GET['cid']) : array(0);

 Nobse :

23.12.2008 20:25
 Ich hab das anders verstanden

in der DB im feld cid kann stehen
3
1|3
1|2|3
usw.

in der $_GET['cid'] nur ein Wert
1
2
oder
3

das könnte man dann über LIKE abfrage

WHERE cid LIKE '%$cid%'

 molli :

24.12.2008 12:38
 danke

Vielen Dank ihr zwei!! Beide Lösungen funktionieren fantastisch. Ihr habt mir damit das schönste Weihnachtsgeschenk beschert (zumindest bis jetzt Wink).

Wünsche Euch frohe Weihnachten und einen guten Rutsch ins neue Jahr.

Viele Grüße

Oli
Partnerseiten
http://www.fr.exv2.eu/

Vote für eXV2
php
Kontakt/Info
  Kontakt
  Impressum
  Link zu uns
  AGB
  Datenschutzhinweis
Downloads
  eXV² Core
  Core Sprachfiles
eXV² Filecenter
  Downloads
  Download Module
  eXV² Themes
  Multilanguage Module
  Sprachfiles eXV² Module
eXV² Support
  France