CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
01.09.2007, 22:42:36
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 15
|
|
Datensätze löschen - kleines Script, große Kopfschmerzen
Hallo Allerseits!
Mit dem angehängten Script sollen Datensätze auf Wunsch gelöscht werden. Ein Link, der auch die ID übergibt, führt hierzu. Es wird dann Lösch-Link angezeigt und wenn man ihn klickt, bekommt man die Meldung, dass der jeweilige Datensatz gelöscht wurde.
Wird er aber nicht.
Geht man nur mit der Maus über diesen Lösch-Link, sieht man unten im Brwoser, dass hinter der ID der "&aktion=loeschen"-Aufruf mit angezeigt wird, womit die übergebene ID dann natürlich nicht mehr korrekt ist. Also statt "...id=3" steht dann da "...id=3&aktion=loeschen".
Im error.log wird der Fehler rund: In der Zeile 16 soll "aktion" undefiniert sein.
Es beschämend, wie lange ich nun vergeblich nach dem Fehler gesucht habe... ich gebe nun auf.
Kann mir bitte jemand helfen?
PHP-Code:
<?php
include("fern_kurs_ausgabe.php");
$db_verbindung = mysql_connect($db_server, $db_benutzer, $db_passwort);
echo "<h2>ID-Daten löschen</h2>";
echo "Löschen kann nicht rückgängig gemacht werden!";
echo "<a href=\"fern_kurs_ausgabe.php\">(Zurück zur Übersicht)</a><br><br>";
$id = @$_GET['id'];
if (!$id) die ("Es wurde kein ID_Datensatz angegeben.");
$abfrage = "SELECT * FROM fern_kurs WHERE id = $id";
$ergebnis = mysql_query($abfrage, $db_verbindung);
mysql_close($db_verbindung);
$aktion = $_GET['aktion']; <-------------------------------- Zeile 16
if ($aktion == "loeschen") {
$abfrage = "DELETE FROM fern_kurs WHERE id = $id";
mysql_query($abfrage, $db_verbindung);
echo"Der Datensatz mit der ID $id wurde gelöscht!";
mysql_close($db_verbindung);
exit();
}
echo "<tr><td align =\"center\"><a href=\"fern_kurs_loeschen.php?id=$id&aktion=loeschen\">ID $id Datensatz löschen!</a></td></tr>";
?>
Vielen Dank schon mal...
LG
Tenhigo
|
02.09.2007, 00:38:19
|
Member
|
|
Registriert seit: Aug 2005
Beiträge: 644
|
|
AW: Datensätze löschen - kleines Script, große Kopfschmerzen
Das "'aktion' undefiniert" aus der error.log ist kein Fehler sondern eine Notice und stammt recht wahrscheinlich nicht von dem Aufruf, wenn der Link geklickt wurde, sondern von dem Aufruf vorher, wenn nur der Link angezeigt wird (dann ist ja noch keine aktion gesetzt).
Setze mal ein
PHP-Code:
error_reporting(E_ALL);
ganz an den Anfang und überprüfe, ob meine Vermutung hinhaut. Die Notice wird dir dann auch während der Laufzeit wie ein normaler Fehler angezeigt.
|
02.09.2007, 11:28:02
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 15
|
|
AW: Datensätze löschen - kleines Script, große Kopfschmerzen
Hallo MatMel!
Deine Vermutung war korrekt.
Ich habe mich darauf hin auf die Suche begeben, wo genau der Fehler versteckt sein könnte. Dabei habe ich entdeckt, dass ich eine ID-Abfrage verschlampt habe. Aber nachdem ich sie eingesetzt habe, kam keine Rückmeldung mehr, dass die Daten übergeben wurden. Im Ausgabe-php wurden sie jedoch angezeigt.
Irgendwo muss in der ID-Übergabe der Fehler stecken....
Hier mal alle zum Projekt gehörigen phps, vielleicht ist das aufschlussreicher...
fern_kurs_tabelle.php:
PHP-Code:
<?php
$db_server = "localhost";
$db_benutzer = "testnutzer";
$db_passwort = "geheim";
$db_name = "test";
$db_verbindung = @mysql_connect($db_server, $db_benutzer, $db_passwort);
if ($db_verbindung) {
echo "Verbindung zur Datenbank $db_name erfolgreich aufgebaut!<br>";
} else {
echo "DB-Verbindung fehlgeschlagen! (MySQL-Server gestartet?)<br>";
}
$ergebnis = @mysql_select_db($db_name, $db_verbindung);
if ($ergebnis) {
echo "Datenbank $db_name erfolgreich ausgewählt!<br>";
} else {
echo "Verbindung zur Datenbank $db_name fehlgeschlagen<br>";
}
$abfrage = "CREATE TABLE `fern_kurs` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`vorname` VARCHAR(50),
`nachname` VARCHAR(50),
`strasse` VARCHAR(50),
`nummer` VARCHAR(10),
`plz` INT,
`ort` VARCHAR(50),
`ausgabe1` VARCHAR(50),
`ausgabe2` VARCHAR(50),
`ausgabe3` VARCHAR(50),
`ausgabe4` VARCHAR(50),
`ausgabe5` VARCHAR(50));
";
$ergebnis = mysql_query($abfrage, $db_verbindung);
if ($ergebnis) {
echo "Anlegen der Tabelle erfolgreich!";
} else {
echo "Anlegen der Tabelle fehlgeschlagen! (2. Aufruf?)";
}
?>
fern_kurs:
PHP-Code:
<?php
$db_server = "localhost";
$db_benutzer = "testnutzer";
$db_passwort = "geheim";
$db_name = "test";
$fehlermeldung = utf8_encode("&meldung=Ihre Daten sind leider nicht angekommen.<br>Bitte senden Sie das Formular erneut an uns oder setzen<br>Sie sich auf einem dieser Wege mit uns in Verbindung:<br><b>anmeldung@fernkurse.de<br>0221/456789<br></b>Vielen Dank.");
$db_verbindung = mysql_connect($db_server, $db_benutzer, $db_passwort) or die ("$fehlermeldung <br>(Fehler 1)");
$ergebnis = mysql_select_db($db_name, $db_verbindung) or die ("$fehlermeldung <br>(Fehler 2)");
$vorname = utf8_decode($_GET['vorname']);
$nachname = utf8_decode($_GET['nachname']);
$strasse = utf8_decode($_GET['strasse']);
$nummer = utf8_decode($_GET['nummer']);
$plz = $_GET['plz'];
$ort = utf8_decode($_GET['ort']);
$ausgabe1 = utf8_decode($_GET['ausgabe1']);
$ausgabe2 = utf8_decode($_GET['ausgabe2']);
$ausgabe3 = utf8_decode($_GET['ausgabe3']);
$ausgabe4 = utf8_decode($_GET['ausgabe4']);
$ausgabe5 = utf8_decode($_GET['ausgabe5']);
$abfrage = "INSERT INTO fern_kurs (`id`, `vorname`, `nachname`, `strasse`, `nummer`, `plz`, `ort`, `ausgabe1`, `ausgabe2`, `ausgabe3`, `ausgabe4`, `ausgabe5`)
VALUES (NULL, '$vorname', '$nachname', '$strasse', '$nummer', $plz, '$ort', '$ausgabe1', '$ausgabe2', '$ausgabe3', '$ausgabe4', '$ausgabe5');";
mysql_query($abfrage, $db_verbindung) or die ("$fehlermeldung <br>(Fehler 3)");
$abfrage = "SELECT LAST_INSERT_ID;"; <----------------------- ab hier neu
$db_ergebnis = mysql_query($abfrage, $db_verbindung) or die ("$fehlermeldung <br>(Fehler 4)");
$datensatz_id = mysql_result($db_ergebnis, 0);
$erfolgsmeldung = $erfolgsmeldung.$datensatz_id; <----------------------- bis hier
$erfolgsmeldung = utf8_encode("&meldung=Hallo $vorname $nachname!<br>Vielen Dank für Ihre Anmeldung!");
echo $erfolgsmeldung;
mysql_close($db_verbindung);
?>
fern_kurs_ausgabe:
PHP-Code:
<?php
$db_server = "localhost";
$db_benutzer = "testnutzer";
$db_passwort = "geheim";
$db_name = "test";
$db_verbindung = mysql_connect($db_server, $db_benutzer, $db_passwort);
mysql_select_db($db_name, $db_verbindung);
$abfrage = "SELECT * FROM fern_kurs";
$ergebnis = mysql_query($abfrage, $db_verbindung);
mysql_close($db_verbindung);
$eintraege = mysql_num_rows($ergebnis);
echo "<h2>fern_kurs Datenausgabe</h2> Die Datenbank enthält $eintraege Einträge<br><br> ";
if ($eintraege == 0) {
echo "<br><br>- leider keine Einträge zum Anzeigen vorhanden!";
exit();
}
$kopf = "<table border =\"1\">
<th>ID</th><th>Vorname</th><th>Nachname</th><th>Strasse</th>
<th>Nummer</th><th>PLZ</th><th>Ort</th><th>Thema</th><th>Kurs</th>
<th>Kursart</th><th>Zeitraum</th><th>Seminar</th><th>Löschen</th>";
$fuss = "</table>";
$za = "<tr>";
$ze = "</tr>";
$da = "<td>";
$de = "</td>";
$spalten = mysql_num_fields($ergebnis);
echo $kopf;
for ($i = 0; $i < $eintraege; $i++) {
echo $za;
for ($k = 0; $k < $spalten; $k++) {
echo $da;
echo mysql_result($ergebnis, $i, $k);
echo $de;
}
$id = mysql_result($ergebnis, $i,'id');
echo "<td><a href=\"fern_kurs_loeschen.php?id=$id\">ID $id löschen</a></td>";
echo $ze;
}
echo $fuss;
?>
fern_kurs_loeschen:
PHP-Code:
<?php
error_reporting(E_ALL);
include("fern_kurs_ausgabe.php");
$db_verbindung = mysql_connect($db_server, $db_benutzer, $db_passwort);
echo "<h2>ID-Daten löschen</h2>";
echo "Löschen kann nicht rückgängig gemacht werden!";
echo "<a href=\"fern_kurs_ausgabe.php\">(Zurück zur Übersicht)</a><br><br>";
$id = @$_GET['id'];
if (!$id) die ("Es wurde kein ID_Datensatz angegeben.");
$abfrage = "SELECT * FROM fern_kurs WHERE id = $id";
$ergebnis = mysql_query($abfrage, $db_verbindung);
mysql_close($db_verbindung);
$aktion = $_GET['aktion'];
if ($aktion == "loeschen") {
$abfrage = "DELETE FROM fern_kurs WHERE id = $id";
mysql_query($abfrage, $db_verbindung);
echo"Der Datensatz mit der ID $id wurde gelöscht!";
mysql_close($db_verbindung);
exit();
}
echo "<tr><td align =\"center\"><a href=\"fern_kurs_loeschen.php?id=$id&aktion=loeschen\">ID $id Datensatz löschen!</a></td></tr>";
?>
O.k., jetzt ist es nicht mehr so ein kleines Script... ;)
LG
Tenhigo
|
02.09.2007, 14:37:14
|
Member
|
|
Registriert seit: Aug 2005
Beiträge: 644
|
|
AW: Datensätze löschen - kleines Script, große Kopfschmerzen
Mach mal in dieser Zeile:
PHP-Code:
$id = @$_GET['id'];
das @ weg, damit du ne Notice bekommst, sollte id nicht übergeben werden.
Bekommst du keine Notice, dann lass dir $id mal per echo ausgeben und schau nach was drinsteht. Wenn das falsch ist hast du einen Ansatz...
Wenn die id korrekt ist, mach mal ein echo in dem if, bei dem $aktion geprüft wird. Ob er da überhaupt reinspringt. Wenn nicht gib dir $aktion aus und schau nach warum nicht.
Zu guter letzt kannst du noch den Query ausgeben lassen und überprüfen.
|
02.09.2007, 22:35:10
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 15
|
|
AW: Datensätze löschen - kleines Script, große Kopfschmerzen
Hi MatMel!
Ich hoffe, ich habe Dich richtig verstanden...
Für fern_kurs_loeschen.php, sowohl mit als auch ohne @, aus dem error.log: In Zeile 17: PHP Notice: Undefined index: aktion
In Zeile 20: PHP Warning: mysql_query(): 5 is not a valid MySQL-Link resource
In Zeile 22: PHP Warning: mysql_close(): 5 is not a valid MySQL-Link resource Was mir allerdings gar nichts sagt. Kannst Du was damit anfangen?
Ich habe ein Echo auf $id gesetzt, bekam jedoch keine Rückmeldung. Liege ich damit richtig, wenn ich vermute, dass da einfach nichts übergeben wird?
Also beim Setzen der ID in fern_kurs_tabelle kann nicht so wahnsinnig viel falsch laufen, denn die Nummern exstieren ja. Und alles, was mit $id eingesetzt wird, wird bei der Abfrage der php-Scripts mit einer entsprechenden Nummer ausgegeben.
Auch der Inhalt wird übertragen. Beides, ID und Inhalt, wird also zwar korrekt ausgegeben, aber vielleicht nicht richtig einander zugeordnet...?
Ich habe die letzten Stunden noch weiter gesucht.
In fern_kurs habe ich ja die vier Zeilen neu eingetragen. Könnte es sein, dass die ganzen Schwierigkeiten hierauf beruhen?
PHP-Code:
$abfrage = "SELECT LAST_INSERT_ID;";
$db_ergebnis = mysql_query($abfrage, $db_verbindung) or die ("$fehlermeldung <br>(Fehler 4)");
In meinem Flashend wird Fehler 4 ausgegeben. Ich habe testweise "or die" weggelassen, und wollte neben $vornamen und $nachnamen auch noch $id ausgeben lassen, was aber nicht funktionierte.
Also entweder wird die ID nicht richtig übergeben oder sie wird nicht richtig ausgelesen. Gibt es das: die fortlaufende Zahl wird ausgegeben, aber nicht als den jeweiligen Datensätzen zugehörige ID erkannt? Wenn das möglich wäre, dann würde sich auch das fehlerhafte Löschen erklären, oder?
Sorry, wenn meine Überlegungen hier völlig schwachsinnig wirken sollten - PHP ist für mich ein völlig neues Feld.
LG
Tenhigo
|
03.09.2007, 01:46:25
|
Member
|
|
Registriert seit: Aug 2005
Beiträge: 644
|
|
AW: Datensätze löschen - kleines Script, große Kopfschmerzen
Also gut ich glaub ich weiß was das Problem ist:
PHP-Code:
$abfrage = "SELECT * FROM fern_kurs WHERE id = $id";
$ergebnis = mysql_query($abfrage, $db_verbindung);
mysql_close($db_verbindung);
$aktion = $_GET['aktion'];
if ($aktion == "loeschen") {
$abfrage = "DELETE FROM fern_kurs WHERE id = $id";
mysql_query($abfrage, $db_verbindung);
echo"Der Datensatz mit der ID $id wurde gelöscht!";
mysql_close($db_verbindung);
exit();
}
In diesem Codestück aus der Datei "fern_kurs_loeschen" wird die Verbindung zur Datenbank geschlossen, danach aber nochmal benutzt.
Daher kommen auch die zwei Warnings aus der error.log, die du geposted hast.
Die Verbindung wird nämlich in Form einer Zahl gespeichert, in deinem Fall wohl 5. Hinter dieser Zahl steckte aber keine gültige Verbindung mehr da sie ja schon in der 3. Zeile geschlossen wurde.
Also mach das mysql_close weg und es sollte wunderbar laufen.
Warum bei der Ausgabe von $id nichts herauskam wundert mich. Denn wenn wirklich nichts übergeben worden wäre, dann hätte in der error.log noch sowas auftauchen müssen:
In Zeile xx: PHP Notice: Undefined index: id
Ist es vielleicht möglich, dass du das echo gesetzt hast, bevor $id zugewiesen wurde?
|
03.09.2007, 09:07:46
|
Anfänger
|
|
Registriert seit: Aug 2007
Beiträge: 50
|
|
AW: Datensätze löschen - kleines Script, große Kopfschmerzen
Hallo zusammen,
wenn ich das richtig sehe, wird in der url nicht richtig übergeben.
PHP-Code:
echo "<tr><td align =\"center\"><a href=\"fern_kurs_loeschen.php?id=$id&aktion=loeschen\">ID $id Datensatz löschen!</a></td></tr>";
probier's mal so
PHP-Code:
echo "<tr><td align =\"center\"><a href=\"fern_kurs_loeschen.php?id='.$id.'&aktion=loeschen\">ID '.$id.' Datensatz löschen!</a></td></tr>";
MfG
Geändert von @Work (03.09.2007 um 09:08:34 Uhr)
|
03.09.2007, 10:27:57
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 15
|
|
AW: Datensätze löschen - kleines Script, große Kopfschmerzen
@ MatMel
Die Fehlermeldungen im error.log verschwanden in der Tat, nachdem ich das erste mysql_close gelöscht habe.
Das freut mich schon mal sehr, auch wenn es nichts am fehlerhaften Löschen geändert hat.
Das echo habe ich jetzt nochmal gesetzt. Du hast Recht - ich muss es gestern in die falsche Zeile gepackt haben. Es kommt also nun die korrekte ID dabei heraus.
Trotzdem wird nichts gelöscht.
@@Work
Deine ID-Übergabe-Variation habe ich ausprobiert, das Problem bleibt aber auch hierbei leider bestehen.
LG
Tenhigo
|
03.09.2007, 14:02:50
|
Member
|
|
Registriert seit: Aug 2005
Beiträge: 644
|
|
AW: Datensätze löschen - kleines Script, große Kopfschmerzen
Mach bitte den Code von @Work wieder raus oder ersetze die ' die er geposted hat durch ". Sonst kommt nämlich sowas am Schluss raus:
Code:
<tr><td align ="center"><a href="fern_kurs_loeschen.php?id='.12.'&aktion=loeschen">ID '.12.' Datensatz löschen!</a></td></tr>
(id wäre jetzt 12)
Wenn id richtig übergeben wird kann es ja fast nur noch am Query liegen...
Also gib dir mal $anfrage in dem if per echo aus und schau was da drin steht.
Falls du phpMyAdmin zur Hand hast kannst du das Query da auch mal ausführen und schauen was es sagt.
|
03.09.2007, 16:02:53
|
Anfänger
|
|
Registriert seit: Sep 2007
Beiträge: 15
|
|
AW: Datensätze löschen - kleines Script, große Kopfschmerzen
Stimmt, genau das ist dabei raus gekommen.
Das echo auf $abfrage ergibt (bei "Löschung" von Nr. 12):
DELETE FROM fern_kurs WHERE id = 12
Ein echo auf mysql_query($abfrage, $db_verbindung ergab, wie zu erwarten war,
mysql_query(DELETE FROM fern_kurs WHERE id = 12, Resource id #5)
PhpMyAdmin hatte ich noch nicht, habe es aber eben mal runter geladen. Erstaunlicherweise frage ich mich gerade, wie man das überhaupt ans Laufen kriegt...
Ich begebe mich mal dran...
LG
Tenhigo
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:23:21 Uhr.
|