Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Mysql Warning trotz erfolgreicher Ausführung

Mitglied: maettle

maettle (Level 1) - Jetzt verbinden

21.11.2013, aktualisiert 15:47 Uhr, 1885 Aufrufe, 14 Kommentare

Hallo,

ich arbeite gerade an einer kleinen Seite, bei der man das Menü bestellen und auch löschen kann. Dazu kann man einfach einen Haken in eine Checkbox (name cb[]) machen und auf löschen klicken; das Löschen erledigt der untenstehende Code. er funktioniert auch einwandfrei, nur gibt er diese Warnmeldungnach jedem gelöschten Eintrag aus:

"Bestellung vom 2013-11-27 gelöscht!
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\kantine\uebersicht.php on line 39"

(line 39 ist: while($zeile=mysql_fetch_array($erg)){ )


01.
 if(isset($_POST['loeschen'])){
02.
	print_r($_POST);
03.
	$heute=date('Y-m-d'); $t=time(); $uhrzeit = date("H:i",time());
04.
	if (!isset($_POST['cb'])) $_POST['cb']="";
05.
   
06.
        if (is_array($_POST['cb']) == true) {
07.
            foreach ($_POST['cb'] as $cbID) {
08.
	            if ($cbID != '') {//min. 1 zu löschender Eintrag
09.
	            	//Prüfen, ob es fürs Löschen nicht zu spät ist
10.
	            	$sql="SELECT datum FROM user_menu
11.
	            		  WHERE user_menuID = '$cbID'";
12.
					$erg=mysql_query($sql);
13.
	            	while($zeile=mysql_fetch_array($erg)){
14.
	            		$datum=$zeile['datum'];
15.
						if($datum == $heute){
16.
						  if($uhrzeit > '08:45'){
17.
						  	echo "<br><span style='color:red'>für heute zu spät.</span>";
18.
						  }
19.
						  else {
20.
						  	//Eintrag löschen
21.
			            	$sql="DELETE FROM user_menu
22.
			            		  WHERE user_menuID = '$cbID'";
23.
			            	$erg=mysql_query($sql);
24.
			                echo "<br><span style='color:green'>Bestellung vom $datum gelöscht!</span>";
25.
			              }
26.
						} //datum heute Ende
27.
						if($datum > $heute){
28.
			            	//Eintrag löschen
29.
			            	$sql="DELETE FROM user_menu
30.
			            		  WHERE user_menuID = '$cbID'";
31.
			            	$erg=mysql_query($sql);
32.
			                echo "<br><span style='color:green'>Bestellung vom $datum gelöscht!</span>";
33.
						}
34.
						if($datum < $heute) {
35.
							echo "<br><span style='color:red'>Dieser Tag liegt in der Vergangenheit, Zeitreisen sind noch nicht möglich!</span>";
36.
						}
37.

38.
		            }//while Ende 
39.
	            }//if ungleich leer Ende
40.
          }//foreach Ende
41.
        } else {
42.
            //nichts angehakt
43.
            echo "<p><span style='color:red'>Es wurde kein zu löschender Eintrag angegeben!</span></p>";
44.
        } 
45.
 } //Löschen Ende

Ich habe mittlerweile stundenlang herumprobiert, ich bekomm die Warnung nicht weg, was mich mittlerweile etwas verzweifeln lässt (vor allem da quasi der idente Code (also nur das SQL, ohne die ganzen IFs) woanders problemlos tut)....
Mitglied: Dani
21.11.2013 um 15:51 Uhr
Moin,
was möchtest du mit Zeile 4 und 6 bewirken?
Meine PHP-Kenntnisse sind nicht mehr frisch, aber seit wann kann eine POST-Variable ein Array sein?


Grüße,
Dani
Bitte warten ..
Mitglied: maettle
21.11.2013 um 15:54 Uhr
Zeile 4: wenn eine Variable nicht gesetzt ist, aber irgendwo steht, kommt ebenfalls eine Warnung, durch ein setzten auf "" umgehst du das.

Zeile 6: seit wann weiss ich nicht, gehen tuts aber ;) im Prinzip ists halt einfach ein Array im (POST-)Array.
Bitte warten ..
Mitglied: Dani
21.11.2013 um 15:58 Uhr
Zeile 6 wird immer zutreffen und darum läuft dein Script in den Fehler.
Bitte warten ..
Mitglied: maettle
21.11.2013 um 16:16 Uhr
Zeile 6 wird doch genau 1x aufgerufen, die (foreach- bzw. while)Schleife ist ja IN dem IF, nicht ausserhalb? Und wenn sie eben nicht zutrifft, hat man nichts angehakt (= zum löschen ausgewählt)
Bitte warten ..
Mitglied: Dani
21.11.2013 um 16:40 Uhr
Genau, aber die IF-Anweisung trifft meiner Ansicht immer zu.

Grüße,
Dani
Bitte warten ..
Mitglied: bytecounter
21.11.2013 um 18:58 Uhr
Hallo,

irgendwie versteh ich Deine Verarbeitung nicht...

Wenn $_POST['cb'] gesetzt ist, soll/muss/kann/darf es ein Array sein...dann definier das erst einmal so:

01.
$cb = is_array($_POST['cb']) ? $_POST['cb'] : array();
Mit diesem Code ersetzt Du zeile 4..damit sparst Du Dir Zeile 6..denn ab jetzt ist $cb immer ein Array, ggf. eben ein leeres. Wenn Du das dann der foreach übergibst, dann durchläuft die jeden einzelnen Eintrag - ist das Array leer, führt er den Foreach-Block eben nicht aus.
Jetzt kommt es darauf an, wie Deine ID ausschaut. Ich geht jetzt mal davon aus, dass es ein INT-Wert ist:
01.
$cbId = (int) $cbId  // wenn der Wert als String übergeben wird, in INT umwandeln
Damit ist sichergestellt, dass Du mySQL einen INT-Wert übergibst.
Des Weiteren suchst Du mit Deiner ID genau einen Wert; Das kannst Du mit einem LIMIT machen und bekommst dann auch nur genau einen Datensatz zurück - das spart Dir die ganzen whle()-Schleifen..

So, dann packst Du das zusammen in die DELETE:
01.
$query = "DELETE FROM user_menu WHERE user_menuID = $cbID AND datum > $date"
DELETE gibt Dir die Anzahl gelöschter Einträge zurück. Wurde kein Eintrag gelöscht, kann das nur an einer falschen ID oder daran liegen, dass das Datum nicht mehr passt. Du musst allerdings das Datum dann auch MySQL-konform übergeben.

vg
Bytecounter
Bitte warten ..
Mitglied: maettle
22.11.2013, aktualisiert um 10:28 Uhr
Könntest du mir deine erste Zeile genauer erklären? Also die Syntax, den Sinn hast du ja bereits erklärt.

Die ID ist der Primary Key der Hilfstabelle user_menu, also immer ein INT-Wert.

Statt:
01.
	            	$sql="SELECT datum FROM user_menu
02.
	            		  WHERE user_menuID = '$cbID'";
03.
					$erg=mysql_query($sql);
04.
	            	while($zeile=mysql_fetch_array($erg)){
05.
	            		$datum=$zeile['datum'];
also so:
01.
	            	$sql="SELECT datum FROM user_menu
02.
	            		  WHERE user_menuID = '$cbID'
03.
	            		  LIMIT 1";
04.
			$erg=mysql_query($sql);
05.
	            	$datum=mysql_fetch_array(['datum']);
-> klappt noch nicht ganz, $datum ist leer :/

Was spare ich mir durch dein DELETE? Ich muss ja trotzdem 4 Fälle beachten:
1)Datum ist heute, aber nach 8:45,
2)Datum heute und vor 8:45,
3)Datum in der Vergangenheit
4)Datum in der Zukunft

Meines (zugegebenermassen nicht enormen) Wissen über PHP und SQL ist aber eine SQL Abfrage deutlich langsamer als die Überprüfung eines IF, weshalb die jetztige Abfrage doch perfomanter sein sollte? Evtl. habe ich aber auch nicht ganz verstanden, wie du das lösen würdest
Danke jedenfalls schonmal.
Bitte warten ..
Mitglied: bytecounter
22.11.2013 um 15:39 Uhr
Die Sache mit der Performance kann man glaube ich in dem Fall vergessen..oder wieviel Anfragen kommen da pro Sekunde?

Zu dem Datumsprpoblem:
01.
DELETE FROM user_menu WHERE user_menuID = '$cbID' AND (DATE_ADD(`date`, INTERVAL '08:45' HOUR_MINUTE) > NOW())
NOW() gibt Dir das aktuelle Datum mit Uhrzeit zurück; und mit DATE_ADD fügst Du dem in Deiner Tabelle hinterlegten Datum die 08:45 zu. Es muss also vor 08:45 sein, ansonsten wir das Menu nicht gelöscht.

vg
Bytecounter
Bitte warten ..
Mitglied: maettle
23.11.2013 um 22:08 Uhr
Ok, mein ursprüngliches Problem besteht jedoch weiterhin: mit while kommt die Warnung, ohne while, dafür mit LIMIT und mysql_fetch_object funktionierts nicht ($datum ist dann leer).
Bitte warten ..
Mitglied: bytecounter
25.11.2013 um 15:42 Uhr
Wie schaut denn der Code jetzt aus?

Eine angenehme Woche
Bytecounter
Bitte warten ..
Mitglied: maettle
28.11.2013 um 16:09 Uhr
Hi, sorry für die späte Antwort...

01.
 if(isset($_POST['loeschen'])){
02.
	print_r($_POST);
03.
	$heute=date('Y-m-d'); $t=time(); $uhrzeit = date("H:i",time());
04.
	$cb = is_array($_POST['cb']) ? $_POST['cb'] : array();
05.
   
06.
            foreach ($_POST['cb'] as $cbID) {
07.
	            if ($cbID != '') {//min. 1 zu löschender Eintrag
08.
	            	//Prüfen, ob es fürs Löschen nicht zu spät ist
09.
	            	$sql="SELECT datum FROM user_menu
10.
	            		  WHERE user_menuID = '$cbID'
11.
	            		  LIMIT 1";
12.
					$erg=mysql_query($sql);
13.
                        $datum=mysql_fetch_object($erg); 
14.
                        echo $datum;
15.
/*
16.
			//Löschen
17.
			$sql="DELETE FROM user_menu 
18.
			WHERE user_menuID = '$cbID' 
19.
			AND (DATE_ADD($datum, INTERVAL '08:45' HOUR_MINUTE) > NOW())";
20.
			$erg=mysql_query($sql);
21.
*/
22.

23.

24.
	            }//if ungleich leer Ende
25.
          }//foreach Ende
26.
		  if ($cbID = '') {
27.
            //nichts angehakt
28.
            echo "<p><span style='color:red'>Es wurde kein zu löschender Eintrag angegeben!</span></p>";
29.
        } 
30.
 } //Löschen Ende
31.

Zeile 13 ist eben das Problem:
"Catchable fatal error: Object of class stdClass could not be converted to string"
Bitte warten ..
Mitglied: Dani
28.11.2013 um 22:43 Uhr
Was gibt denn "print_r($_POST); aus?


Grüße,
Dani
Bitte warten ..
Mitglied: bytecounter
29.11.2013 um 06:46 Uhr
Hallo,

spontan fallen mir Zeile 4 und 6 in Deinem Code auf:
01.
> 	$cb = is_array($_POST['cb']) ? $_POST['cb'] : array();
02.
>    
03.
>             foreach ($_POST['cb'] as $cbID) {
04.
> 

In Zeile 6 muss es daher heißen
01.
foreach ($cb as $cbId) {
vg
Bytecounter
Bitte warten ..
Mitglied: maettle
29.11.2013, aktualisiert um 09:52 Uhr
print_r:
Array ( [cb] => Array ( [0] => 217 ) [loeschen] => Löschen )

Der Primary Key 217 wäre auch der richtige, er will nur nicht das dazugehörige Datum ausgeben. Der Fehler bezieht sich übrigens auf Zeile 14, also "echo $datum;"
Wenn ich das den SELECT... Befehl im SQL Tab von phpmyadmin eingebe gibt er mir übrigens das Datum aus.

Ich weiß nicht obs hilft, aber ein "echo $erg" nach dem query gibt "Resource id #6" aus.

Das foreach habe ich korrigiert, ändert aber nichts am Fehler
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
SQL Abfrage - Import Erfolgreich?
gelöst Frage von newit1Batch & Shell5 Kommentare

Hallo, Ich habe ein Shell-Skript gebastelt, welches bei Ausführung eine CSV-Datei in eine Tabelle einer Datenbank importiert. Würde gerne ...

Batch & Shell
Wenn ping erfolgreich dann
gelöst Frage von cptkrabbeBatch & Shell2 Kommentare

Hallo. Ich wecke ab und zu Rechner mit folgendem "Script" : Erste Frage: Wie kann ich es so einrichten, ...

Windows Server

Asset Intelligence Catalog Sync Service Warning

Frage von AckermausWindows Server7 Kommentare

Ich hab beim System Center Configurations Manager 2016 (oder 1806) folgenden Fehler beim Asset Intelligence: "Asset Intelligence-Synchronisierungspunktstatus: Anmeldeinformationen/Zertifikat/Token abgelaufen. ...

Debian

MySQL Workbench mysql old password

Frage von Fenris14Debian3 Kommentare

Hallo, ich habe hier auf einem Linux Mint den SQL-Client "MySQL Workbench" installiert. Beim anlegen einer neuen Verbindung und ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 3 TagenDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 3 TagenSicherheit2 Kommentare

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 4 TagenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 5 TagenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
DNS
50 EUR für Telekom-, Unitymedia- und Vodafone-Kunden
Frage von Zorro1199DNS14 Kommentare

Hallo zusammen, wie evaluieren gerade das korrekte Einhalten von DNS-TTLs durch verschiedene Provider. Aktuell suchen wir noch Kunden der ...

Windows Server
Sonntagsfrage: Welchen Sinn seht Ihr noch im Server 2019 Essentials
Frage von ashnodWindows Server13 Kommentare

Guten Morgen, ich habe gestern den Windows Server 2019 Essentials als Trial in einer VM installiert um mir das ...

Windows Server
Windows 2012 R2 - Skript um Druckerkonfiguration auszulesen und zu setzen
gelöst Frage von Der-PhilWindows Server11 Kommentare

Hallo! Kennt ihr eine Möglichkeit, per Skript die Konfiguration eines Druckers auszulesen und auf einen anderen anzuwenden? Hintergrund: Ich ...

Grafik
Viele Fotos organisieren - Windows Dateisystem zu lahm bzw. überfordert
Frage von augustaparkGrafik11 Kommentare

Hallo und Guten Morgen, hat einer eine Idee, wie man viele Fotos sinnvoll und effizient organisieren kann? Wir haben ...