Zurück   Flashforum > Flash und Server > Flash und Datenbanken

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-08-2007, 14:03   #1 (permalink)
as_alien
 
Benutzerbild von ramonDB
 
Registriert seit: Feb 2005
Beiträge: 27
Zeile aus mySql Tabelle löschen

Hi,
hab ein Problem mit einem PHP-script.
Ich versuche aus Flash bei Buttonclick einen bestimmten Eintrag zu löschen,
klappt aber leider nicht.
Kann mir vielleicht jemand einen Tip geben ?
Bin PHP-newbie, beschäftige mich erst seit zwei Tagen mit PHP.

in Flash habe ich folgenden code:
Code:
b_del.onRelease = function ()
{
	var delete_lv = new LoadVars ();
	delete_lv.vorname = "jiri";
	delete_lv.sendAndLoad("https://127.0.0.1/test/delete_test.php", delete_lv, "POST");
	trace("delete_clicked");
};
und meine php-datei:
Code:
<?php

$dbserver = "localhost";
$nutzer = "root";
$passwort = "pass";
$dbname = "test1";
$dbtab = "liste1";

$db = mysql_connect($dbserver,$nutzer,$passwort);
mysql_select_db($dbname,$db);

$loeschen = "DELETE FROM $dbtab vorname '$_POST["vorname"]'";
$loesch = mysql_query($loeschen);
?>
was mache ich falsch ?
ramonDB ist offline   Mit Zitat antworten
Alt 02-08-2007, 16:49   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
$loeschen = "DELETE FROM ".$dbtab." WHERE vorname='".$_POST["vorname"]."'";

löscht dann übrigens alle einträge mit diesem vornamen.

dir ist schon klar, das man das so niemals machen darf! da könnte dir jeder alles löschen oder noch schlimmeres. da gibt es keine sicherheit/abfrage, ob der löscher löschen darf und kein test, das dir da nicht jemand unerlaubte befehle sendet.

sende auf jeden fall eine bestätigung zurück, ob das löschen funktioniert hat oder nicht. und wenn nicht, dann z.b. die fehlermeldungen vom php bzw. mysql senden.

funktioniert das php ohne flash? sende einfach mal einen passenden url von einem browserfenster aus.

im flash unbedingt ein onLoad ergänzen, indem du die antwort erhältst und entsprechend reagieren kannst.
zum testen ein textfeld auf der bühne anlegen und da die rückmeldung vom onLoad anzeigen lassen. während dem programmieren interessieren natürlich eventuelle fehlermeldungen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (02-08-2007 um 16:56 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 02-08-2007, 23:42   #3 (permalink)
as_alien
 
Benutzerbild von ramonDB
 
Registriert seit: Feb 2005
Beiträge: 27
danke für Deine Antwort.
Funktioniert aber leider immer noch nicht, auch wenn ich
nur die php.datei vom Browser aus starte.
Nur wenn ich direkt den Namen in die php.datei schreibe gehts.
z.B: so
PHP-Code:
$loeschen "DELETE FROM $dbtab WHERE vorname = 'jiri'"
Aber das nützt mir ja nichts - ich will ja die Variable von
Flash aus ändern - also an die php.datei senden.

Sicherheitstechnisch muss man da sicherlich noch was machen, aber erstmal muss das Löschen auch funktionieren.
Hab auch mal die Punkte vor und hinter den Variablen weggelassen, hat aber auch nichts gebracht
ramonDB ist offline   Mit Zitat antworten
Alt 03-08-2007, 01:04   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
wenn das da geht:
$loeschen = "DELETE FROM $dbtab WHERE vorname = 'jiri'";

und das da nicht:
$loeschen = "DELETE FROM ".$dbtab." WHERE vorname='".$_POST["vorname"]."'";

dann steht in $_POST["vorname"] nicht 'jiri' drinn !?

p.s.
vom browser aus ist das natürlich $_GET["vorname"] falls du das an den url drannhängst. für POST musst du eine html-seite mit einem form erstellen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (03-08-2007 um 01:07 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 03-08-2007, 13:26   #5 (permalink)
as_alien
 
Benutzerbild von ramonDB
 
Registriert seit: Feb 2005
Beiträge: 27
wie kann ich das denn prüfen, ob die variable ("jiri") da ankommt?
das mit GET verstehe ich jetzt nicht - kann ich mir damit die Variable, die übergeben werden soll im Browser anzeigen?
Und wenn die da nicht ankommt, ist denn dann in meinem as.code was falsch?
ramonDB ist offline   Mit Zitat antworten
Alt 03-08-2007, 13:51   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
Zitat:
Zitat von ramonDB Beitrag anzeigen
wie kann ich das denn prüfen, ob die variable ("jiri") da ankommt?
echo("POST: ".$_POST["vorname"]);
echo("GET: ".$_GET["vorname"]);

Zitat:
Zitat von ramonDB Beitrag anzeigen
das mit GET verstehe ich jetzt nicht - kann ich mir damit die Variable, die übergeben werden soll im Browser anzeigen?
ww.xxx.de?vorname=jiri
das ist GET. kann jeder sehen, ändern und ist in der datenmenge beschränkt
POST wird nicht direkt an den URL angehängt

Zitat:
Zitat von ramonDB Beitrag anzeigen
Und wenn die da nicht ankommt, ist denn dann in meinem as.code was falsch?
das versuchen wir ja gerade heraus zu bekommen, indem wir dein php ohne flash aufrufen.
zuerst mal muss das php funktionieren. dann sehn wir nach, was mit dem as ist.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (03-08-2007 um 13:52 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 04-08-2007, 00:56   #7 (permalink)
as_alien
 
Benutzerbild von ramonDB
 
Registriert seit: Feb 2005
Beiträge: 27
also wenn ich
echo("POST: ".$_POST["vorname"]);
echo("GET: ".$_GET["vorname"]);
mit in die delete_test.php reinschreibe, steht da nur
POST GET wenn ich es im Browser ausführe ?

Habes auch in Flash noch probiert mit
trace(delete_lv.vorname);
wird aber nur undefined ausgegeben.

seltsamerweise schien es einmal beim Testen zu funktionieren, als ich die Zeile

var delete_lv = new LoadVars ();

in
var delete_lv:LoadVars = new LoadVars ();

geändert hatte.
Aber danach hats nicht mehr funktioniert, als ich andere
Namen ausprobiert habe.
Vielleicht wars auch nur ne Täschung - hab eh gerade ne kleine brain_blockade.
Werde es wohl morgen nochmal versuchen.

Geändert von ramonDB (04-08-2007 um 00:58 Uhr)
ramonDB ist offline   Mit Zitat antworten
Alt 04-08-2007, 23:34   #8 (permalink)
as_alien
 
Benutzerbild von ramonDB
 
Registriert seit: Feb 2005
Beiträge: 27
also mir fällt jetzt wirklich nichts mehr ein, wie ich diese
Löschfunktion hinkriegen kann.

Hab den code der php und der fla jetzt zigmal geändert,
alles mögliche ausprobiert, auch hier im Forum nach anderen
loadVars scripten gekuckt - aber es funzt nicht

Kann es daran liegen, dass ich es mit xampp hier local
teste - geht sowas vielleicht nur real-online ??
ramonDB ist offline   Mit Zitat antworten
Alt 05-08-2007, 03:17   #9 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
wie du selbst geschrieben hattest funktioniert das löschen, wenn du den wert direkt im script angibst. somit findet php die datenbank und hat auch zugriffsrechte.
folglich ist der nächste schritt die richtigkeit des variableninhaltes im php zu prüfen. hast du das gemacht? hast du, so wie ich es dir empfohlen hatte, mal getestet, ob dein script funktioniert, wenn du in via browser (natürlich über einen server) aufrufst?

mit deiner aussage: "..aber es funzt nicht.." kann hier kein mensch was anfangen. was funktioniert nicht? was hast du getestet, was hätte es deiner meinung nach machen sollen und was hat es gemacht?

du hast sowas angegeben (natürlich mit deinem richtigen url)?
XXXdeinURLXXX.de?vorname=jiri
und das ist dabei rausgekommen?
"..mit in die delete_test.php reinschreibe, steht da nur POST GET wenn ich es im Browser ausführe?.."

dann hat dein server kein $_POST und kein $_GET ?
versuch's mal mit dem unsichern:
echo($vorname);


und nochmals, solange dein php nicht geht brauchst du in flash nichts rumfingern. lass das erst mal weg. teste mit dem browser und einer html-formular-seite.


LoadVars
http://www.flashforum.de/forum/showt...74#post1389074
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (05-08-2007 um 03:26 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 06-08-2007, 09:27   #10 (permalink)
Home Flasher
 
Benutzerbild von Flash Doc
 
Registriert seit: Apr 2004
Ort: Engelskirchen
Beiträge: 345
Wahrscheinlich ein PHP-Problem

Hallo,

es ist wahrscheinlich ein PHP-Problem, bei dem ich dir aber auch helfen kann. Du kennst dich mit PHP noch nicht so sicher aus und steigst gleich mitten rein ins Datenbankleben. Zunächst einmal eine Empfehlung: Gehe mal zu http://www.zend.com und lade dir dort eine Testlizenz des Studions 5.5 herunter. Sie enthält auch einen recht komfortablen PHP-Debugger, mit dem du Step-by-Step deine PHP-Skripts prüfen kannst. So kannst du auch erkennen, ob deine Datenbankabfrage korrekt ausgeführt wird. Ich setze das Zend Studio selbst ein und bin sehr zufrieden damit.

Ich gehe mal davon aus, dass du eine fuktionierende WAMP-Umgebung mit Apache Server, MySQL und PHP auf deiner Maschine hast. Der Apache-Server muss gestartet sein (prüfen !), MySQL läuft ab 4.x immer als Windowsdienst mit. Wie es sich auf einem Mac verhält, kann ich leider nicht sagen. Vielleicht kann hier in der Runde einer da noch mit Wissen aushelfen.

Dein Skript ist relativ einfach. Stelle es mal, so wie schon hier beschrieben auf GET als Übergabemethode der URL-Paramete um und füge unmittelbar am Skriptbeginn ein
PHP-Code:
echo "GET vorname:".$_GET['vorname']; 
ein.

Dein Skript rufst du dann wiefolgt auf:

http://localhost/delete_test.php?vorname=Jiri

WICHTIG: Den Wert, hier 'Jiri' darfst du beim Aufruf im Browser keinesfalls in Hochkomma oder Gänsefüßchen setzen!!!!

Nutze phpMyAdmin, um die Wirkung deines Datenbankzugriffs zu prüfen. Die Datenbankabfrage, die du erstellt hast, müsste funktionieren, ist aber eben nicht ganz ungefährlich.

Gruß vom Flash Doc
__________________
Erst Flash CS5 und dann Fläsch' Bier !!!
Flash Doc ist offline   Mit Zitat antworten
Alt 06-08-2007, 11:29   #11 (permalink)
as_alien
 
Benutzerbild von ramonDB
 
Registriert seit: Feb 2005
Beiträge: 27
hallo,
danke für eure hilfe und eure geduld mit mir

@hgseib ja sorry die aussage "funzt nicht" ist
natürlich nicht sehr hilfreich, aber ich hatte einfach soviele verschiedene sachen ausprobiert, dass ich am ende selbst nicht mehr durchgeblickt habe.
hab jetzt aber auf deinen rat hin eine html eingabe gebaut - so:
HTML-Code:
<html>
<head>
<title>Eingabe</title>
</head>
<body>
<div align="center">
<form action="delete.php" method="post"> vorname: <input name="vorname"
size="60" maxlength="60"><br>
<input value="delete name" type="submit"> </form>
</div>
</body>
</html>
und das klappt auch - wenn ich einen namen eingebe und das dann losposte wird der entspechende eintrag in der datenbank gelöscht.
das heißt doch dann der fehler muss im flash-code liegen, oder ?


@Flash Doc danke für den tip mit dem php-debugger. aber ich versuchs erstmal auf die oben beschriebene art - sonst wird das alles für mich (newbie) zu kompliziert.
ramonDB ist offline   Mit Zitat antworten
Alt 06-08-2007, 11:38   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
na prima. ist zwar mühselig aber es geht voran.

nexter fall, das flash.
also zuerstmal sieht das ok aus - sonst hätte ich am anfang schon mal was gesagt.

das da fällt mir auf:
delete_lv.sendAndLoad("https://127.0.0.1/test/delete_test.php", delete_lv, "POST");

mach's mal ohne https und mit einer relativen adresse (php im selben ordner wie das swf).
bei absoluten adressen dürfte es probleme mit den zugriffsrechten geben.
delete_lv.sendAndLoad("test/delete_test.php", delete_lv, "POST");

zum testen wie schonmal geschrieben:
- ergänze eine onLoad-funktion
- sende auf jeden fall ein echo vom php zurück und wenns nur ein true wäre
- und erzeuge ein textfeld im fla und da die antwort vom onLoad reinschreiben.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 06-08-2007, 11:51   #13 (permalink)
as_alien
 
Benutzerbild von ramonDB
 
Registriert seit: Feb 2005
Beiträge: 27
also ohne "https://127.0.0.1" das gleiche ergebniss > passiert nichts !
auch in meinem textfeld kommt keine "rückantwort" an.

Geändert von ramonDB (06-08-2007 um 12:03 Uhr)
ramonDB ist offline   Mit Zitat antworten
Alt 06-08-2007, 12:37   #14 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
hast du gemacht, was ich dir aufgeschrieben hatte?
zeig mal wie das jetzt aussieht.
überhaupt, poste mal dein ganzes zeugs.

und hast du mal den link gelesen und ausprobiert, den ich dir in #9 gegeben habe?
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (06-08-2007 um 12:39 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 06-08-2007, 14:57   #15 (permalink)
Home Flasher
 
Benutzerbild von Flash Doc
 
Registriert seit: Apr 2004
Ort: Engelskirchen
Beiträge: 345
Lightbulb Vielleicht ist es jetzt noch ein Pfadproblem im Flash

Hallo,

erstmal: So richtig wohl fühle ich mich mit PHP erst, seit ich das Zend Studio habe. Für etwas umfangreichere PHP-Anwendungen macht das unbedingt Sinn.

Nun dein Problem:
Es könnte ein Pfad-Problem sein, daher modifiziere mal deinen Code wiefolgt:
ActionScript:
  1. import mx.utils.Delegate;
  2.  
  3. var delete_lv:LoadVars = new LoadVars();
  4. var delete_resp:LoadVars = new LoadVars();
  5. delete_resp.onLoad = Delegate.create(this,this.finishDelete);
  6. delete_lv.vorname = "jiri";
  7. delete_lv.sendAndLoad("delete.php",delete_resp,"POST");
  8.  
  9. function finishDelete() {
  10.   dtResponse.text = "gelöscht.";
  11. }
Neu ist die zweite LoadVars-Instanz, die die Antwort der von delete_lv gesendeten Anfrage empfängt. Das hat einen praktischen Grund: Flash sendet das ganze Objekt delete_lv an den Server. Wenn du nun noch einiges an Code in delete_lv.onLoad() hättest, würde der neben den Daten für die PHP-Anwendung auch noch mit über die Leitung gehen. Das kostet unnötig Ressourcen.

Deshalb habe ich mir diese Aufteilung in Sender- und Response-Objekt angewöhnt. Im Senderobjekt wird die Serveranfrage erstellt (Datenzusammenstellung) und dann an den Server gesendet. Das Response-Objekt empfängt die Antwort des Servers und verarbeitet sie weiter.

Dieses Verfahren hat noch einen weiteren Vorteil: Variablen, die im Sender-Objekt eingestellt wurden, stehen nach dem Aufruf noch zur Verfügung und wurden nicht durch die Serverantwort überschrieben. Es lehnt sich ferner an das an, was ich von Java her kenne. Da sind HTTPRequest und HTTPResponse in allen entsprechenden Dienstaufrufen eigene Klassen.

Ich hoffe, dass dir diese Hinweise endgültig auf die Sprünge helfen.

Gruß vom Flash Doc
__________________
Erst Flash CS5 und dann Fläsch' Bier !!!
Flash Doc ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele