• Wir werden in den nächsten Tagen verschiedene Wartungsoperationen und Optimierungen am Server durchführen. Es wird zu mehreren Ausfällen kommen, die teilweise auch mehrere Stunden umfassen können.

frage zu ph und datenbanken

Joined
Nov 9, 2012
Messages
6
Points
0
kann mir jemand von euch helfen? ich möchte das Titel in die datenbank übernommen wird aber es kommt imemr ein fehler, wo ran kann das liegen?


form id="form-termin" action="test.php" method="Post">
<fieldset class="data">
<h1>Kontaktformular</h1>
<p><label for="titel">Titel </label>
<input id="titel" type="text" name="titel"/></p>

</fieldset>
<fieldset class="buttons">
<button type="submit">Absenden</button>
<button type="reset">Eingabe löschen</button>
</fieldset>
</form>


<?php

var_dump ($_POST);

$db_server="...";
$db_user="....";
$db_passwort="....";
$db_name=".....";

/* @var $titel callable */
$titel = $_POST["titel"];
/*$name = $_POST["name"];
$mail = $_POST["mail"];
$tele = $_POST["tele"];
$url = $_POST["url"];
$dat = $_POST["dat"];
$time = $_POST["tim"];

/* @var $verbindung type */
$verbindung = mysql_connect("..","..","...") /* stellt die verbindung zur Datenbank her */
or die ("Verbindung zur Datenbank konnte nicht Hergestellt werden"); /* zeigt aus wenn keine Verbindung zur Datenbank möglich ist */

mysql_select_db("andy")
or die ("Die Datenbank existiert nicht.");

/*$abfrage = "SELECT Vorname,Nachname,Telefon,E-Mail,Datum,Uhrzeit,Straße, Plz. und Ort FROM Abfrage"; /*fragt die tabellenzeilen ab*/
/*+$ergebnis = mysql_query($abfrage);*/
/*$result = mysql_query("SELECT Anfragen FROM Name WHERE Name LIKE '$name'"); wirft alle namen in der Datenbank aus */
$eintrag= "INSERT INTO Anfrage (titel) VALUE ('".mysql_real_escape_string($_POST["titel"])."')";

$eintragen = mysql_query($eintrag);

if($eintragen == true)
{
echo "Eintrag war erfolgreich";
}
else
{
echo "Fehler beim Speichern";
}
?>



</body>
</html>
 
Wenn du schon eine Fehlermeldung bekommst würde ich empfehlen die auch hier zu posten - das macht die Sache einfacher.

Ich hab deinen Code mal kopiert, mir eine entsprechende Tabelle in einer Testdatenbank erstellt und das getestet und es funktioniert soweit. (Mal abgesehen davon das du glaub ich am Anfang ein paar Kleinigkeiten zu kopieren vergessen hast)

Das hier funktioniert so auf jeden Fall, vorausgesetzt deine Datenbank passt:

PHP:
<html>
	<form id="form-termin" action="test.php" method="post">
		<fieldset class="data">
			<h1>Kontaktformular</h1>
			<p><label for="titel">Titel </label>
			<input id="titel" type="text" name="titel"/></p>
		</fieldset>
		<fieldset class="buttons">
			<button type="submit">Absenden</button>
			<button type="reset">Eingabe löschen</button>
		</fieldset>
	</form>




	<?php
	//var_dump ($_POST);
	$db_server="localhost";
	$db_user="root";
	$db_passwort="";
	$db_name="test";


	/* @var $titel callable */
	$titel = $_POST["titel"];
	/*$name = $_POST["name"];


	$mail = $_POST["mail"];
	$tele = $_POST["tele"];
	$url = $_POST["url"];
	$dat = $_POST["dat"];
	$time = $_POST["tim"];


	/* @var $verbindung type */
	$verbindung = mysql_connect($db_server,$db_user,$db_passwort) /* stellt die verbindung zur Datenbank her */
	or die ("Verbindung zur Datenbank konnte nicht Hergestellt werden"); /* zeigt aus wenn keine Verbindung zur Datenbank möglich ist */


	mysql_select_db("test")
	or die ("Die Datenbank existiert nicht.");


	/*$abfrage = "SELECT Vorname,Nachname,Telefon,E-Mail,Datum,Uhrzeit,Straße, Plz. und Ort FROM Abfrage";	/*fragt die tabellenzeilen ab*/
	/*+$ergebnis = mysql_query($abfrage);*/
	/*$result = mysql_query("SELECT Anfragen FROM Name WHERE Name LIKE '$name'"); wirft alle namen in der Datenbank aus */
	$eintrag= "INSERT INTO Anfrage (titel) VALUE ('".mysql_real_escape_string($_POST["titel"])."')"; 


	$eintragen = mysql_query($eintrag);


	if($eintragen == true) {
		echo "Eintrag war erfolgreich";
	}
	else {
		echo "Fehler beim Speichern";
	}
	?>


  </body>
</html>
 
Ich würde dir empfehlen anstelle der mysql_*-Funktionen lieber PDO zu verwenden. Sofern du neben dem Hinzufügen des Datenbank-Eintrages noch weitere Aktionen durchführst, würde ich es als Transactions behandeln.

PHP:
<!doctype html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Kontaktformular</title>
</head>
<body>
<form id="form-termin" action="test.php" method="post">
  <fieldset class="data">
    <h1>Kontaktformular</h1>
    <p><label for="titel">Titel </label>
    <input id="titel" type="text" name="titel"/></p>
  </fieldset>
  <fieldset class="buttons">
    <button type="submit">Absenden</button>
    <button type="reset">Eingabe löschen</button>
  </fieldset>
</form>
</body>
</html>

PHP:
<?php
try
{
    $PDO = new PDO('mysql:host=localhost;dbname=DATENBANKNAME', 'USERNAME', 'PASSWORD');
    $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $PDOStatement = $PDO->prepare('
      INSERT INTO
        `Anfrage`
      SET
        `titel` = :titel
  ');
  $PDOStatement->bindParam(':titel', $_POST["titel"]);

  if($PDOStatement->execute())
  {
    echo "Eintrag war erfolgreich";
  }
  else
  {
    echo "Fehler beim Speichern";
  }
}
catch (PDOException $exception)
{
    echo 'Connection failed: ' . $exception->getMessage();
}
?>
 
danke:) bei mir ist das problem das er keine datenbank verbindung aufbauen kann.
für was steht das setAttribute(PDO::ATTR_...?

Fehlermeldung: Connection failed: SQLSTATE[42000] [1044] Access denied for user 'andy'@'%' to database 'Anfrage'
 
PDO nutzt drei verschiedene Methoden zur Fehlerbehandlung:

  • PDO::ERRMODE_SILENT
  • PDO::ERRMODE_WARNING
  • PDO::ERRMODE_EXCEPTION

PDO::ERRMODE_SILENT, welcher der Standardwert ist, gibt gar keine Fehlermeldung aus, dies ist allenfalls für produktive Systeme sinnvoll, sofern eine getrennte Fehlerbehandlung stattfindet. Möchte man ohne eine zusätzliche Fehlerbehandlung anfallende Fehler erkennen, so bietet sich PDO::ERRMODE_WARNING und PDO::ERRMODE_EXCEPTION an. PDO::ERRMODE_WARNING gibt dabei eine E_WARNING und PDO::ERRMODE_EXCEPTION eine Exception aus.

Anhand der Fehlermeldung ergibt sich, dass du keine Zugriffsrechte über den Benutzer andy hast. Prüfe am besten nochmal den Benutzernamen, dass Kennwort und den Namen der Datenbank. In seltenen Fällen befindet sich die Datenbank auf einem anderen Host (z.B. bei den einfachen Web-Paketen von strato), in diesem Fall musst du den localhost duch die IP oder den Hostnamen des Datenbankservers anpassen.
 
Back
Top Bottom