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!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |

29.03.2014, 16:02:54
|
Anfänger
|
|
Registriert seit: Mar 2014
Alter: 45
Beiträge: 3
|
|
Neue Werte nach Löschaktion generieren
Hallo,
Dieser Post erscheint erstmal Groß, ich bin mir aber sicher, dass das Problem schnell gelöst werden kann. Also bitte nicht demotiviert diesen Post verlassen. ;-)
Also, ich habe eineTabelle angelegt mit dem Namen "Images". Diese beinhaltet alle Informationen über Bilder, die ich auf einer Webseite anzeigen möchte. Die Tabelle hat folgende Spalten:
ID - ist der Schlüssel und wird automatisch erzeugt
Image - Filename des Bildes
Place - Gibt die Anordnungsposition des Bildes an.
Angenommen ich habe einige Bilder hochgeladen, dann sieht die Tabelle bzw. die Einträge zunächst so aus:
ID = 0
Image = 000.jpg
Place = 0
------------------
ID = 1
Image = 001.jpg
Place = 1
------------------
ID = 2
Image = 002.jpg
Place = 2
------------------
ID = 3
Image = 003.jpg
Place = 3
Auf der Webseite werden die Bilder nun in dieser Reihenfolge dargestellt. Der Administrator hat nun die Möglichkeit per Pfeil-Buttons die reihenfolge zu ändern um z.B. das letzte Bild an zweiter Stelle darzustellen. Der Wert "Place" ändert sich dann entsprechend. Beispiel:
ID = 0
Image = 000.jpg
Place = 0
------------------
ID = 1
Image = 001.jpg
Place = 3
------------------
ID = 2
Image = 002.jpg
Place = 1
------------------
ID = 3
Image = 003.jpg
Place = 2
Die Bilder werden in dieser Reihenfolge auf der Website dargestellt:
000.jpg | 002.hpg | 003.jpg | 001.jpg
Das funktioniert alles super und ist auch soweit fertig. Das Problem ist jetzt das Löschen eines Bildes, weil das soll der Admin ja auch können. Angenommen Image=002.jpg soll gelöscht werden, dann wird der Eintrag aus der Tabelle geschmissen womit sich folgende Einträge ergeben:
ID = 0
Image = 000.jpg
Place = 0
------------------
ID = 1
Image = 001.jpg
Place = 3
------------------
ID = 3
Image = 003.jpg
Place = 2
Wie man sieht ist eine Lücke entstanden. Die Werte von "Place" sind jetzt "0,3,2". Also die "1" fehlt. Ich möchte diese Werte natürlich neu generieren, so dass alle Werte hinter 0, einen nach vorne Rücken. also statt "0,3,2" soll es dann "0,2,1" werden. Somit wäre die Lücke weg. Nochmal als Tabelleneinträge:
ID = 0
Image = 000.jpg
Place = 0
------------------
ID = 1
Image = 001.jpg
Place = 2
------------------
ID = 3
Image = 003.jpg
Place = 1
Nach einiger Forschung bin ich auf folgende SQL Befehle gekommen, die genau das machen, was ich möchte. Die Einträge werden (sortiert nach Place) neu vergeben. Das funktioniert wunderbar, wenn ich den Code direkt als SQL-Code bei phpMyAdmin eingebe.
Führe ich es per PHP aus, kommt eine Fehlermeldung. Es ist wirklich der identische SQL-Befehl, von daher ist es mir unerklärlich wie dieser Fehler zu stande kommt.
Hier der Befehl:
SET @c := 0;
UPDATE Images SET Place = ( SELECT @c := @c + 1 ) ORDER BY Place;
Die Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE Images SET Place = ( SELECT @c := @c + 1 )' at line 1
Wer kann mir sagen woran das liegt? Is das Vorgehen eventuell schon grundlegend falsch bzw gibt es bessere Möglichkeiten einer solchen Verwaltung?
Danke und Gruß
|

29.03.2014, 16:23:14
|
 |
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: Neue Werte nach Löschaktion generieren
Hallo und willkommen hier im Forum.
Ein wenig Code wäre zur Beurteilung des Problems nicht schlecht.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|

29.03.2014, 16:48:40
|
Anfänger
|
|
Registriert seit: Mar 2014
Alter: 45
Beiträge: 3
|
|
AW: Neue Werte nach Löschaktion generieren
Klar, ich könnte jetzt alles an Code posten, jedoch tritt das Problem schon auf, sobald ich einfach nur die Zeile ausführe. Testweise habe ich auf meiner PHP Seite direkt zu Anfang den SQL Befehl eingefügt und er wirft mir die Fehlermeldung. An der eigentlichen Verbindung liegt es nicht. Andere SQL Befehle lassen sich problemlos ausführen. Der Code sieht so aus...
PHP-Code:
include('../utils/DBConnect.php'); $dbData = connectDB(); // Verbindung mit der Datenbank. Funktioniert!
$result = mysqli_query($dbData, 'SET @c := 0; UPDATE Images SET Place = ( SELECT @c := @c + 1 );' ); if (!$result) die('Wrong Request: ' . $dbData->error);
|

29.03.2014, 17:28:27
|
 |
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: Neue Werte nach Löschaktion generieren
Trenne beide Zeilen in Deiner Querry in seperate Querrys.
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|

31.03.2014, 14:19:28
|
 |
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
AW: Neue Werte nach Löschaktion generieren
Zitat:
Zitat von themerx
ID - ist der Schlüssel und wird automatisch erzeugt
|
Löblich, einen primary key automatisch zu generieren.
Aber was soll das denn:
Zitat:
Wie man sieht ist [beim Löschen] eine Lücke entstanden.
|
Und was stört Dich daran? Willst Du allen Ernstes wegen einer ID-Lücke die komplette Tabelle neu schreiben, damit MySQL wegen der Änderung beim auto_increment nicht auf die Fresse fällt? Pack ne Spalte dazu, in die Du die Nummern pinselst, oder erzeuge die fortlaufenden "Bildnummern" mit PHP.
Außerdem:
wenn Du Multiqueries möchtest, dann mußt Du auch mysqli_multi_query() benutzen. Wie steht im Handbuch.
|

02.04.2014, 10:32:52
|
Anfänger
|
|
Registriert seit: Mar 2014
Alter: 45
Beiträge: 3
|
|
AW: Neue Werte nach Löschaktion generieren
Zitat:
Zitat von meikel
Löblich, einen primary key automatisch zu generieren.
Aber was soll das denn:
Und was stört Dich daran? Willst Du allen Ernstes wegen einer ID-Lücke die komplette Tabelle neu schreiben, damit MySQL wegen der Änderung beim auto_increment nicht auf die Fresse fällt? Pack ne Spalte dazu, in die Du die Nummern pinselst, oder erzeuge die fortlaufenden "Bildnummern" mit PHP.
Außerdem:
wenn Du Multiqueries möchtest, dann mußt Du auch mysqli_multi_query() benutzen. Wie steht im Handbuch.
|
Hi und Danke für eure Antworten. Die ID Lücke ist egal. Mich stört eher die Lücke bei "Place" da das hin und her tauschen nicht mehr so einfach ist. Ich habe aber shcon eine Lösung dafür gefunden und jetzt funktioniert auch alles wie gehabt.
Eine Frage bleibt aber noch offen. Wie wird ein Zeilenumbruch in einem String für einen SQL Befehlen realisiert? '\n' und '<br/>' sind scheinbar nicht die Richtige wahl. Gibt es dafür eine php funktion?
|

02.04.2014, 15:31:00
|
 |
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
AW: Neue Werte nach Löschaktion generieren
Zitat:
Zitat von themerx
Eine Frage bleibt aber noch offen. Wie wird ein Zeilenumbruch in einem String für einen SQL Befehlen realisiert?
|
Dem SQL Server isses völlig Rille, wie der String aussieht, der in eine varchar Spalte gestapelt werden soll.
Zitat:
'\n' und '<br/>' sind scheinbar nicht die Richtige wahl. Gibt es dafür eine php funktion?
|
Definiere 'Zeilenumbruch'.
"\n" ist ein Macro für den ASCII Wert 0x0A = 10. Dieses Zeichen (als new line oder line feed bezeichnet) wird zB. in der Kommandozeile eines Linuxrechners als ENTER angesehen. Ein Linuxtexteditor stellt es als Zeilenumbruch dar.
Unter Windows ist das (wie üblich) etwas anders. Dort besteht der Zeilenumbruch aus zwei ASCII Steuerzeichen:
"\r\n" => 0x0D, 0x0A => CRLF => carriage return + line feed => Wagenrücklauf und neue Zeile.
Ein üblicher Windowstexteditor (zB. Notepad) stellt nur CRLF als Zeilenumbruch dar. Ein einsames 0x0A wird bei mir als kleines schwarzes Quadrat angezeigt. Ordentliche Scripteditoren (zB. Notepad++) können allerdings auch mit dem Linux-Enter umgehen.
Ein <br /> ist ein HTML Tag, den ein HTML Browser als Zeilenumbruch rendert.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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 23:48:45 Uhr.
|