1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Kleines Problem mit PHP

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von drok, 01.10.07.

  1. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    Hi,
    Das Problem ist folgendes:

    Ich gebe in einer Tabelle die Datensätze einer DB aus.
    Wenn ich jetzt Datensätze bearbeiten will, habe ich bisher zu einer anderen php-Datei mit Formular verlinkt in dem dann die Daten geladen und wieder abgeschickt werden. (UPDATE...)

    Wie gehe ich jetzt aber am schlausten und elegantesten vor wenn ich die Einträge direkt bearbeiten will, ohne auf ein anderes Script zu verlinken ?

    Der erste Gedanke war gewesen, bei Aufruf des "Edit-Links" ein Formular am Ende der Tabelle mit "echo" auszugeben. Den Gedanken habe ich aber schnell verworfen weil das ganze irgendwie nicht ganz koscher klang.

    Nun hatte ich mir überlegt eine edit.php zu schreiben in der nur ein Formular ausgegeben wird,
    und dieses dann unter der "Ausgabe-Tabelle" zu includen.
    Hat soweit ganz gut geklappt (bzw auch nicht) , nur kann ich dem ja nicht wirklich Parameter übergeben...

    Wäre toll wenn jemand eine Lösung parat hätte.


    vg
     
  2. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    Javascript ist das Zauberwort hier.
    Mit nem klick auf den Edit Link kannst du eine Javascript Funktion aufrufen die dir das Edit Formular anzeigt und mit den richtigen Daten füttert.
     
  3. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    hm ich will das ganze aber eigentlich nur mit php realisieren o_O
     
  4. zeno

    zeno Lane's Prinz Albert

    Dabei seit:
    05.11.05
    Beiträge:
    4.898
    Dann wirst du um die zweite Seite nicht drum rum kommen, da dir die Möglichkeit fehlt auf einer bestehenden Seite dem Formular zu sagen was für einen DS mit welchen Daten editiert werden soll..
     
  5. tiriqs

    tiriqs Cripps Pink

    Dabei seit:
    26.06.06
    Beiträge:
    155
    kannst doch alles in eine php schrieben...rufst halt nur im ersten teil ab ob der submit button des forms angeklickt wurde.. if(isset($submit))...wenn ja, dann speicherste die übergebenen formvars in die db.

    danach wird ja dann die table eh wieder ausgelesen und hat dann auch gleich wieder die neuen werte

    ps: hoffe ich habe deine frage richtig verstanden ;)
     
  6. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    Ja hast du richtig verstanden ;)
    Ich könnt mich manchmal schlagen dafür das ich manchmal einfach zu kompliziert denke..^^
    Hab jetzt einfach unten ein Formular reingebatscht und fertig is die Sache.

    Danke euch beiden.

    vg
     
  7. AAPL

    AAPL Roter Delicious

    Dabei seit:
    17.08.07
    Beiträge:
    93
    wenn schon oldschool, dann perl ;)
     
  8. Chuck-.-

    Chuck-.- Bismarckapfel

    Dabei seit:
    22.12.06
    Beiträge:
    142
    Lade doch deine Daten direkt in Input Felder. Dann können Sie dort direkt bearbeitet werden und der User muss nur noch aif speichern klicken.
     
  9. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Ich würde dies aus der Erfahrung heraus ähnlich angehen wie tiriqs vorschlug. Dabei hast Du eine "index.php" und regelst den Ablauf über Parameter. Je nachdem was per Parameter an die index.php übermittelt wurde reagiert diese. Hier mal eine Skizze (nicht lauffähiges Beispiel):
    Code:
    <?php
    	
    	function frageDatenbank($addressID = 0)
    	{
    		// "SELECT * FROM ..."
    		// return $resourceID;
    	}
    	
    	function zeigeDaten($resourceID)
    	{
    		// while ($details = mysql_fetch_assoc($resourceID)) {
    		// ...	
    		//}	
    	}
    	
    	function schreibeDaten()
    	{
    		// $sql = sprintf("INSERT INTO tabelle SET name='%s'"
    		//		, mysql_real_escape_string($_POST['name']));
    		// ...
    		// return mysql_insert_id();
    	}
    
    	function zeigeFormular()
    	{
    		// <form method="post" name="foermchen">...
    		// <input type="text" name="vorname"
    		//	value="<?=stripslashes(htmlentities($_POST['vorname']))" size="32" />
    		//  ... </form>
    	}
    
    	function pruefeFormular()
    	{
    		// if (!empty($_POST['vorname'])) { ... }
    		// Sind alle Eingaben wie ich sie brauche?
    	}
    
    	// Sind Formulardateneingetroffen?
    	if (isset($_POST['submit'])) {
    		if (pruefeFormular()) {
    			schreibeDate();
    			echo "Danke. Formular gespeichert.";
    		} else {
    			echo "Mist. Eingaben fehlerhaft.";
    			zeigeFormular();
    		}
    	} else {
    		
    		switch ($_GET['aktion']) {
    			case 'editieren':
    			break:
    				if ($res = frageDatenbank($_GET['addressID'])) {
    					zeigeFormular();
    				}
    			case 'sehen':
    			default:
    				if ($res = frageDatenbank($_GET['addressID'])) {
    					zeigeDaten($res);
    					printf("<a href=\"%s?aktion=editieren&addressID=5\">Editiere #5</a>"
    						, $_SERVER['PHP_SELF']);
    				}
    			break;
    		}		
    	}
    	
    ?>
    
     
  10. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    Ui, danke für die Skizze ;)
    Also ich habe das ganze so gemacht:

    Eine function zur Ausgabe der Datensätze in einer Tabelle

    Code:
    function dbausgabe(....)
    { 
           $sql="SELECT ... FROM  ".$tabellenname." ORDER BY ID DESC";
           $result=@mysql_query($sql, $link);
           if(mysql_num_rows($result)>0)
           { -> ausgabe der datensätze; }
    }
    und noch eine kleine Funktion zum testen ob gefragter Datensatz vorhanden ist

    Code:
    function dsvorhanden(...., $id)
    {
            $sql="SELECT ID FROM ".$tabellenname." WHERE ID=".$id."";
            $result=@mysql_query($sql, $link);
            list($testid)=@mysql_fetch_row($result);
        
            return $testid;
    }
    Wenn nun die Seite erstmals aufgrufen wird, wird die Tabelle ausgegeben.
    Wenn man nun auf den "Edit-Link" klickt wird die ID übergeben, der Datensatz abgefragt und
    die Inhalte in das Formular geladen.

    Das Formular liegt unter dem <?php ?>-Script auf der html-Seite.

    Bei Absenden des Formulars werden dann die Daten ausgelesen und im Datensatz geändert.
     
  11. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Fein. Ich hätte zwei Verbesserungsvorschläge (aber wirklich nur Vorschläge):

    Code:
    function dbAbfrage($link)
    {
    	// Ist die Verbindung zur Datenbank griffbereit?
    	if ($link) {
    		
    		// Man kann bei SQL-Injection nicht vorsichtig genug sein:
    		// $tabellenname muss ausserdem noch irgendwie definiert werden.
    		$sql	=	sprintf("SELECT * FROM %s ORDER BY ID DESC"
    						, mysql_real_escape_string($tabellenname));
    		
    		// Die Abfrage kann auch jetzt in die Hose gehen,
    		// besser abfangen:
    		if ($result = mysql_query($sql, $link)) {
    		
    			// Abfrage OK, aber gabs auch Ergebnisse?
    			if (mysql_num_rows($result) > 0) {
    				
    				// Ausgabe mach eine andere Methode
    				return $result;
    			}
    		}	
    	}
    	
    	// Geht irgendetwas schief, wirft man FALSE zurück:
    	return FALSE;
    }
    
    Jetzt kann man die Abfrage durchführen und die Ausgabe danach anstossen:

    Code:
    // Sag Hallo zur DB:
    $connectionID = connect_to_db();
    
    // Daten da?
    if ($resultresource = dbAfrage($connectionID)) {
    	MaleNachZahlen($resultresource);
    } else {
    	echo "Sowas. Die Datenbank mag Dich nicht."
    }
    
     
  12. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Verbesserungsvorschlag Nummer 2: Wenn Du nur ein Ergebnis bei einer Datenbankabfrage per SQL erwartest, solltest Du das Ergebnis von vornherein mit »LIMIT 1« in der Abfrage begrenzen. Das kann die Antwortzeit extrem verkürzen. Desweiteren kann man recht praktisch diese Antwort (in Deinem Fall die ID) mit mysql_result() bekommen. Ein Umleitung der Ergebnisse mit list() ist dann gar nicht mehr nötig.
     
  13. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    Danke für die Tipps, werd gleichmal ausprobieren.
    Aber eine Frage habe ich da noch zum sprintf().

    Code:
    // Man kann bei SQL-Injection nicht vorsichtig genug sein:
    // $tabellenname muss ausserdem noch irgendwie definiert werden.
    $sql = sprintf("SELECT * FROM %s ORDER BY ID DESC"
           ,mysql_real_escape_string($tabellenname));
    Warum nicht einfach

    Code:
    $sql = "SELECT * FROM ".mysql_real_escape_string($tabellenname)." ORDER BY ID DESC";
    ?

    Bringt das irgendwelche Vorteile oder ist es weil es sonst vllt "nicht sauber" wäre ?


    vg
     
    #13 drok, 03.10.07
    Zuletzt bearbeitet: 03.10.07
  14. Hilarious

    Hilarious Gelbe Schleswiger Reinette

    Dabei seit:
    10.08.05
    Beiträge:
    1.759
    Nöö, ist einfach Geschmackssache und bietet ein paar kleinere Vorteile, wenn man mit sprintf/printf arbeitet. Zum Beispiel kannst Du mit sprintf/printf die Ausgabe ganz gut formatieren, zum Beispiel führende Nullen oder Fließkommaformatierungen einfügen. Daher ist es recht übersichtlich mit sprintf/printf zu arbeiten. Wenn es zum Beispiel nur eine Zahl und keine alphanumerische Zeichenkette sein darf, kannst Du das mit sprintf("%02u", $variable) abfedern (im Beispiel werden bis zu zwei führenden Nullen angefügt und der Wert kann nur aus positivin Zahlen bestehen, daher fallen negative Zahlen und Zeichenketten heraus). Dies hilft auch bei der Entwicklung, da du dann sicher(er) stellen kannst, dass wirklich nur das passiert, was Du erwartest.
     
  15. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    hm das könnte in der Tat recht hilfreich sein ;)
    bis hierher schonmal Danke für die Erklärung und die Tipps.
    Mal schaun was demnäschst noch so anrollt ;)
     

Diese Seite empfehlen