SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 01.09.2007, 22:42:36
Tenhigo Tenhigo ist offline
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&uuml;ck zur &Uuml;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&ouml;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
Mit Zitat antworten
  #2  
Alt 02.09.2007, 00:38:19
MatMel MatMel ist offline
Member
 
Registriert seit: Aug 2005
Beiträge: 644
MatMel eine Nachricht über ICQ schicken
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.
Mit Zitat antworten
  #3  
Alt 02.09.2007, 11:28:02
Tenhigo Tenhigo ist offline
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_ergebnis0);
   
$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&ouml;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&uuml;ck zur &Uuml;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&ouml;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
Mit Zitat antworten
  #4  
Alt 02.09.2007, 14:37:14
MatMel MatMel ist offline
Member
 
Registriert seit: Aug 2005
Beiträge: 644
MatMel eine Nachricht über ICQ schicken
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.
Mit Zitat antworten
  #5  
Alt 02.09.2007, 22:35:10
Tenhigo Tenhigo ist offline
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
Mit Zitat antworten
  #6  
Alt 03.09.2007, 01:46:25
MatMel MatMel ist offline
Member
 
Registriert seit: Aug 2005
Beiträge: 644
MatMel eine Nachricht über ICQ schicken
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&ouml;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?
Mit Zitat antworten
  #7  
Alt 03.09.2007, 09:07:46
@Work @Work ist offline
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
PHP-Code:
$id 
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)
Mit Zitat antworten
  #8  
Alt 03.09.2007, 10:27:57
Tenhigo Tenhigo ist offline
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
Mit Zitat antworten
  #9  
Alt 03.09.2007, 14:02:50
MatMel MatMel ist offline
Member
 
Registriert seit: Aug 2005
Beiträge: 644
MatMel eine Nachricht über ICQ schicken
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.
Mit Zitat antworten
  #10  
Alt 03.09.2007, 16:02:53
Tenhigo Tenhigo ist offline
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
Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mehrere Datensätze löschen (Checkboxen) timo88 PHP für Fortgeschrittene und Experten 1 10.09.2006 14:17:20
Mehrere Datensätze ändern / löschen PHP - Stufe: Mi PHP für Fortgeschrittene und Experten 1 05.06.2006 11:11:34
Datensätze mit leeren Feldern löschen Pixelschubser MySQLi/PDO/(MySQL) 1 30.05.2005 13:02:49
Daten via script von server löschen KingReti PHP für Fortgeschrittene und Experten 17 11.03.2005 07:14:49
Bestimmte Datensätze löschen Small-Talk MySQLi/PDO/(MySQL) 3 08.06.2004 14:17:46


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:23:21 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt