Script zum Bearbeiten der DB

Alle Fragen und Probleme zur aktuellen Randshop Version 2.3 können hier gepostet werden.

Moderatoren: Magnus, mmaass, ablass

Script zum Bearbeiten der DB

Beitragvon BOBO » Fr 9. Mai 2008, 13:36

Wie versprochen, gebe ich nachfolgendes Script zur freien benutzung weiter.
Vielleicht findet auch ein guter PHP-Prog. die Ungereimtheit, die wir mit unseren einfach Kenntnissen nicht in den Griff bekommen haben.
WAS MACHT DIESES SCRIPT?
Nach einem CSV-Import habe ich Unmengen an Datensätzen zu bearbeiten. Und ich möchte diese aber nicht den Kunden unbearbeitet vorwerfen.
Also müssen die einzelnen Artikel in der Tabelle randshop_artikel offline gesetzt werden, obwohl der Lagerbestand größer als 0 ist. Nach der Bearbeitung von Artikelgruppen, werden diese dann wieder onlinegesetzt.
In Kombination mit verschiedenen Lagerbeständen, Offline~, Onlinesetzen kann man sehr gut die partielle Freigabe/ Sperrung von Artikeln händeln.
Der Shop kann somit ungestört weiterlaufen.

Einziges Problem sind negative Lagerbestände, die wir mit den Script noch nicht 100% in Griff haben. Der Zähler zeigt falsche Werte an!
Vielleicht findet jemand den Fehler?

Und ich betone, ich bin keine PHP-Programmierer, ebensowenig mein Sohn, der dieses Script mehrfach umgeschrieben hat, um den Fehler zu finden...
Kann uns jemand helfen?


Voraussetzung:
Die Tabellennamen der Datenbank haben den Präfix randshop_ !
Die Abarbeitungsliste wird in einer Textdatei var.txt abgelegt.

Notation: Zahl(0=ff; 1=on)|Artikelnummer(alpanum.)|Grenzwert(Lager)ENTER

Speicher dieses Daten im gleichen Verzeichnis des Scriptes als var.txt ab.

Erläuterung des korrekten Bsp.:

#1 Setze alle Artikel mit der Artikelnummern RV 01*'und Stückzahl>=10 auf Online:

1|RV 01%|10
------------------------------

#2 Setze alle Artikel mit der Artikelnummern '* 1606' und Stückzahl <=0 auf offline

0|% 1606|0
-----------------------------

#3 Setze alle Artikel mit der Artikelnummern 'PREI *' und Stückzahl <5 auf online

1|PREI %|5
-----------------------------

# Setze alle Artikel mit der Artikelnummern 'BR *' auf offline, unanhängig vom Lagerbestand.
(Zulässig sind die Zeichen "x" und "X")

0|BR %|X
-----------------------------
###############[Darstellung einer korrekten Abarbeitungsliste - var.txt ]#################
##### keine Leerzeilen, keine Leerzeichen hinter einem Satz der Abarbeitungsliste#########
1|RV 01%|10
0|% 1606|0
1|PREI %|5
0|BRTG %|X
###############[Ende]###################

FEHLERHAFTE BENUTZUNG FÜHRT ZU SCHWERWIEGENDEN FEHLERN IN DER SPALTE 'aktiv'
ODER ZUM ABBRUCH DES SKRIPTES.
ICH ÜBERNEHME KEINERLEI HAFTUNG FÜR MÖGLICHE 'SCHÄDEN' DIE DURCH DAS SKRIPT VERURSACHT WERDEN.

!!! BENUTZUNG GESCHIEHT AUF EIGENE GEFAHR !!!

###############[Fehlerhafte Artikelkreisliste - so nicht eintragen!]##########
###############(>!< führt zum Abbruch) ##########
<- ! Leerzeile
1|RV 01%|10 <- korrekte Zeile
0|% 1606 <- ! Bestand fehlt
<- ! Leerzeile
0|P9- 10%01|5 <- korrekte Zeile
0|P4+ %|5 1|XT %|1 <- ! zwei Datensätze in einer Zeile
###############[Ende]###################

Alle Angaben müssen nahtlos, vollständig und fehlerlos sein.
Jeder Datensatz muss mit ENTER abgeschlossen sein, sonst ist der ordnungsgemäße
Ablauf nicht gewährleistet.
Die Bearbeitung erfolgt solange, bis ein Abbruch die Bearbeitung unterbricht.
Platzhalter ist das Prozentzeichen >%< !!!
Sonderzeichen aller Art sind nicht erlaubt!
Leerzeichen, +, -, * sind nur in der Spalte 'Artikelnummer' zulässig!


Code: Alles auswählen
<?
error_reporting('E_ALL');
session_start ();
$mysqlhost="localhost"; // MySQL-Host angeben
$mysqluser="user";       // MySQL-User angeben
$mysqlpwd="DeinPasswort"; // Passwort angeben
$mysqldb="Deine Datenbank"; // Gewuenschte Datenbank angeben
$connection=@mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen");
@mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht waehlen.");

$countx=0;
$county=0;

function update ($ar0, $var)
{
@mysql_query ("UPDATE randshop_artikel SET aktiv ='$ar0' WHERE id ='$var'") or die ("nix gefunden");
}

$file = "var.txt";
$f = fopen ($file, r);
WHILE ($ff = fgets ($f))
{
$arr[]=$ff;
}
fclose ($f);

echo "<pre>";
print_r ($arr);
echo "</pre>";

for ( $i=0; $i<sizeof($arr); $i++ )
{ $x[] = explode( "|", $arr[$i] ); }

echo "<pre>";
print_r ($x);
echo "</pre>";

for ($i=0;$i<sizeof($arr);$i++)
{

    if ($x[$i][2]!='')
    {

    $ar0=$x[$i][0];    //0(Offline)        1(Online)
    $ar1=$x[$i][1];    //Artikelnummer
    $ar2=$x[$i][2];    //Bestand im Lager
    settype ($ar2, "integer");
   


    $z = @mysql_query ("SELECT id, lager FROM randshop_artikel WHERE artikel_nr LIKE '$ar1'") or die ("Fehler bei SELECT");
             
    WHILE ( $y = mysql_fetch_assoc( $z ) )
          {
         
    if($ar2 == x OR $ar2 == X){$ar3 = x;}
 
     $var = $y[id];
     $lager = $y[lager];
    
     settype ($lager, "integer");

    if ( $ar0 == 0 )
       {
       
       if  ( $ar3 != x )
           {
           
           if ( $ar2 > $lager )
              {
              update ( $ar0, $var );
              $county ++;
              }
             
           }
       else{ update ( $ar0, $var );
             $county ++;           }
       
       }
else
       {
       
       if  ( $ar3 != x )
           {
           
           if ( $ar2 <= $lager )
              {
              update ( $ar0, $var );
              $countx ++;
              }
             
           }
       else{ update ( $ar0, $var );
             $countx ++;           }
       }

/*
    if ( $ar0 == 0 )
       {
       if ( $ar3 == 'x' OR $ar2 >= $y[lager] )
          { update( $ar0, $var );
           $county ++; }
       }

    if ( $ar0 == 1 )
       {
       if ( $ar3 == 'x' OR $ar2 <= $y[lager] )
          { update( $ar0, $var );
           $countx ++; }
       }
*/
                   
         }//End-WHILE

    }//End-if

}//End-FOR

/*
echo "§test:<pre>";
print_r ($test);
echo "</pre>";
*/

echo "§ar1:".$ar1."<br />";
echo "§ar2:".$ar2."<br />";
echo "§id?:".$var."<br />";

echo "Online gesetzt: ".$countx."<br />";
echo "Offline gesetzt: ".$county."<br /><br />";

?>
BOBO
 
Beiträge: 150
Registriert: So 2. Jan 2005, 12:02
Wohnort: SRB/ MOL

Zurück zu Allgemeines / Installation / Hilfe

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 8 Gäste