PHP Undefined index: timestamp

  • Ersteller Ersteller mustermen
  • Erstellt am Erstellt am
M

mustermen

Gast
Hallo bei mir kommt der Fehler: "Notice: Undefined index: timestamp in C:\xampp\htdocs\cjw\gbsend.php on line 18
Der Eintrag konnte nicht hinzugefügt werden."

Ich habe ein Formular, das heißt gbinsert.php und dort drinne ist eine php Anweisung die die Zeit misst wie lange der User braucht es Auszufüllen, ich will damit Spam abwehren:

PHP:
<form action="gbsend.php" method="post">
            	<input type="text" name="name" placeholder="Dein Name" required><br>
                <input type="email" name="email" placeholder="Deine Email" required><br>
                <textarea name="text" placeholder="Deine Nachricht…" required></textarea><br>
                <input class="submit" type="submit" name="submit" value="Eintragen"><br>
				<?php 
     				echo "<input type=\"hidden\" name=\"timestamp\" value=\"" . time() ."\">";
   				?>            
   			</form>

und hier ist gbsend.php Zeile 18 ist gekennzeichnet. Ich glaube PHP findet "timestamp" nicht, obwohl ich isset hinzugefügt habe?
PHP:
<?php
 
if (isset( $_POST['submit'] ))
{
    // Maskierende Slashes aus POST Array entfernen
    if (get_magic_quotes_gpc()) { $_POST = array_map( 'stripslashes', $_POST ); }
    $name    = $_POST['name'];
    $email = $_POST['email'];
	$text = $_POST['text'];
 
    // Neues Datenbank-Objekt erzeugen
    $db = @new mysqli( 'localhost', 'root', '', 'gb' );
    // Pruefen ob die Datenbankverbindung hergestellt werden konnte
    if (mysqli_connect_errno() == 0)
    {
		//Pruefen ob das Eintragen laenger als 60 Sekunden gedauert hat
        if (isset($_GET['timestamp'])) echo $_GET['timestamp']; //>>>>>>>>>>Zeile 18
		if (time() - $_GET['timestamp'] > 60){
			//Eintrag verarbeiten
			$datum = date("d.m.Y");
			$sql = 'INSERT INTO `gb` (`name`, `email`, `text`, `datum`) VALUES (?, ?, ?, ?)';
			$eintrag = $db->prepare( $sql );
			$eintrag->bind_param( 'ssss', $name, $email, $text, $datum );
			$eintrag->execute();
			// Pruefen ob der Eintrag efolgreich war
				if ($eintrag->affected_rows == 1)
				{
					echo 'Der neue Eintrage wurde hinzugef&uuml;gt.';
					header("Location: gb.php");
				}
				else
				{
					echo 'Der Eintrag konnte nicht hinzugef&uuml;gt werden.';
				}
		} else {
			//Spam-Alarm!
			echo 'Nicht Spammen!';
		}		
    }
    else
    {
        // Es konnte keine Datenbankverbindung aufgebaut werden
        echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
    }
    // Datenbankverbindung schliessen
    $db->close();
}
 
?>
Ich bin ein Anfänger was PHP betrifft bitte sehr einfache Antworten geben danke!
 
Mein php ist zwar schon ein wenig eingerostet, aber wenn ich mich nicht täusche müsstest du dir den wert auch mit $_POST['timestamp'] holen. Ist sclhießlich auch ein Feld in dem Formular...
 
Du schickst dein Formular mit Post ab, prüfst beim Timestamp aber mit Get.


P.S. ne Minute kommt mir etwas lang vor.
 
Zuletzt bearbeitet:
Hallo deine Lösung ist ganz einfach der timestamp gehört auch zu POST und nicht zu GET
einfach austauschen dann dürfte es gehn
mfg
Richi
 
Wow super danke ihr seit aber Flott. Das Mit timestamp funktioniert jetzt super, die 60 Sekunden waren nur zum test! Aber irgendetwas stimmt jetzt nicht er will kein Formular mehr abschicken? Wen ich unter den 60 Sekunden abschicken sagt er nicht Spammen, aber über den 60 Sekunden sagt er mir das hier "Der Eintrag konnte nicht hinzugefügt werden." Die Zeile wo PHP immer wieder hin springt habe ich damit gekennzeichnet ">>>>>>>>>>>>"

PHP:
<?php
 
if (isset( $_POST['submit'] ))
{
    // Maskierende Slashes aus POST Array entfernen
    if (get_magic_quotes_gpc()) { $_POST = array_map( 'stripslashes', $_POST ); }
    $name    = $_POST['name'];
    $email = $_POST['email'];
    $text = $_POST['text'];
 
    // Neues Datenbank-Objekt erzeugen
    $db = @new mysqli( 'localhost', 'root', '', 'gb' );
    // Pruefen ob die Datenbankverbindung hergestellt werden konnte
if (mysqli_connect_errno() == 0)
    {
		//Pruefen ob das Eintragen laenger als 5 Sekunden gedauert hat
		if (time() - $_POST['timestamp'] > 5){
			//Eintrag verarbeiten
			$datum = date("d.m.Y");
			$sql = 'INSERT INTO `gb` (`name`, `email`, `text`, `datum`) VALUES (?, ?, ?, ?)';
			$eintrag = $db->prepare( $sql );
			$eintrag->bind_param( 'ssss', $name, $email, $text, $datum );
			$eintrag->execute();
			// Pruefen ob der Eintrag efolgreich war
				if ($eintrag->affected_rows == 1)
				{
					echo 'Der neue Eintrage wurde hinzugef&uuml;gt.';
					header("Location: gb.php");
				}
				else
				{
					echo 'Der Eintrag konnte nicht hinzugef&uuml;gt werden.'; //<<<<<<<<<<<<<<< Hier ist ein Fehler!!!!!!!!!!!
				}
		} else {
			//Spam-Alarm!
			echo 'Nicht Spammen!';
		}		
    }
    else
    {
        // Es konnte keine Datenbankverbindung aufgebaut werden
        echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
    }
    // Datenbankverbindung schliessen
    $db->close();
}
 
?>
 
Zuletzt bearbeitet:
Taucht der Eintrag denn in der DB auf, und was sagt dir ein echo $eintrag->affected_rows?
 
Nein der Eintrag taucht nicht in der DB auf. Das "echo $eintrag->affected_rows"habe ich von hier http://www.phpbuddy.eu/mysqli-erweiterung-php-5.html?start=4 das hat auch super funktioniert seit dem ich aber das mit timestamp drinne habe läuft das nicht?
Ergänzung ()

PHP:
<?php
 
if (isset( $_POST['submit'] ))
{
    // Maskierende Slashes aus POST Array entfernen
    if (get_magic_quotes_gpc()) { $_POST = array_map( 'stripslashes', $_POST ); }
    $name    = $_POST['name'];
    $email = $_POST['email'];
	$text = $_POST['text'];
 
    // Neues Datenbank-Objekt erzeugen
    $db = @new mysqli( 'localhost', 'root', '', 'gb' );
    // Pruefen ob die Datenbankverbindung hergestellt werden konnte
	
	
	//Pruefen ob das Eintragen laenger als 60 Sekunden gedauert hat
	if (time() - $_POST['timestamp'] > 2){	
		if (mysqli_connect_errno() == 0)
		{
				//Eintrag verarbeiten
				$datum = date("d.m.Y");
				$sql = 'INSERT INTO `gb` (`name`, `email`, `text`, `datum`) VALUES (?, ?, ?, ?)';
				$eintrag = $db->prepare( $sql );
				$eintrag->bind_param( 'ssss', $name, $email, $text, $datum );
				$eintrag->execute();
				// Pruefen ob der Eintrag efolgreich war
					if ($eintrag->affected_rows == 1)
					{
						echo 'Der neue Eintrage wurde hinzugef&uuml;gt.';
						header("Location: gb.php");
					}
					else
					{
						echo 'Der Eintrag konnte nicht hinzugef&uuml;gt werden.';
					}
		}
		else
		{
			// Es konnte keine Datenbankverbindung aufgebaut werden
			echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
		}
	} else {
			//Spam-Alarm!
			echo 'Nicht Spammen!';
		}		
    // Datenbankverbindung schliessen
    $db->close();
}
 
?>

Super danke für eure Hilfe es funktioniert!
 
Zuletzt bearbeitet:

Ähnliche Themen

Antworten
5
Aufrufe
3.708
U
Antworten
16
Aufrufe
3.114
U
M
Antworten
10
Aufrufe
5.350
Zurück
Oben