PHP EDIT/DELETE Formulare

AwesomSTUFF

Rear Admiral
Registriert
Juli 2011
Beiträge
5.528
Mahlzeit Leute,

nachdem ja hier gestern innerhalb weniger Minuten ein klitzekleiner Fehler in meinem Code gefunden habe den ich absolut überehen hatte, wende ich mich heute nochmal an Euch.

Also wie gesagt ich bau nen Roster für meine Gilde.

Bin jetzt soweit dass die Daten in dei DB geschrieben werden und dass ich auch eine Liste der Charaktere (Datensätze ) aus der DB bekomme -und zwar nur diejenigen die ich angelegt habe (damit nicht Hinz und Kunz gegenseitig ihre Chars manipulieren im Roster).

Okay. Die Ausgabe erfolgt in einer Tabelle. Am Ende der Tabelle gibt es jetzt schon ein EDIT Feld -also einen Link zum klicken wodurch ich das entspr. Formular aufrufe um diesen Datrensatz zu bearbeiten, das funzt soweit auch.
Allerdings hab ich irgendwie ein Problemchen bekommen. Da ich j amit Drop-Downs arbeite und diese auch beim editieren haben will, sollte natürlich in der Drop-Down Liste schon der entsprechende Wert selektiert sein. Ich hab das jetzt so versucht:

PHP:
        <label>Rasse: <select name="Rasse" value="<?php  $daten["Rasse"]; ?>" >
		    <option value="kein">kein</option>
            <option value="ASU">Asura</option>
            <option value="CHR">Charr</option>
            <option value="MNS">Mensch</option>
			<option value="NRN">Norn</option>
			<option value="SYL">Sylvari</option>
        </select></label>

Aber dat jeht irgendwie nicht. Hat da jmd nen Tipp wie es geht?

Ach ja ich hab schon Google bemüht und bin aber nur auf selected="selected" gestossen was mich ja nicht weiterbringt.
 
Hi, wieso kommst du mit selected nicht weiter ?

Das "selected" muss nur in das richtige "option" Feld eingefügt werden.

PHP:
<option value="kein" <?=($daten["Rasse"] == "kein")?' selected="selected"':false; ?>>kein</option>
<option value="ASU" <?=($daten["Rasse"] == "ASU")?' selected="selected"':false; ?>>Asura</option>
<option value="CHR" <?=($daten["Rasse"] == "CHR")?' selected="selected"':false; ?>>Charr</option>
<option value="MNS" <?=($daten["Rasse"] == "MNS")?' selected="selected"':false; ?>>Mensch</option>
<option value="NRN" <?=($daten["Rasse"] == "NRN")?' selected="selected"':false; ?>>Norn</option>
<option value="SYL" <?=($daten["Rasse"] == "SYL")?' selected="selected"':false; ?>>Sylvari</option>

Das ist die PHP Kurzschreibweise, ich hoffe das hilft weiter. (ungetestet)
 
Zuletzt bearbeitet:
Ja teste ich gleich mal aus, währenddessen vllt noch eine andere Sache.

Also ich bekomme es irgendwei nicht gebacken die Datensatz ID zu übergeben.
In der Liste funktioniert alles ja insofern dass ich die ID brauche um dann zum Editieren auf den entspr Datensatz zu kommen.

Wenn ich die Liste in das Edit File include und das GET rausnehme geht es. Aber das will ich ja eigentlich nicht.
In der Liste ist die Datensatz ID "$ID" .

PHP:
  $id=$_GET['ID'];
$abfrage = "SELECT * FROM Edsroster WHERE ID='$id'";

Ich glaube nach 3 Tagen nur coden ists langsam soweit -aber ich will das fertig bekommen.

EDIT:

Danke Jomelo das funktioniert tatsächlich. Auf die Idee di eWerte zu vergleichen bin ich iwie nicht gekommen. Danke sehr!!!
 
Zuletzt bearbeitet:
Dafür muss natürlich in der php.ini die php-Kurzschreibweise aktiviert sein.
Ansonsten "<?=" durch "<?php echo " ersetzten.
Ergänzung ()

Bei deiner 2. Frage verstehe ich nicht, was nicht geht.
 
Zuletzt bearbeitet:
Crys schrieb:
Dafür muss natürlich in der php.ini die php-Kurzschreibweise aktiviert sein.
Ansonsten "<?=" durch "<?php echo " ersetzten.

Das stimmt, aber meistens ist es aktiviert.

Die zweite Frage kann ich so wie mein Vorredner nicht ganz nachvollziehen.
 
Ja ich auch nicht ^^

Ich hab grade festgestellt dass es auch mit includierter Liste nicht geht.
Da gibt er dann immer den letzten Datensatz (letzte ID) weiter und nicht die wo ich draufklicke.

Also nochmal:

Ich habe eine Auflistung meiner Daten:

PHP:
<?php

  while($row=mysql_fetch_object($ergebnis)){
  $ID=$row->ID;
 echo "
    <tr>
        <td>" . $row->Nick . "</td>
        <td>" . $row->Realname . "</td>
        <td>" . $row->Rang . "</td>
        <td>" . $row->Klasse . "</td>
        <td>" . $row->Rasse . "</td>
        <td><a href=edit.php?id=".$ID.">edit</a>      </td>
    </tr>\n";
}
echo "</table>\n";
if (!empty($_GET[ID])){
    echo "<hr />";
    	
	
}
?>

Über die letzte Spalte (edit) woll ich die Daten editieren können. Damit rufe ich die edit.php auf. In dieser brauch ich ja die eindeutige Kennzeichnung (ID) des Datensatzes um sie in meiner SELECT Anweisung zu verfrühstücken. Aber ich bekomms nich hin die ID zu übergeben. Ich hatte gedacht, dass der Server sich die einfach "merkt" wenn ich auf "edit" klicke und ich sie dann abrufen kann, wenn ich $_GET[ID] aufrufe.
 
macht er auch!!! (der browser)

aber du hast einen html Fehler:

Code:
<a href=edit.php?id=".$ID.">   //falsch

<a href=\"edit.php?id=".$ID.""\> //richtig

PHP:
<?php
 
  while($row=mysql_fetch_object($ergebnis)){
  $ID=$row->ID;
 echo "
    <tr>
        <td>" . $row->Nick . "</td>
        <td>" . $row->Realname . "</td>
        <td>" . $row->Rang . "</td>
        <td>" . $row->Klasse . "</td>
        <td>" . $row->Rasse . "</td>
        <td><a href=\"edit.php?id=".$ID."\">edit</a>      </td>
    </tr>\n";
}
echo "</table>\n";
if (!empty($_GET[ID])){
    echo "<hr />";
    	
	
}
?>
 
Funktionobelt leider trotzdem nicht... hier mal meine edit.php bis zur Hälfte..


LOL hat sich grad erledigt.
Es muss $_Get["id"] seine und nicht $_Get[ID].

Danke für Eure Geduld, jetzt muss ich nur noch die SQL Anweisung für das Updaten hinbekommen und dann hab ich das Grundgerüst fertig.
 
Zuletzt bearbeitet:
So, wenn nun alles funktioniert, denk bitte auch an die Sicherheit.

Jede Mysql Abfrage in der du:
Code:
SELECT ... WHERE id=$_GET['id']
oder
Code:
$id=$_GET['ID'];
$abfrage = "SELECT * FROM Edsroster WHERE ID='$id'";

machst, ist ein Wink mit dem Zaunpfahl für jeden der ein wenig php kann (und das sind nicht wenige). Man kann dann deine ganzen Datenbank auslesen oder noch schlimmer: Schadcode einfügen und über Jahre Passwörter und Emailadressen mit sniffern.

Wenn du dazu Fragen hast wie du das vermeiden kannst, schick mir eine PN.
 
Zuletzt bearbeitet:
Ja gut, in dieser Tabelle stehen jett wirklich keine sonderlich interessanten Daten und mt der NutzerId alleine kann man glaube nicght viel anfangen (oder?).

Zum Freitagnachmittag dann doch noch der Code für dei Update Anfrage...mit den SQL Anweisungen steh ich offenbar auf Kriegsfuss:

PHP:
 if (isset( $_POST['aktualisieren'] ))
{
 $sql_up = "UPDATE Edsroster SET
				Nick='" .mysql_real_escape_string( $Nick ). "',
                Realname='" .mysql_real_escape_string( $Realname ). "',
				Klasse='" .mysql_real_escape_string( $Klasse ). "',
				Rang='" .mysql_real_escape_string( $Rang ). "',
				Beruf1='" .mysql_real_escape_string( $Beruf1 ). "',
				Beruf2='" .mysql_real_escape_string( $Beruf2 ). "',
				Rasse='" .mysql_real_escape_string( $Rasse ). "',
                user= " .$benutzerid. "
                 WHERE 
				ID= '".$id."'
				 ";

}

Gibt aus, dass der Datensatz nicht geschrieben wurde. Kein mysql error. Aber das Array welches ich mir nochmal ausgeben lasse sieht so aus:

UPDATE Edsroster SET
Nick='testa',
Realname='test',
Klasse='THF',
Rang='NEU',
Beruf1='JUW',
Beruf2='KCH',
Rasse='ASU',
user= 4
WHERE
ID= ''

Ich hab bei "id" schon alle möglichen varianten probiert. Aber ich bekomm da einfach keinen Wert rein.
 
wo kommt $id den her ?

Kommt es über $_GET['id'] oder $_POST['id'] ?

Mit dem angegeben Quellcode können wir nur in die Glaskugel schauen und raten.

Zur Sicherheit. Es geht nicht um die Tabelle, sondern um die Datenbank. Alles was darin ist ist abfragbar.

Bzw. Was wäre wenn du eines morgens dich wunderst das nichts mehr läuft, weil alle Tabellen gelöscht sind auch das wäre möglich.
 
Ja, okay. Über die Sicherheitssache können wir uns gern gesondert nochmal unterhalten. ATM will ich eigentlich mit dem Projekt vorankommen. Wenn ich das Gerüst soweit habe (die edit ist glaube die grössere Hürde als eine delete funktion..hoff ich) gehts für mich an den Feinschliff -Sicherheit gehört eher dazu :)

Also..meine edit.php ich verwende die $id auch schon einmal in der SELECT. Aber bin nicht sicher, ob durch den "aktualisieren"-Button die Variable irgendwie resettet wird.

PHP:
<?php
include("conf.php");

$id     = $_GET["id"];

 
$sql = "Select * from Edsroster where ID='".$id."'";
$ergebnis = mysql_query($sql);
if ( ! $ergebnis)
         {
            die('Ungueltige Abfrage: ' . mysql_error());
        }
$daten = mysql_fetch_array($ergebnis);



	// Maskierende Slashes aus POST entfernen
    //$_POST = get_magic_quotes_gpc() ? array_map( 'stripslashes', $_POST ) : $_POST;
    
     Inhalte der Felder aus POST holen
    $Nick = $_POST['Nick'];
    $Realname = $_POST['Realname'];
	$Klasse = $_POST['Klasse'];
	$Rasse = $_POST['Rasse'];
    $Rang = $_POST['Rang'];
	$Beruf1 = $_POST['Beruf1'];
	$Beruf2 = $_POST['Beruf2'];


if (isset( $_POST['aktualisieren'] ))
{
 $sql_up = "UPDATE Edsroster SET
				Nick='" .mysql_real_escape_string( $Nick ). "',
                Realname='" .mysql_real_escape_string( $Realname ). "',
				Klasse='" .mysql_real_escape_string( $Klasse ). "',
				Rang='" .mysql_real_escape_string( $Rang ). "',
				Beruf1='" .mysql_real_escape_string( $Beruf1 ). "',
				Beruf2='" .mysql_real_escape_string( $Beruf2 ). "',
				Rasse='" .mysql_real_escape_string( $Rasse ). "',
                user= " .$benutzerid. "
                 WHERE 
				ID= '".$id."'
				 ";

}
    // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
    mysql_query( $sql_up );
    // Pruefen ob der neue Datensatz tatsaechlich eingefuegt wurde
    if (mysql_affected_rows() == 1)
    {
        echo "<h3>Der Datensatz wurde hinzugefügt!</h3>";
      
    }
    else
    {
	echo "<pre>" .print_r( $sql_up, true ). "</pre>";
	echo $id;
	echo $Nummer;
        echo "<h3>Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!</h3>";
		echo mysql_error();
		
    }
?>
</head>
 
Zuletzt bearbeitet:
Hi, eigentlich müsste deine ID eingetragen werden. Probier mal folgenden Code aus:

Der ist übersichtlicher. Welche Meldung bekommst du. Wenn das nicht hilft. Dann kommentier mal die Zeile mit dem error_reporting ein und beseitige alle Fehler die auftauchen.

PHP:
<?php
include("conf.php");


//error_reporting(E_ALL);


//check get id 
if(isset($_GET['id']) && is_numeric($_GET['id'])) {
	//id
	$id = mysql_real_escape_string($_GET['id']);
	
	//query
	$sql = "SELECT * FROM Edsroster WHERE ID='".$id."'";
	$ergebnis = mysql_query($sql);
	if (!$ergebnis) {
 		die('Ungueltige Abfrage: ' . mysql_error());
   	}
	
	$daten = mysql_fetch_assoc($ergebnis);
	
	// Maskierende Slashes aus POST entfernen
    //$_POST = get_magic_quotes_gpc() ? array_map( 'stripslashes', $_POST ) : $_POST;
    
    // Inhalte der Felder aus POST holen
    $Nick = mysql_real_escape_string($_POST['Nick']);
    $Realname = mysql_real_escape_string($_POST['Realname']);
	$Klasse = mysql_real_escape_string($_POST['Klasse']);
	$Rasse = mysql_real_escape_string($_POST['Rasse']);
    $Rang = mysql_real_escape_string($_POST['Rang']);
	$Beruf1 = mysql_real_escape_string($_POST['Beruf1']);
	$Beruf2 = mysql_real_escape_string($_POST['Beruf2']);
	
	if(isset($_POST['aktualisieren'])) {
 		$sql_up = "UPDATE Edsroster SET
				Nick='" .$Nick. "',
                Realname='" .$Realname. "',
				Klasse='" .$Klasse. "',
				Rang='" .$Rang. "',
				Beruf1='" .$Beruf1. "',
				Beruf2='" .$Beruf2. "',
				Rasse='" .$Rasse. "',
                user= " .$benutzerid. "
                 WHERE 
				ID='".$id."'";
				
		// Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
	    mysql_query( $sql_up );
	    // Pruefen ob der neue Datensatz tatsaechlich eingefuegt wurde
	    if (mysql_affected_rows() == 1){
	        echo "<h3>Der Datensatz wurde hinzugefügt!</h3>";	      
	    } else {
			echo "<pre>" .print_r( $sql_up, true ). "</pre>";
			echo $id;
			echo $Nummer;
	        echo "<h3>Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!</h3>";
			echo mysql_error();			
	    } 		
	} else {
		die("Formular nicht gesendet");
	}			
} else {
	die("Ungueltige ID");
}

?>
</head>
 
Mit dem Code zeigt er mein Formular jetzt nichtmal mehr an

"Formular nicht gesendet"...

Errorreporting hab ich eingeschaltet.
Das $Daten und das $sql array hab ich mir mal anzeigen lassen, alles drin...!

heri mal noch mein body:

PHP:
<body>
<form action="edit.php" method="post">
    <fieldset>
        <legend>Formular Roster</legend><br/>
		
        <label>Nick: <input type="text" name="Nick" value="<?php echo $daten["Nick"]; ?>" /></label><br/>
        <label>echter Name: <input type="text" name="Realname" value="<?php echo $daten["Realname"]; ?>"/></label><br/>
        <label>Rasse: <select name="Rasse"  >
			<option value="kein" <?=($daten["Rasse"] == "kein")?' selected="selected"':false; ?>>kein</option>
			<option value="ASU" <?=($daten["Rasse"] == "ASU")?' selected="selected"':false; ?>>Asura</option>
			<option value="CHR" <?=($daten["Rasse"] == "CHR")?' selected="selected"':false; ?>>Charr</option>
			<option value="MNS" <?=($daten["Rasse"] == "MNS")?' selected="selected"':false; ?>>Mensch</option>
			<option value="NRN" <?=($daten["Rasse"] == "NRN")?' selected="selected"':false; ?>>Norn</option>
			<option value="SYL" <?=($daten["Rasse"] == "SYL")?' selected="selected"':false; ?>>Sylvari</option>
        </select></label>
		<br/>
		
		<label>Klasse: <select name="Klasse"  >
			<option value="kein" <?=($daten["Klasse"] == "kein")?' selected="selected"':false; ?>>kein</option>
			<option value="THF" <?=($daten["Klasse"] == "THF")?' selected="selected"':false; ?>>Dieb</option>
			<option value="ELE" <?=($daten["Klasse"] == "ELE")?' selected="selected"':false; ?>>Elementarmagier</option>
			<option value="ING" <?=($daten["Klasse"] == "ING")?' selected="selected"':false; ?>>Ingenieur</option>
			<option value="KRG" <?=($daten["Klasse"] == "KRG")?' selected="selected"':false; ?>>Krieger</option>
			<option value="MSM" <?=($daten["Klasse"] == "MSM")?' selected="selected"':false; ?>>Mesmer</option>
			<option value="NEK" <?=($daten["Klasse"] == "NEK")?' selected="selected"':false; ?>>Nekromant</option>
			<option value="WTR" <?=($daten["Klasse"] == "WTR")?' selected="selected"':false; ?>>Wächter</option>
			<option value="WLD" <?=($daten["Klasse"] == "WLD")?' selected="selected"':false; ?>>Waldläufer</option>			
	        </select></label>
		<br/>
		
				
		<label>Rang: <select name="Rang" >
			<option value="NEU" <?=($daten["Rang"] == "NEU")?' selected="selected"':false; ?>>Anwärter</option>
			<option value="MEM" <?=($daten["Rang"] == "MEM")?' selected="selected"':false; ?>>Gildenmitglied</option>
			<option value="OFF" <?=($daten["Rang"] == "OFF")?' selected="selected"':false; ?>>Offizier</option>
			<option value="RAT" <?=($daten["Rang"] == "RAT")?' selected="selected"':false; ?>>Ratsmitglied</option>
			<option value="LED" <?=($daten["Rang"] == "LED")?' selected="selected"':false; ?>>Gildenleitung</option>
        </select></label>
		<br/>
		
				
		<label>Beruf1: <select name="Beruf1"  >
			<option value="kein" <?=($daten["Beruf1"] == "kein")?' selected="selected"':false; ?>>kein</option>
			<option value="JUW" <?=($daten["Beruf1"] == "JUW")?' selected="selected"':false; ?>>Juwelier</option>
			<option value="KCH" <?=($daten["Beruf1"] == "KCH")?' selected="selected"':false; ?>>Küchenmeister</option>
			<option value="KON" <?=($daten["Beruf1"] == "KON")?' selected="selected"':false; ?>>Konstrukteur</option>
			<option value="LDR" <?=($daten["Beruf1"] == "LDR")?' selected="selected"':false; ?>>Lederer</option>
			<option value="RST" <?=($daten["Beruf1"] == "RST")?' selected="selected"':false; ?>>Rüstungsschmied</option>
			<option value="SND" <?=($daten["Beruf1"] == "SND")?' selected="selected"':false; ?>>Schneider</option>
			<option value="WAF" <?=($daten["Beruf1"] == "WAF")?' selected="selected"':false; ?>>Waffenschmied</option>
			<option value="WDM" <?=($daten["Beruf1"] == "WDM")?' selected="selected"':false; ?>>Waidmann</option>			
        </select></label>
		<br/>
		
			<label>Beruf2: <select name="Beruf2" >
			<option value="kein" <?=($daten["Beruf2"] == "kein")?' selected="selected"':false; ?>>kein</option>
			<option value="JUW" <?=($daten["Beruf2"] == "JUW")?' selected="selected"':false; ?>>Juwelier</option>
			<option value="KCH" <?=($daten["Beruf2"] == "KCH")?' selected="selected"':false; ?>>Küchenmeister</option>
			<option value="KON" <?=($daten["Beruf2"] == "KON")?' selected="selected"':false; ?>>Konstrukteur</option>
			<option value="LDR" <?=($daten["Beruf2"] == "LDR")?' selected="selected"':false; ?>>Lederer</option>
			<option value="RST" <?=($daten["Beruf2"] == "RST")?' selected="selected"':false; ?>>Rüstungsschmied</option>
			<option value="SND" <?=($daten["Beruf2"] == "SND")?' selected="selected"':false; ?>>Schneider</option>
			<option value="WAF" <?=($daten["Beruf2"] == "WAF")?' selected="selected"':false; ?>>Waffenschmied</option>
			<option value="WDM" <?=($daten["Beruf2"] == "WDM")?' selected="selected"':false; ?>>Waidmann</option>
        </select></label>
		<br/>

        <input type="submit" name="aktualisieren" id="aktualisieren" value="aktualisieren" />
    </fieldset>
</form>

</body>
 
Zuletzt bearbeitet:
Kommentier Zeile 60 aus.
Code:
die("Formular nicht gesendet");

//die("Formular nicht gesendet");
 
dann kommt ungültige ID - allerdings lädt dann das Formular MIT gefüllten Feldern..aber nach absenden halt....ungueltige id

ich hab auch schon beides mal rausgenommen, dann sendet er zwar aber die Daten "kommen nicht an" as heisst sie sind in der DB unverändert

EDIT: Ich hab mir zu den Fehlern mal das Datenarray ausgegeben und die ID...die gibt er aber nicht aus, dh sie sind leer?

ICH KRIG NOCH NEN FÖÖÖN^^
 
Zuletzt bearbeitet:
Das Skript sucht in $_GET nach der ID, aber das Formular übergibt keine GET-Parameter. (Es übergibt auch sonst keine ID.) Wo soll die denn herkommen?
 
Zurück
Oben