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

Frage Entwicklung Datenbanken

Mitglied: maettle

maettle (Level 1) - Jetzt verbinden

21.11.2013, aktualisiert 15:47 Uhr, 1825 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
Router & Routing
Sif: warning probably an attack
Frage von Maik-SRouter & Routing2 Kommentare

Hallo, seit ein paar Wochen stelle ich unregelmäßig fest, dass meine Verbindung zum Internet unterbrochen wird. Nach wenigen Minuten ...

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, ...

Batch & Shell
Probleme bei der Ausführung eines VB-Scriptes
Frage von AuricGoldfingerBatch & Shell1 Kommentar

Hallo zusammen, ich habe folgendes Script geschrieben: Leider bekomme ich bei der Ausführung den Fehler Was mache ich falsch?? ...

Windows Tools
Powershell "Warnings to Outputbox" (GUI)
gelöst Frage von skahle85Windows Tools8 Kommentare

Moin Liebe Leutz, ich hänge mal wieder beim Try and Catch. Aber diesmal versuche ich Warnings in meine Outputbox ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 30 MinutenVerschlüsselung & Zertifikate

Interessant SSH-Kommando in CMD.exe und PowerShell

Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 1 TagWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 1 TagWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement17 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...