Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 1775 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 ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (19)

Frage von patz223 zum Thema Windows Userverwaltung ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (15)

Link von Penny.Cilin zum Thema Viren und Trojaner ...