Php Problem_HILFE!

Liebe/-r Experte/-in,

ich fange nun ja mit php-programmierung (bin ganz neu) an und nun ist meine erste Aufgabe die ich erledigen soll, aber NICHT KANN!!! Und die Zeit drängt! Könnt ihr mir evtl. helfen… (ist ja freiwillig!!!)

Ich soll 3 Bereiche mit je3 Radio-Buttons -> rot, gelb, grün (werden aus der Datenbank gezogen) erstellen.
Bereich 1: Ehemaliger Status: die Buttons sind „readonly“
Bereich 2: Aktueller Status: Beim Ändern einer der Radio-Buttons erscheint ein Fenster -> „Kommentar“ (da soll man einfügen, warum man den Button geändert hat) und auf „OK“ oder „Abbrechen“ klicken. Beim Klick auf „OK“ erscheint das Hauptfenster mit dem Frame (Bereich), wo steht: Wann wurde die Änderung durchgeführt (Datum), von wem (ID), und Kommentar (Warum). Und der Status vom Bereich 2, geht in Bereich 1, d.h. der Radio-Button vom Bereich 2 ist nun im Bereich 1 (Ehemaliger Status) gesetzt.
Bereich 3: Ist von den 2 (von „Ehemeliger Status“ und „Aktueller Status“) unabhängig. Wenn jemand ein Radio-Button ändert, erscheint ein Fenster -> „Kommentar“ (da soll man einfügen, warum man den Button geändert hat) und auf „OK“ oder „Abbrechen“ klicken. Beim Klick auf „OK“ erscheint das Hauptfenster mit dem Frame, wo steht: Wann wurde die Änderung durchgeführt (Datum), von wem (ID), und Kommentar (Warum).

Ich hoffe, habe verständig erklärt. Und bitte um Hilfe!!! Herzlichen Dank!!!

Hallo,

bin zur Zeit sehr beschäftigt, sorry. Verstehe dein Problem auch nicht so ganz.

Gruß, Carsten

Hallo Nadine,

dies scheint bei weitem kein ausschließliches PHP-Problem zu sein. Ich vermute, dass dein Problem an einer ganz anderen Stelle zu setzen ist.
Das Persitsieren und Lesen der Daten aus der Datenbank selbst, wird vermutlich kein Problem darstellen, falls doch : Die Bibiotheken mysql_* helfen dir da weiter. Hier erfährst du wie eine Verbindung zur Datenbank aufbaust und diese nutzt.
Um das aktuelle Datum herauszufinden, gibt es die Methode „time()“. Sie liefert dir den aktuellen Unix-Timestamp in Sekunden. Mit der Methode „date(format, timestamp)“ kannst du die Ausgabe deinen Bedürfnissen anpassen.
In der Anzeige muss dann nur noch via „if“-Anweisungen das „checked“-Attribut an die entsprechende Stelle gesetzt und der Kommentar positioniert werden. So das ist alles zum PHP.
Radiobutton und Forms scheinen bekannt zu sein, daher werde ich hier kein Wort verlieren. Man fügt nun zum Radiobutton das Attribut "onClick=„anyJSScript()“ ein. In dieser Methode fängt man also das oben beschriebene Klickverhalten ab. Hier kannst du via JavaScript die Methode „var input = prompt(‚any Text‘)“ aufrufen. Dies dient deinem Kommentar.
Nun sind wir an der Stelle, an der alle Backend- und Frontendfunktionalitäten abgehandelt sind. Jetzt bleibt die Frage zu klären, wie die Daten zum Backend und im Endeffekt in die DB gelangen.
Hierzu gibt es nun 2 Wege:

  1. via AJAX oder 2. via und der Methode submit() (JavaScript). Das ist jetzt Geschmacktsache.

Falls du nach PHP-Methoden suchst kann ich dir 2 Sachen empfehlen:
Eclipse-PHP-Umgebung + http://www.php.net
Hier bekommst du alle Informationen, die du zum Entwickeln benötigst.

Viel Erfolg und Grüße

Hallo Michael, vielen Dank für deine Tipps. Komme aber nicht so weit weiter…

ich habe nun drei Radio-Buttons:

$rs .= „“;
$rs .= „\n“;
$rs .= „“ . $_SESSION[‚LABEL_CURRENT_STATUS‘]. "
„;
$rs .=“" . $_SESSION[‚LABEL_RED‘]. "
„;
$rs .=“" . $_SESSION[‚LABEL_YELLOW‘]. "
„;
$rs .=“" . $_SESSION[‚LABEL_GREEN‘]. "
„;
$rs .=“
";
$rs .= „“;
$rs .= „“;
$rs .= „“;

wenn ich auf einen Button klicke (bzw. aktiviere) geht ein Fenster auf, wo man Kommentar (warum haben sie die Button aktiviert bzw. geändert)schreiben soll. Wenn der Kommentar geschrieben ist, drücke ich im Fenster auf „OK“ oder „Abbrechen“ -> bei „OK“ schließt sich das fenster und der Kommentar wird in eine textarea (mit datum, id und zeit) übergehen.

//Textarea

$rs .= „“;
$rs .="";
$rs .= „“ . $_SESSION[‚CHANGES‘] . "
„;
$rs .= „“ . $arrRows[‚project_description‘] . „“;
$rs .=“";
$rs .="";
$rs .= „“;

Nun habe ich mit funktion:

function anyJSScript(Ereignis)
{

if(!Ereignis)
Ereignis = window.event

who = Ereignis.target;
if(!Ereignis.target)
who = Ereignis.srcElement;

if(who.checked == true)
{

//var input = prompt("Bitte schreiben Sie Ihr Status-Wechsel-Kommentar: ");

angefangen. Weiter komme ich leider nicht. Habe 0 Ahnung!!! Falls du mir weiterhilfst… DANKE!!!

Hallo Nadine,

du bist nun soweit, dass du alle Datensätze für eine persitierung zusammen hast. Damit bleibt nun zu klären, wie diese Daten zur DB gelangen. Hierfür hast du nun 2 Möglichkeiten:

  1. via -Tag
    du generiest eine für den Benutzer unsichtbare Form in der du deine zu übergebenen Werte schreibst. Du hast bereits eine definiert, in der du die Werte zwischenspeicherst. Du setzt nun um dieses Tag ein -Tag:

[Code-Sample]

[/Code-Sample]
Wie eine Form generell funktioniert setze ich mal als gegen voraus, falls nicht selfhtml hilft :smile:
In deiner Textarea hast du den Event onChange definiert. Dieses Ereignis nutzt du nun um die Form zu verschicken. Dies geht wiefolgt:

document.getElementById('myFORM'].submit();  

Nun wird die gleiche Seite neu geladen (wg. action="" alertnative Seiten sind natürlich auch möglich) mit dem Attribut „textytext“ und dem Wert des geschriebenen.
Auf die Variable greifst du nun wiefolgt zu:

if(isset($\_GET['textytext'])){ // dient zur Überprüfung ob überhaupt vorhanden  
 $myTextyText = $\_GET['textytext'];  
 echo $myTextyText;  
}  

Eine Weiterverarbeitung kann erfolgen :smile:

  1. via AJAX:
    Ziel und Methode ist dem in 1) identisch, nur über einen anderen Weg. Man ertellt sich ein neues PHP-Skript mit der Abhandlung der Datenverarbeitung.
    Nun nutzt man folgendes Skript (findet man eigentl. sofort, sobald man nach AJAX sucht.
function send\_request(url, params, isPost) {  
 if(params != null) {  
 url +='?'+params;  
 }  
 response = false;  
 if (window.XMLHttpRequest) {  
 response = new XMLHttpRequest();  
 } else if (window.ActiveXObject) {  
 try {  
 response = new ActiveXObject("Msxml2.XMLHTTP");  
 } catch(e) {  
 try {  
 response = new ActiveXObject("Microsoft.XMLHTTP");  
 } catch(e) { }  
 }  
 }   
 if (!response)  
 return false;   
 response.abort();  
 response.onreadystatechange = performReadyState()  
 if(this.debug) alert(url);  
 if (isPost == null) {  
 response.open('GET', url, true);  
 response.send(null);   
 } else {  
 response.open('POST', url, true);  
 response.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  
 response.send(post);  
 }   
}  
  
function performReadyState(){  
 try {  
 if (response.readyState == 4) {  
 if(response.status == 200 || response.status == 0) {  
 alert(response.responseText);  
 }  
 }  
 } catch(e) {}   
}  

Hier wird einfach nur eine neue Seite aufgerufen mit der URL des remote-scripts und sobald die Antwort des Skripts vorhanden ist, die funktion performReadyState ausgeführt.

Dies sind die beiden Wege, die du nun nutzen kannst. Empfehlen würde ich dir 1), da es sich hierbei um den intuitiveren und leichter nachvollziehbaren Weg handelt. Welche Weg du nun wählst bleibt natürlich dir überlassen :smile:

Noch eine Randbemerkung zum Code:
Nutze im Umgang mit HTML-Ausgaben lieber das einfache Hochkomma, da dir dies viel an escapen spart und lesbarer bleibt.

Grüße und viel Erfolg
Mike

Hi Mike,

sorry dass ich nerve, aber nun habe ich nur bahnhof verstanden!!! (vielleicht kommentare dazu)

was ich brauche ist:

Beim Click aufs Button:

$rs .="" . $_SESSION[‚LABEL_RED‘]. "
";

wird die Funktion WindowOpen() aufgerufen.

function WindowOpen(objRadio)
{
if (objRadio.checked)
WindowOpen = window.open(objRadio, „KommentarFenster“, ");
WindowOpen.focus();
document.getElementById(„project_description_pc“).value=objRadio;
var objRadio = prompt("Bitte geben Sie Ihr Status-Wechsel-Kommentar an: „, „Kommentar“);
document.write(“**Kommentar " + objRadio + „“);

}

Bei der Funktion geht das Fenster mit einer Textarea auf, drin wird Kommentar geschrieben. Ist die obere function (WindowOpen) richtig??? Mir fehlt da bestimmt was.

Sobald man das Kommentar in function WindowOpen() geschrieben hat, drückt man auf „OK“-Button und das Kommentar wird da sichtbar s.u. (Kommentar+Id+Zeit(wann erstellt wurde):

$rs .= „“;
$rs .="";
$rs .= „“ . $_SESSION[‚CHANGES‘] . "
„;
$rs .= „“ . $arrRows[‚project_description‘] . „“;
$rs .=“";
$rs .="";
$rs .="";

Hast eine Lösung für mich???
Entschuldige, aber für Anfänger ist dies bissle zuviel!!! Muss aber gemacht werden!!!**

Hallo Nadine,
Ich bin da jetzt nur gaaaaaanz flüchtig drüber:
Das was du suchst, sollte das hier in abgespeckter Form darstellen.

<?php if(isset($_GET['flag'])){<br /> echo $\_GET['id']. '  
';  
 echo $\_GET['time']. '  
';  
 echo $\_GET['reason']. '  
';  
}  
?\>  
  
 Red  
 Yellow  
 Green  
  
  
  
  
function handleClick(obj){  
 var reason = prompt('WHY?');  
 var value = (obj.id=="red") ? 'red' : '';   
 value = (obj.id=="yellow") ? 'yellow' : '';   
 value = (obj.id=="green") ? 'green' : '';  
  
 document.getElementById('hiddenReason').value = reason;  
 document.getElementById('myForm').submit();  
}  
  

Muss zur Eingabe der Daten ein neues Fenster geöffnet werden? Würde vieles unnötigerweise verkomplizieren. Alertnative ein erstellen mit Position:absolut und visibility:hidden und bei onClick die Sichtbarkeit auf ‚visible‘ setzen. Damit bleibst im gleichen Script und kannst auf die Werte in der Textarea einfacher zugreifen.

Grüße
Mike

Hallo Nadine_2706,

ist schon verständlich was du machen willst. Aber wo genau liegt dein Problem?

Und btw. mit Frames wird schon lange nicht mehr gearbeitet.
Ich bevorzuge Web 2.0 gemäß AJAX. Hier gibt es auch einige gute Java Script Frameworks. z.b. jQuery.

Damit kannst du deine Abfragen machen und die Ergebnise direkt anzeigen ohne die Webseite komplett neu zu laden.

Ich hoffe das hilft weiter.