Hallo Forum!
Ich sitze seit einiger Zeit an einem Webvokabeltrainer, der inzwischen auch nutzbar genug für meinen Bedarf ist (Von Zeichensatzproblemen mal abgesehen, damit habe ich aber noch nicht genügend auseinandergesetzt).
Nun wollte ich dafür aber eine Import/Export-Funktion einbauen, auf dass man (bzw. ich) Vokabeln austauschen /zwischen zwei Accounts updaten kann.
Dabei habe ich mal wieder hinter meinem eigenen PHP-Horizont arbeiten müssen, nicht ganz ohne Erfolg allerdings. Ich habs soweit gebacken gekriegt. Dachte ich. Den nun führt die Funktion den Part nicht aus, den ich für den einfachsten gehalten habe. Und ich KOMM einfach auch nach mehreren Tagen Hirnmarterung und völliger Drogenabstinenz nicht drauf.
Kann mir jemand von euch aus der Patsche helfen? Ich weiß, dass ist kein generelles Problem, aber gebts zu, ihr helft doch gern..!
Ich komm leider nicht drumrum, den gesamten Code zu posten, da ich in meiner Verzweiflung keine Ahnung mehr habe, was den Fehler verursacht.
Ich hab ein wenig auskommentiert und ich hoffe die Tabulatoren bleiben beim Posten erhalten, sonst kann ich es auch irgendwie anders formatieren. Hab vergessen, wie das Forum mit Tabs umgeht.
Wenn jemand die Chose "live" sehen will: http://wookable.funpic.de
Habe euch einen Account test/test angelegt, könnt euch natürlich auch neu registrieren, das Programm ist sozusagen in der Betaphase oder Alpha 2 oder so.
Kann in den nächsten zwei Stunden leider nicht direkt antworten, danach stelle ich mich aber jedweder Kritik mutig entgegen.
Fallsjemand einen Kommentar zur Effektivierung des Codes anbringen möchte: Bitteschön, ich stümper immer bloß rum.
Aber zum Wesentlichen, danke fürs Durchhalten:
<?php
if(!$_GET['x'] OR !$_GET['y']) { // sehr billige userpruefung, lacht mich nicht aus. reicht um kiddies abzuschrecken
echo "Pfusch nicht rum, hilft niemand."; exit;
}
else {
include("database.php");
$que = mysql_query("SELECT * FROM users WHERE name IN ('".$_GET['x']."')");
$test = mysql_fetch_object($que);
if($test) {
$jup = mysql_query("SELECT * FROM users WHERE name IN ('".$_GET['x']."')");
while ($user = mysql_fetch_array($jup)) {
$name = $_GET['x'];
if($user['pass']==$_GET['y']) $string = "?x=".$name."&y=".$_GET['y'];
else $errormsg = "Das Passwort ist falsch!";
}
}
else $errormsg = "Der eingegebene Name ist nicht registriert.";
}
if($errormsg) {
echo $errormsg . '<br><a href="index.html">Zum Log In</a>'; exit;
} // ende der pruefung. hat bisher nix am script kaputt gemacht
if($_POST['export']) { // tuts soweit. habs hier drun falls der hund da begraben liegt. bin ratlos.
$spr = $_POST['sprachen'];
if($spr[0]=="all") $que = "SELECT * FROM wookable WHERE user IN('".$name."')";
else $que = "SELECT * FROM wookable WHERE user IN('".$name."') AND sprache IN ('".implode("','", $spr)."')";
$query = mysql_query($que);
$data = "";
while($csv=mysql_fetch_array($query)) {
$data .= '"'.addslashes($csv['sprache']).'";"'.addslashes($csv['bekannt']).'";"'. addslashes($csv['fremd']).'";"'.addslashes($csv['hinweis']).'";"'.$csv['phase'].'";"'.$csv['zeit'].'";""\n';
}
}
else if($_POST['import'] AND $_POST['csvdata']!="") { // hiermit will ich die eingegeben daten auffisseln und eingeben (updaten/neu einsetzen)
$csv = str_replace("\r\n","\n",$_POST['csvdata']);
$length = count($csv)-1;
if($_POST['format']=="csv") {
$csv = explode('";""\n"',$csv);
// hier hoere ich auf zu verstehen was ablaeuft hier funktionierts nicht mehr obwohl es sollte. oder?
for($i=0;$i<$length;$i++) { // need reg.exp
echo "muh";exit;
$help = explode('";"',$csv[$i],6);
$data['sprache'][$i] = stripslashes($help[0]);
$data['bekannt'][$i] = stripslashes($help[1]);
$data['fremd'][$i] = stripslashes($help[2]);
$data['hinweis'][$i] = stripslashes($help[3]);
$data['phase'][$i] = $help[4];
$data['zeit'][$i] = $help[5];
}
}
else if($_POST['format']=="txt") {
$csv = explode("\n",$csv);
for($i=0;$i<$length;$i++) {
$help = explode(";",$csv[$i],3);
$data['sprache'][$i] = "default";
$data['bekannt'][$i] = $help[0];
$data['fremd'][$i] = $help[1];
if(!$help[2]) $help[2] = "";
$data['hinweis'][$i] = $help[2];
$data['phase'][$i] = 0;
$data['zeit'][$i] = 0;
}
}
// mehr formate werden hier noch auftauchen
$olddata = mysql_query("SELECT * FROM wookable WHERE user IN('".$name."')");
while ($old = mysql_fetch_array($olddata)) {
$woinbekannt = array_search(trim($old['bekannt']),trim($data['bekannt']));
//heilloses kuddelmuddel: das soll es sein: doubles werden gefunden, im array geupdatet, keys werden gespeichert und nachher abgearbeitet. aber hier bin ich ja noch gar nicht.
if($woinbekannt AND $old['fremd']==$data['fremd'][$woinbekannt]) { //double
if($data['sprache'][$woinbekannt]=="default") $data['sprache'][$woinbekannt] = $old['sprache'];
if($data['hinweis'][$woinbekannt]=="") $data['hinweis'][$woinbekannt] = $old['hinweis'];
if($data['phase'][$woinbekannt]=="0" AND $data['zeit'][$woinbekannt]=="0") {
$data['phase'][$woinbekannt]=$old['phase'];
$data['zeit'][$woinbekannt]=$old['zeit'];
} // ich weiss nicht ob es funktioniert, weil mein script schon vorher versagt. oder kann es hieran liegen?
$doubles[] = $woinbekannt;
$data['id'][$woinbekannt] = $old['id'];
}
}
// now for the doubletrouble. sollte funktionieren, wenn denn daten übergeben worden waeren.
foreach($double AS $dbl) {
$freshdouble = mysql_query("UPDATE wookable Set sprache = '".$data['sprache'][$dbl]."', phase = ".$data['phase'][$dbl].",bekannt = '".$data['bekannt'][$dbl]."',fremd = '".$data['fremd'][$dbl]."',hinweis = '".$data['hinweis'][$dbl]."',zeit = '".$data['zeit'][$dbl]."' WHERE user IN ('".$name."') AND id = ".$data['id'][$dbl]);
unset($data['sprache'][$dbl],$data['bekannt'][$dbl],$data['fremd'][$dbl],$data['hinweis'][$dbl],$data['phase'][$dbl],$data['zeit'][$dbl],$data['id'][$dbl]);
}
for($i=0;$i<$length;$i++) { // nun noch den rest arbeiten bitteschoen.
if($data['bekannt'][$i]) $fresh = mysql_query('INSERT INTO wookable
(id
, user
, sprache
, bekannt
, fremd
, hinweis
, phase
, zeit
) VALUES ('', ''.$name.'', ''.$data['sprache'][$i].'', ''.$data['bekannt'][$i].'', ''.$data['fremd'][$i].'', ''.$data['hinweis'][$i].'', ''.$data['phase'][$i].'', ''.$data['zeit'][$i].'')');
}
$feedback = "Es wurden ".count($double)." Vokabeln aktualisiert und ".count($data['bekannt'])." Vokabeln neu eingefügt";
}
mysql_close(); // und finito
?>