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

Gästebuch selbst erstellen

Werbung:
Na, ob dein Weg wirklich einfacher ist? :D
Einfach ist es dann, wenn ich selbst verstehe, was ich da mache... und das ist doch einfach zu verstehen! Merke dir die 'ID' des letzten Eintrages und wenn dann einer mit der gleichen ID kommt, dann stimmt was nicht ;)! ... das meine ich mit 'einfach(er)'.
 
@Sailor ,wenn ich das aber richtig verstehe,schützt es vor einen Reload.
Aber auch wenn einer mit Absicht mehrere Verschiedene Einträge sendet ? Nee oder ?
Meine deswegen sollte vieleicht auch ein Schutz rein das ein User der gerade gesendet hat ,vieleicht erst eine Minute warten muß oder so bevor er einen neuen Eintrag schicken kann
 
Werbung:
@basti1012 ... richtig. Schützt nur gegen Reload - also wenn im POST Array noch Daten sind, die dann beim Reload einen neuen Eintrag erzeugen.
Gegen einen Nutzer, der nacheinander mehrere Einträge macht, schützt das nicht!
 
Aber auch wenn einer mit Absicht mehrere Verschiedene Einträge sendet ?
Das kannst du nicht verhindern, denn die Remote-Adresse kann gefäscht oder gar garnicht ankommen. Du kannst das dem User nur schwerer machen, in dem du mit Cookies arbeitest.
 
Es wäre aber ein Leichtes, den reload code zu modifizieren... zB den time() als ID nehmen und ggf eine zusätzliche Abfrage einbauen, ob der gespeicherte Timestamp mindestens älter ist als X Minuten ist....
 
Werbung:
Aber auch dann kann der 'böswillige' Nutzer den Session Cokie im Browser löschen und gleich einen neuen Eintrag machen - das kannst du nicht verhindern ;)!.. aber wer sich so viel Mühe gibt, der hat es verdient in einer Minute 2 Einträge zu machen!
 
Die sicherste Methode Deppen davon abzuhalten, das Gästebuch zu bombadieren, ist relativ einfach:

Einträge nach Ansicht durch den Admin freischalten.

Wenn Trolle merken, dass ihr Müll niemals zu sehen sein wird, geben sie automatisch auf.
 
MySQL-Error: Table 'sebastian1012.entries' doesn't exist

Das bekomme ich zulesen wenn ich was in Datenbank schreiben will.
Ich glaube ich sollte das erstmal hinten dran hängen und erst php lernen .

Was muß den da stehen?
$mysqli = mysqli_connect('localhost', 'user', 'passwort', 'datenbank');

so?
$mysqli = mysqli_connect('localhost', 'sebastian1012', 'hab_ich_nicht', 'gastbuch);
Was muß in localhost rein? Habe auf datenbank sowas wie anmelde daten gesucht oder wie man damit php rein schreiben kann,aber sowas wie ne adresse oder Anleitung gibt es da wohl nicht. bin bei bplaced.net
 
Werbung:
JETZT BEKOMME ICH DAS .
MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' , , )' at line 6
Line 6 steht bei mir nix
 
Basti, zum letzten Mal: poste den relevaten Quellcode!!!! Ist das wirklich so schwer??? Sollen wir bei jeder Frage von dir raten, was du da zusammenstrickst???
Von mir wirst du ab sofort keine Hilfe mehr bekommen, wenn du den Quellcode nicht dazu postest!
 
ich glaube das wahr das .
Code:
 $host = 'localhost';
$user = 'sebastian1012';
$pw = 'nacrui;
$sql = mysql_connect($host, $user, $pw) or die("Verbindung zur Datenbank konnte nicht hergestellt werden.".mysql_error());
$db = 'gastbuch';
$verbindung = mysql_select_db($db) or die("Datenbank nicht gefunden.".mysql_error());

$qry = mysql_query("SELECT * FROM gastbuch");
while($row = mysql_fetch_object($qry))
{ echo $row->id; }
 
 $name = 'sexmonster';//trim($_POST['name']);
 $email = 'leckars hgffkuzfuzgkh';//trim($_POST['email']);
 $id = '48464646';//trim($_POST['text']);
  $date = '10.10.1982';//trim($_POST['text']);
 

   // if (isset($_POST['name']))
   // {
     $mysqli = mysqli_connect('localhost', 'sebastian1012', 'nacrui', 'sebastian1012');
       if (mysqli_connect_errno())
         die ("Connect failed: " . mysqli_connect_error());
 
       $query = "Insert
                    into
                      `entries`
                         (`date`, `name`, `email`, `message`, `ip`)
                     values
                        (now(), %s, %s, %s, %s)";
                   
       $query = sprintf($query, mysqli_real_escape_string($mysqli, $_POST['name']),
                                mysqli_real_escape_string($mysqli, $_POST['email']),
                                mysqli_real_escape_string($mysqli, $_POST['message']),
                                $_SERVER['REMOTE_ADDRR']);
 
       $result = mysqli_query($mysqli, $query)
          or die ("MySQL-Error: " . mysqli_error($mysqli));
//}

Die gesagte line 6 ist jetzt line 1 ,wo eben nix stand und jetzt auch nix.

Hatte den oberenTeil und unteren Teil auch einzelnt versucht,aber klappt auch nicht.Wahrscheinlich istdas ganze db nicht richtig eingestellt oder was auch immer
 
Werbung:
mal nee sache zwischendurch
Ist der Code noch aktuell
http://www.php-einfach.de/experte/codeschnipsel/8719-captcha-mit-dynamischen-fragen/

Der schmeist mir 20 Fehler raus.
Jede zeile wo was mit session steht
jede Zeile wo die functionen zum Bild erstellen sind.
Die zeile mit den header.

Also fast alles .Natürlich wird auch kein Bild angezeigt.
Was ist daran Falsch? Ist der Code veraltet ,oder warum geht das nicht mehr .Habe 1 zu 1 kopiert.
In mehrere datein und auch mal als eins als affenformular.


EDIT :JIPI habe mein ersten Eintrag in derDatenbank hin bekommen.
Zwar nur als test,aber ein anfang.
Aber es klappte nur mit den obrigen sql Teil.
Kann man den irgendwie anpassen das es für dieses Script( Gästebuch ) auch irgendwie läuft.
Code:
<?php

$sql = "CREATE TABLE IF NOT EXISTS `counter` ( \n"
    . "`cid` INT( 10 ) NOT NULL AUTO_INCREMENT , \n"
    . "`ip` VARCHAR( 15 ) NOT NULL , \n"
    . "`timestamp` INT( 10 ) NOT NULL , \n"
    . "PRIMARY KEY ( `cid` ) \n"
    . ")";







$db_location = "localhost"; 
$db_username = "sebastian1012";
$db_passwort = "nacrui"; 
$db_name = "sebastian1012"; 

$ip_block_minutes = 1;  
 

@mysql_connect($db_location, $db_username, $db_passwort) or die ("Verbindung fehlgeschlagen<br />"); 
@mysql_select_db($db_name) or die ("Keine Datenbank mit angegebenen Namen vorhanden<br />"); 


$timestamp = date(U);
$ip = $_SERVER['REMOTE_ADDR'];
$max_timestamp_ip = date(U) - ($ip_block_minutes * 60);  

$test = mysql_query("SELECT * FROM counter WHERE ip='$ip' AND timestamp >= '$max_timestamp_ip'");  

if(mysql_num_rows($test) != 1) {
 mysql_query("INSERT INTO counter SET ip='$ip', timestamp='$timestamp'");  
}

$counter = mysql_num_rows(mysql_query("SELECT timestamp FROM counter"));  

echo $counter;

?>
 
Zuletzt bearbeitet:
ich glaube das wahr das .
Glauben heißt nicht wissen! Und nochmal: war schreibt man ohne h, es sei denn, du redest von Wahrheit.

Die Fehlermeldung "MySQL-Error: Table 'sebastian1012.entries' doesn't exist" ist doch eindeutig, oder?

Es ist unfassbar!!! Erst reden wir hier von einem Gästebuch und aus heiterem Himmel sind wir plötzlich bei einem Counter!!! Du bist so ein Chaot!!! Anstatt dich um eine Sache mal richtig zu kümmern, bastelst du schon an der nächsten Sache.

heutzutage benutzt man mysqli.
Richtig, in PHP 7.x gibt es die MySQL-Extension nicht mehr, da muss man entweder MySQLi oder PDO benutzen
 
Werbung:
der counter war nur spielerrei ,weil ich irgendwie mal nen eintrag im DB haben wollte.Jetzt muß ich ja nur noch raus finden wie man vier Spalten ins Db bekommt und dann sollte es doch klappen ?
 
der counter war nur spielerrei
Ja, genau, wieder mal eine Spielerei! Bleibt doch mal bei einem Thema und bringe es zu Ende!

Beim Einsatz von SQL-Datenbanken sollte das Abrufen aller Spalten eines Datensatzes per SELECT * vermieden werden. Stattdessen sollten die gewünschten Spaltennamen explizit aufgelistet werden (SELECT col1, col2 FROM …). Einige Vorteile:
  • Häufig werden in einer Abfrage nicht alle Spalten benötigt, die aktuell existieren oder in Zukunft existieren könnten, sodass unnötige Daten übertragen werden.
  • Bei expliziter Angabe der gewünschten Spalten können Datenbanksysteme unter Umständen Indizes zur Beantwortung von Abfragen nutzen.
  • Eine Auflistung der Spaltennamen macht den Code verständlicher, da die Tabellenstruktur nicht erst im Datenbankschema nachgelesen werden muss.
  • Bei Änderungen am Datenbankschema (etwa bei Entfernung oder Umbenennung einer Spalte) schlägt eine Query, die kein SELECT * nutzt, sofort fehl. Das ist hilfreich, da so keine Stelle im Code übersehen werden kann, an der wahrscheinlich auch die PHP-Datenstrukturen an das neue Schema angepasst werden müssen.
 
Also leichter finde ich das nicht. Vieleicht wenn mal alles läuft aber bis jetzt läuft nix.
Gespeichert werden nur ip und timestramp.
datum steht immer nur 10.10
name und text steht nur 0
als ausgabe bekomme ich noch nix. aber erst mal egal ,der soll erstmal das in der DB schreiben was im Script steht ud nicht die hälfte vergessen

Code:
<?php

 
$db_location = "localhost";
$db_username = "sebastian1012";
$db_passwort = "nacrui";
$db_name = "sebastian1012";

$ip_block_minutes = 1;
 
 
@mysql_connect($db_location, $db_username, $db_passwort) or die ("Verbindung fehlgeschlagen<br />");
@mysql_select_db($db_name) or die ("Keine Datenbank mit angegebenen Namen vorhanden<br />");


$timestamp = date(U);
$ip = $_SERVER['REMOTE_ADDR'];
$date ="10.10.20012";
$text ="hallo du sau";
$name="name_basti";
$max_timestamp_ip = date(U) - ($ip_block_minutes * 60);

$test = mysql_query("SELECT * FROM gb WHERE ip='$ip' AND timestamp >= '$max_timestamp_ip'");
if(mysql_num_rows($test) != 1) {
 mysql_query("INSERT INTO gb SET ip='$ip', timestamp='$timestamp',date='$date',text='$text',name='$name'");
}

$counter = mysql_num_rows(mysql_query("SELECT ip FROM gb"));

echo $counter;

?>
 
Werbung:
Also leichter finde ich das nicht.
Weil du mehr räts anstatt zu lernen!

Du benutzt immer noch die mysql_*-Funktionen! :mad:
Du schreibst immer noch select * :mad:
Du überprüfst keine Fehler :(
Du benutzt reservierte Wörter, ohne diese zu maskieren :(
Das Datumsformat in Datenbanken ist YYYY.MM.DD und nicht DD.MM.YYYY :(

Tue dir, aber vor allem uns, einen Gefallen und arbeite einige Tutorials durch.
 
versuche gerade bei php-einfachden mist zuverstehen.
So wie es aussieht, bleibt es wohl bei dem Versuch. Und das ist auch kein Mist, das liegt ganz alleine an dir!

Nur wenn man da irgendwas als vorlage nimmt kommen nurfehler.
Die du schlauerweise immer verheimlichst!

Mehr als kopiern geht ja nicht.
Kopieren alleine reicht nicht, man muss auch mitdenken!

Ja ich rate ,weil es überall anders steht und ich nicht weiß was davon richtig ist .
Dann bleibe doch einfach mal an einer Stelle und sieh' dir nicht tausend Dinge im Netz an. Viele Wege führen nach Rom, das ist bei PHP nicht anders, allerdings kann man da nicht kreuz und quer mischen.

Funktionieren tut bis jetzt nix.
Auch das liegt nur an dir!

Das daumt format ist mir gerade egal
Dann wundere dich nicht, wenn es nicht richtig gespeichert wird.

Wie sieht die Struktur der Tabelle aus?


So langsam glaube ich, dass eher ein Kuh das Schlittschuh laufen lernt als du PHP.
 
Zurück
Oben