Seite 1 von 2

PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 09:34
von marco
Hi @all ich habe ein Problem mit meinem PHP Formular. Ich möchte mit diesem Formular einträge in einer Datenbank vornehmen.

Der code des Formulars meiner blog.php
Code: Alles auswählen

<html>
<head>
<?php include 'conn.inc';     ?>

<?php

  if ((isset($_POST["blog_insert"])) && ($_POST["blog_insert"] == "form1"))
   {


      $num = mysql_affected_rows();

      $sqlab = sprintf("INSERT INTO bloggs (vardatum, varorteintragung, varueberschrift, ltexttext) VALUES (%s, %s,%s,%s)",
                       GetSQLValueString($_POST['varDatum'], "varchar"),
                       GetSQLValueString($_POST['varorteintragung'], "varchar"),
                       GetSQLValueString($_POST['varueber'], "varchar"),
                       GetSQLValueString($_POST['vartext'], "longtext"));

        mysql_db_query('bbmonex_gernand24', $sqlab) or die(mysql_error());


      if ($num = 0)
       echo "Es ist ein Fehler aufgetreten,es wurde kein Datensatz hinzugefügt";
       else echo "Es wurde 1 Datensatz hinzugefügt";


   }
    mysql_close($db);
 ?>

</head>

<body>
Geben Sie einen vollständigen Datensatz ein und senden Sie das
Formular ab:
<table border="1">
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<tr>
    <td>Datum</td><td> <input name="vardatum" value=".2005"></td>
  <p>
  </tr>

  <tr>
    <td>Ort</td> <td><input name="varorteintragung"></td>
  </tr>
  <tr><td>Überschrift</td><td ><input name="varueber"></td></tr>
<tr>
<td>Text</td>
<td><textarea cols="50" rows="10"  name="vartext"></textarea></td></tr>
<tr>
    <td><input type="submit" name="gesendet">

    </td>
    <td><input type="reset"></td>

</tr>
<input type="hidden" name="blog_insert" value="form1">
</form>
</table>


</body>
</html>


Der Code meiner conn.inc
Code: Alles auswählen
<?php
    // Dateiname: conn.php
    $db =mysql_connect("localhost","bbmonex_iuser","MyPassword");


function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}


$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

?>


Wenn ich das Formular absende bekomme ich folgende Fehlermeldung:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ' Griesheim,A,errer)' at line 1


Ihr könnt es auch gerne selbst unter
www.gernand24.de/blog.php testen.

Das auslesen aus der Datenbank funktioniert einwandfrei:
http://gernand24.de/readblog.php

vielen Dank schonmal im voraus für eure Hilfe.
grüße MArco

Re:PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 10:08
von Bimbel
Lass dir doch mal $sqlab ausgeben..

Re:PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 10:31
von marco
ich habe die &sqlab schon an diversen Stellen im Code versucht auszugeben. Leider bekomme ich keine Anzeige. Es erscheint immer nur die oben angesprochene Fehlermeldung.

Hast du einen Vorschlag wo die Variable angezeigt werden könnte?

Re:PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 10:36
von Bimbel
Wenn du den Code mittels die() abbrichst, ist klar, daß du sonst wenig siehst..
Code: Alles auswählen
die ("Achtung! Fehler bei der Abfrage:"
                 ."<li>errorno= ".mysql_errno()
                 ."<li>error= ".mysql_error()
                 ."<li>Query= ".$sqlab
                 );

Re:PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 10:56
von marco
Ah ok Thanks,
ich habe vergessen zu erwähnen, dass ich in der Datenbank den Auto-Increment Wert ID habe.
Muss ich den irgendwie mit übergeben?!?!?
HAbe es schon versucht, es bringt aber keine Änderung.

Das Echo der $sqlab sagt folgendes:

Code: Alles auswählen
INSERT INTO bloggs (vardatum, varorteintragung, varueberschrift, ltexttext) VALUES (, Griesheim, Am Ra, mjk)



Ich habe gerade festgestellt, dass ich im varDatum einen Schreibfehler habe. Es heisst *vardatum*. Bei diesem Codeschnipsel habe ich die ID mit reingenommen. Es erscheint die selbe Ausgabe mit ohne ID...
Die Ausgabe nun lautet:
Code: Alles auswählen
INSERT INTO bloggs (id, vardatum, varorteintragung, varueberschrift, ltexttext) VALUES (.2005, Griesheim, A, gki)

Re:PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 11:00
von Bimbel
Zur Fehlerbereinigung: Wenn id den Wert auto_increment hat, solltest du diese nicht mit übergeben. Des weiteren sollten die Namen der Tabellenfelder in Backticks gesetzt werden, die Feldinhalte in Anführungszeichen, sofern es sich nicht um numerische Werte handelt..

Code: Alles auswählen
INSERT INTO `bloggs` (`vardatum`, `varorteintragung`, `varueberschrift`, `ltexttext`) VALUES ('.2005', 'Griesheim', 'A', 'gki')

Re:PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 11:16
von marco
hmm ich habe die Feldinhalte in Anführungszeichen. Leider hat sich da noch keine Änderung eingestellt. HAst du evtl. noch eine Idee?

Code: Alles auswählen
    $sqlab = sprintf("INSERT INTO `bloggs` (`vardatum`, `varorteintragung`, `varueberschrift`, `ltexttext`) VALUES (%s, %s, %s, %s)",
                       GetSQLValueString($_POST["vardatum"], "varchar"),
                       GetSQLValueString($_POST["varorteintragung"], "varchar"),
                       GetSQLValueString($_POST["varueber"], "varchar"),
                       GetSQLValueString($_POST["vartext"], "longtext"));



Ausgabe:
INSERT INTO `bloggs` (`vardatum`, `varorteintragung`, `varueberschrift`, `ltexttext`) VALUES (.2005, Griesheim, Am Ra, öjköpio)

Re:PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 11:35
von Bimbel
Nein, die Feldinhalte sind nicht in Anführungszeichen..
Wobei ich noch nie mit sprintf() gearbeitet habe, das sollte gehen:
Code: Alles auswählen
 VALUES ('%s', '%s', '%s', '%s')

Re:PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 12:46
von marco
ah jetzt ja :-) vielen Dank für den Support. Jetzt funktioniert es einwandfrei

Re:PHP - MySql Datenbank Problem

BeitragVerfasst: 14.09.2005, 12:51
von marco
ich habe nun aber ein weiteres problem. die conn.inc steht in einem geschützten verzeichnis. ich habe sowohl die blog.php und die conn.inc da hineingeschoben. nun kann ich nicht mehr mit der blogread darauf zugreifen.

muss ich irgendetwas beachten?

der code in der blogread sieht wie folgt aus:
Code: Alles auswählen
<?php   include '/blogg/conn.inc'; ?>

Die Fehler:
Code: Alles auswählen
Warning: main(): open_basedir restriction in effect. File(/blogg/conn.inc) is not within the allowed path(s): (/home/bbmonex/:/usr/lib/php:/usr/local/lib/php:/tmp) in /home/bbmonex/public_html/readblog.php on line 4

Warning: main(/blogg/conn.inc): failed to open stream: Operation not permitted in /home/bbmonex/public_html/readblog.php on line 4

Warning: main(): open_basedir restriction in effect. File(/blogg/conn.inc) is not within the allowed path(s): (/home/bbmonex/:/usr/lib/php:/usr/local/lib/php:/tmp) in /home/bbmonex/public_html/readblog.php on line 4

Warning: main(/blogg/conn.inc): failed to open stream: Operation not permitted in /home/bbmonex/public_html/readblog.php on line 4

Warning: main(): Failed opening '/blogg/conn.inc' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/bbmonex/public_html/readblog.php on line 4