Variablen löschen mit unset()

  • #1
N

noah1

Bekanntes Mitglied
Themenersteller
Dabei seit
16.08.2002
Beiträge
1.415
Reaktionspunkte
0
Ort
Hamburg
Ich bin's wieder... ;)

Da Ihr ja meine Frage vom letzten Mal so schnell beantwortet habt gleich mein nächstes Problem :
Ich habe nach wie vor eine Seite mit drei Feldern zur Eingabe von Name, Vorname und einer Zahl.
Diese sollen nach Anklicken des Submit-Buttons in die Datenbank übertragen werden, was auch funktioniert.
Wenn man dann aber die Seite aktualisiert werden dieselben Daten ein weiters Mal eingetragen, und nochmal, und nochmal...bis man bei leeren Eingabefeldern erneut auf submit klickt, dann erscheint eine von mir programmierte Fehlermeldung.
Jetzt habe ich direkt hinter der Befehlszeile für den Datenbankeintrag mit unset($variable1, $variable2)
eigentlich ja befohlen die Variablen sofort wieder zu löschen, aber er tut es einfach nicht.
Egal wo und wieoft ich unset() schreibe, er löscht sie nicht.
Was mache ich falsch, bzw gibt es andere Möglichkeiten, das zu verhindern ?
 
  • #2
Da es X Möglichkeiten gibt, was da sein kein, Poste mal bitte das Script,

gruss conny
 
  • #3
Das ist der code, wie er innerhalb des <form>-tags des Formulars steht.

Code:
$status = $_POST['uebergeben'];
  unset($vorname, $nachname, $wa);  
  if ($status = Eintragen) {
 $vorname_eintr = $_POST['vorname'];
		 $nachname_eintr = $_POST['nachname'];
			  $wa_eintr = $_POST['wa'];
			 	 $id++;
				 };
		
   	$fehler = ;
if (empty($vorname_eintr)) $fehler .=<li>Der Vorname fehlt noch.</li>;
			if (empty($nachname_eintr)) $fehler .=<li>Der Nachname fehlt noch.</li>;	
				if ($wa_eintr == 0) $fehler .=<li>Welche Wachabteilung ?</li>;
			if (!empty($fehler)) {
					echo <p><center><b><ul>$fehler</ul></b></center></p>;
					}	
			elseif ($status == Eintragen) {
					require(incl/dbconnect.inc.php);
        $query = INSERT INTO impressum (id, vorname, nachname, wa) VALUES ('$id',->$vorname_eintr',->$nachname_eintr',->$wa_eintr');						
		  mysql_query($query);
		unset($vorname_eintr, $nachname_eintr, $wa_eintr, $query);
		}

Edit: selbst wenn ich anstatt Unset() einfach im Anschluß an den Eintrag der Variablen einen neuen Wert gebe (z.B. $nachname_eintr = leer; ) tut sich da nichts, d.h. diese Befehlszeile scheint ja gar nicht mehr beachtet zu werden.
 
  • #4
Hi

Füg mal ganz am Anfang an:
Code:
<?php
if (is_array($_POST) && count($_POST)) {
  header(Location:  . $_SERVER[PHP_SELF]);
}
?>

Gruß, Michael
 
  • #5
Code:
unset($_POST, $wa_eintr, $query);

BTW: wie funktioniert das ??? ??? ??? ???

Code:
if ($status = Eintragen)

sollte doch eher so sein ;) ;)

Code:
if ($status == Eintragen)

gruss conny
 
  • #6
PCDReitz schrieb:
Hi

Füg mal ganz am Anfang an:
Code:
<?php
if (is_array($_POST)) {
 header(Location:  . $_SERVER[PHP_SELF]);
}
?>

Gruß, Michael

@Michael

sorry, aber ich glaub, ich steh auf´m Schlauch.

so wird sich das Script wohl immer neu aufrufen und die Eingabe kann nicht verarbeitet werden ??? ::) ???

gruss conny
 
  • #7
Hi

Naja ne Schleife gibts nicht, aber da hast du recht man sollte die Sachen schon vorher in die Datenbank eintragen, bzw die Ausgabe puffern.

Ich weiß allerdings auch noch nicht so ganz worauf noah hinauswill.

Gruß, Michael
 
  • #8
aufwachen.gif
 
  • #9
[me=PCDReitz]hat dann mal noch schnell was geändert ;D[/me]
 
  • #10
Also, ich weeeees ja net, gleicher Effekt ;D

Sobald er auf Submit Klickt, sind folgende Bedingungen erfüllt:

- $_POST ist ein Array
- count($_POST) ist true

also kann die Eingabe nicht verarbeitet werden, da der Header - Befehl gleich zugreift ;)

ich weiß auch im moment gar nicht, was du mit dem header-Befehl erreichen willst ??? ???

gruss conny
 
  • #11
Hi

Naja das kommt auf sein Formular an. Wenn er z.B die übergebenenWerte in die Eingabefelder wieder eintragen lässt, dann ist das ein einfacher Weg um die Seite nach Erfolg wieder ursprünglich darzustellen.

Ansonsten wäre es eh geschickter die Anwendungslogik nicht irgendwo reinzuwurschteln, sondern auszulagern. Dann klappt das mit dem header auch besser :)

PS: im PHP Manual stand mal das unset($_POST) böse folgen haben kann.

Gruß, Michael
 
  • #12
Worauf ich hinaus will ?
Zur Erklärung : Die Datenbanktabelle mit den Einträgen taucht im Impressum der HP wieder auf.
Ich bin bei der Feuerwehr Hamburg und arbeite gerade an einer neuen Homepage für meine Wache, da die jetzige (www.feuerwache-alsterdorf.de) nicht gerade so der Bringer ist...(damit habe ich aber nichts zu tun... 8))
Da sich das Personalkarussell bei uns recht häufig dreht, spätestens nächstes Jahr im Januar erwischt es auch mich, muß ich die Seite so schreiben, daß sie recht einfach ohne Eingriffe in den Code aktuell gehalten werden kann, und dazu gehören halt auch die Administratoren / Autoren der Seiten.


<?php
if (is_array($_POST)) {
header(Location: . $_SERVER[PHP_SELF]);
}
?>

Wenn ich das einfüge lädt sich bereits die Seite, von der aus der Link zu dem Formular geht neu und ich komme gar nicht mehr zur Eingabe...
 
  • #13
PCDReitz schrieb:
...
PS: im PHP Manual stand mal das unset($_POST) böse folgen haben kann.

Gruß, Michael

Kommt drauf an, wellche Daten du übergeben hast, wenns nur simple Inputs wie hier sind, geht dass schon.
 
  • #14
PCDReitz schrieb:
Hi

Füg mal ganz am Anfang an:
Code:
<?php
if (is_array($_POST) && count($_POST)) {
 header(Location:  . $_SERVER[PHP_SELF]);
}
?>

Gruß, Michael

Und wenn ich das so eingebe übrigens auch...
 
  • #15
Mal anders gefragt : Ganz unten poste ich gleich nochmal den kompletten Code dieser Datei...
Wie würdet Ihr das schreiben, um den von mir gewünschten Effekt zu erzielen ?
Am besten wären wenn man im Formular die Daten eingegeben hat, daß diese in die Datenbank geschrieben, die Variablen wieder gelöscht werden und evtl. die Seite aktualisiert wird...
Die Datei die ich poste wird von einer anderen Seite per include() aufgerufen...

Code:
<form method=post name=eintragen>
	
 <table width=100% border=0>
  <tr> 
   <td>Vorname :</td>
   <td><center><input type=text name=vorname maxlength=15></center></td>
  </tr>
  <tr> 
   <td>Nachname :</td>
   <td><center><input type=text name=nachname maxlength=15></center></td>
  </tr>
  <tr> 
   <td>Wachabteilung :</td>
   <td><center><select name=wa>
     <option value=0></option>
		 <option value=1>1</option>
     <option value=2>2</option>
     <option value=3>3</option>
    </select></center></td>
  </tr>
  <tr> 
   <td colspan=2><center><input type=submit name=uebergeben value=Eintragen><br></center></td>
  </tr>
 </table>
 
 <?php
 
 $status = $_POST['uebergeben'];
  unset($vorname, $nachname, $wa);  
  if ($status == Eintragen) {
 $vorname_eintr = $_POST['vorname'];
		 $nachname_eintr = $_POST['nachname'];
			  $wa_eintr = $_POST['wa'];
			 	 $id++;
				 unset($_POST);
				 };
		
			  
 	$fehler = ;
 if (empty($vorname_eintr)) $fehler .=<li>Der Vorname fehlt noch.</li>;
			if (empty($nachname_eintr)) $fehler .=<li>Der Nachname fehlt noch.</li>;	
				if ($wa_eintr == 0) $fehler .=<li>Welche Wachabteilung ?</li>;
			if (!empty($fehler)) {
					echo <p><center><b><ul>$fehler</ul></b></center></p>;
					}	
			else {
				
					require(incl/dbconnect.inc.php);
        $query = INSERT INTO impressum (id, vorname, nachname, wa) VALUES ('$id',->$vorname_eintr',->$nachname_eintr',->$wa_eintr');						
		  mysql_query($query);
				 }
	
		
	?> 

</form>
 
  • #16
Hi

Code:
<?php 
$status = $_POST['uebergeben'];

if ($status == Eintragen) {
 $vorname_eintr = $_POST['vorname'];
 $nachname_eintr = $_POST['nachname'];
  $wa_eintr = $_POST['wa'];

 $fehler = ;
 if (empty($vorname_eintr)) $fehler .=<li>Der Vorname fehlt noch.</li>;
if (empty($nachname_eintr)) $fehler .=<li>Der Nachname fehlt noch.</li>;
if ($wa_eintr == 0) $fehler .=<li>Welche Wachabteilung ?</li>;
if ($fehler == ) {
  $id++;
require(incl/dbconnect.inc.php);
        $query = INSERT INTO impressum (id, vorname, nachname, wa) VALUES ('$id',->$vorname_eintr',->$nachname_eintr',->$wa_eintr');
  mysql_query($query);
header(Location:  . $_SERVER[PHP_SELF]);
}
} 
?>
<form method=post name=eintragen>
<?php if ($fehler) : ?>
  <p><center><b><ul><?php echo $fehler ?></ul></b></center></p>
<?php endif ?>
 <table width=100% border=0>
  <tr>
   <td>Vorname :</td>
   <td><center><input type=text name=vorname maxlength=15 value=<?php echo $_POST['vorname'] ?>></center></td>
  </tr>
  <tr>
   <td>Nachname :</td>
   <td><center><input type=text name=nachname maxlength=15 value=<?php echo $_POST['nachname'] ?>></center></td>
  </tr>
  <tr>
   <td>Wachabteilung :</td>
   <td><center><select name=wa>
     <option value=0></option>
 <option value=1>1</option>
     <option value=2>2</option>
     <option value=3>3</option>
    </select></center></td>
  </tr>
  <tr>
   <td colspan=2><center><input type=submit name=uebergeben value=Eintragen><br></center></td>
  </tr>
 </table>
</form>

Nicht getestet, aber um zu demonstrieren wie ich es meinte :)

Gruß, Michael
 
  • #17
Code:
<?
if($_POST['submit']) {
 $error = ;
 $query = ;
 $error .= ($_POST['vorname'] == ) ? <li>Der Vorname fehlt noch.</li> : ;
 $error .= ($_POST['nachname'] == ) ? <li>Der Nachname fehlt noch.</li> : ;
 $error .= ($_POST['wa'] == ) ? <li>Welche Wachabteilung ?</li> : ;
	
 if($error != ) {
  echo-><div align=center><ul>'. $error .</ul></div>;
 }
 else {
  require(incl/dbconnect.inc.php);
	$query =->INSERT INTO impressum SET vorname='.$_POST['vorname'] .', nachname='.$_POST['nachname'] .', wa='.$_POST['wa'] .')';
	mysql_query($query);
	unset($query, $_POST['vorname'], $_POST['nachname'], $_POST['wa']);
 }
}
?>

<form action=<?=$PHP_SELF ?> method=post>
 <p>Vorname <input type=text name=vorname value=<?=$_POST['vorname'] ?>></p>
 <p>Nachname <input type=text name=nachname value=<?=$_POST['nachname'] ?>></p>
 <p>Abteilung <input type=text name=wa value=<?=$_POST['wa'] ?>></p>
 <p> </p>
 <p><input type=submit name=submit value=Speichern></p>
</form>

edit: den HTML-Code hab ich mal vereinfacht dargestellt

gruss conny
 
  • #18
Das trifft es aber leider immer noch nicht ganz... :-[
Scheinbar werden die Variablen wohl auf dem Server gelöscht, nicht aber lokal im Cache, und beim erneuten Laden der Seite sind sie wieder da.
Ich beschäftige mich erstmal mit dem Rest der Seite, da gibt es noch genug zu tun.
Aber geholfen hat mir das insofern, daß ich gesehen habe wie ich meinen Code verainfachen kann...

Danke für die Hilfe, ich komme nochmal auf diesen Thread zurück, wenn es denn soweit ist...
 
  • #19
Hi

Probier mal einen Metatag für no-cache einzufügen. Dann sollte der Browser das auch lassen.

Gruß, Michael
 
  • #20
Den habe ich bereits eingefügt, kurzzeitig funktionierte das auch, aber nur mit dem Internet-Explorer.
(http://www.wintotal-forum.de/index.php/topic,65078.0.html)
Mit Firefox z.B. geht das nicht.
Ich werde das jetzt aber anders lösen - über ein Popup zum Eintragen.
Da sich das popup ja beim Übertragen der Seiten wieder schließt kann man es ja nicht aktualisieren...
Und weil es im Admin-Bereich der HP liegt brauche ich mir um Popup-Blocker keine Gedanken zu machen...
 
Thema:

Variablen löschen mit unset()

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.836
Beiträge
707.957
Mitglieder
51.488
Neuestes Mitglied
elkhse
Oben