• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Private Nachrichten - Senden Script

Roma87

Neues Mitglied
Hallo zusammen,

bin neu hier. Habe aber ne Frage, bzw. ein Fehler wo ich nicht weiterkomme.

Kann mir da jemand helfen?

Und zwar dieser Fehler:
syntax error, unexpected $end in .... on line 58

Habe schon alle Klammern etc. durchgeguckt, finde aber nix, wo ich eins vergessen habe.

Hier das Script

PHP:
$abfrage = "SELECT username  FROM login WHERE username = '" . mysql_real_escape_string($empfaenger) . "'"; 
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_array($ergebnis); 
  

if(!$row)
    {
    echo "etwas stimmte mit der DB nicht";
    }
exit;




if($row['username'] != §empfaenger)
    { 
    echo "dieser Benutzername existiert nicht!";
    }
exit;
    

$eintrag = "INSERT INTO nachrichten
    ('nach', 'von', 'betreff', 'text', 'datum', 'zeit', 'read')
VALUES
    ('".$empfaenger."', '".$_SESSION("username")."', '".$betreff."', '".$text."' , '".$date."' , '".$time."' , '0');

if(!$eintrag)
    echo 'Fehler beim Senden';

else 
    $eintragen = mysql_query($eintrag) or die (mysql_error());


if($eintragen == true)
    {
    echo 'Deine Nachricht wurde erfolgreich an '.$empfaenger.' verschickt';
    }
else
    {
    echo 'Das Senden hat nicht geklappt';
    }
?>

Bin totaler Anfänger und das ist mein zweites Script, also bitte nicht lachen, falls das ein bisschen komisch aussieht.
Für Tipps und Anregungen bin ich sehr dankbar. Könnt natürlich auch kritisieren ;)

Gruß
 
Und welche Zeile ist Zeile 58?

Der Code ist unvollständig, den du uns hier präsentierst.

Ein Fehler habe ich gesehen:
PHP:
if($row['username'] != §empfaenger)
 
Und welche Zeile ist Zeile 58?

Der Code ist unvollständig, den du uns hier präsentierst.

Ein Fehler habe ich gesehen:
PHP:
if($row['username'] != §empfaenger)

Achso stimmt sorry, Zeile 58 ist das ende, wo ?> ist. Also die letzte Zeile im Script.

Ja danke, hab den Fehler geändert. Aber der andere, Syntax error, ist weiterhin da :(
 
Hier fehlen am Ende vor dem Semikolon die Anführungsstriche:

PHP:
$eintrag = "INSERT INTO nachrichten
    ('nach', 'von', 'betreff', 'text', 'datum', 'zeit', 'read')
VALUES
    ('".$empfaenger."', '".$_SESSION("username")."', '".$betreff."', '".$text."' , '".$date."' , '".$time."' , '0');
 
Oh, danke, der Fehler ist weg, aber jetzt bekomme ich schon den nächsten Fehler angezeigt und zwar: :(

etwas stimmte mit der DB nicht

also ist irgendwas an meiner $abfrage falsch? aber die Tabelle mit username und login ist vorhanden! komisch komisch.
Vllt hat jemand ein Tipp?


PHP:
<?php 
session_start(); 
?> 

<?php 

$time = date("H:i:s", time());  
$date = date("d.m.Y");  

$verbindung = mysql_connect("local", "root" , "kennwort")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("database") or die ("Datenbank konnte nicht ausgewählt werden"); 

$empfaenger = $_POST["empfaenger"]; 
$betreff = $_POST["betreff"];
$text = $_POST["text"];


$abfrage = "SELECT username FROM login WHERE username = '".mysql_real_escape_string($empfaenger)."'"; 
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_array($ergebnis); 

if(!$row)
    {
    echo "etwas stimmte mit der DB nicht";
    }
exit;



if($row['username'] != §empfaenger)
    { 
    echo "dieser Benutzername existiert nicht!";
    }
exit;
    

$eintrag = "INSERT INTO nachrichten
    ('nach', 'von', 'betreff', 'text', 'datum', 'zeit', 'read')
VALUES
    ('".$empfaenger."', '".$_SESSION["username"]."', '".$betreff."', '".$text."' , '".$date."' , '".$time."' , '0')";

if(!$eintrag)
    echo 'Fehler beim Senden';

else 
    $eintragen = mysql_query($eintrag) or die (mysql_error());


if($eintragen == true)
    {
    echo 'Deine Nachricht wurde erfolgreich an '.$empfaenger.' verschickt';
    }
else
    {
    echo 'Das Senden hat nicht geklappt';
    }
?>
 
Schreib mal statt

PHP:
$ergebnis = mysql_query($abfrage);

das hier

PHP:
$ergebnis = mysql_query($abfrage) or die("SQL fehlerhaft: ".$sql);

Dann solltest Du sehen können, ob dein SQL-Statement überhaupt funktioniert. Wenn es dir angezeigt wird, führe das was dort angezeigt wird per phpmyadmin auf der Datenbank aus. Dann wirst Du sehen, was daran falsch ist.
 
Also: das ist irgendwie ganz komisch.

Wenn ich die Nachricht schreibe, mit Empfänger und Betreff und dem Text und diese dann versende, wird dann die obige PHP-Datei geöffnet.

Man sieht dann nix, der Browser ist leer, kein Text, kein Fehler, gar nix.

Erst wenn ich die URL min. ein mal aktualisiert habe, kommt der Fehler, etwas stimmte mit der Datenbank nicht.

ABer erst, wenn ich die URL einmal aktualiesiere
 
Überleg mal, ob die exit-Befehle nicht besser im Körper der if-Bedingungen stehen sollten.

(In threadis Zeile muss es hinten $abfrage heißen, nicht $sql.)
 
(In threadis Zeile muss es hinten $abfrage heißen, nicht $sql.)

Ja das habe ich mit $abfrage gemacht, aber kam immer noch die gleiche Meldung.

Überleg mal, ob die exit-Befehle nicht besser im Körper der if-Bedingungen stehen sollten.

wie meinst du das? wäre das so richtig? wie kann ich die ansonsten in den Körper der if-bedingung einfügen? Wie gesagt, bin noch anfänger und bräuchte hier und da bisschen hilfe.

PHP:
$abfrage = "SELECT * FROM login WHERE username = '.mysql_real_escape_string($empfaenger).'"; 
$ergebnis = mysql_query($abfrage) or die("SQL fehlerhaft: ".$abfrage);
$row = mysql_fetch_array($ergebnis); 

if(!$row)
    {
    echo "etwas stimmte mit der DB nicht";
    }
endif;



if($row['username'] != §empfaenger)
    { 
    echo "dieser Benutzername existiert nicht!";
    }

    

else($eintrag = "INSERT INTO nachrichten
    ( id , nach , von , betreff , text , read , datum , zeit )
        VALUES
    ('', ".$empfaenger.", ".$_SESSION['username'].", ".$betreff.", ".$text.", '0', ".$date.", ".$time.")");



if(!$eintrag)
    echo 'Fehler beim Senden';

else 
    $eintragen = mysql_query($eintrag) or die (mysql_error());


if($eintragen == true)
    {
    echo 'Deine Nachricht wurde erfolgreich an '.$empfaenger.' verschickt';
    }
else
    {
    echo 'Das Senden hat nicht geklappt';
    }
?>
 
Ich meinte nicht so, …

PHP:
if($row['username'] != $empfaenger)
    { 
    echo "dieser Benutzername existiert nicht!";
    }
exit;

…sondern so:

PHP:
if($row['username'] != $empfaenger)
    { 
    echo "dieser Benutzername existiert nicht!";
    exit;
    }

Dein Code verändert sich aber so oft, dass es schwierig ist, zu antworten, weil der aktuelle Stand nicht wirklich bekannt ist.

Lies außerdem bitte hier die Hinweise zum Error Reporting:

- http://phpforum.de/forum/showthread.php?t=216988
 
Weil ich den Fehler nicht finde :(

Habe nochmal alles durchgeguckt und probiert, aber es klappt nix. Der Fehler ist iwo in der $abfrage. Mein Script sieht jetzt so aus, mit den Änderungen, die ihr mir geraten habt:

PHP:
$empfaenger = $_POST["empfaenger"]; 
$betreff = $_POST["betreff"];
$text = $_POST["text"];


$abfrage = "SELECT username FROM login WHERE username = '".mysql_real_escape_string('$empfaenger')."'"; 
$ergebnis = mysql_query($abfrage) or die("SQL fehlerhaft: ".$abfrage);
$row = mysql_fetch_array($ergebnis); 

if(!$row)
    {
    echo "etwas stimmte mit der DB nicht";
    exit;}


if($row['username'] != §empfaenger)
    { 
    echo "dieser Benutzername existiert nicht!";
    exit;}

    

($eintrag = "INSERT INTO nachrichten
    ( id , nach , von , betreff , text , read , datum , zeit )
        VALUES
    ('', ".$empfaenger.", ".$_SESSION['username'].", ".$betreff.", ".$text.", '0', ".$date.", ".$time.")");



if(!$eintrag)
    echo 'Fehler beim Senden';

else 
    $eintragen = mysql_query($eintrag) or die (mysql_error());


if($eintragen == true)
    {
    echo 'Deine Nachricht wurde erfolgreich an '.$empfaenger.' verschickt';
    }
else
    {
    echo 'Das Senden hat nicht geklappt';
    }
?>

Habe die Strings in der $abfrage verändert und alles schon versucht, aber der Fehler in der DB besteht weiterhin.

Aber in meinem phpmyadmin ist die Tabelle definitiv vorhanden und auch meine anderen Scripts funktionieren auch, ohne Fehler. Z. B. für die Usersuche:

PHP:
$usersuche = $_GET["usersuche"]; 

$abfrage = "Select username FROM login WHERE username LIKE '%".mysql_real_escape_string($usersuche)."%'";
$ergebnis = mysql_query($abfrage); 

if (mysql_num_rows($ergebnis) < 1) {
die ('Es konnten keine Suchergebnisse gefunden werden'); 
}
else
{
echo 'folgende User wurden gefunden:<br />';
}
$i = 0;
WHILE ($row[$i] = mysql_fetch_array($ergebnis))

{
   echo $row[$i]['username'] . "<br />";
   $i++;
}
?>

Der Script funktioniert und zeigt keine Fehler in der DB an. Soll ich mal die Übertragungsmöglichkeit mit GET versuchen? Aber das kann ja eig. nicht der Fehler sein
 
Korrigiere

PHP:
mysql_real_escape_string('$empfaenger')

zu

PHP:
mysql_real_escape_string($empfaenger)

Und lass dir $abfrage ausgeben und prüfe, ob das Statement überhaupt korrekt ist und auch den eingefügten Wert für $empfaenger enthält.
 
Korrigiere

PHP:
mysql_real_escape_string('$empfaenger')

zu

PHP:
mysql_real_escape_string($empfaenger)

Und lass dir $abfrage ausgeben und prüfe, ob das Statement überhaupt korrekt ist und auch den eingefügten Wert für $empfaenger enthält.

Hab alles ausprobiert, aber ist immer noch derselbe Fehler. Bzw. Etwas stimmte mit db nicht.


Was ist hiermit?

PHP:
if(!$row)

Vielleicht ist hier der Fehler? Aber wie kann ich es anders schreiben?
Brauch ich das in meinem Script oder kann.ich es auch weglassen?
 
Rate nicht herum. $row enthält die Rückgabe von mysql_fetch_array(). Laut Handbuch (PHP: mysql_fetch_array - Manual) gibt es ein Array zurück. Die Prüfung auf

PHP:
if( !$row )

würde folglich eigentlich bedeuten, dass die if-Bedingung nicht erfüllt wird. Um es ganz sauber zu schreiben müsste man allerdings schreiben:

PHP:
if( !is_array($row) )

Du könntest auch mal anfangen selbst deinen Code zu debuggen. Dazu ist es oft hilfreich mit var_dump() sich mal einzelne Variablen ausgeben zu lassen um zu sehen, ob dort Werte drinne stehen und wenn ja, ob es überhaupt die richtigen sind. Ich tippe weiterhin stark darauf, dass mysql_query() keinen return-Wert liefert, wodurch auch mysql_fetch_array() nichts liefern kann.
 
Es hat geklappt. Habe einfach mysql_fetch_array entfernt! brauche ich das unbedingt? Wenn ja, dann kann ich das nur mit einer while-schleife machen, oder?
 
Du kanst nicht einfach was rauslöschen und sagen hat geklappt. MySql_fetch_array ist eine Datenbankfunktion in PHP und lässt sich zudem nicht durch eine While-Schleife nachbauen noch ersetzen.

Bitte lies dich in die Materie ein:.
PHP: mysql_fetch_array - Manual

Dort links auf der Seite stehen zudem alle MySql-Funktionen aufgelistet.
 
Zurück
Oben