Formularverarbeitung

Headymaster

Erfahrenes Mitglied
Hallo!

Ich würde bei der Formularverarbeitung gerne mit arrays arbeiten, jedoch habe ich da noch ein Problem.

Mein Formular sieht momentan so aus:
HTML:
<tr>
    <td class="profil_edit_head">Profil von <b>[name]</b></td>
  </tr>
  <tr>
    <td>
	  <table class="profil_edit" align="center">
         <form action="index.php?s=user.php&act=profil_edit&do=edit" method="post">
           <tr>
             <td class="profil_edit"><b>Login:</b></td><td class="profil_edit"><input type="text" class="form" name="profdat[login]" value="[login]"></td>
           </tr>
           <tr>
             <td class="profil_edit"><b>Name:</b></td><td class="profil_edit"><input type="text" class="form" name="profdat[name]" value="[name]"></td>
           </tr>
           <tr>
             <td class="profil_edit"><b>Nachname:</b></td><td class="profil_edit"><input type="text" class="form" name="profdat[nachname]" value="[nachname]"></td>
           </tr>
           <tr>
             <td class="profil_edit"><b>eMail1:</b></td><td class="profil_edit"><input type="text" class="form" name="profdat[email1]" value="[email1]"></td>
           </tr>
	  </table>
	</td>
  </tr>
  <tr>
    <td class="profil_edit"><input type="submit" name="edit" value="[prof_edit_sub]" class="form"></td>
  </tr>
 </form>

So und der PHP-Fetzen der erstma zeigen soll ob $_POST['profdat'] etwas enthält sieht so aus:
PHP:
// Verarbeitung
      if($_GET['do'] == "edit")
      {
	    // Array mit erhaltenen Formulardaten erzeugen
	    $profdat = $_POST['profdat'];
		echo $profdat;
      }

Nur leider enthält das array einfach nie was und daher wird auch nie was ausgegeben....

Mache ich mit dem array erstellen in einem Formular was falsch?!

Würde mich super über Hilfe freuen :)

MFG Niels
 
Also mit var_dump bekomme ich nur NULL NULL ausgegeben...

Wende ich aber var_dump auf nur $_POST an, so bekomme ich alels was ich will.....

Nur was kann ich denn nun machen, dass nur $_POST['profdat'] übergeben wird?

MFG Niels
 
ja was kommt denn beim [phpf]var_dump[/phpf] auf $_POST, wär bestimmt nicht uninteressat...
Übrigens wird dir folgender Code nur Array ausgeben...
PHP:
//...
$profdat = $_POST['profdat']; 
echo $profdat; 
//...
 
Also wenn ich var_dump nur auf $_POST anwende bekomme ich folgendes:

Code:
array(5) { ["profdatschmolli"]=>  string(8) "schmolli" ["profdatNiels"]=>  string(5) "Niels" ["profdatMaseberg"]=>  string(8) "Maseberg" ["profdatnilson@nilson-coding_de"]=>  string(23) "nilson@nilson-coding.de" ["edit"]=>  string(15) "[prof_edit_sub]" } array(5) { ["profdatschmolli"]=>  string(8) "schmolli" ["profdatNiels"]=>  string(5) "Niels" ["profdatMaseberg"]=>  string(8) "Maseberg" ["profdatnilson@nilson-coding_de"]=>  string(23) "nilson@nilson-coding.de" ["edit"]=>  string(15) "[prof_edit_sub]" }

Aber dort is halt nicht nur das was ich aus dem Formular haben will sondern alles was von der Seite per $_Post übergeben habe drin.

Aber eigentlich könnte ich doch nun auch damit arbeiten, indem ich z.b. dies mache:
PHP:
<?php
$profdat = $_POST;

$user = $profdat['name']
// ... usw
?>

Wäre das nun so möglich?

MFG Niels
 
So..habe den Fehler gefunden, war ganz simpel.

Die values habe ich ja per Platzhalter geladen, nur hatten diese Platzhalter fast genau die selben Namen wie die input namen....kann also gar net funktionieren :)

Danke für die Hilfe :)

MFG Niels
 
So habe noch nen Problem.

Bitte net sauer sein wegen mehrerem Posten, aber wollte nochma neuen Post machen der Übersicht wegen.

So ich möchte nun überprüfen, was im Formular verändert wurde und was nicht, geupdatet soll nur das in der DB werden, was auch verändert wurde.

So also ich habe erstmail eine Funktion, die Das Userprofil updaten soll und wenns nicht klappt FALSE zurückgibt.

Aufrufen tu ich alles so:
PHP:
<?php
// Array mit erhaltenen Formulardaten erzeugen
	     $profdatnew = $_POST['profnew'];
		 $profdatold = $_POST['profold'];
	     if($varproof->email_proof($profdatnew['email1']) == TRUE)
		 {
	        if($user->doEdit($_SESSION['user_login'], $_SESSION['user_id'], $profdatnew, $profdatold) == TRUE)
		    {
		       header("Location:index.php?s=user.php&act=profil_edit");
		    }
		    else
		    {
		       $content = "<b>".$language['taskfailed']."</b>";
		    }
		 }
		 else
		 {
		    $content = "<b>".$language['taskfailed']."</b>";
		 }
?>

So hier die Funktion doEdit:
PHP:
<?php
function doEdit($user_login, $user_id, $profdatnew, $profdatold)
			{
			   if($this->checkuser($user_login, $user_id) == TRUE)
			   {
			      if($this->db->db_update('user', 'login="'.$user_login.'" AND id="'.$user_id.'"', $profdatnew, $profdatold) == TRUE)
				  {
				     return TRUE;
				  }
				  else
				  {
				     return FALSE;
				  }
			   }
			   else
			   {
			      return $this->form();
			   }
			}
?>

So und hier nun die DB-Funktion zum Updaten einer Tabelle
PHP:
<?php
public function db_update($table, $where, $old, $new)
		{
		    if ($this->connection == false) $this->connect();
            if ($this->connection == false) return;
			
			
		    $changedvalues = ""; // Array der veränderten Werte erstellen
		    foreach($old as $key => $oldvalue)
			{
			    $newvalue = $new[$key];
				if($oldvalue != $newvalue)
				{
				     if($changedvalues != "")
                        $changedvalues .= ", ";
          
                        $changedvalues .= "`".$key."`=";
                        if(!is_numeric($newvalue))
                           $changedvalues .= "'".$newvalue."'";
                        else
                           $changedvalues .= $newvalue;
				}
			}
			
			if($changedvalues == "")
            {
			   return TRUE;
			}
			
			if($this->query("UPDATE ".$table." SET ".$changedvalues." WHERE ".$where))
			{
			   return TRUE;
			}
			else
			{
			   return FALSE;
			}
		}
?>

Genau bei der DB Funktion liegt wohl das Problem.

Also mit var_dump habe ich nun überprüft ob beim abschicken des Formulars die alten und die neuen Werte übergeben werden, dies stimm also.
So und auch werde ich nach dem abschicken des Formulars wieder zu diesem weitergeleitet, dass heißt das die Funktion doEdit also TRUE zurückgibt, was wiederum heißt dass die DB-Update Funktion auch TRUE zurückgegeben haben muss.

So das Problem ist aber, dass nichts in der DB geupdatet wird... ^^

Also ich weiß net woran das liegt...es wird alles ausgeführt nur wird nix geupdatet....

Könntet ihr vll nochma nen Blick draufwerfen?! Wäre super nett :)

MFG Niels
 
Mööp... Du übergibtst deine Daten falsch an die db_update()-Funktion... Wieso eigentlich $this->db->db_update? Stimmt das? Sollte es nicht entweder $this->db_update oder $db->db_update heißen?
PHP:
$this->db->db_update('user', 'login="'.$user_login.'" AND id="'.$user_id.'"', $profdatnew, $profdatold) == TRUE)
// Aber db_update verlangt $profdatold, $profdatnew, also...
$this->db->db_update('user', 'login="'.$user_login.'" AND id="'.$user_id.'"', $profdatold, $profdatnew) == TRUE)
 
Zuletzt bearbeitet:
Zurück