Derzeit online: ca. 69 User  
Spenden via PayPal PHP für dich ist auch als Buch erhältlich - im handlichen Format, zum Nachschlagen, Mitnehmen oder gemütlichen nebenbei Lesen. Mit noch mehr Informationen, zusätzlichen Beispielen und Übungsaufgaben.
Jetzt in der aktualisierten Version bei Amazon oder BoD bestellen!


Allgemein

FAQ

MySQL: Wie kann ich aus einer TN-Datenbank (Neuzugänge ab einem bestimmten Datum) abfragen ob einzelnen TN keine Kurse zugeordnet sind. Hier handelt es sich um einen (neu) auftretenden Fehler, dem ich auf die Schliche kommen möchte. Leider habe ich keinen Admin mehr, seufz :(

von Izi Hoffmann
Das lässt sich leider ohne genaue Kenntnisse der Datenbankstruktur nicht exakt sagen. Grundsätzlich müsste nur überprüft werden, welche Kursteilnehmer keinen Kurs hinterlegt haben (also einfach, wo nichts in dem Feld Kurs steht). Für mich klingt das aber so, als wäre das nicht eine einzige, "kleine" Datenbank, in der man in einer Tabelle alles führt, sondern als wäre es über mehrere Tabellen aufgeteilt (ist sinnvoll, wenn Teilnehmer mehrere Kurse besuchen können), die dann verknüpft werden. Das funktioniert prinzipiell genauso, nur muss man in der Abfrage die Tabellen verbinden. Das Stichwort für weitere Informationen dazu ist "Join".
vor langer Zeit

MySQL: Ich brauche dringend hilfe. ganz dringent! Ich habe problem mit sicherheitslücke. Ich habe einen formular gecodet,und möchte gerne wissen wie man die gut schützen kann. Kannst du das nicht hier aufschreiben. :D Unter "Mysql".

Das hier ist ein Anfängertutorial, dass die grundlegende Funktionalität von PHP erklärt und es dir und anderen ermöglicht, sich selbständig vertiefendes Wissen -je nach persönlicher Notwendigkeit - anzueignen. Hilfe zu Sicherheitsthemen bekommst du auf vielen anderen PHP-Seiten im Internet, z.B:
PHP-FAQ: Variablen überprüfen
und
PHP und MySQL-Sicherheitsmaßnahmen
In diesem Zusammenhang bitte auch auf die Problematik mysql_real_escape_string und magic_quotes achten.
Mit Sicherheit gibt es noch zahlreiche weitere Quellen, die du aufgrund der Dringlichkeit deiner Situation vermutlich bereits selbst entdeckt hast.
vor langer Zeit

MySQL: Hallo Claudia, bei Dir habe ich vor vielen Jahren als Anfänger gelernt, dass man sich das Ergebnis einer MySQL-Abfrage mit mysql_fetch_object() holt. Heute, nachdem meine Software an 1000en Stellen diesen Befehl enthält, habe ich gelernt, dass von allen Möglichkeit, die PHP hierfür bietet, das die langsamste Variante ist, und dass "Standard" eigentlich mysql_fetch_assoc() ist. http://phpperformance.de/einen-datensatz-aus-einem-result-set-laden/ http://www.peterkropff.de/site/php/datenbanken.htm Man lernt nie aus... nur zur Info! Danke und Grüße Michael

von Michael Sattler
Hallo Michael,
ich verwende mittlerweile am liebsten mysql_fetch_array, allerdings schlicht aus dem Grund, dass es oft hilfreich ist, bei einzelnen Abfragen die Wahl zu haben, ob ich Daten über Feldnamen, oder als numerisches Array ansprechen möchte. mysql_fetch_array bietet mir da die praktische Möglichkeit, direkt den gewünschten Result-Type anzugeben.
Grundsätzlch ist das einer dieser Punkte, wo ich vor der Entscheidung stehe, was ich empfehlen will, was ich selbst verwende und was anfängertauglich ist (und wenn ich es ändere, woher ich die Zeit nehme, es an allen Stellen zu ändern ;-)) - im Normalfall gehe ich davon aus, dass man mein Tutorial als Einstieg verwendet und setze voraus, dass man sich mit steigender Erfahrung und Anforderung selbst immer weiter mit dem Thema auseinander setzt und für sich selbst die besten Lösungen findet.
Trotzdem natürlich vielen Dank für deinen Hinweis!
vor langer Zeit

MySQL: Hey Claudia :D Habe ne Frage bin schon länger mit php am machen und kenne mich ziemlich gut aus habe aber denoch nen Proplem Habe ein Punktesystem auf MYSQL gemacht spallte ist INT 11 soweit alles gut nur "Benutzer" können das auch in -00000000 komm wie bekomme ich es so hin das der code bei 0 aufhört zu zählen ?

von Phil
Es sollte helfen, wenn du dem Int-Feld zusätzlich das Attribut unsigned zuweist.
vor langer Zeit

MySQL: Hallo, ich habe das mit der Datenbank genau so gemacht wie in deiner Anleitung, meine DatenBank liegt auf meinem Rechner und dort habe ich die Datenbank mit der Tabelle links auch angelegt mit dbconnect.php komme ich auch auf die Datenbank. Wenn ich aber die Abfrage mit $abfrage = "SELECT * FROM links WHERE id < 5"; oder irengendeine andere Abfrage dann bekomme ich gar kein Ergebniss????? Was könnte ich da Falsch machen ????? Bitte um Hilfe Schon mal Danke im Vorraus

von Degi
Das ist nur mit diesen Angaben schwierig zu beantworten. Hast du die Datenbank auch gefüllt? Gibst du die Daten aus z. B. über eine while-Schleife? Gibt es eine Fehlermeldung?
vor langer Zeit

MySQL: Hallo, ich bin etwas am verzweifeln mit dem Update. Wenn ich Daten einlese also in Form von z.B. ?id=6 möchte ich genau diese Spalten ändern. Folgenden Code habe ich.... $sql="UPDATE text SET ueberschrift='$_POST[ueberschrift]', text='$_POST[text]' So wird logischerweise alles geändert. Wenn ich aber noch folgendes ransetze... WHERE id='id' .....wird nichts geändert, auch nicht mit WHERE id='$id' etc.. Wo liegt mein Denkfehler ? Vielen Dank

von Rizzo
Wie übergibst du denn die id? Sofern du sie nicht in der Datei direkt fest legst, sondern sie übergibst, musst du die id natürlich auch über eine Post- oder Get-Variable ansprechen, wie du es auch bei der Überschrift und dem Text machst. Ansonsten sehe ich da keinen möglichen Denkfehler.
vor langer Zeit

MySQL: Hallo Rizzo hier wieder... Folgendes Problemchen und ich komme einfach net drauf. Möchte eine Db erstellen bzw. mehrere gleichzeitig. Es wird aber immer nur eine erstellt. Folgender Code: $sql="CREATE TABLE `adressen` ( `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `nachname` VARCHAR( 150 ) NOT NULL , `vorname` VARCHAR( 150 ) NULL , `akuerzel` VARCHAR( 2 ) NOT NULL , `strasse` VARCHAR( 150 ) NULL , `plz` INT( 5 ) NOT NULL , `telefon` VARCHAR( 20 ) NULL ) ENGINE = MYISAM ; )"; $sql="CREATE TABLE `adressen2` ( `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `nachname` VARCHAR( 150 ) NOT NULL , `vorname` VARCHAR( 150 ) NULL , `akuerzel` VARCHAR( 2 ) NOT NULL , `strasse` VARCHAR( 150 ) NULL , `plz` INT( 5 ) NOT NULL , `telefon` VARCHAR( 20 ) NULL ) ENGINE = MYISAM ; "; Wo ist da mein Denkfehler, da immer nur eine erstellt wird (immer die 2.te) ?!? Gruß Rizzo

von Rizzo
Ich gehe mal davon aus, dass du am Ende noch mysql_query($sql); ausführen lässt. Dann liegt es daran, dass du für beide create-Anweisungen die gleiche Variable verwendest. Die zweite überschreibst also die erste und beim Ausführen wird logischerweise nur die zweite ausgeführt (und daher auch nur diese angelegt). Du musst also mysql_query auch zweimal aufrufen; entweder jeweils nachdem du die Variable gefüllt hast, oder du verwendest zwei verschiedene Variablen und rufst dann mysql_query zweimal mit den unterschiedlichen Variablen auf. (Oder du lässt die Variablen ganz weg und machst es jeweils direkt.)
vor langer Zeit

MySQL: Hallo, ich habe mittlerweile es hinbekommen das ich per Formular und tinymce-Editor Daten in die DB bekomme.Also einmal die Überschrift als Link und einen Text(Seite). Ausgelesen werden sie auch korrekt, der Link wird klickbar als z.B. index.php?id=12 ausgegeben. Alles schön und gut, nur bekomme ich es nicht hin den einzelnen Text für die jeweilige id auszulesen wenn ich auf den entsprechenden Link klicke. Also z.B. Startseite, dann wird nicht nur der Text von der id der Startseite ausgegeben, sondern alle die eingetragen wurden. $query = "SELECT text From text"; $ergebnis = mysql_query($query); if($ergebnis) { $number = mysql_num_rows($ergebnis); while ($row = mysql_fetch_array($ergebnis)) { echo "".$row['text'].""; Wie kann ich das nun hier eingeben das nur der jeweilige Text zur Überschrift (Link) ausgegeben wird? Das raff ich irgendwie nicht ganz. Vielen Dank

von Rizzo
Du musst deine Abfrage ändern, so dass sie über eine where-Abfrage nur den gewünschten Datensatz abfragt und nicht alle (wenn du eine id übergibst).
vor langer Zeit

MySQL: Hallo Da mich PHP/MySQL sehr interessiert bin ich nun auch hier gelandet. Ich habe folgendes Problem: Über ein Formular sollen url's eingetragen werden die beim auslesen anklickbar sein sollen. Einmal der Name (z.B. sonstiges) und natürlich die URL. Beim auslesen wird der Name auch anklickbar ausgegeben, allerdings wird immer auf index.php verweist und nicht auf die Url die mit eingetragen worden ist. wo liegt der Fehler ? Hier der Code zum eintragen in die DB: $sql="INSERT INTO linkliste (link,url) VALUES ('$_POST[name]', '$_POST[url]')"; if (mysql_query($sql)or die ('Fehler bei der Datenbankabfrage')) { echo"<p>Eintrag erfolgreich</p>"; } else { echo"<p>Eintrag <b>nicht</b> erfolgreich</p>"; } mysql_close(); Hier der Code zum auslesen: $query = "SELECT DISTINCT (link) FROM linkliste ORDER BY id"; $ergebnis = mysql_query($query); if($ergebnis) { $number = mysql_num_rows($ergebnis); while ($row = mysql_fetch_array($ergebnis)) { echo "<a href=\"".$row['url']."\"> ".$row['link']."</a><br />"; } } Vielen Dank

Du fragst bei deiner Abfrage nur die Spalte link ab, dadurch ist der Inhalt der Spalte url im Abfageergebnis nicht verfügbar und du bekommst ihn auch nicht angezeigt.
vor langer Zeit

MySQL: Hey :-) erstmal danke für diese Seite! Hat mir wirklich sehr geholfen :-) Mein "problem": ich lasse mir eine datenbank ganz normal als schleife ausgeben und nach datum sortieren. in der datenbank sind auch die wochentage eingetragen. Wie kann ich mir denn beim sortieren ein absatz anzeigen lassen wo dann z.b. "Mittwoch (100 einträge)" steht? Danke schon mal :-)

von Dääni
Ich kenne dafür leider keine wirklich schöne oder simple Lösung - nur eine ziemlich umständliche Variante, die ich nicht empfehlen würde.

Es gibt aber wohl eine Möglichkeit, das über Group_concat zu erreichen, oder die Daten in der Schleife einfach in ein (mehrdimensionales) Array schreiben zu lassen.

Vielleicht hilft dir das wenigstens bei der weiteren Suche.
vor langer Zeit

MySQL: Halli, Hallo Fehler MySQL meldet: #1045 - Access denied for user 'root'@'localhost' (using password: NO) Verbindung für den controluser, wie er in Ihrer Konfiguration angegeben ist, ist fehlgeschlagen. phpMyAdmin hat versucht eine Verbindung zum MySQL-Server aufzubauen, jedoch hat dieser die Verbindung zurückgewiesen. Sie sollten Ihre Einstellungen für Host, Benutzername und Passwort in Ihrer config.inc.php überprüfen und sich vergewissern, dass diese den Informationen, welche Sie vom Administrator erhalten haben, entsprechen. Ich weiss einfach nicht mehr weiter. Vielleicht bin ich doch zu alt dafür...

von Johannes, der schon 61 ist
MySQL kann die Verbindung zur Datenbank nicht herstellen, weil irgendetwas an den Verbindungsdaten falsch ist. Du musst überprüfen, ob die Daten, die du bei dem Befehl mysql_connect (scheinbar bei dir in der Datei config.inc.php) angegeben hast, korrekt sind.

Welche Daten dort stehen sollten, siehst du normalerweise entweder im Konfigurationsmenü deines Webspaces oder du hast sie per Mail von deinem Hoster bekommen (oder kannst sie erfragen).

Vielleicht hilft es dir auch weiter, dir meine Erklärung zur Verbindung mit der Datenbank durchzulesen.
vor langer Zeit

MySQL: Hallo, kann man eine MySQL Tabelle auch nach Datum oder Uhrzeit sotieren?

Wenn du eine Spalte hast, in der du Datum und Uhrzeit - am besten in Form eines Timestamps - angegeben hast, kannst du auch danach sortieren.
vor langer Zeit

MySQL: Hallo Claudia, kann man wenn z.B. wenn man ein Gästebuch hat das so sotieren das der neuste eintrag oben erscheint?

Du brauchst eine Spalte mit einem Timestamp. Dann kannst du deine Abfrage nach diesem Feld sortieren lassen. Um jetzt noch den neuesten Eintrag als erstes zu bekommen, musst du als Sortierreihenfolge DESC verwenden. Das sieht dann ungefähr so aus:
SELECT * FROM gaestebuch ORDER BY eintragszeit DESC
Achtung! Ohne "ORDER BY" funktioniert die Angabe "DESC" nicht.
vor langer Zeit

MySQL: Hallo Claudia, ich arbeite gerade an meinem ersten eigenen Forum und dementsprechend gibt es dort ja noch keinen gespeicherten Beitrag den man ausgeben lassen könnte. Jetzt gibt er mir allerdings das hier: "mysql_fetch_object(): supplied argument is not a valid MySQL result resource in..." - kann man das irgendwie absichtlich unterbinden oder muss ich nu damit leben?

von Bianca
Eigentlich sollte diese Fehlermeldung nur kommen, wenn ein Fehler im SQL-Befehl ist. Sind einfach keine Datensätze vorhanden, wird nur nichts ausgegeben. Du könntest aber mit mysql_num_rows die Anzahl der zurück gegebenen Datensätze prüfen und dementsprechend auf eine Nullmeldung reagieren.
vor langer Zeit

MySQL: zwei datenbanken verknüpfen

von Uwe
join
vor langer Zeit

MySQL: In dem letzten Kapitel von MySQL schreibst du: "Damit haben wir die wichtigsten Funktionen für MySQL durch und schauen uns zum Abschluss an, wie man eine Verbindung wieder beendet." aber danach kommt nix mehr.... Könntest du diese seite noch einfügen?

von Marcel
Stimmt. Verbindung beenden habe ich gelöscht, weil das nicht mehr notwendig ist (oder höchstens in Ausnahmefällen), da PHP das selbständig macht. Muss ich bei Gelegenheit mal entsprechend ändern.
vor langer Zeit

MySQL: hallo, ich hab da ein kleines problem, und zwar: ich möchte daten in eine tabelle eintrage. dazu benutze ich folgenden befehl: mysql_query("INSERT INTO links (url, urlname, name, banner, beschreibung) VALUES ('$url', '$hpname', '$name', '$banner', '$beschreibung')"); die verbindung zur datenbank wurd hergestellt und in der tabelle ein neuer datensatz angelegt. das problem: zb. in der spalte name wird nicht der wert eingetragen, der in der variabel $name steht, sondern der variabelname wird eingetragen. so steht in der spalte name jetzt: $name und in der spalte url steht jetzt: $url könntest du mir da vielleicht helfen? mfg Nico

von Nico Grau
Auf Anhieb leider nicht... wie füllst du denn die Variablen mit Werten? Und schau dir eventuell deine Query einmal via echo an, also so:
echo "INSERT INTO links (url, urlname, name, banner, beschreibung) VALUES ('$url', '$hpname', '$name', '$banner', '$beschreibung')";
Manchmal stechen einem dann Fehler geradezu ins Auge ;-)
vor langer Zeit

MySQL: Hallo, hier ist noch einmal Florian. Ich habe die Datei jetzt in .php umbenannt, aber es klappt immer noch nicht. Dein Rat geht aber, glaube ich, in die richtige Richtung. Ich wette, es liegt an irgendetwas, dass allen völlig offensichtlich ist, und das deswegen nie erwähnt wird... Ich schicke dir jetzt noch den gesamten Code: <html> <body> <!-- Eingabe --> <form action = "Testlauf.php" method = "post"> <label> Name: <textarea name = "Benutzername" rows = "1" cols = "20"> </textarea></label> <input type = "submit" value = "Speichern"/> </form> <!-- Speichern der Eingabe in Datenbank --> <?php $_POST["Benutzername"] = $Eingabe; //Verbindung mit MySQL herstellen mysql_connect("localhost", "root", "passwort"); //Die Datenbank "Versuch" benutzen! mysql_select_db("versuch"); //Füge etwas hinzu! mysql_query("INSERT INTO versuch (Name) VALUES ($Eingabe)"); ?> </body> </html> Könnte es irgendetwas mit dem "action = "Testlauf.php" " zu tun haben ? Anstelle von "Testlauf.php" habe ich oft "$_SERVER['PHP_SELF']" vorgeschlagen bekommen. Das verstehe ich aber nicht so ganz, deswegen wollte ich es nicht benutzen. Außerdem klappt es damit auch nicht -.- Vielen Dank im Voraus, gute Nacht!

von Florian
Bei der Speicherung in die Datenbank verwendest du die Zeile
$_POST["Benutzername"] = $Eingabe;
Damit weist du der Post-Variable Benutzername den Inhalt zu, der in der Variable Eingabe ist. Ich gehe davon aus, dass du es aber genau anders herum möchtest. Bei Variablen wird immer das, was rechts vom Ist-Gleich steht zum Inhalt der Variable, das links vom Ist-Gleich ist der Name der Variable, der du diesen Inhalt geben möchtest.

Das führt allerdings nicht dazu, dass in deiner Tabelle gar nichts eingetragen wird, dadurch würde ein Datensatz erzeugt werden, in dem aber das Feld leer bleibt.

Dein eigentliches Problem ist vermutlich, dass du die Values ohne Anführungszeichen übergibst. Verwende bitte noch in der Query (einfache) Anführungszeichen bei den übergebenen Werten (also bei allem was in der Klammer nach VALUES steht). So:
mysql_query("INSERT INTO versuch (Name) VALUES ('$Eingabe')");

Ansonsten: Das mit der PHP-Endung ist zwar offensichtlich, wird aber durchaus erwähnt ;-) und nein, es liegt nicht an der action = "Testlauf.php". Du musst bei action nur auf die Datei verweisen, die durch das Formular aufgerufen werden soll, um die Formulardaten zu verarbeiten. $_SERVER['PHP_SELF'] (allerdings über echo ausgegeben) verwendet man, damit die gleiche Datei, in der auch das Formular steht aufgerufen wird, egal wie die heißt. Durch diese Angabe setzt PHP den Dateinamen ein.
vor langer Zeit

MySQL: Ich habe, wie in deinem MySQL Beispiel beschreiben, das Feld "spruch" mit Werten gefüllt. Wenn ich diese mit hilfe der While schleife ausgebe bekomme ich folgendes: Wert1Wert2Wert3 bei der Funktion while($row = mysql_fetch_object($ergebnis)) { echo $row->spruch; } Ich würde gerne zwischen Wert1 und Wert2 z.b. ein umbruch oder mehr einfügen.

von Marcel
Ich glaube, dir fehlt das grundsätzliche Verständnis für das, was du da eigentlich machst. Überlege dir mal, was PHP aufgrund deiner Anweisungen macht, lies vielleicht auch mal nach, wie eine While-Schleife funktioniert, vielleicht verstehst du das Ganze dann.

Alles was innerhalb der Schleife steht, wird mit jedem Schleifendurchlauf einmal ausgeführt. Jede Zeile in deiner Tabelle (die durch die Abfrage abgerufen wird), erzeugt einen Schleifendurchlauf. Wenn in deiner Schleife also nur "echo $row->spruch;" steht, wird auch nur genau das mit jedem Schleifendurchlauf ausgeführt - also die Ausgabe des Wertes in der Spalte spruch. Danach kommt der nächste Schleifendurchlauf, der wiederum genau das ausgibt - du erhältst also genau dein Ergebnis Wert1Wert2Wert3. Wenn du dort also "mehr" haben möchtest, musst du es innerhalb der Schleife zusätzlich angeben.
vor langer Zeit

MySQL: Ja das schon aber ich hab z.b. 10 werte in der einen spalte... und ich kann diese nur alle nacheinander ausgeben ohne . und , getrennt :( Habe schon versucht beim speichern der werte z.b. 12423152314 anzufügen und diese zahlen dann später durch <br /> oder ähnlichem zu erstezen... leider erfolglos. Was ich will ist: <div>wert 1 von Spalte 1</div><div> wert 1 von spalte 2</div> <div>wert 2 von Spalte 1</div><div> wert 2 von spalte 2</div> usw.

von Marcel
Wenn du von "10 Werten in einer Spalte" sprichst, meinst du dann du hast 10 Zeilen mit je einem Wert oder du hast 10 Werte in einer einzigen Zeile, einer Spalte?

Wenn du 10 Zeilen mit Werten hast, dann sorgt die while-Schleife dafür, dass jeder Wert einzeln ausgegeben wird. Was du zwischen den einzelnen Werten machst, ist deine Sache. Wenn du einen Zeilenumbruch haben magst, musst du den in der Schleife zusätzlich angeben, ebenso die divs, Leerzeichen, was auch immer. Alles was innerhalb der Schleife steht, wird für jede Zeile deiner Tabelle, die ausgegeben wird, ausgeführt.

Falls du allerdings deine 10 Werte in einer einzelnen Zeile gespeichert hast, musst du entweder was an deiner Datenbankstrutur ändern, oder tatsächlich mit Trennern arbeiten.
vor langer Zeit

MySQL: Danke für deine Antwort! Wollte dir als Feedback geben das es geklappt hat und wirklich an dem "ü" lag. Jetzt habe ich allerdings ein neues Problem^^ Ich möchte die taten aus der spalte "spruch" einzeln ausgeben. Also jeden Wert einzeln in einem <div> {Hier der Wert aus der spalte "spruch"} </div> element oder ähnlichem ausgeben. Also so viele Elemente erstellen bis alle werte ausgegeben sind oder das Limit von dem "SELECT * FROM links LIMIT 4, 10"; erreicht ist. Grüße Marcel

von Marcel
Danke für die Rückmeldung.

Bloß: Wo genau ist dein Problem? Unter Daten ausgeben ist doch erklärt, wie du die Daten aus deiner gewählten Spalte ausgibst. Genau das brauchst du, du musst es nur für deine Bedürfnisse anpassen (also z. B. die divs zusätzlich ausgeben).
vor langer Zeit

MySQL: ich versuche gerade einen Eintrag in eine Datenbank per php zu realisieren. Wenn die Verbindung hergestellt wird, entsteht keine Fehlermeldung: dbconnect.php <?php $link=mysql_connect("localhost", "web99", "Passwort"); mysql_select_db("usr_web99_1", $link); if (mysql_errno($link)) echo mysql_errno($link) . ": " . mysql_error($link). "\n"; echo("connected"); ?> result: connected Wenn ich jetzt aber etwas in die Datenbank schreiben möchte, erscheint folgende Meldung: <?php $orte = "no1, no2, no3"; $values = "'$_POST[_001]', '$_POST[_002]', '$_POST[_003]'"; include("dbconnect.php"); $eintrag = "INSERT INTO tabelle ($orte) VALUES ($values)"; if (mysql_errno()) echo mysql_error(); result: Table 'usr_web99_1.tabelle' doesn't exist Diesen Fehler kann ich nicht nachvollziehen, da im phpMyAdmin die Tabelle erstellt wurde und auch vorhanden ist. Einen Schreibfehler kann ich im Namen nicht finden. Können Sie sagen, woran das liegt?

Was mir auffällt ist, dass der Aufruf der Query fehlt (also das mysql_query($eintrag)), aber ich gehe mal davon aus, dass das hier weggefallen ist, denn sonst ist mir nicht klar, wie PHP zu der Fehlermeldung kommen kann.

Ansonsten weiß ich aber nicht, woran der Fehler in diesem Fall liegt. Ich hätte auch auf einen Schreibfehler im Tabellennamen getippt - das lässt sich in dieser verallgemeinten Form allerdings auch nicht überprüfen. Sind im Tabellennamen vielleicht Umlaute oder Sonderzeichen vorhanden?
vor langer Zeit

MySQL: Hallo, ich bin es mal wieder :D Bin gerade dabei auf deiner Seite MySQL zu lernen und habe bei dem Punkt "Daten ausgeben" ein Problem. Anmelden kann sich die Datei auf meiner Datenbank. Die Tabelle heißt "Sprüche" und das Feld "spruch". Das ist mein Quelltext: - <?php $ergebnis = mysql_query("SELECT * FROM Sprüche"); ?> <?php $ergebnis = mysql_query("SELECT spruch FROM Sprüche"); while($row = mysql_fetch_object($ergebnis)) { echo $row->spruch; } ?> - Wenn ich das ganze ausgeben will kommt folgende Fehlermeldung: - <b>Warning</b>: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in <b>/mnt/webb/71/67/52608167/htdocs/my-facebook-likes/test.php</b> - ab Zeile 20 Steht: - while($row = mysql_fetch_object($ergebnis)) { echo $row->spruch; } ?> -

von Marcel
"Supplied argument is not a valid MySQL result resource" heißt, dass deine Abfrage der Datenbank einen Fehler beinhaltet. Die Fehlermeldung wird für Zeile 20 ausgegeben, weil du dort auf die "result resource" also die Variable $ergebnis zugreifen möchtest. Für dich heißt das also: Du musst nicht schauen, was in Zeile 20 falsch sein könnte, sondern was an der Abfrage / dem Inhalt der Variable $ergebnis falsch sein könnte.

Ich vermute mal, dass der Fehler in deinem Fall an dem Umlaut im Tabellennamen liegt. Probiere mal, den Tabellennamen in einfache Anführungszeichen zu setzen, oder ihn in Sprueche zu ändern (ich würde letzteres machen).

Abgesehen davon führst du übrigens zwei Abfragen aus, die du in der gleichen Variable speicherst, wobei die zweite gar keinen Sinn macht, da die erste ja bereits alle Spalten abfragt.
vor langer Zeit

MySQL: Hallo Claudia, also ich habe folgendes problem ich gebe die daten über ein formular in die datenbank. Wenn ich die tabelle dann aufruffe ist ein neuer wert drin also id = 3,4,5,6,7 aber die Felder sind leer !! mein code also sieht wie folgt aus $eintragen = "INSERT INTO links (url, urlname, name, beschreibung) VALUES (" . mysql_real_escape_string($_POST['url']) . ", " . mysql_real_escape_string($_POST['urlname']) . ", " . mysql_real_escape_string($_POST['name']) . "," . mysql_real_escape_string($_POST['beschreibung']) . ")") $eintragen = mysql_query($eintrag) or die (mysql_error()); if($eintragen == true) { echo "Eintrag war erfolgreich"; } else { echo "Fehler beim Speichern"; }

Du führst die Query mit der Variable $eintrag aus, deine Abfrage schreibst du aber in die Variable $eintragen - das kann also nicht funktionieren.

PS: Wenn du mysql_real_escape_string verwendest, achte bitte darauf, ob dein Server magic_quotes benutzt. Sollte er das nämlich machen, wirst du fehlerhafte Einträge bekommen, wenn du die Post-Daten direkt in mysql_real_escape_string jagst, da durch magic_quotes + mysql_real_escape_string alles doppelt escaped wird.
vor langer Zeit

MySQL: Moin Claudia XD Wie kann man wenn man eine normale mysql-Abfrage durchgeführt hat, zählen ob und wenn ja wie viele Werte ausgegeben werden.

von Herry
Hi Herry, mysql_num_rows hilft dir weiter. Einfach die Variable, in der dein Abfrageergebnis gespeichert sind als Wert übergeben, also so: $anzahl_datensaetze = mysql_num_rows($ergebnis_der_abfrage). Das "ob und wenn ja wie viele" kannst du dann mit einer if-Schleife dazu setzen, indem du überprüfst, ob die Anzahl größer als 0 war.
Wenn die Abfrage einen Fehler verursacht hat, wirft mysql_num_rows ebenfalls einen Fehler im Stil von "supplied argument ist not a valid result resource".
vor langer Zeit

MySQL: servus ich finde man sollte im bereich MySQL noch einen punkt über SQL Injections hinzufügen bzw hier http://www.schattenbaum.net/php/insert2.php integrieren naja aber warum ich eigentlich schreibe ich bin auf der suche nach einer guten anleitung wie ich mit mysql_real_escape_string arbeite lg simon

von Simon
Das mit mysql_real_escape_string ist so eine Sache... Es kollidiert mit magic_quotes, die auf den meisten Servern installiert sind, daher müssen diese eigentlich davor entfernt werden. Außer, sie sind eben nicht aktiv, was man also zunächst überprüfen muss und sie nur in diesem Fall deaktiviert, bevor man dann mysql_real_escape_string dazu wirft.

Für Anfänger - und für die ist dieses Tutorial ja gedacht - also reichlich umständlich. Der Vorteil ist aber, dass magic_quotes den gleichen Schutzmechanismus darstellen, wie mysql_real_escape_string. Sie ersetzen aber ein paar Zeichen weniger.

Ich rätsle schon eine ganze Weile, wie ich das am besten einbringe, auch weil mit PHP 6 die magic_quotes nicht länger vorhanden sein werden, was dann noch mehr Umstellungen mit sich bringen wird.

Ansonsten ist zu mysql_real_escape_string nicht viel zu sagen: Wenn du magic_quotes aktiv hast, musst du sie vorher mit stripslashes entfernen, danach musst du jede Variable, durch mysql_real_escape_string bearbeiten lassen, bevor du sie für Abfragen verwendest. Das war's schon.
vor langer Zeit

MySQL: Hallo Claudia, ich arbeite gerade an einem Script für eine Registration/Login und habe folgendes Problem: Ich möchte gerne dass das Script überprüft ob Benutzername und Email schon vergeben sind. Habe einmal $sql = "SELECT * FROM users WHERE UserName LIKE '$user'"; mit dem query und einem mysql_num_rows und das ganze nochmal als $sql2, $query2 und $row2 und seitdem gibt mir das Script weder einen Fehler noch etwas anderes aus, es macht einfach gar nichts mehr ... Kann man nicht 2 Sachen gleichzeitig über eine Abfrage machen? Kannst Du mir da vielleicht helfen? Wäre super :) Danke schon mal für deine Mühe und deine Zeit. PS: Sry, für meinen Roman ...

von Bianca
Wenn du beides über eine Abfrage lösen möchtest, musst du nur die Bedingungen mit OR verknüpfen, also "SELECT * FROM users WHERE UserName LIKE '$user' OR email LIKE '$mail'".

Warum dein Script allerdings bei zwei Abfragen gar nichts macht, verstehe ich nicht. Eigentlich ist das auch möglich und es sollte im Zweifel zumindest eine Fehlermeldung ausspucken.
vor langer Zeit

MySQL: Wie kann ich in MySQL die Tabelle(n) so konstruieren, dass für jeden neuen Nutzer, ein neuer Datensatz in einer ander Tabelle erstellt wird? Also in tabelle:user registriert sich ein user mit der id 1, dann sollte in tabelle:usernew ein datensatz mit der selben id erstellt werden. Bitte um Antwort

von Herry
Es gibt die Funktion mysql_insert_id, damit kannst du die id abfragen, die beim letzten Insert (in deinem Fall in der Tabelle user) verwendet wurde. Danach musste du nur noch einen weiteren Insert für die zweite Tabelle (usernew) machen und als id den Wert wählen, den die erste Tabelle dir gegeben hat.

Wichtig dabei ist aber, dass du genau darauf achtest, beim Löschen auch aus beiden Tabellen die Datensätze zu löschen, sonst hast du irgendwann das Problem, dass der Datensatz, den du eintragen möchtst in der 2. Tabelle schon vorhanden ist.
vor langer Zeit

MySQL: Ich habe eine Datenbank mit der Spalte value. In dieser stehen z.B. mehrere gleiche Namen wie Claudia drin und in einer anderen Zeile Ihr Wohnort Berlin. Auch in der Spalte value. Wie kann ich abfragen das ich nur die Claudia ausgegeben bekomme die auch aus Berlin kommt? Folgendes habe ich wie im Tutorial versucht. Klappt leider nur ohne die Stadt: <?php $abfrage = "SELECT * FROM links WHERE value LIKE 'Claudia Unkelbach' AND value LIKE 'Berlin"; ?> Dankeschön im voraus!

Das kann so nicht funktionieren. Wenn du den Wohnort in einer anderen Zeile hast, hast du ja gar keine Claudia, die aus Berlin kommt. Du hast dann values mit "Claudia" und values mit "Berlin", aber es gibt keinen Datensatz, in dem beides verbunden ist.

Um das hinzubekommen musst du einen Datensatz haben, der beides beinhaltet. Dafür wiederum brauchst du dann aber zwei verschiedene Felder für diese Inhalte. Also zB eine Spalte "Name" und eine Spalte "Wohnort". Dann kannst du beide Spalten abfragen.

Grundsätzlich wäre es für dich vermutlich hilfreich, dich mit der (sinnvollen) Struktur von Datenbanken zu beschäftigen. Ich habe allerdings leider keinen hilfreichen Link für dich.
vor langer Zeit

MySQL: hi wie kann man bei einem login server die db (das script) so schreiben das er sie alle paar sekunden von selbst neu einliest? sprich ich erstelle in der db einen neuen account und muß bis jetzt den den login server immer neu starten damit die änderungen wirksam werden . und das nervt thx schon mal für ne antwort ps hab schon klein weinig was mit php gemacht bin aber trotz allem noch ein noob!!!!!!!!!!!!!1

von Maik
Ich kann mir nicht vorstellen, warum du den Loginserver jedes Mal neu starten musst. Eigentlich funktionieren MySQL-Datenbanken so, dass du die Daten hineinschreibst und bei der nächsten Abfrage sind diese vorhanden. Du musst halt danach nur die Abfrage neu starten. Wenn das bei dir so gar nicht funktioniert, solltest du dich mal an deinen Hoster wenden.
vor langer Zeit

MySQL: Hallo Claudia, bastel gerade an der php abfrage für die Wbesite unserer Stiftung. Hinbekommne habe ich das mir die Liste der Stifter/innen begninnend mit den neuesten Stiftern angezeigt wird, incl Prüfung das nur die angezeigt werden, die zugestimmt haben, dass ihr Name als Stifter/in auf der Website genannt wird. Gescheitert bin ich daran wie ich es hinbekommen das die chronologische Liste auch die Stifter enthält die nicht genannt werden möchten, dann jedoch anstelle des Vornamens "Stifter/in" und anstelle des Namens "möchte nicht genannt werden" in der Liste angezeigt wird. Würden uns riesig freuen wenn Du mir helfen könntest. Dank voraus Peter

von Peter
Ich nehme an, du hast zur Zeit eine MySQL-Abfrage, die überprüft, ob die Stifter genannt werden wollen oder nicht und direkt nur die ausgibt, die zugestimmt haben. Ich würde die Abfrage so verändern, dass alle ausgegeben werden und in der Ausgabe-Schleife eine zusätzliche if-Abfrage einsetzen, mit der du überprüfst, ob eine Nennung gewünscht ist oder nicht. Wenn sie gewünscht wird, lässt du dann ganz normal den Namen ausgeben und wenn nicht, eben nur den Text "möchte nicht genannt werden".
vor langer Zeit

MySQL: Hallo, ich wollte gerade eine mySQL datenbank aufbauen, es sollen darin mehrere personen eintragen können. Als erstes habe ich die ID, die wird ja automatisch vergeben, danach kommt der "Ort" da gibts im HTML Formular ein auswahlfeld, wo man den entsprechenden "wert" aus der Tabelle auswählen kann. und dann kommen noch n paar sachen.- Nun Mein Problem, wenn man versucht mehrere sacehn am selben Ort anzulegen, wird das nciht in die Tabelle eingetragen, Was mache ich falsch.

Taucht das Problem bei jedem Ort auf, den du mehrmals verwenden magst, oder nur bei (einem) bestimmten? Wenn es bei jedem vorkommt, würde ich sagen, dass du das Ort-Feld in der Tabelle als unique angelegt hast.
vor langer Zeit

MySQL: Hey, ich habe ein Problem. Ich bin in Sachen SQL und MySql noch ein bissche unerfahren. Ich arbeite gerade ein einem Newssystem und komme nicht bei den Kommentaren weiter. Ich weiß nicht wie man die passend zur den News in die Datenbank speichert. In deinem Ratgeber ist es ja mit UPDATE beschrieben, aber mit einer festen id. Ich wollt jetzt fragen wie man es dynamisch machen kann, oder ob ich in die falsche Richtung denke. Vielen Dank!

Einfach indem du statt id='festerWert' eine Variable verwendest, also id='$variablenname'.
vor langer Zeit

MySQL: Ich hätte mal eine Frage: Kann man mit PHP auch DIV's (z.B. mit einer bestimmten ID) zählen und das dann darstellen? z.B.: alle DIV's zählen mit der ID 'kommentar', dann anzeigen: "es gibt 5 Kommentare" Vielleicht geht das ja auch anders..., ich würde gern darstellen lassen, wie viele Kommentare schon geschrieben wurden... (Falls ich jetzt totalen Mist erzähle, weil das nicht funktionieren kann oder so, nicht wundern..., bin Neuling :-D)

von Max
Also grundsätzlich ist das schon möglich - indem du den Quelltext von PHP durchsuchen lässt und die Vorkommen des div-Befehls verbunden mit der ID prüfst. Erscheint mir aber für das, was du vorhast, etwas übertrieben.

Normalerweise löst man das Zählen der Kommentare über die Abfrage der Datenbank, die auch die Kommentare auswählt. Mit mysql_num_rows kannst du dann prüfen, wieviele Zeilen, sprich Datensätze deine Abfrage erhielt, also zB so:

<?php
$abfrage = mysql_query("SELECT * FROM kommentartabelle WHERE artikelid = '$id_des_artikels'");
$anzahl = mysql_num_rows($abfrage);
?>

Mehr dazu verrät dir auch (wie immer) php.net.
vor langer Zeit

MySQL: Ich habe zwei Tabellen mit Feldern, die sich teilweise überschneiden. Gibt es einen SQL-Befehl damit ich die relevanten Daten transferieren kann? Sowas wie INSERT INTO......IGNORE.... Oder gibt's ne andere Möglichkeit zum Datentransfer? Ich könnte die Daten zwar per Hand umschreiben, aber bei über 2000 Sätzen ist das ne Mänge Arbeit. Ich hoffe du verstehst was ich meine und kannst mir vielleicht helfen.

Ich würde andersherum arbeiten und einfach nur die Daten, die du brauchst, als SQL-Statements exportieren (da gibt's eine Funktion in phpMyAdmin) und das dann in der anderen Tabelle importieren.
vor langer Zeit

MySQL: hi - kann ich order by auch verkehrt chronologisch? gruss, beat rueedi / beatrueedi.ch

von beat rueedi
Ja, sicher. Du brauchst halt ein Feld mit dem Timestamp und verwendest dann zusätzlich zum ORDER BY noch DESC als Sortierung. Steht bei den Abfragen, wie du es genau verwendest.
vor langer Zeit

MySQL: Mein INSERT funktioniert einfach nicht. Was ist da los?

MySQL ist beim Insert ziemlich kleinlich. Ein falscher Spaltenname (nicht vorhanden oder falsch geschrieben) oder auch zuviele oder zuwenig Werte, die übergeben werden bringen MySQL dazu, gar nichts einzutragen. Wenn dein Insert also nicht klappt, schau am besten zuerst alles durch, ob du dich vielleicht irgendwo vertippt hast (vergleiche die Spaltennamen zur Sicherheit auch noch einmal mit denen in der Datenbank - auch wenn du dir dort sicher bist, dass sie so heißen, wie du sie genannt hast!) und schaue dann, ob du die gleiche Anzahl an Werten übergibst, wie du Spalten angegeben hast, vielleicht fügst du ja einen Wert doppelt ein oder Ähnliches.
vor langer Zeit

MySQL: Wie kann ich mehrere Werte auf einmal in die Datenbank einfügen?

Um mehrere Daten zugleich einzufügen findest du etwas bei den Schnipseln.
vor langer Zeit

MySQL: Kann ich beim Suchen auch Platzhalter verwenden?

Auch Platzhalter in mySQL findest du bei den Schnipseln.
vor langer Zeit

MySQL: Kann ich meine Tabelle kopieren? Oder umbenennen?

Ja, auch das ist möglich. Mehr Informationen zum Kopieren einer Tabelle wie immer bei den Schnipseln.
vor langer Zeit


Autor: Claudia Unkelbach
© 2001 - 2017 Claudia Unkelbach
Gießener Straße 75, 35396 Gießen