Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

CCcam Info Update Manager -- zum pflegen der channelinfo und providers

    Nobody is reading this thread right now.

RoterBaron

Stamm User
Registriert
18. Mai 2011
Beiträge
1.101
Reaktionspunkte
452
Punkte
83
Ich hab quasi eine gehirnblockade und bräuchte ein paar denkanstösse bzw hilfe bei einem Porjekt was ich gern der CS-Community bereitstellen wollen würde... wär also geil wenn mir hier jemand mit php kentnissen ein bischen helfen könnte :)


Und zwar gibt es ja immer wieder von verschiedenen leuten aktualisierte CCcam.channelinfo und CCcm.provider dateien - allerdings habt ihr vielleicht auch schonmal festgestellt das der eine irgendwelche TABs einpflegt die aber garnicht korrekt dargestellt werden oder es gibt 100 doppeleinträge oder die datei ist absolut unsortiert wodurch doppeleinträge quasi unvermeidlich sind oder Provider sind falsch benannt etc...

Um dem entgegen zu wirken war nun meine Idee eine Zentrale anlaufstelle für alle du kreieren wo sich jeder die jeweils aktuelle datei nach seinen bedürfnisse generieren lassen könnte; dabei bin ich mir aber noch nicht ganz sicher ob ich das irendwo bei mir hosten werde/sollte oder sich diese Scripts jeder selber bei sich installieren kann etc... finde ich auch erstmal unwichtig - ersztmal muss es funtzen ;)


Mein Problem ist nun das ich nicht genau weiss wie/was/wo eure anforderungen an sowas sein könnten und ich auch mit der Programmierung ein paar Probleme habe weil ich nicht soooo super fit in PHP bin, bastel mir nur abunzu mal was zum eigenbedarf also alles selber bei gebracht....

...ich bin auch schon ein bischen damit überfordern das genaue problem zu beschreiben hehe also bitte ich an dieser stelle um geduld bzw nachsicht :)


also meine bisherige idee war es, eine index.php zu haben wo ausgewählt werden kann ob man eine neue channelinfo und/oder providers eilesen und importieren will , oder ob man ggf vorhandene datensätze bearbeiten möchte...
beim import wird die channelinfo ausgelesen und nach CAID:IDENT:SID sortiert und dann dieser sortierung entsprechend in die datenbank eingetragen... somit wär das schonmal vorsortiert bzw beim späteren auslesen kann man das dann von mysql vorsortieren lassen (ORDER BY CAID,IDENT,SID)... oder hab ich hier bereits einen denkfehler?

zusätzlich sollte dann auch die CCcam.providers eingelesen werden - wobei ich da zb auch erst dachte das man sich beim exportieren, also späteren erstellen der datensätze in eine neue channelinfo datei, das fdurch die providers unterteilen lassen könnte, die man dann ja anhand CAID und IDENT identifiziert -- also zb dachte ich mir das der User dann zb alle provider auswählen kann oder nur ganz bestimmte und sich dann zb nur für SKY und KD eine channelinfo datei erstellen lassen könne weil derjenige eh keine sat karten hat etc...



tja, wo fang ich nun an....
erstmal die idee wie ich sie mir notiert habe:
Code:
# tabelle channelinfo mit: id, CAID, IDENT, SID, ChanText, update=0, delete=0, validated=0
# tabelle channelinfoupdates mit: chaninfoid, userid, comment="", updated(unixdate)
# tabelle channelinfousers mit: id, username, access(user/mod/admin), added(unixdate)
# tabelle providers mit: id, CAID, IDENT, Provider, unixdate
# providers format: ersten 4 zahlen = CAID ... naechsten 4 zahlen = die letzten 4 stellen der IDENT ... providername
#
# frontend was die channelinfo anzeigt und wenn ein user was ändern will,
# wird updated=1 gesetzt (und ggf. delete=1 wenns geloescht werden soll) sowie ggf ein comment eingetragen...
# erst wenn mindestens 2 user (oder 1 admin/mod=valid=2) die aenderung bestaetigen wird validated=1 gesetzt und
# alle 5min prueft das ein anderes script und aktuallisiert dann erst die echte channelinfo...
#
# ...gesammte channelinfo anzeigen oder nur die, die update=1 und valid=0 oder 1 haben
# ...allg. geaenderte chans koennen ggf an einem eintrag in der tabelle chaninfoupdates erkannt und angezeigt werden

global.php:
PHP:
<?php


//error_reporting(E_ERROR);
error_reporting(E_ALL);
ini_set('display_errors','On');
ini_set("max_execution_time", "300");
ini_set("session.gc_maxlifetime", "3600");
ini_set("memory_limit","128M");
//ini_set("arg_separator.output","&amp;");
//ini_set("url_rewriter.tags","a=href,area=href,frame=src,input=src,link=href,form=action,fieldset=");
//ini_set("session.use_cookies", 1);
//ini_set("session.use_only_cookies", 0);
//ini_set("session.use_trans_sid", 1);
//ob_implicit_flush(true);



////// defaults
//
$DEBUG=0;
$PAGETiTLE="ChanInfo Manager";

$SPACER = "&nbsp;";
$SPACER2=" <font color='#800000'><td class='trenn'>•</td></font> \n";
$SPACER3='<td><img src="images/pixelspace.gif" width="10" height="1" border="0" alt=""></td>';

require("config.php");

if (isset($db_servername)){
    $DB_con=new DB_Sql;
    $DB_con->database=$db_name;
    $DB_con->server=$db_servername;
    $DB_con->user=$db_username;
    $DB_con->password=$db_password;
    $DB_con->connect();
    $db_password="";
    $DB_con->password="";
} else { echo "ERROR"; }



// ###################### some vars... #######################

$SHOW_MEMORY_USAGE = true;
$SHOW_DURATION_TIME = true;

if (!isset($ScriptVersion)) { $ScriptVersion = "0.01"; }
$copysign = '© 2011 (v'.$ScriptVersion.')';
$GETstart = array();

#$dbcon = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
#mysql_select_db("$db",$dbcon); 


$curdatetime = date("d.m.Y H:i:s");

// default headers
@header("HTTP/1.0 200 OK");
@header("HTTP/1.1 200 OK");
@header("Content-type: text/html");
$header ="<html><head>\n";
//header("Location: /index.php?". session_name() . "=" . session_id());
$header.="<link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\">\n";
$header.="<title>".$PAGETiTLE."</title>\n";
$header.="<meta http-equiv=\"Content-Type\"\n";
$header.="content=\"text/html; charset=iso-8859-1\">\n";
$header.="<meta name=\"robots\" content=\"disallow\">\n";
$header.="</head>\n";

$BODY ="<body>\n";
#$JAVA ="<script type=\"text/javascript\" src=\"wz_tooltip.js\"></script>\n";
#$JAVA.="<script type=\"text/javascript\" src=\"popup.js\"></script>\n";
$JAVA="";

$MENUEhtml ="<td id=\"top\"><!--men&uuml;-->\n";
$MENUEhtml.="<table  align=\"center\" id=\"menu2\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
$MENUEhtml.=" <tr>\n";
$MENUEhtml.="  <td ><a  href=\"./\">Home</a></td>$SPACER3<td  class=\"trenn\">•</td>$SPACER3\n";
$MENUEhtml.="  <td ><a href=\"./import_chaninfo.php\">Import  CCcam.channelinfo</a></td>$SPACER3<td  class=\"trenn\">•</td>$SPACER3\n";
$MENUEhtml.="  <td ><a  href=\"./import_providers.php\">Import  CCcam.providers</a></td>$SPACER3<td  class=\"trenn\">•</td>$SPACER3\n";
$MENUEhtml.="  <td ><a href=\"./edit_chaninfo.php\">Edit  Channelinfo</a></td>$SPACER3<td  class=\"trenn\">•</td>$SPACER3\n";
$MENUEhtml.="  <td ><a href=\"./edit_providers.php\">Edit Providers</a></td>\n";
$MENUEhtml.=" </tr>\n";
$MENUEhtml.="</table>\n";
$MENUEhtml.="<!--men&uuml; ende--></td>\n";
$MENUEhtml.="<br/><p/>\n";

#$footer = "<br/><br/> <p>$curdatetime</p><br/>\n";
$footer="<div style=\"position:absolute; bottom:0px; right:0px;\"> ".$copysign." </div>\n";


$LOGO="";
$DeleteIcon="images/b_drop.png";
$DELETEimg='<img src="'.$DeleteIcon.'" width="10" height="10" border="0" alt="Delete">';
$EditIcon="images/b_edit.png";
$EDITimg='<img src="'.$EditIcon.'" width="10" height="10" border="0" alt="Edit">';


// ###################### Start functions #######################

require('sql/functions.php');


?>

index.php:
PHP:
<?php

ob_implicit_flush(true);
#session_start();
$ScriptVersion = "0.02";
require("global.php");
$_SELF=$_SERVER['PHP_SELF'];
$DEBUG = 0;

$html ="<?php flush(); ?>\n";
//$BODY ="<body onLoad=\"focus();addscoreform.score.focus()\">\n";
$BODY ="<body>\n";
#$JAVA ="<script type=\"text/javascript\" src=\"wz_tooltip.js\"></script>\n";
#$JAVA.="<script type=\"text/javascript\" src=\"popup.js\"></script>\n";
$JAVA="";
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<?php echo $header; ?>
<?php echo $BODY; ?>
<?php echo $JAVA; ?>
<?php echo $LOGO; ?>
<?php echo $MENUEhtml; ?>


<?php

/*
logincheck();
$uid = $_SESSION['uid'];
$pwd = $_SESSION['pwd'];
//Benutzerdaten abrufen
$result = $DB_con->query("SELECT * FROM players WHERE id=$uid");
$portal_user = mysql_fetch_assoc($result);
*/

if (isset($_GET['debug']) && $_GET['debug'] == 1) { $DEBUG = 1; }
if (isset($DEBUG) and $DEBUG == 1) {
     $base_memory_usage = 0;
     if (function_exists('memory_get_usage')) { $base_memory_usage = memory_get_usage(); }
     if ($base_memory_usage != 0) { echo "<br/>Memory Usage: $base_memory_usage byte<br/>\n"; }
     showarray($_GET);
     showarray($_POST);
     showarray($_SESSION);
}

function spezialcharacters($text){
    //$text=wordwrap($text,100," ",1);
    //$text=str_replace(",", "", $text);
    $text=str_replace(";", "", $text);
    $text=htmlspecialchars("$text");
    $text=str_replace("#", "", $text);
    $text=str_replace("|", "", $text);
    $text=str_replace("'", "&acute;", $text);
    //$text=str_replace("'", "\'", $text);
    $text=eregi_replace("( ){2,}", " ", $text);
    $text=trim($text);
    return($text);
}

?>

<br/>



<?php echo $footer; ?>
</body>
</html>

der code zum importieren der channelinfo:
import_chaninfo.php
PHP:
<?php

require("global.php");

echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">';
echo $header;
echo $BODY;
echo $JAVA;
echo $LOGO;
echo $MENUEhtml;

$curdatetime = date("d.m.Y H:i:s");
echo "$curdatetime<br/><br/>";

$ADDED=$SKIPPED=0;

function InsertLines($File) {
    global $SPACER3;
    $handle = fopen("$File", "r");
    $Lines = fread($handle, filesize($File));
    fclose($handle);
    $i=-1;    
    $output = explode("\n", $Lines);
    foreach($output as $line) {
        if ($line == "") { continue; }
        $tmp = explode("\"", $line);
        $CIS = explode(":", $tmp[0]);
        $CAID = $CIS[0];
        if (preg_match('/^[0-9]+/', $CAID)) {
            $i++;
            #array fuer die sortierung
            $CIS_Array["$i"] = $tmp[0];
            $CHANTEXT["$tmp[0]"] = $tmp[1];
        }
    }
    unset($CIS);
    sort($CIS_Array);
    foreach($CIS_Array as $idx => $CIS) {
        $CIS2 = explode(":", $CIS);
        $CAID = $CIS2[0];
        $IDENT = $CIS2[1];
        $SID = $CIS2[2];
        $CT = CharFilter("$CHANTEXT[$CIS]");
        $CT = preg_replace("/ +/", " ", $CT);;

        //echo "<b>$CAID:$IDENT:$SID</b> $SPACER3 $SPACER3 ---> $SPACER3 $SPACER3 <b>$CT</b> </br>";        
        #mysql insert...
        InsertChanInfo("$CAID","$IDENT","$SID","$CT");
    }
    echo "</br>Done!</br>";
}


function InsertChanInfo($CAID,$IDENT,$SID,$ChanText) {
    global $DB_con, $table;
    global $SPACER, $SPACER2, $SPACER3, $ADDED, $SKIPPED;
    $ChanText = addslashes($ChanText);

    #prüfen ob bereits vorhanden
    $result = $DB_con->query("SELECT id FROM ".$table["ci"]." WHERE CAID=\"$CAID\" AND IDENT=\"$IDENT\" AND SID=\"$SID\"");
    $RES = $DB_con->fetch_array($result);
    if (!empty($RES)) {
        $OK = 0;
        $SKIPPED++;
        #echo "---- ALREADY ADDED ---- <b>$CAID:$IDENT:$SID</b> $SPACER $SPACER --> $SPACER $SPACER <b>$ChanText</b> </br>";
    } else {
        $OK = 1;
    }
    #einfuegen fals noch nicht vorhanden
    if ($OK) {
        $ADDED++;
        $sql = "INSERT INTO ".$table["ci"]." SET CAID='$CAID', IDENT='$IDENT', SID='$SID', ChanText='$ChanText'";
        //$sql2= "INSERT INTO ".$table["ciu"]." SET chaninfoid='$id', user='$USERNAME', comment='$COMMENT'";
        $insert = $DB_con->query($sql);
    }
}


echo "InsertLines: $ChanInfoFile</br>";
InsertLines($ChanInfoFile);
echo "</br>Added: $ADDED";
echo "</br>Skipped: $SKIPPED</br>";

?>


<?php echo $footer; ?>
</body>
</html>

der code zum importieren der providers:
import_providers.php
PHP:
<?php
require("global.php");

echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">';
echo $header;
echo $BODY;
echo $JAVA;
echo $LOGO;
echo $MENUEhtml;


$curdatetime = date("d.m.Y H:i:s");
echo "$curdatetime<br/><br/>";

$ADDED=$SKIPPED=0;

function InsertProviderLines($File) {
    global $SPACER3;
    $handle = fopen("$File", "r");
    $Lines = fread($handle, filesize($File));
    fclose($handle);
    $i=-1;
    $output = explode("\n", $Lines);
    foreach($output as $line) {
        if ($line == "") { continue; }
        $tmp = explode("\"", $line);
        if (preg_match('/^[0-9]+/', $tmp[0])) {
            $i++;
            #array fuer die sortierung
            $CI_Array["$i"] = $tmp[0];
            $PROV["$tmp[0]"] = $tmp[1];
        }
    }
    unset($CI);
    sort($CI_Array);
    foreach($CI_Array as $idx => $CI) {
        $CAID = substr("$CI", 0, -5);
        $IDENT = substr("$CI", -5);
        $PT = CharFilter("$PROV[$CI]");
        $PT = preg_replace("/ +/", " ", $PT);

        #echo "<b>$CAID:$IDENT</b> $SPACER3 $SPACER3 ---> $SPACER3 $SPACER3 <b>$PT</b> </br>";        
        #mysql insert...
        InsertProvInfo("$CAID","$IDENT","$PT");
    }
    echo "</br>Done!</br>";
}


function InsertProvInfo($CAID,$IDENT,$ProvText) {
    global $DB_con, $table;
    global $SPACER, $SPACER2, $SPACER3, $ADDED, $SKIPPED;
    $ProvText = addslashes($ProvText);

    #prüfen ob bereits vorhanden
    $result = $DB_con->query("SELECT id FROM ".$table["cp"]." WHERE CAID='$CAID' AND IDENT='$IDENT'");
    $RES = $DB_con->fetch_array($result);
    if (!empty($RES)) {
        $OK = 0;
        $SKIPPED++;
        #echo "---- ALREADY ADDED ---- <b>$CAID:$IDENT</b> $SPACER $SPACER --> $SPACER $SPACER <b>$ProvText</b> </br>";
    } else {
        $OK = 1;
        #echo "<b>$CAID:$IDENT</b> $SPACER3 $SPACER3 ---> $SPACER3 $SPACER3 <b>$ProvText</b> </br>";
    }
    #einfuegen fals noch nicht vorhanden
    if ($OK) {
        $ADDED++;
        $sql = "INSERT INTO ".$table["cp"]." VALUES (NULL, '$CAID', '$IDENT', '$ProvText', NULL)";
        //$sql2= "INSERT INTO ".$table["ciu"]." SET chaninfoid='$id', user='$USERNAME', comment='$COMMENT'";
        $insert = $DB_con->query($sql);
    }
}


echo "InsertProviderLines: $ProvidersFile</br>";
InsertProviderLines($ProvidersFile);
echo "</br>Added: $ADDED";
echo "</br>Skipped: $SKIPPED</br>";

?>


<?php echo $footer; ?>
</body>
</html>

das bearbeiten der channelinfo:
edit_chaninfo.php:
PHP:
<?php

ob_implicit_flush(true);
#session_start();
$ScriptVersion = "0.02";
require("global.php");
$_SELF=$_SERVER['PHP_SELF'];
$DEBUG = 0;

$html ="<?php flush(); ?>\n";
//$BODY ="<body onLoad=\"focus();addscoreform.score.focus()\">\n";

$newCAID = isset($_POST["newCAID"]) ? $_POST["newCAID"] : "";
$newIDENT = isset($_POST["newIDENT"]) ? $_POST["newIDENT"] : "";
$newSID = isset($_POST["newSID"]) ? $_POST["newSID"] : "";
$newChantext = isset($_POST["newChantext"]) ? $_POST["newChantext"] : "";
$EditIT = isset($_GET["EditIT"]) ? $_GET["EditIT"] : "";
$DeleteIT = isset($_GET["DeleteIT"]) ? $_GET["DeleteIT"] : "";
$DEBUG = 0;
$th0='align="center" valign="middle"';
$td0='align="center" valign="middle"';
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<?php echo $header; ?>
<?php echo $BODY; ?>
<?php echo $JAVA; ?>
<?php echo $LOGO; ?>
<?php echo $MENUEhtml; ?>


<?php
if (isset($EditIT) AND !empty($EditIT)) {
    
    
}
if (isset($DeleteIT) AND !empty($DeleteIT)) {
    //$delete = $DB_con->query("DELETE ".$table["ci"]." WHERE id=$DeleteIT");
    $update = $DB_con->query("UPDATE ".$table["ci"]." SET deleted = 1 WHERE id = $DeleteIT");
    echo "<b>DELETED !<b/>";
    exit;
}


function GetChanInfoLines_db() {
    global $DB_con, $table;
    global $COUNT, $_SELF, $SPACER, $SPACER3, $DeleteIcon, $EditIcon;
    $th0='align="center" valign="middle"';
    $td0='align="center" valign="middle"';
    
    $select = "id,CAID,IDENT,SID,ChanText,updated,deleted,validated";
    $result = $DB_con->query("SELECT $select FROM ".$table["ci"]." WHERE deleted = 0 ORDER BY CAID,IDENT,SID");
    while ($row = $DB_con->fetch_array($result)) {
        $id = $row["id"];
        $CAID = $row["CAID"];
        $IDENT = $row["IDENT"];
        $SID = $row["SID"];
        $CT = $row["ChanText"];
        $COUNT++;
        $DeleteHtml='<a href="'.$_SELF.'?DeleteIT='.$id.'" title="Delete"><img src="'.$DeleteIcon.'" width="10" height="10" border="0"></a>';
        $EditHtml='<a href="'.$_SELF.'?EditIT='.$id.'" title="Edit"><img src="'.$EditIcon.'" width="10" height="10" border="0"></a>';
        echo "<tr>\n";
        echo '<td '.$td0.'><input name="CAID" type="text" value="'.$CAID.'" size="4" maxlength="4"> </td>';
        echo '<td '.$td0.'><input name="IDENT" type="text" value="'.$IDENT.'" size="6" maxlength="6"> </td>';
        echo '<td '.$td0.'><input name="SID" type="text" value="'.$SID.'" size="4" maxlength="4"> </td>';
        echo '<td> <b><input name="Chantext" type="text" value="'.$CT.'" size="50"></b> </td>';
        echo "<td> $DeleteHtml </td>";
        echo "<td> $EditHtml </td>\n";
        echo "</tr>\n";
    }
}

echo '<form method="POST">';
echo '
<table border="1" cellpadding="5" cellspacing="0">
 <tr>
  <th '.$th0.'> CAID </th><th '.$th0.'> IDENT </th><th '.$th0.'> SID </th><th '.$th0.'> ChanText </th><th '.$th0.'></th><th '.$th0.'></th>
 </tr>
';
GetChanInfoLines_db();
echo "</table>";
echo "<p>Lines: <b>$COUNT</b></p>\n";
echo '<br/><p>
 <p><b>Add new Channel:</b></p>
 CAID: <input name="newCAID" type="text" value="" size="4" maxlength="4">
 '.$SPACER.' '.$SPACER.'
 IDENT: <input name="newIDENT" type="text" value="" size="6" maxlength="6">
 '.$SPACER.' '.$SPACER.'
 SID: <input name="newSID" type="text" value="" size="4" maxlength="4">
 '.$SPACER.' '.$SPACER.'
 Chantext: <input name="newChantext" type="text" value="" size="50">
 </p>
 <p><input type="submit" value=" Absenden ">
 <input name="reset" type="reset" id="reset" value=" Zurücksetzen "></p>
</form>
';


?>


<?php echo $footer; ?>
</body>
</html>

config.php:
PHP:
<?php

require('sql/config.php');
require("sql/db_mysql.php");


### config - start

$ChanInfoFile = "./CCcam.channelinfo";
$ProvidersFile = "./CCcam.providers";

$table["ci"] = 'channelinfo';
$table["cp"] = 'providers';
$table["ciu"] = 'channelinfoupdates';
$table["ca"] = 'channelinfousers';

### config - end


if (!file_exists("$ChanInfoFile")) { die("ERROR: File doesnt exist: $ChanInfoFile</br>"); }

?>

sql/config.php:
PHP:
<?php

// type of database running (atm only mysql supported!)
$dbservertype='mysql';

// dbase ident
$db_servername = "127.0.0.1";
$db_username = "root";
$db_password = "";
$db_name     = "cccam";

// salted hash prefix for user-pwd's...
$SALTED = "fwzhf8fh289fh";

// technical email address - any error messages will be emailed here
$technicalemail="email@gmail.com";

// use persistant connections to the database
// 0 = don't use
// 1 = use
$usepconnect=0;

?>
sql/functions.php:
PHP:
<?php

function CharFilter($string) {
  $chars = array('ä'=>'ae','ü'=>'ue','ö'=>'oe','ß'=>'ss');
  $newstring = strtr($string,$chars);
  return $newstring;
}

/**
 * showarray()
 *
 * Dump all contents of an array in HTML (kinda)
 *
 * @param array
 *
 */
function showarray($array) {
    echo "<pre>\n";
    var_dump($array);
    echo "</pre>\n";
}

function mksalt($pwlength) {
  srand((double)microtime()*1000000);
  $Zeichen = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  $pawd = "";
  while (strlen($pawd) < $pwlength) {
     $pawd .= substr($Zeichen,(rand()%(strlen($Zeichen))),1);
  }
  return $pawd;
}
function crypt_pw($plainpw) {
  $salt = mksalt(8);
  if ((CRYPT_MD5))          // CRYPT_MD5 = php_global_const
  {
     $salt = "\$1\$$salt\$"; } else { $salt = substr($salt,0,2); }
  return crypt($plainpw, $salt);
}

?>

sql/db_mysql.php:
PHP:
<?php

class DB_Sql {
  var $database = "";

  var $link_id  = 0;
  var $query_id = 0;
  var $record   = array();

  var $errdesc    = "";
  var $errno   = 0;
  var $reporterror = 1;

  var $server   = "localhost";
  var $user     = "root";
  var $password = "";

  var $appname  = "CIUM";
  var $appshortname = "CIUM (CCcamInfo Update Manager)";
  var $error_sent = FALSE;
  var $must_be_connected = TRUE;

  function connect($must_be_connex = TRUE) {
    global $usepconnect;
    // connect to db server
    if(!$must_be_connex){$this->must_be_connected = FALSE;}
    if ( 0 == $this->link_id ) {
      if ($this->password=="") {
        if ($usepconnect==1) {
          $this->link_id=mysql_pconnect($this->server,$this->user);
        } else {
          $this->link_id=mysql_connect($this->server,$this->user);
        }
      } else {
        if ($usepconnect==1) {
          $this->link_id=mysql_pconnect($this->server,$this->user,$this->password);
        } else {
          $this->link_id=mysql_connect($this->server,$this->user,$this->password);
        }
      }
      if (!$this->link_id) {
        $this->halt("Link-ID == false, connect failed");
      }
      if ($this->database!="") {
        if(!mysql_select_db($this->database, $this->link_id)) {
          $this->halt("cannot use database ".$this->database);
        }
      }
    }
  }

  function select_db($database="") {
    // select database
    if ($database!="") {
      $this->database=$database;
    }
    // echo "Select $this->database<br>";
    if(!mysql_select_db($this->database, $this->link_id)) {
      $this->halt("cannot use database ".$this->database);
    }

  }

  function query($query_string) {
    global $query_count,$showqueries,$explain,$querytime;
    // do query

    if ($showqueries) {
      echo "Query: $query_string\n";

      global $pagestarttime;
      $pageendtime=microtime();
      $starttime=explode(" ",$pagestarttime);
      $endtime=explode(" ",$pageendtime);

    #  $beforetime=$endtime[0]-$starttime[0]+$endtime[1]-$starttime[1];

      #echo "Time before: $beforetime\n";
    }

    $this->query_id = mysql_query($query_string,$this->link_id);
    if (!$this->query_id) {
      $this->halt("Invalid SQL: ".$query_string);
    }

    $query_count++;

    if ($showqueries) {
      $pageendtime=microtime();
      $starttime=explode(" ",$pagestarttime);
      $endtime=explode(" ",$pageendtime);

      #$aftertime=$endtime[0]-$starttime[0]+$endtime[1]-$starttime[1];
      #$querytime+=$aftertime-$beforetime;

      #echo "Time after:  $aftertime\n";

      if ($explain and substr(trim(strtoupper($query_string)),0,6)=="SELECT") {
        $explain_id = mysql_query("EXPLAIN $query_string",$this->link_id);
        echo "</pre>\n";
        echo "
        <table width=100% border=1 cellpadding=2 cellspacing=1>
        <tr>
          <td><b>table</b></td>
          <td><b>type</b></td>
          <td><b>possible_keys</b></td>
          <td><b>key</b></td>
          <td><b>key_len</b></td>
          <td><b>ref</b></td>
          <td><b>rows</b></td>
          <td><b>Extra</b></td>
        </tr>\n";
        while($array=mysql_fetch_array($explain_id)) {
          echo "
          <tr>
            <td>$array[table]&nbsp;</td>
            <td>$array[type]&nbsp;</td>
            <td>$array[possible_keys]&nbsp;</td>
            <td>$array[key]&nbsp;</td>
            <td>$array[key_len]&nbsp;</td>
            <td>$array[ref]&nbsp;</td>
            <td>$array[rows]&nbsp;</td>
            <td>$array[Extra]&nbsp;</td>
          </tr>\n";
        }
        echo "</table>\n<BR><hr>\n";
        echo "\n<pre>";
      } else {
        echo "\n<hr>\n\n";
      }
    }

    return $this->query_id;
  }

  function fetch_array($query_id=-1,$query_string="") {
    // retrieve row
    if ($query_id!=-1) {
      $this->query_id=$query_id;
    }
    if ( isset($this->query_id) ) {
      $this->record = mysql_fetch_array($this->query_id);
    } else {
      if ( !empty($query_string) ) {
        $this->halt("Invalid query id (".$this->query_id.") on this query: $query_string");
      } else {
        $this->halt("Invalid query id ".$this->query_id." specified");
      }
    }

    return $this->record;
  }

  function halt($msg) {
      $this->errdesc=mysql_error();
      $this->errno=mysql_errno();
      // prints warning message when there is an error
      global $technicalemail;
      if ($this->reporterror==1) {
          $this->error_sent = TRUE;
          $message="Database error:<br> $msg<br>\n";
          $message.="mysql error: $this->errdesc\n<br>";
          $message.="mysql error number: $this->errno\n<br>";
          $message.="Date: ".date("l dS of F Y h:i:s A")."\n<br>";
          $message.="Script: ".getenv("REQUEST_URI")."\n<br>";
          $message.="Referer: ".getenv("HTTP_REFERER")."\n<br>";

          echo "<br>$message<br>";
          echo "\n<!-- $message -->\n";
          echo "</td></tr></table>\n<p>There seems to have been a slight problem with the database.\n";
          echo "Please try again by pressing the refresh button in your browser.</p>";
          echo "An E-Mail has been dispatched to our <a href=\"mailto:$technicalemail\">Technical Staff</a>, who you can also contact if the problem persists.</p>";
          echo "<p>We apologise for any inconvenience.</p>";
          if($this->must_be_connected){
              $message = "Requiered DB_Connection is not available or occured errors !<br>$this->appshortname will be stopped now !<br>".$message;
              @mail ($technicalemail,"$this->appshortname Database error!",$message);
              die("");
          }else{
              if(!$this->error_sent){
                  $this->error_sent = TRUE;
                  $message = "NOT Requiered DB_Connection is not available or occured errors !<br>$this->appshortname will try to work again !<br>This mail was sent as the first error occured only. ".$message;
                  @mail ($technicalemail,"$this->appshortname Database error!",$message);
                  return $this->link_id = FALSE;
              }
          }
      }
  }
}
?>

zum erstellen der mysql datenbank:
Code:
--
-- Tabellenstruktur für Tabelle `channelinfo`
--

CREATE TABLE IF NOT EXISTS `channelinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `CAID` varchar(4) NOT NULL,
  `IDENT` varchar(6) NOT NULL,
  `SID` varchar(4) NOT NULL,
  `ChanText` text NOT NULL,
  `updated` int(1) NOT NULL DEFAULT '0',
  `deleted` int(1) NOT NULL DEFAULT '0',
  `validated` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `channelinfoupdates`
--

CREATE TABLE IF NOT EXISTS `channelinfoupdates` (
  `chaninfoid` int(11) NOT NULL,
  `userid` int(11) NOT NULL,
  `comment` text NOT NULL,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `channelinfousers`
--

CREATE TABLE IF NOT EXISTS `channelinfousers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` text NOT NULL,
  `password` varchar(255) NOT NULL,
  `access` varchar(10) NOT NULL DEFAULT 'user',
  `added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `providers`
--

CREATE TABLE IF NOT EXISTS `providers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `CAID` varchar(4) COLLATE latin1_german1_ci NOT NULL,
  `IDENT` varchar(4) COLLATE latin1_german1_ci NOT NULL,
  `Provider` text CHARACTER SET latin1 NOT NULL,
  `added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;


...ich hoffe hier ist keiner so dreist und klaut meinen code um ihn später als seinen eigenen auszugeben! (is leider schon vorgekommen!)...



//EDIT: anhand dieser daten könnte man sich dann auch eine oscam.srvid erstellen lassen
 
Zuletzt bearbeitet:
AW: CCcam Info Update Manager -- zum pflegen der channelinfo und providers

Hallo RoterBaron,

deine Idee hört sich recht praktisch an, aber wo genau liegt jetzt dein Problem?
Wie soll unsere Hilfe denn konkret aussehen?

Gruß, Rüdiger
 
AW: CCcam Info Update Manager -- zum pflegen der channelinfo und providers

Mein problem ist das design, mit templates tu ich mich irgendwie schwer... und auch wie ich das genau umsetzen sollte also vom aufbau herund vllt hab ich ja irgendwo noch einen denkfehler oder es gäbe was am code zu optimiern weil ein bischen lahm is das leider auch noch beim importieren...

frage wäre zb auch wie man in der edit_chaninfo.php ein feld bearbeiten kann und nur einen knopp zur bearbeitung hat und er dann nicht alle daten aus der tabelle übergibt sondern nur das geänderte?

und dann wär auch die frage wie bzw ob ich das überhaupt machen sollte - die channelinfo anhand der providers optisch zu unterteilen... und wie man eben den ganzen zb 1722 abschnitt auswählen könnte ohne jede einzelne zeile anzuwählen um die dann in eine datei zu exportieren
 
AW: CCcam Info Update Manager -- zum pflegen der channelinfo und providers

Hallo,

das Design, finde ich, ist erstmal nebensächlich. Wenn du sauberes HTML erzeugst, dann kann man das später mittels CSS noch beliebig durchstylen.
Eine einfache Template Engine würde ich dir aber allemal empfehlen.Es muss ja nicht gleich Smarty sein, mit vLibTemplate oder ETS sollten auch Einsteiger zurecht kommen. HTML und PHP zu vermischen ist jedenfalls überhaupt kein guter Stil, insbesondere wenn du objektorientiert programmierst.

Wichtiger ist aber eine korrekte "Input Sanitation"!
Zudem solltest du deine Symbolnamen vereinheitlichen (Ungarische Notation) und den Quelltext sauber kommentieren (phpDocumentor).

Das Interface kann man mit jQuery dann noch etwas aufhübschen, um die Performance zu steigern kann man vllt. die Anzahl der SQL Abfragen optimieren.

Hoffe ich konnte dir ein paar Anregungen geben..

Gruß, Rüdiger
 
Zuletzt bearbeitet:
Zurück
Oben