PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP Script für Datenbank übertrögt keine Daten



Tuxist
24-07-2005, 23:31
<?php

$host = "localhost";
$port = "5432";
$user = "ghd";
$password = "matrix";
$dbname = "ghd";


$conn = @pg_connect ("dbname=$dbname user=$user port=$port host=$host");

$sqi = "insert into news (text, title) values ";
$sqi .= "('".pg_escape_string ($text)."',";
$sqi .= "'".pg_escape_string ($title)."');";

$action = $_SERVER['PHP_SELF'];
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
{
$res = pg_query ("INSERT INTO news (title, date, owner, text)
VALUES ($title, $date, $owner, $text)",$conn);
$oid = pg_last_oid ($res);
echo $oid;
}
}
?>



<html>
<head>
<title></title>
<meta content="">
<style></style>
</head>

<?php
include ('cmslib.php');
?>

<body>
Titel:
<input type="text" name="title"/>
Datum:
<input type="text" name="date"/>
Besitzer:
<input type="text" name="owner"/>
Text:
<input type="text" name="text"/>

<form align="center" action="<?=$action?>" method="post">
<input type="submit" value="News Senden"/>
</form>
</body>
</html>

Romanday
25-07-2005, 00:22
Zählt man den Rechtschreibfehler in der Überschrift hinzu, habe
ich 9 Fehler in dem Script gefunden. ;-)
Bietet jemand mehr?

Du solltest dir in Ruhe die einzelnen Funktionen unter
www.php.net mal anschauen, wenn du Zeit hast.

Tuxist
27-07-2005, 01:04
habe query vergessen. :o
geht trotzdem nicht.
Fehlermeldung:

Warning: pg_query(): supplied argument is not a valid PostgreSQL link resource in /var/www/ghd/cms/cmslib.php on line 21

Warning: pg_last_oid(): supplied argument is not a valid PostgreSQL result resource in /var/www/ghd/cms/cmslib.php on line 22

BlueJay
27-07-2005, 12:31
<form align="center" action="<?=$action?>" method="post">



das klappt?




<input type="submit" value="News Senden"/>

Also hier fühlen sich einige Browser beleidigt. Ist lt.Kopf doch HTML und kein XML oder Scripterguß.

Gaert
27-07-2005, 13:48
Hallo,

@BlueJay
also wegen dem schließenden / mache ich mir weniger sorgen - der einzige einigermaßen "aktuelle" Browser der meines Wissens damit Probleme hat ist Netscape < 4.6 (wer mit einem fünf Jahre alten Browser unterwegs ist braucht sich nicht zu wundern).
Korrekterweise, sollte man ein leerzeichen zwischen dem " und dem / lassen... dann rafft das auch Netscape 4.:


<input type="submit" value="News Senden" />

Eigentlich sollte man dann aber auch gleich komplett auf valides XHTML umsteigen und den Doctype richtig deklarieren ;) .

@Tuxist
Der "Short opening Tag" von PHP <? sollte NIE verwendet werden - stattdessen IMMER <?php .
1. ist die schreibweise nicht XML compliant
2. funktioniert es nur wenn die tags in der php.ini erlaubt sind

Zu den Fehlern:
1. Die Datenbankverbindung am Anfang schlägt fehl -> "not a valid PostgreSQL link resource" bei einer Abfrage. Mach das @ vor dem pgconnect weg und du siehst die Fehlermeldung.
2. Weil du keine Verbindung hast kann die Abfrage auch keine Valide Rückgabe liefern aus denen du dann die Datesätze liest -> " not a valid PostgreSQL result resource".

Ich kann mich den Vorrednern nur anschließen... mach erstmal ein paar PHP Tutorials und arbeite dich Stück für Stück and die Sachen heran - nicht gleich alles auf einmal!

undefined
27-07-2005, 15:28
Also ein Input gehört doch schon in ein Form Tag ;)
Ein einfaches var_dump() Hilft immer ;)


<fieldset>
<form align="center" action="<?php echo $action; ?>" method="post">
<div>
<label for="a">
Titel:
</label>
<input id="a" type="text" name="title"/>
<label for="b">
Datum:
</label>
<input id="b" type="text" name="date"/>
<label for="c">
Besitzer:
</label>
<input id="c" type="text" name="owner"/>
<label for="d">
Text:
</label>
<input id="d" type="text" name="text"/>

<input type="submit" value="News Senden"/>
</div>
</form>
</fieldset>

..............
<?php
var_dump( $_POST );
?>

Tuxist
27-07-2005, 20:20
bekomme noch die selbe Fehlermeldung vermute Fehler in:
+array(0) { }


$sqi = "insert into news (text, title) values ";
$sqi .= "('".pg_escape_string ($text)."',";
$sqi .= "'".pg_escape_string ($title)."');";

$res = pg_query ("INSERT INTO news (title, date, owner, text);
VALUES ($title, $date, $owner, $text)",$conn);
$oid = pg_last_oid ($res);
echo $oid;
pg_close($conn)

Kann ihn aber localisieren.

Gaert
28-07-2005, 07:57
Hallo Tuxist,

Ich erlaube mir mal auseinanderzunehmen was du da postest:


bekomme noch die selbe Fehlermeldung vermute Fehler in:
+array(0) { }

-> Was soll das heißen?

-----------------------------------------

$sqi = "insert into news (text, title) values ";
$sqi .= "('".pg_escape_string ($text)."',";
$sqi .= "'".pg_escape_string ($title)."');";


-> 1. Wo verwendest du den $sqi... in dem folgenden Codeabschnitt ja wohl nicht
-> 2. Findest du das übersichtlich??? Schlechter Stil!



$esc_text = pg_escape_string ($text);
$esc_title = pg_escape_string ($title);
$sqi = "INSERT INTO news (text, title) VALUES ('$esc_text','$esc_title')";


-----------------------------------------



$res = pg_query ("INSERT INTO news (title, date, owner, text);
VALUES ($title, $date, $owner, $text)",$conn);


-> Blödsinn... was soll das Semikolon am Ende der Zeile?
-> Wieso machst du oben ein escape auf die Eingaben und hier nicht?


$sql = "INSERT INTO news (title, date, owner, text)
VALUES ('$title', '$date', '$owner', '$text')";
$res = pg_query ($sql,$conn);


Ein weiterer Tip von mir... gewöhn dir mal einen gescheiten Stil an.

Gruß,

Gaert

Dragoran
28-07-2005, 09:16
verwende die Post variablen nicht direkt.
Bei neueren phpversionen ist das aus sicherheitsgründen in der php.ini abgestellt.
$_POST['text'] usw...

undefined
28-07-2005, 15:58
verwende die Post variablen nicht direkt.
Bei neueren phpversionen ist das aus sicherheitsgründen in der php.ini abgestellt.
$_POST['text'] usw...
Wer hat dir denn den Bären aufgebunden :D
Oder meinst du jetzt Register_Globals off

Dragoran
30-07-2005, 08:33
Wer hat dir denn den Bären aufgebunden :D
Oder meinst du jetzt Register_Globals off
genau das meine ich....
$title = unsauber
$_POST['title'] = korrekt ;)

Tuxist
30-07-2005, 13:18
<?php
var_dump( $_POST );
$_POST['title'] =$tilte;
$_POST['datum'] =$datum;
$_POST['owner'] =$owner;
$_POST['texte'] =$texte;
?>

hat nichts bewirkt.

undefined
30-07-2005, 19:18
Lese dir bitte das einmal durch bevor es für dich noch peinlicher wird ;)
http://www.php.net/manual/de/langref.php
PS:


$title = $_POST['title'];