Abfrage und Darstellung mehrerer Tabellen

Hallo,

das ich die Kommentare nicht schreiben kann. Ich kann das Formular ausfüllen, aber es wird nicht eine Meldung herausgegeben und auch nicht in die Datenbank geschrieben.

Du kannst das selber ausprobieren: http://silviosiefke.de/ss/bloggen.html

Dort ein Beitrag nehmen und versuch einmal ein Kommentar zu schreiben. Dann wirst du sehen was ich meine. Ich verstehe das nicht, mit den selben Code habe ich vorher auch probiert ein StandAlone Comment Script zu schreiben, sogar mit Löschen und Bearbeiten was geklappt hat, aber bei den aktuellen Script klappt das nicht.

Den kompletten aktuellen Sourcecode der blogdetail.html findest du auf http://silviosiefke.de/tmp/blogdetail.txt. Vielleicht sollte ich die zwei PHP Container zu einen zusammenfassen, aber dann bekomme ich in den Comments Probleme mit den IDs.


MFG
Silvio
 
Ich sehe auch nirgendwo eine Anweisung das die ID des Threads übergeben wird an die Kommentare. So wie du es bei deinen Threads von der Startseite der Threads (dort wo die übersicht ist) gemacht hast.
also in deinem Formular noch die ID des Bloggs mitgeben und dein Script auf folgendes ändern:
PHP:
$blogid = ((!empty($_POST['id'])) ? $_POST['id'] : '' );

und in deinem Formular noch die ID per Hidden-Field übergeben:
Code:
<div class="comments_form">
            <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>" method="POST" enctype="text/plain">
                <fieldset>
                    <label>Name</label>
                    <input type="text" name="name" class="text" />
                    <label>Email</label>
                    <input type="text" name="email" class="text" />
                    <label>Nachricht</label>
                    <textarea class="textarea" cols="18" rows="10" name="inhalt"></textarea>
                    <input type="hidden" name="id" value="<?php $id; ?>" />
                    <input type="submit" class="submit" name="submit" value="Posten" />
                </fieldset>
            </form>
        </div>
 
Hallo,

ich habe diese im comments php (2) Block angegeben, allerdings mit GET, weil mit Post holt er nicht mehr die Testeinträge aus der Datenbank.

Auch mit POST und hidden bleibt es komischerweise beim gleichen Ergebnis.


MFG
Silvio
 
Zwei Sachen, die mir ad hoc auffielen:
  1. Du solltest kein $_SERVER['SCRIPT_NAME'], da dies eine potenzielle Sicherheitslücke ist. Wenn du Daten an das gleiche Skript schicken willst, lass den Wert von action einfach leer.
  2. Bei der Ausgabe von $id fehlt ein echo davor.
 
Hallo,

danke einfach nur crack (das ist ja mal ein Nickname) habe ich geändert, allerdings $id wollte ich nicht ausgeben. Oder wo meinst du das.

Ich habe das "Script" jetzt einmal zusammen gefasst, mit einen Kommentar schreiben habe ich nicht probiert. Er bemängelt mysqli_fetch_assoc, obwohl er die Daten aus Mysql liest. Der Fehler im Script (link oben genannt) bemängelt den Comment Part zum auslesen, aber der Eintrag wird gezeigt.

Es gibt auch ein Logeintrag dazu:

Code:
[06-May-2011 13:13:03] PHP Warning:  mysqli_fetch_array(): Couldn't fetch mysqli_result in /ss/blogdetail.html on line 126
[06-May-2011 13:13:03] PHP Warning:  mysqli_close() expects parameter 1 to be mysqli, object given in /ss/blogdetail.html

Das zweite ist klar, wenn ein Fehler vorhanden ist kann er auch nicht schließen. Die Warnung verstehe ich jetzt nicht wirklich.

Ich markiere in der Source die ZEILE 126.

Einfach nur crack, wenn du die Sicherheit ansprichst, ich habe ein Video2Brain Video das sehr gut auf Sicherheit eingeht. Dort wird etwas von real_escape_string gesagt, ist das genug um sich vor schädlichen Code in der Datenbank zu schützen oder empfiehlst du ein anderes Vorgehen?

Vielen Dank.
 
Hallo,

ich probiere jetzt den ganzen Tag diese Kommentare in die Datenbank zu bekommen. Ich habe diese Insert Funktionen mit anderen Scripten probiert was ohne Probleme klappte. Aber mit den Blog Script (comments) bin ich einfach überfordert oder doch zu d.... .

Ich habe den Code für das Formular als einzelnen PHP Container in das Script geschrieben.

PHP:
<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once "inc/include.html";

$id = ((!empty ($_POST['id'])) ? $_POST['id'] : '');
if (isset ($_POST['submit']) && isset ($_POST['name']) && isset ($_POST['email']) &&
isset ($_POST['inhalt']) && $_POST['name'] != '' && $_POST['email'] != '' && $_POST['inhalt'] != '') {

    $sql =
    "
	INSERT INTO
		`bloggen`.`comments`
			(`inhalt`, `date`, `blogid`, `email`, `name`)
	VALUES ('{$_POST['inhalt']}', NOW(), '{$id}', '{$_POST['email']}', '{$_POST['name']}')
	";

if (!$DB_result = $DB->query($sql)) {
    echo mysqli_error($DB);
}else {
    echo 'SQL: ' . $sql;
}
}
?>

Ich weiß nicht ich glaube das liegt an dieser ID Übermittlung. Jetzt bin ich nicht sicher wie ich diese id übergeben soll, ich habe es probiert mit input hidden als einfache ID Variable und als echo $id. Aber beides endet damit, das man das Formular ausfüllt und nach den Absenden Schalter wird das Formular nur geleert.

Code:
<form action="" method="post" enctype="text/plain">
<fieldset>
<label>Name</label>
<input type="text" name="name" class="text" />
<label>Email</label>
<input type="text" name="email" class="text" />
<label>Nachricht</label>
<textarea class="textarea" cols="18" rows="10" name="inhalt"></textarea>
<input type="hidden" name="id" value="<?php echo $id; ?>" />
<input type="submit" class="submit" name="submit" value="Posten" />
</fieldset>
</form>

Ich verstehe es wirklich nicht woran das Problem liegt. Hat jemand Rat?


Vielen Dank und schönes Wochenende.


Silvio
 
Hallo,

ich habe es hinbekommen, mittlerweile läuft das Script. Jetzt muss ich noch den Spamschutz einbauen und dann bin ich zufrieden.

Ich habe mal eine Frage, gibt es eine Möglichkeit PHP Scripte zu, kann man das so nennen, debuggen? Ich kann mit Fehlermeldungen in Logs etwas anfangen, einen Editor der Syntax Prüfungen macht habe ich mir auch gekauft, aber wie vorgehen wenn nichts in der Log steht. Ich hatte etwas von Xdebug gelesen, aber irgendwie lässt sich das nicht einrichten bei mir oder ich habe es falsch verstanden. Gibt es den noch andere Möglichkeiten Fehler in Scripten aufzuspüren, so das man weiß wo man suchen muss.

Vielen Dank für die Hilfen.

Gruß
Silvio
 
Erstell dir mal eine .php Datei in deinem Webspace mit folgendem inhalt:
PHP:
<?php
phpinfo();

Diese Datei im Brwoser aufrufen und die einstellungen des Error-Handlings auslesen.
 
Hallo,


ich habe einen eigenen Server, bin also für die PHP Einstellungen selbst verantwortlich. Die aktuellen Einstellungen kannst du dir auf http://www.silviosiefke.de/php.txt ansehen. Ich habe das auf den Server so eingestellt das es keine Meldung im Browser gibt, sondern das Fehler in entsprechende Logs gehen.

Die letzten Änderungen am Scipt haben soweit ja geklappt, die Blogdetail Seite fragt jetzt ab ob eine nummerische ID vorhanden ist und prüft vorher ob es diesen Artikel gibt. Wenn nicht kommt es zu Fehlermeldungen. Auch im Comments Script werden die Felder auf Inhalt geprüft und mit entsprechenden Fehlermeldungen sonst quittiert. Wo ich meine Probleme jetzt habe ist im Captcha Einbau, die vielen IF Anfragen sind manchmal verwirrend so das es zu Fehlermeldungen kommt die einen zurück werfen. Das Problem habe ich auch bei meinen Kontaktscript, der Captcha wird korrekt übergeben wenn er korrekt ausgefüllt ist, aber ich weiß nicht wo ich bei falschen Captcha die Meldung herausgeben soll. Vielleicht kannst du mal ein Blick darauf werfen.

PHP:
<?php
// Ask for filled fields
if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['nachricht']))
	{
	// Inital Session
	session_start();

	// Function for read the Captcha
	function encrypt($string, $key) {
	$result = '';
	for($i=0; $i<strlen($string); $i++) {
	$char = substr($string, $i, 1);
	$keychar = substr($key, ($i % strlen($key))-1, 1);
	$char = chr(ord($char)+ord($keychar));
	$result.=$char;
	}
	return base64_encode($result);
	}

   	// Variables for the Captcha Reading
	$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "29jfkd921");
	$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);

	// Formular Sending
	if(isset($_SESSION['rechen_captcha_spam']) AND $sicherheits_eingabe == $_SESSION['rechen_captcha_spam'])
	{
	unset($_SESSION['rechen_captcha_spam']);
	$name = htmlspecialchars("$_POST[name]");
	$email = htmlspecialchars("$_POST[email]");
	$nachricht = htmlspecialchars("$_POST[nachricht]");
	if (@mail("siefke@email.de", "Kontakt", "$nachricht", "FROM: $email"))
	{
	echo "<h1>Die Email ist unterwegs...</h1>";
	}
	}else {
	echo "<h1>Fehler Eins</h1>";
	}
	}
?>

Ansonsten klappt es ganz gut soweit, nur die IF Abfragen sind manchmal verwirrend und alle Tests NULL Werte (Blog Einträge ohne Bild) in die Datenbank zu schreiben sind gescheitert.


MFG
Silvio
 
Zurück