list DB table Modul

Gesperrt
Chopper
Beiträge: 108
Registriert: Mi 9. Feb 2005, 17:09
Wohnort: Berlin
Kontaktdaten:

list DB table Modul

Beitrag von Chopper » Fr 25. Feb 2005, 14:34

Hi,

Hab ein Modul gemacht, zum auslesen aller Tabellen einer Datenbank, sowie der Spaltennamen, bei dem dann die gewünschte Tabelle und Spalten angekreuzt werden können.

Erlaubt nicht das kombinieren mehrer Tabellen oder so sondern simpel eine beliebige Tabelle der DB ausgeben :)

Muss dann noch an die entsprechende Datenbank bzw. DBMS angepasst werden, habe in meinem Fall ne Sybase Datenbank.

Habe ein
include_db_conn Modul in der ich die Datenverbindung mache, um darauf über die Contenido oberfläche zugreifen zu können, und es in mehreren Modulen verwenden zu können.

Im Input Teil wird durch die Checkboxen ein hidden field gefüllt ...
die gefahr das dabei anderer SQL code übertragen wird ist, da es ja der Backend teil ist denke ich nicht so hoch, da kann man ja gleich eh in modul code schauen ...

include_db_conn - OUTPUT

Code: Alles auswählen

$my_db_vars['server'] = 'SYBASE_bla';
$my_db_vars['name'] = 'user';
$my_db_vars['pw'] = 'pw';
$my_db_vars['db'] = 'db';

$my_db_vars['conn'] = sybase_connect($my_db_vars['server'],$my_db_vars['name'],$my_db_vars['pw']); 
sybase_select_db($my_db_vars['db']);

list_db_table - INPUT

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL -  INPUT
*
* Modulname   :     List_db_table v1.0
* Author      :     Chopper
* Created     :     25-02-2005
************************************************/ 
?>

<script type="text/javascript">
actualDiv = 'CMS_VALUE[0]';
	
function switchDiv(visibleDiv) {

	document.forms[0].elements['CMS_VAR[2]'].value = '';
	
	if (actualDiv != '')
	document.getElementById(actualDiv).style.display ='none';
	
	document.getElementById(visibleDiv).style.display ='block';
	actualDiv = visibleDiv;
	
	for (i = 0; i < document.forms[0].elements['CMS_VAR[1]'].length; i++)
	{
	document.forms[0].elements['CMS_VAR[1]'][i].checked = false;
  	}
  	
}

function changeHidden(wert,status) {

	if (status == true)
	{
	document.forms[0].elements['CMS_VAR[2]'].value = document.forms[0].elements['CMS_VAR[2]'].value + wert + ',';
	}
	else
	{
	var child = new RegExp(wert+",");
	oldvar = document.forms[0].elements['CMS_VAR[2]'].value;
	newvar = oldvar.replace(child,"");
	document.forms[0].elements['CMS_VAR[2]'].value = newvar;
	}
	
}
</script>

<table cellspacing="0" cellpadding="0">
  <tr>
    <td class="text">
      Tabelle w&auml;hlen:
    </td>
    <td>
      <select name="CMS_VAR[0]" size=1 onChange="switchDiv(this.value)">

<?php

// Einbinden der Datenbankverbindung aus einem anderen Contenido Modul
$my_local_vars['mod_name'] = 'include_db_conn';
$my_local_vars['sql'] = 'SELECT output FROM ' . $cfg["tab"]["mod"] . " WHERE name= '" . $my_local_vars['mod_name'] . "'";
$db->query($my_local_vars['sql']);
$db->next_record();
eval($db->f("output")); 

// Abrufen von Tabellen und Spalten der vorher erstellten Sybase Datenbankverbindung
// Format: Tabellenname;Spaltenname
$my_local_vars['sql'] = "	SELECT sysobjects.name, syscolumns.name 
				FROM sysobjects, syscolumns
				WHERE sysobjects.id = syscolumns.id 
				AND sysobjects.type = 'U' ";
$my_local_vars['resID'] = sybase_query($my_local_vars['sql'], $my_db_vars['conn']);       
if (!$my_local_vars['resID']) die ("Fehler in der Abfrage");

// Speichert in $my_db_data['Tabellen']['Spalten'] die Tabellen als key und die Spalten darin als Array 
while ($my_local_vars['zeile'] = sybase_fetch_array($my_local_vars['resID']))
{
	$my_table = $my_local_vars['zeile'][0];
	
	if (!is_array($my_db_data[$my_table]))
	{
	$my_db_data[$my_table] = array();
	}
	$my_db_data[$my_table][] = $my_local_vars['zeile'][1];

}

// Tabellennamen DropDownList erzeugen
foreach (array_keys($my_db_data) as $my_local_vars['tmp'])
{
      echo '<option value="' . $my_local_vars['tmp'] .'" ';
      if ("CMS_VALUE[0]" == $my_local_vars['tmp'])
      {
        echo 'selected';
      }
      echo '>' . $my_local_vars['tmp'] . '</option>';
}
 
?>
      </select>
    </td>
  </tr>
  <tr>
    <td>
      Spalten w&auml;hlen:<br>
<font size="-2">Werden in angeklickter Reihenfolge ausgegeben</font>
    </td>
    <td>
      &nbsp;
    </td>
  </tr>
    <td>
      &nbsp;
    </td>
    <td>
      <input type="hidden" name="CMS_VAR[2]" value="CMS_VALUE[2]">

<?php

// Hidden Field mit den checked Spalten zu einem Array machen 
$my_local_vars['checkbox'] = explode(',','CMS_VALUE[2]');

foreach (array_keys($my_db_data) as $my_tmp_table)
{

	echo '<div id="'.$my_tmp_table .'" style="display:';
	if ($my_tmp_table == 'CMS_VALUE[0]') {echo 'block';}
	else {echo 'none';}
	echo ';">';

	foreach ($my_db_data[$my_tmp_table] as $my_tmp_column)
	{
  		echo '<input type="checkbox" name="CMS_VAR[1]" value="'.$my_tmp_column.'"';

		foreach ($my_local_vars['checkbox'] as $my_tmp_checked)
		{
			if ($my_tmp_checked == $my_tmp_column)
			{
			echo 'checked';
			}
		}

	echo ' onChange="changeHidden(this.value,this.checked)">'.$my_tmp_column.'<br>';
	}
	echo '</div>';
} 
 

?>

    </td>
  </tr> 
</table>

<?php
list_db_table - OUTPUT

Code: Alles auswählen

<?php 

/***********************************************
* CONTENIDO MODUL -  OUTPUT
*
* Modulname   :     List_db_table v1.0
* Author      :     Chopper
* Created     :     25-02-2005
************************************************/ 

// Einbinden der Datenbankverbindung aus einem anderen Contenido Modul
$my_local_vars['mod_name'] = 'include_db_conn';
$my_local_vars['sql'] = 'SELECT output FROM ' . $cfg["tab"]["mod"] . " WHERE name= '" . $my_local_vars['mod_name'] . "'";
$db->query($my_local_vars['sql']);
$db->next_record();
eval($db->f("output")); 

// Entgegen nehmen und verarbeiten der Spaltennamen
$my_local_vars['sql_tables'] = 'CMS_VALUE[2]';
if ($my_local_vars['sql_tables'] == ''){$my_local_vars['sql_tables'] = '*';}
else{$my_local_vars['sql_tables'] = preg_replace('/,$/','',$my_local_vars['sql_tables']);}


$my_local_vars['sql'] = 'SELECT ' . $my_local_vars['sql_tables'] . ' FROM CMS_VALUE[0] ';
$my_local_vars['resID'] = sybase_query($my_local_vars['sql'], $my_db_vars['conn']);       
if (!$my_local_vars['resID']) die ("Fehler in der Abfrage");

// Ausgeben der Spalten in Tabellenform
echo '<table border="1" cellpadding=0" cellspacing="0">';
while ($my_local_vars['zeile'] = sybase_fetch_row($my_local_vars['resID']))
  {
    echo '<tr>';
    foreach ($my_local_vars['zeile'] as $my_local_vars['tmp'])
      {
        echo '<td>' . $my_local_vars['tmp'] . '</td>';
      }
    echo '</tr>';
  }
echo '</table>';


?>

MfG
Chopper

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 25. Feb 2005, 17:54

etwas andere frage...
hast das komplette contenido auf einer sybase db laufen ?
*** make your own tools (wishlist :: thx)

Chopper
Beiträge: 108
Registriert: Mi 9. Feb 2005, 17:09
Wohnort: Berlin
Kontaktdaten:

Beitrag von Chopper » Fr 25. Feb 2005, 18:09

ne contenido selbst läuft auf mysql

Die Tabellen die ich ausgeben wollte waren halt auf einer Sybase db oder sind, aber gibs überhaupt ein sybase contenido ? bzw. müsste man sich wohl selbst anpassen wenn du so fragst :)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 25. Feb 2005, 18:11

Chopper hat geschrieben:müsste man sich wohl selbst anpassen wenn du so fragst :)
richtig, deshalb hab ich so gefragt ;-)
die anpassung müssten in der conlib vorgenommen werden... testen kann das aber nur jemand der ne sybase db hat... und ich hab keine...
ich dachte mir nur vielleicht war jemand so fleissig und hat das versucht...
*** make your own tools (wishlist :: thx)

Chopper
Beiträge: 108
Registriert: Mi 9. Feb 2005, 17:09
Wohnort: Berlin
Kontaktdaten:

Beitrag von Chopper » Do 10. Mär 2005, 16:04

Wie gesagt, läuft hier auch auf MySQL, wie groß würdest den in etwa den Aufwand einschätzen, nur mal so neben bei ;)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 10. Mär 2005, 16:25

Chopper hat geschrieben:Wie gesagt, läuft hier auch auf MySQL, wie groß würdest den in etwa den Aufwand einschätzen, nur mal so neben bei ;)
hmm...
die setuproutine müsste umgebaut werden... eventuell auf phplib basis
und die prepend.inc müsste angepasst werden...
für diese beiden schritte mit austesten würd ich mal sagen 6-8 stunden
ob contenido dann aber überhaupt läuft ??? die einzelnen db queries innerhalb von contenido sollten aber ziemlich allgemein geschrieben sein, sodas wenig probleme auftreten könnten... die zeit fürs restliche debuggen kann ich nicht mal schätzen... man bräuchte halt für jeden db typ ein paar freiwillige die das wirklich austesten könnten... für einen allein ist das ein ding der unmöglichkeit...
*** make your own tools (wishlist :: thx)

optimist
Beiträge: 24
Registriert: Do 12. Aug 2004, 20:45
Wohnort: Rheinhessen
Kontaktdaten:

Mit MySQL

Beitrag von optimist » So 20. Mär 2005, 12:12

Hallo !

Würde das Script gerne einbauen, bekomme es aber nicht hin.

Wollte zum Test dazu auf meine Contenido DB zugreifen.

Kann mir jemand mal bitte die DB Verbindung dazu zeigen?

Danke und Gruss
Aller dann !

Chopper
Beiträge: 108
Registriert: Mi 9. Feb 2005, 17:09
Wohnort: Berlin
Kontaktdaten:

Beitrag von Chopper » Di 22. Mär 2005, 12:05

VARIANTE ZUM AUSGEBEN DER CONTENIDO TABELLEN

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL -  INPUT
*
* Modulname   :     List_contenido_table v1.0
* Author      :     Chopper
* Created     :     22-03-2005
************************************************/
?>

<script type="text/javascript">
actualDiv = 'CMS_VALUE[0]';
   
function switchDiv(visibleDiv) {

   document.forms[0].elements['CMS_VAR[2]'].value = '';
   
   if (actualDiv != '')
   document.getElementById(actualDiv).style.display ='none';
   
   document.getElementById(visibleDiv).style.display ='block';
   actualDiv = visibleDiv;
   
   for (i = 0; i < document.forms[0].elements['CMS_VAR[1]'].length; i++)
   {
   document.forms[0].elements['CMS_VAR[1]'][i].checked = false;
     }
     
}

function changeHidden(wert,status) {

   if (status == true)
   {
   document.forms[0].elements['CMS_VAR[2]'].value = document.forms[0].elements['CMS_VAR[2]'].value + wert + ',';
   }
   else
   {
   var child = new RegExp(wert+",");
   oldvar = document.forms[0].elements['CMS_VAR[2]'].value;
   newvar = oldvar.replace(child,"");
   document.forms[0].elements['CMS_VAR[2]'].value = newvar;
   }
   
}
</script>

<table cellspacing="0" cellpadding="0">
  <tr>
    <td class="text">
      Tabelle w&auml;hlen:
    </td>
    <td>
      <select name="CMS_VAR[0]" size=1 onChange="switchDiv(this.value)">

<?php

// Abrufen von Tabellen und Spalten der vorher erstellten Sybase Datenbankverbindung
// Format: Tabellenname;Spaltenname
// Speichert in $my_db_data['Tabellen']['Spalten'] die Tabellen als key und die Spalten darin als Array
$my_local_vars['sql'] = "   show tables ";
$db->query($my_local_vars['sql']);    

while ($db->next_record()) {
 $my_table =  $db->f(0);
 $my_db_data[$my_table] = array();
} 

foreach (array_keys($my_db_data) as $my_local_vars['tmp'])
{
$my_local_vars['sql'] = 'SHOW COLUMNS FROM '.$my_local_vars['tmp'];
$db->query($my_local_vars['sql']);    
while ($db->next_record()) {
$my_table = $my_local_vars['tmp'];
$my_db_data[$my_table][] = $db->f("Field");

} 

}


// Tabellennamen DropDownList erzeugen
foreach (array_keys($my_db_data) as $my_local_vars['tmp'])
{
      echo '<option value="' . $my_local_vars['tmp'] .'" ';
      if ("CMS_VALUE[0]" == $my_local_vars['tmp'])
      {
        echo 'selected';
      }
      echo '>' . $my_local_vars['tmp'] . '</option>';
}
 
?>
      </select>
    </td>
  </tr>
  <tr>
    <td>
      Spalten w&auml;hlen:<br>
<font size="-2">Werden in angeklickter Reihenfolge ausgegeben</font>
    </td>
    <td>
      &nbsp;
    </td>
  </tr>
    <td>
      &nbsp;
    </td>
    <td>
      <input type="hidden" name="CMS_VAR[2]" value="CMS_VALUE[2]">

<?php

// Hidden Field mit den checked Spalten zu einem Array machen
$my_local_vars['checkbox'] = explode(',','CMS_VALUE[2]');

foreach (array_keys($my_db_data) as $my_tmp_table)
{

   echo '<div id="'.$my_tmp_table .'" style="display:';
   if ($my_tmp_table == 'CMS_VALUE[0]') {echo 'block';}
   else {echo 'none';}
   echo ';">';

   foreach ($my_db_data[$my_tmp_table] as $my_tmp_column)
   {
        echo '<input type="checkbox" name="CMS_VAR[1]" value="'.$my_tmp_column.'"';

      foreach ($my_local_vars['checkbox'] as $my_tmp_checked)
      {
         if ($my_tmp_checked == $my_tmp_column)
         {
         echo 'checked';
         }
      }

   echo ' onChange="changeHidden(this.value,this.checked)">'.$my_tmp_column.'<br>';
   }
   echo '</div>';
}
 

?>

    </td>
  </tr>
</table>

<?php

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL -  OUTPUT
*
* Modulname   :     List_contenido_table v1.0
* Author      :     Chopper
* Created     :     22-03-2005
************************************************/



// Entgegen nehmen und verarbeiten der Spaltennamen
$my_local_vars['sql_tables'] = 'CMS_VALUE[2]';
if ($my_local_vars['sql_tables'] == ''){$my_local_vars['sql_tables'] = '*';}
else{$my_local_vars['sql_tables'] = preg_replace('/,$/','',$my_local_vars['sql_tables']);}


$my_local_vars['sql'] = 'SELECT ' . $my_local_vars['sql_tables'] . ' FROM CMS_VALUE[0] ';
$db->query($my_local_vars['sql']);    

// Ausgeben der Spalten in Tabellenform
echo '<table border="1" cellpadding=0" cellspacing="0">';

$my_local_vars['columns'] = explode (',',$my_local_vars['sql_tables']);
while ($db->next_record())
  {
    echo '<tr>';
$my_count = 0;
    foreach ($my_local_vars['columns'] as $my_local_vars['tmp'])
      {
        echo '<td>' .$db->f($my_count). '</td>';
         $my_count++;
      }
    echo '</tr>';
  }
echo '</table>';


?>

hier hab beides mal kurz angepasst klappte beim kurzen testen muss nun essen bis späöter

EDIT: Also wers mal kurz bei sich ausprobiert hat, das müsste ja nun bei jedem so laufen, kann ja nen kurzes Feedback geben.

optimist
Beiträge: 24
Registriert: Do 12. Aug 2004, 20:45
Wohnort: Rheinhessen
Kontaktdaten:

Beitrag von optimist » So 27. Mär 2005, 18:07

Funzt gut !

Da fallen einem ja gleich etliche Anwendungsmöglichkeiten ein.

Von der einfachen Adress-/Namensliste über Ergebnislisten, Ternilisten etc.

Danke
Aller dann !

Gesperrt