#1 7. April 2007 Erstes Newsscript funktioniert nicht? Hi, ich bin grade an meinem ersten Newsscript, das Schreiben von News funktioniert schon, d.h. die Daten werden in die Tabelle eingetragen, allerdings kann ich sie noch nicht auslesen. Wie funktioniert das? Bisher habe ich folgende Codes: config.php PHP: <? $title = $_POST [ 'title' ]; $author = $_POST [ 'author' ]; $news = $_POST [ 'news' ]; $insert = "INSERT INTO news (title, author, news) VALUES (' $title ', ' $author ', ' $news ')" ; function connect () { $con = mysql_connect ( 'localhost' , 'root' , '' ) or die( mysql_error ()); mysql_select_db ( 'learn' , $con ) or die( mysql_error ()); } connect (); ?> news.php PHP: <? include 'config.php' ; $abfrage = "SELECT title, author, news FROM news" ; $ergebnis = mysql_query ( $abfrage ); while( $row = mysql_fetch_object ( $ergebnis )) { echo $row -> url ; } ?> write.php PHP: <? include 'config.php' ; if (isset( $_POST [ 'write' ])) { $submit = mysql_query ( $insert ); echo "Danke für deine News. <a href=\"news.php\">Hier</a> kommst du zurück zur Startseite." ; } else { echo "<form method=\"post\" action=\"write.php\"> <label>Titel: </label><input name=\"title\" type=\"text\"> <br /> <label>Autor: </label><input name=\"author\" type=\"text\"> <br /> <label>Text: </label><textarea name=\"news\" cols=\"50\" rows=\"10\"></textarea> <br /> <input name=\"write\" type=\"submit\" id=\"write\" value=\"Schreiben\"> </form>" ; } ?> Also, mein eigentliches Problem, wenn ich auf die news.php gehe, ist die Datei einfach leer. Es gibt nicht einmal einen Error oder so, allerdings ist dort doch ein klares Echo, wird aber nicht aufgerufen? BTW - das Auslesen hab ich von schattenbaum.net, muss ich evt. die Variabel $row noch definieren? MfG MfG + Multi-Zitat Zitieren
#2 7. April 2007 AW: Erstes Newsscript funktioniert nicht? PHP: $abfrage = "SELECT title, author, news FROM news" ; $ergebnis = mysql_query ( $abfrage ); while( $row = mysql_fetch_object ( $ergebnis )) { echo $row -> url ; } wenn du "title, author, news" selektierst dann kannst du ja ned "$row->url" nehmen?( !!(url gibts ja ned in der DB bzw. selektierst du es ned) mfg + Multi-Zitat Zitieren
#3 7. April 2007 AW: Erstes Newsscript funktioniert nicht? PHP: <?include 'config.php' ; $abfrage = "SELECT title, author, news FROM news" ; $ergebnis = mysql_query ( $abfrage ); while( $row = mysql_fetch_object ( $ergebnis )) { echo $row -> url ; } ?> Du willst "url" ausgeben, fetchst aber nur title, author und news. edit: bisschen spät :s ^^ + Multi-Zitat Zitieren
#4 7. April 2007 AW: Erstes Newsscript funktioniert nicht? Okay, danke. Dann muss ich also einfach $row->title // author // news machen, dann gehts... Schattenbaum kann nicht erklaeren oO MfG + Multi-Zitat Zitieren
#5 8. April 2007 AW: Erstes Newsscript funktioniert nicht? Sorry für Doppelpost, aber ich wollte kein neues Thema eröffnen... Ich habe die mySQL Übergabe bisher immer so gehandhabt: In der config.php stehen die Verbindungsdaten und dort wird auch per function connect am Schluss à la connect(); verbunden. Nun wollte ich die MySQL Übergabefunktion in die config verlagern, bisher stand bei mir in der write.php PHP: <? include 'config.php' ; if( $_POST [ 'write' ]) { $submit = mysql_query ( $insert ); echo "Danke für deine News blablabla" ; } else { // Das ganze Formular halt } ?> Allerdings will ich jetzt, dass ich nur noch bei der if-Abfrage ein submit(); stehen habe, ich dachte ich könne einfach die Funktion so in der config.php adden: PHP: <? function submit () { mysql_query ( $insert ); } ?> Und das $submit = mysql_query($insert); aus der write.php löschen, allerdings funktioniert es so nicht... Wie kann ich es also so machen, dass alle Funktionen in der config sind, v.a. also das $insert? MfG + Multi-Zitat Zitieren
#6 8. April 2007 AW: Erstes Newsscript funktioniert nicht? du musst an die function submit() auch den insert übergeben oder ihn dir global holen. bsp.: übergabe: if(..) submit($insert); PHP: function submit ( $insert ){ mysql_query ( $insert );} global: if(..) submit(); PHP: function submit (){global $insert ; mysql_query ( $insert );} + Multi-Zitat Zitieren
#7 8. April 2007 AW: Erstes Newsscript funktioniert nicht? Okay, dankeschön, das funktioniert jetzt... Gibt es irgendwo ein Tutorial, wie ich bestimmte Sachen, die im Newstext übergeben werden, per HTML markieren kann? Sprich, wie ich Smilies, BBCodes o.ä. einfüge? Und noch was, wie mache ich, dass automatisch genau wie im Formular geschrieben überall <br /> im MySQL eingegeben werden? Jetzt ist der Text einfach schön nacheinander... MfG + Multi-Zitat Zitieren
#8 8. April 2007 AW: Erstes Newsscript funktioniert nicht? nl2br($text); macht aus neuen zeilen ein <br /> smilies usw mit str_replace("das", "in das", $text); auswechseln. + Multi-Zitat Zitieren
#9 8. April 2007 AW: Erstes Newsscript funktioniert nicht? Wo füge ich die beiden Sachen ein? write.php? config? news? oO MfG + Multi-Zitat Zitieren
#10 8. April 2007 AW: Erstes Newsscript funktioniert nicht? vorm instert oder vor der ausgabe, is deine entscheidung + Multi-Zitat Zitieren
#11 8. April 2007 AW: Erstes Newsscript funktioniert nicht? Hmm, ich habe es jetzt einfach mal in die write.php gemacht: PHP: <? nl2br ( $news ); stripslashes ( $news );include 'config.php' ;if (isset( $_POST [ 'write' ])){ submit (); echo "Danke für deine News. <a href=\"news.php\">Hier</a> kommst du zurück zur Startseite." ;}else{ echo "<form method=\"post\" action=\"write.php\"> <label>Titel: </label><input name=\"title\" type=\"text\"> <br /> <label>Autor: </label><input name=\"author\" type=\"text\"> <br /> <label>Text: </label><textarea name=\"news\" cols=\"50\" rows=\"10\"></textarea> <br /> <input name=\"write\" type=\"submit\" id=\"write\" value=\"Schreiben\"></form>" ;} ?> Allerdings funzt es so nicht? ... MfG + Multi-Zitat Zitieren
#12 8. April 2007 AW: Erstes Newsscript funktioniert nicht? PHP: <? include 'config.php' ; if (isset( $_POST [ 'write' ])) { $news = nl2br ( $news ); $news = stripslashes ( $news ); submit ( $news ); //oder wie auch immer echo "Danke für deine News. <a href=\"news.php\">Hier</a> kommst du zurück zur Startseite." ; } else { echo "<form method=\"post\" action=\"write.php\"> <label>Titel: </label><input name=\"title\" type=\"text\"> <br /> <label>Autor: </label><input name=\"author\" type=\"text\"> <br /> <label>Text: </label><textarea name=\"news\" cols=\"50\" rows=\"10\"></textarea> <br /> <input name=\"write\" type=\"submit\" id=\"write\" value=\"Schreiben\"> </form>" ; } ?> + Multi-Zitat Zitieren
#13 8. April 2007 So, ich habe jetzt folgende Dateien: news.php PHP: <? include 'config.php' ; $abfrage = "SELECT title, author, news FROM news" ; $ergebnis = mysql_query ( $abfrage ); while( $row = mysql_fetch_object ( $ergebnis )) { echo "<font face=\"Verdana\" size=\"3\"><b><u>" . $row -> title . "</u></b></font> <font face=\"Verdana\" size=\"2\">geschrieben von <b>" . $row -> author . "</b></font>" ; ?> <br /><br /> <? echo "<font face=\"Verdana\" size=\"2\">" . $row -> news . "</font>" ; } ?> write.php PHP: <? include 'config.php' ; if (isset( $_POST [ 'write' ])) { $insert = nl2br ( $insert ); $insert = stripslashes ( $insert ); submit ( $insert ); echo "Danke für deine News. <a href=\"write.php\">Hier</a> kannst du weitere News erstellen." ; } else { echo "<form method=\"post\" action=\"write.php\"> <label>Titel: </label><input name=\"title\" type=\"text\"> <br /> <label>Autor: </label><input name=\"author\" type=\"text\"> <br /> <label>Text: </label><textarea name=\"news\" cols=\"50\" rows=\"10\"></textarea> <br /> <input name=\"write\" type=\"submit\" id=\"write\" value=\"Schreiben\"> </form>" ; } ?> Und config.php PHP: <? $title = $_POST [ 'title' ]; $author = $_POST [ 'author' ]; $news = $_POST [ 'news' ]; $insert = "INSERT INTO news (title, author, news) VALUES (' $title ', ' $author ', ' $news ')" ; function connect () { $con = mysql_connect ( 'localhost' , 'root' , '' ) or die( mysql_error ()); mysql_select_db ( 'learn' , $con ) or die( mysql_error ()); } connect (); function submit () { global $insert ; mysql_query ( $insert ); } ?> Ich werde das ganze noch ein bisschen ausbauen und dann werden vermutlich neue Probleme auftreten, ich werde das ganze einfach hier reinschreiben... MfG -- merged -- So, ich stehe nun wieder vor einem neuen Problem. Ich habe das Newsscript nun ziemlich ausgebaut, eine Art ACP gemacht und dort kann man schreiben, verändern und löschen. Der mittlere Punkt funktioniert allerdings noch nicht, wenn ich verändern will, kommt zwar das Formular mit dem richtigen, bereits ausgefüllten Inhalt (means Titel, Autor und News) allerdings verändert sich nichts in der MySQL DB, nachdem ich auf den Submit-Button klicke... news.php PHP: <a href="login.php"><font face="Verdana" size=4><div align=right><b>ACP</b></div></font></a> <? include 'config.php' ; $abfrage = "SELECT title, author, news FROM news" ; $ergebnis = mysql_query ( $abfrage ); while( $row = mysql_fetch_object ( $ergebnis )) { echo "<font face=\"Verdana\" size=\"3\"><b><u>" . $row -> title . "</u></b></font> <font face=\"Verdana\" size=\"2\">geschrieben von <b>" . $row -> author . "</b></font>" ; ?> <br /><br /> <? echo "<font face=\"Verdana\" size=\"2\">" . $row -> news . "</font><hr />" ; } ?> config.php PHP: <? $title = $_POST [ 'title' ]; $author = $_POST [ 'author' ]; $news = $_POST [ 'news' ]; $title = mysql_escape_string ( strip_tags ( $title )); $author = mysql_escape_string ( strip_tags ( $author )); $id = $_POST [ 'id' ]; $insert = "INSERT INTO news (title, author, news) VALUES (' $title ', ' $author ', ' $news ')" ; $aendern = "UPDATE news SET title = ' $title ', author = ' $author ', news = ' $news ' WHERE id = ' $id '" ; $loeschen = "DELETE FROM news WHERE id = ' $id '" ; function connect () { $con = mysql_connect ( 'localhost' , 'root' , '' ) or die( mysql_error ()); mysql_select_db ( 'learn' , $con ) or die( mysql_error ()); } connect (); function submit () { global $insert ; mysql_query ( $insert ); } function delete () { global $loeschen ; mysql_query ( $loeschen ); } function edit () { global $aendern ; mysql_query ( $aendern ); } ?> admin.php PHP: <? include 'config.php' ; $action = $_GET [ 'action' ]; // ---------------------------------------------------------------------------- Ab hier $action = write if( $action == "write" ) { if (isset( $_POST [ 'write' ])) { $insert = nl2br ( $insert ); $insert = stripslashes ( $insert ); submit ( $insert ); echo "<font face=\"Verdana\" size=2>Danke für deine News. <a href=\"admin.php\">Hier</a> kommst du zurück ins ACP.</font>" ; } else { echo "<font face=\"Verdana\" size=3><b>Newseinträge löschen</b></font><br /><br />" ; echo "<table border=0 cellpadding=1 cellspacing=1> <form method=\"post\" action=\"admin.php?action=write\"> <tr> <td><font face=\"Verdana\" size=2><label>Titel: </font></label></td> <td><input name=\"title\" type=\"text\"></td> </tr> <tr> <td><font face=\"Verdana\" size=2><label>Autor: </font></label></td> <td><input name=\"author\" type=\"text\"></td> </tr> <tr> <td><font face=\"Verdana\" size=2><label>Text: </font></label></td> <td><textarea name=\"news\" cols=\"50\" rows=\"10\"></textarea></td> </tr> <tr> <td><input name=\"write\" type=\"submit\" id=\"write\" value=\"Schreiben\"></td> </tr> </form></table>" ; echo "<br /><font face=\"Verdana\" size=2><a href=\"javascript:history.back();\">Zurück</a></font>" ; } } // --------------------------------------------------------------------------------------------------------- Ab hier $action = delete elseif( $action == "delete" ) { if(isset( $_POST [ 'delete' ])) { delete ( $loeschen ); echo "<font face=\"Verdana\" size=2>Du hast erfolgreich einen Newseintrag gelöscht. <br /><a href=\"admin.php\">Hier</a> kommst du zurück ins ACP.</font>" ; } else { echo "<font face=\"Verdana\" size=3><b>Newseinträge löschen</b></font><br /><br />" ; echo "<form method=\"post\" action=\"admin.php?action=delete\"> <label><font face=\"Verdana\" size=2>ID: </font></label><input name=\"id\" type=\"text\"> <br /> <input name=\"delete\" type=\"submit\" id=\"delete\" value=\"Löschen\"> </form>" ; $abfrage = "SELECT * FROM news" ; $ergebnis = mysql_query ( $abfrage ); $maximum = mysql_num_rows ( $ergebnis ); for( $zaehler = 0 ; $zaehler < $maximum ; $zaehler ++) { echo "<table border=0 cellpadding=1 cellspacing=1> <tr> <td><font face=\"Verdana\" size=2>" . mysql_result ( $ergebnis , $zaehler , "ID" ). ":</td> <td><font face=\"Verdana\" size=2>" . mysql_result ( $ergebnis , $zaehler , "title" ). "</td></tr></table>" ; } echo "<br /><font face=\"Verdana\" size=2><a href=\"javascript:history.back();\">Zurück</a></font>" ; } } // ----------------------------------------------------------------------------------------------------- Ab hier $action = edit elseif( $action == "edit" ) { if(isset( $_POST [ 'searchid' ])) { $search = "SELECT title, author, news FROM news WHERE id = ' $id '" ; $ergebnis = mysql_query ( $search ); while( $row = mysql_fetch_object ( $ergebnis )) { $row -> news = str_replace ( "<br />" , "" , $row -> news ); echo "<table border=0 cellpadding=1 cellspacing=1> <form method=\"post\" action=\"admin.php?action=edit\"> <tr> <td><font face=\"Verdana\" size=2><label>Titel: </font></label></td> <td><input name=\"title\" type=\"text\" value=\" $row -> title \"></td> </tr> <tr> <td><font face=\"Verdana\" size=2><label>Autor: </font></label></td> <td><input name=\"author\" type=\"text\" value=\" $row -> author \"></td> </tr> <tr> <td><font face=\"Verdana\" size=2><label>Text: </font></label></td> <td><textarea name=\"news\" cols=\"50\" rows=\"10\"> $row -> news </textarea></td> </tr> <tr> <td><input name=\"edit\" type=\"submit\" id=\"edit\" value=\"Schreiben\"></td> </tr> </form></table>" ; } } elseif(isset( $_POST [ 'edit' ])) { $aendern = nl2br ( $aendern ); $aendern = stripslashes ( $aendern ); edit ( $aendern ); echo "<font face=\"Verdana\" size=2>Danke für deine Änderung. <br /><a href=\"admin.php\">Hier</a> kommst du zurück ins ACP.</font>" ; } else { echo "<font face=\"Verdana\" size=3><b>Newseinträge bearbeiten</b></font><br /><br />" ; echo "<form method=\"post\" action=\"admin.php?action=edit\"> <label><font face=\"Verdana\" size=2>ID: </font></label><input name=\"id\" type=\"text\"> <br /> <input name =\"searchid\" type=\"submit\" id=\"searchid\" value=\"Bearbeiten\"> </form>" ; $abfrage = "SELECT * FROM news" ; $ergebnis = mysql_query ( $abfrage ); $maximum = mysql_num_rows ( $ergebnis ); for( $zaehler = 0 ; $zaehler < $maximum ; $zaehler ++) { echo "<table border=0 cellpadding=1 cellspacing=1> <tr> <td><font face=\"Verdana\" size=2>" . mysql_result ( $ergebnis , $zaehler , "ID" ). ":</td> <td><font face=\"Verdana\" size=2>" . mysql_result ( $ergebnis , $zaehler , "title" ). "</td></tr></table>" ; } } echo "<br /><br /><font face=\"Verdana\" size=2><a href=\"javascript:history.back();\">Zurück</a></font>" ; } // ------------------------------------------------------------------------------- Ab hier $action == "" else { echo "<font face=\"Verdana\" size=2>Herzlich willkommen im Admin Control Panel meines ersten selbstgemachten Newsscripts.<br /> Bitte wähle eine der folgenden Aktionen:<br /><br /> <a href=\"admin.php?action=write\">News schreiben</a><br /> <a href=\"admin.php?action=edit\">News verändern</a><br /> <a href=\"admin.php?action=delete\">News löschen</a><br /> <a href=\"login.php?action=logout\">Logout</a></font>" ; } ?> MfG /e: Ich habe den Fehler nun selbst gefunden, ich habe die ID gar nie irgendwo übergeben, die muss ja auch noch her, sonst weiss ja der MySQL Updater gar nichts von WHERE id MfG + Multi-Zitat Zitieren
#14 8. April 2007 AW: Erstes Newsscript funktioniert nicht? Also tut mir leid, hier sind immer noch Böse Basics missachtet worden, das Script sollte so nicht eingesetzt werden. Über die Verwendung von globalen Variablen läßt sich streiten, ich bin strikt dagegen, besonders für Anfänger, aber darüber soll ja jetzt bestimmt nicht geredet werden. Zu deinem Problem. Wo, in dem Formular zum Bearbeiten, wird die ID übertragen? Bisher wird immer ein neuer Eintrag angelegt oder gar nichts gemacht? + Multi-Zitat Zitieren
#15 8. April 2007 AW: Erstes Newsscript funktioniert nicht? Sorry, ich bin Anfänger und lerne erst seit einem Tag PHP, welche Basics sind missachtet werden, und warum sollten globale Variabeln nicht eingesetzt werden? MfG + Multi-Zitat Zitieren
#16 8. April 2007 AW: Erstes Newsscript funktioniert nicht? 1. Basics z.B. du immer noch unkontrolliert Daten in die Datenbank schreibst/der Datenbank übergibst oder die direkte Ausgabe von mysql Fehlern mittels mysql_error(). 2. Globale Variablen haben die Eigenschaft, deswegen auch global, dass sie überall im Script gültigkeit haben. Dies ist auch automatisch der Knackpunkt, weil auch geübten Programmierern Fehler passieren die sich bei globalen Variablen leicht einschleichen. Wieso benutzt du in deinen Funktionen z.B. submit() eine globale Variable? Absolut unnötig! + Multi-Zitat Zitieren
#17 8. April 2007 AW: Erstes Newsscript funktioniert nicht? @Basics: Wie meinst du 'unkontrolliert'? Ich schreibe die Daten ja nur per Formular dort rein, sonst verbessere doch das Script, sodass es besser ist? MfG + Multi-Zitat Zitieren
#18 8. April 2007 AW: Erstes Newsscript funktioniert nicht? mysql abfragen kannst du auf verschiedene weisen sichern strings (z.B. benutzernamen) kannst du vorher mit mysql_real_escape_string() bearbeiten passwörter verschlüsselt man sowieso mit md5(), sha1() oder crypt() daher müssen die nicht weiter bearbeitet werden und wenn du irgentwo zwangsweise einen integer, also eine zahl, haben willst, kannst du intval() benutzen zu deiner submit funktion: 1. ist die unnötig, du kannst das auch direkt machen 2. wenn du sie benutzt, dann schreib das lieber so: PHP: function submit ( $insert ) { mysql_query ( $insert ); } diese kannst du dann mit submit($insert) aufrufen $insert kann natürlich mit allen möglichen mysql befehlen ersetzt werden aber wie gesagt, eine funktion um eine funktion aufzurufen ist fast immer unsinnig (ausnahmen bilden klassen, in denen das leider manchmal nötig ist) + Multi-Zitat Zitieren
#19 8. April 2007 AW: Erstes Newsscript funktioniert nicht? So, ich habe wieder ein neues Problem. Ich will nämlich eine Art Kommentarescript machen zu dem Newsscript, Kommentare hinzufügen und anzeigen weiss ich ja, wie das geht, aber die ANZAHL Kommentare ausgeben will der mir nicht richtig. Wie das im MySQL geht, weiss ich schon: SELECT count(*) FROM news_comments WHERE newsid = '...'; Dann dachte ich, ich machs im PHP wiefolgt: PHP: <? $blubb = "SELECT count(*) FROM news_comments WHERE newsid = '...'" ; $blubbx = mysql_query ( $blubb );echo blubbx ; ?> Allerdings kommt bei mir dann immer nur "Resource id #5" raus... Wo ist da der Fehler? MfG + Multi-Zitat Zitieren
#20 8. April 2007 AW: Erstes Newsscript funktioniert nicht? Das sind schon wieder pure Basics die du eigentlich wissen müsstest. Wie du genau mit MySQL arbeitest und dein Problem löst erfährst du hier PHP: Overview of the MySQL PHP drivers - Manual . Ein Tipp, bei dem ersten von mir bemängelten Script, gibt du das Ergebnis von mysql_query() auch nicht direkt aus. und für weitere Anfängerfragen sind zum Beispiel Seiten wie http://www.php-q.net/ gut. Also als Anfänger wäre das normalerweise mein erster Schritt auf der Seite des "Herstellers" schauen und mir dann vielleicht erweiterte Versionen holen, und dafür hilft mir Google und wenn ich dann immer noch keine Lösung habe, "verschwende" ich Ressourcen in einem Forum. So Schmitz, ich hoffe der selbstverständliche Link, der eigentlich bei jedem Anfänger als erstes besucht werden sollte, führt dazu, dass dieser Posting kein Spam ist, ich helfe hier, in dem ich Anleitung zur Selbsthilfe leiste. PS: Dein voriges Posting ist Offtopic, aber damit ich keine Verwarnung für diesen Hinweis bekomme ... ein bißchen Inhalt dazu ... + Multi-Zitat Zitieren