php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 12-03-2005, 18:22
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard [PHP5] Wert des darüberliegenden Feldes in einer While-Schleife

Hallo,

ich lese aus einer Datenbank Werte mit einer While-Schleife aus:

PHP-Code:
$result mysql_query("SELECT * FROM $table WHERE user = '".$user."' ORDER BY sortpos");
while (
$data mysql_fetch_array($result)) 
{   
....
echo 
$data['ID'];
echo 
$data['name'];
 
.... 
etc.


Wie kann ich jetzt herausfinden, welche ID das vorhergehende bzw. das nachfolgende Feld hat, wo allerdings auch user = '".$user."' der Fall ist?

Thx & Greetz
Boron
Mit Zitat antworten
  #2 (permalink)  
Alt 12-03-2005, 18:30
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

drei datensätze auslesen, statt einem.
Mit Zitat antworten
  #3 (permalink)  
Alt 12-03-2005, 19:21
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke.
Ich habe das jetzt so gelöst:

PHP-Code:
$result mysql_query("SELECT * FROM $table WHERE user = '".$user."' ORDER BY sortpos");
while (
$data mysql_fetch_array($result)) 
{   


$pos $data['sortpos'];

$res mysql_query("SELECT ID,sortpos FROM $table WHERE user = '".$user."' AND sortpos < '".$pos."' LIMIT 1");
$IDminus mysql_fetch_array($res);
            
$res mysql_query("SELECT ID,sortpos FROM $table WHERE user = '".$user."'  AND sortpos > '".$pos."' LIMIT 1");
$IDplus mysql_fetch_array($res);


//Ausgabe
echo "aktuelle ID: " $data['ID'] . "<br>";
echo 
"vorherige ID: " $IDminus['ID'] . "<br>";
echo 
"nächste ID: " $IDplus['ID']; 



Geht soweit auch. Aber geht das noch schöner / anders / besser?

Geändert von Boron (12-03-2005 um 19:28 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 12-03-2005, 19:30
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

PHP-Code:
//initialisieren
$davor $danach 'gibt es nicht';
//Datenbank abfragen
$result mysql_query("SELECT id FROM $table WHERE user = '".$user."' ORDER BY sortpos");
//Datensätze in Array einlesen
while ($data[] = mysql_fetch_array($result));
array_pop($data);
$count count($data)
//Datensätze abarbeiten
for ($i 0$i $count$i++) {
  echo 
'ID: '.$data[$i]['id'].'<br />';
  echo 
'ID davor: '.$davor.'<br />';;
  
$danach = isset($data[$i 1]) ? $data[$i 1]['id'] : 'gibt es nicht';
  echo 
'ID danach: '.$danach.'<hr />';
  
$davor $data[$i]['id'];

Dass du die sortpos ausgibst und nicht die IDs, so wie du's im Text formuliert hast, weißt du?
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #5 (permalink)  
Alt 15-03-2005, 20:01
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard

mrhappiness: 'Tschuldigung, aber ich hab' damit jetzt mal nen bisschen "rumprobiert" (ja, anders darf man es leider nicht sagen): Abgesehen davon, dass nicht so ganz klar ist, wo die While-Schleife beginnt und dass dort ein oder mehr Semikolons falsch gesetzt sind, bin ich mir nicht so sicher, ob array_pop (-- Liefert das letzte Element eines Arrays) da wirklich der richtige Befehl sein soll.

Zudem ist meine While-Schleife bereits etwas komplizierter aufgebaut, so dass ich ungerne aus $data ein mehrdimensionales Array machen möchte (also while ($data[] = mysql_fetch_array($result)); tutet nicht so gut bei mir).

Und hast du dir mal die Ausgabe angeschaut? So war es eigentlich nicht gedacht... (vllt. lag es auch daran, dass ich die "Fehler" nicht richtig beseitigt habe...)

Leider musste ich auch feststellen, dass mein Code von oben nicht so wirklich funktioniert.

Eigentlich geht's mir um genau dieses Problem hier: [MySQL 4.1] Werte tauschen

Aber dummerweise schaffe ich es nicht, die sortpos wirklich korrekt zu vertauschen...
Mit Zitat antworten
  #6 (permalink)  
Alt 16-03-2005, 07:26
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Zitat:
Original geschrieben von Boron
Abgesehen davon, dass nicht so ganz klar ist, wo die While-Schleife beginnt
bei while
Zitat:
und dass dort ein oder mehr Semikolons falsch gesetzt sind
welches?
Zitat:
bin ich mir nicht so sicher, ob array_pop (-- Liefert das letzte Element eines Arrays) da wirklich der richtige Befehl sein soll.
ja, denn array_pop liefert das letzte element eines arrays und entfernt es dabei auch aus dem array

wie sieht die ausgabe denn aus?

was den rest angeht:
du selektierst nur auf den user, nicht auf die sortpos, wie also willst du einträge vertauschen?

Du willst zwei Beiträge miteinander tauschen?
Dann mach's doch so, wie es in dem Post steht.
Wenn du nicht klar kommst, poste mal den kompletten Code (ausnahmsweise)

EDIT:
da fehlte ein komma nach dem count, die zwei aufeinanderfolgenden ; sind zwar unschön, tun der funktionalität aber keinen abbruch

PHP-Code:
//initialisieren
$davor $danach 'gibt es nicht';
//Datenbank abfragen
$result mysql_query("SELECT id FROM $table WHERE user = '".$user."' ORDER BY sortpos");
//Datensätze in Array einlesen
while ($data[] = mysql_fetch_array($result));
array_pop($data);
$count count($data);
//Datensätze abarbeiten
for ($i 0$i $count$i++) {
  echo 
'ID: '.$data[$i]['id'].'<br />';
  echo 
'ID davor: '.$davor.'<br />';
  
$danach = isset($data[$i 1]) ? $data[$i 1]['id'] : 'gibt es nicht';
  echo 
'ID danach: '.$danach.'<hr />';
  
$davor $data[$i]['id'];

so besser? (semikolon ergänzt/entfernt)
Du bekommst so alle Datensätze von $user sortiert nach sortpos und es wird dir - sofern vorhanden - die id des datensatzes davor und danach (festgelegt durch die sortierung nach sortpos) ausgegeben

wenn es nicht das war, was du wolltest, dann liegt's vermutlich daran, dass du nicht genung input geliefert hast
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #7 (permalink)  
Alt 16-03-2005, 15:19
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard sortpos tauschen

Erstmal danke, mrhappiness.

Am besten ich stelle mein Problem nochmal neu, da es doch ein wenig anders als der Eingangspost ist.



Ich möchte die sortpos von zwei Einträgen ändern -- eigentlich Einträge, die in einer Tabelle aufgelistet werden, nach oben bzw. unten verschieben

Hier mein Anfangscode: (der komplette Code würde doch etwas den Rahmen sprengen, deshalb stark gekürzt )

PHP-Code:
<table>

<?
$result 
mysql_query("SELECT * FROM $table_leserliste WHERE austraeger='".$name."' ORDER BY sortpos");

while (
$data mysql_fetch_array($result))
{
?>
  
 <tr>
     <td><? echo $data["name"]; ?></td>
     <td><? echo $data["adresse"]; ?></td>
     <td><? echo $data["telefonnr"]; ?></td>
 
     <? // usw....... ?>

     <td><? // HIER soll jetzt ein Link zum Vertauschen der [FONT=courier new]sortpos[/FONT] hin ?>nach oben</td>
     <td>nach unten (ebenfalls als Link) <-- WIE?</td>

 </tr>

<?
}    //while ende
?>

</table>
So, das ist also die Situation.




Mein Versuch sieht im Moment so aus -- dabei sende ich die zwei IDs der Einträge an eine extra Datei, die dann die sortpos vertauscht.



Erstmal die zwei Tabellenspalten aus meinem o.g. Script ersetzt:

PHP-Code:
<td><?

// herausfinden, welche ID die Einträge dadrüber/dadrunter haben
$pos $data["sortpos"];

$res mysql_query("SELECT * FROM $table_leserliste WHERE austraeger = '".$name."' 
AND sortpos < '"
.$pos."' LIMIT 1");

$IDminus mysql_fetch_array($res);
            
// Link zur Änderung der sortpos
 
if($IDminus != "") { ?>
   <a href="admin_leserliste_sort.php?action=change&id1=
  <? echo $data["id"]; ?>&id2=<? echo $IDminus["id"]; ?>">nach oben</a>
       <? ?>
</td>



            
<td>
<? 
// nach unten
$res mysql_query("SELECT * FROM $table_leserliste WHERE austraeger = '".$name."'  
AND sortpos > '"
.$pos."' LIMIT 1");

$IDplus mysql_fetch_array($res);
       
// Link zur Änderung der sortpos
if($IDplus != "") { ?>
  <a href="admin_leserliste_sort.php?action=change&id1=
    <? echo $data["id"]; ?>&id2=<? echo $IDplus["id"]; ?>">nach unten</a>
<? ?>
</td>
Meine Idee war also: Ich übergebe die aktuelle ID und die ID, mit der die erste ID vertauscht werden soll, an admin_leserliste_sort.php, wo dann der "sortpos-Tausch" stattfindet.

So, als Problem hat sich aber herausgestellt, dass nicht immer die korrekte id übergeben wird!!
Sprich, so bringt mir der Code nichts, obwohl er eigentlich funktioniert. Manchmal werden halt ganz andere Tabelleninhalte vertauscht, als ich wollte.




Und noch der Auszug aus der admin_leserliste_sort.php: (das Vertauschen der sortpos funktioniert soweit auch!)

PHP-Code:
switch ($action)
{
default:

break;
case 
"change":

 
$id1result mysql_query("SELECT * FROM $table_leserliste WHERE id='".$id1."' LIMIT 1");
 
$id1data mysql_fetch_array($id1result);
 
 
$id2result mysql_query("SELECT * FROM $table_leserliste WHERE id='".$id2."' LIMIT 1");
 
$id2data mysql_fetch_array($id2result);
 
 
$sortpos1 $id1data["sortpos"];
 
$sortpos2 $id2data["sortpos"];
 
 
mysql_query("UPDATE $table_leserliste SET sortpos='".$sortpos2."' WHERE id='".$id1."'");
 
mysql_query("UPDATE $table_leserliste SET sortpos='".$sortpos1."' WHERE id='".$id2."'"); 

 echo 
"done.";
 
break;
}       
// Switch ende 

Wie müssen die zwei Tabellen-Links (siehe 1. code) also nun richtig aussehen?

Thx & Greetz

Geändert von Boron (16-03-2005 um 15:24 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 16-03-2005, 15:33
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Ich gestehe, ich hab's nur überflogen, bin aber prinzipiell gut gelaunt

Baue den Link so auf:
Code:
sort.php?id=5&dir=up
oder
Code:
sort.php?id=5&dir=down
In sort.php
PHP-Code:
$sql 'SELECT id, sortpos
FROM tabelle
WHERE id = '
.$_GET['id'].'
LIMIT 1'
;
$r mysql_query($sql);
$sort['alt'] = mysql_fetch_assoc($r);

$sql 'SELECT id, sortpos
FROM tabelle
WHERE sortpos %s %d
ORDER BY sortpos %s
LIMIT 1'
;
if (
$_GET['dir'] == 'up')
  
$sql sprintf($sql'<'$sort['alt']['sortpos'], 'DESC');
else 
  
$sql sprintf($sql'>'$sort['alt']['sortpos'], 'ASC');
$r mysql_query($sql);
$sort['neu'] = mysql_fetch_assoc($r);

$sql 'UPDATE tabelle
SET sortpos = '
.$sort['neu']['sortpos'].'
WHERE id = '
.$sort['alt']['id'];
mysql_query($sql);
$sql 'UPDATE tabelle
SET sortpos = '
.$sort['alt']['sortpos'].'
WHERE id = '
.$sort['neu']['id'];
mysql_query($sql); 
ohne Gewähr, funktioniert vielleicht auch nicht richtig, aber prinzipiell sollte es klar sein jetzt
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #9 (permalink)  
Alt 16-03-2005, 15:57
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
bin aber prinzipiell gut gelaunt
War wohl mein Glück.


Sehr geil. Danke. Es funktioniert. (Anscheinend auch richtig.)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Projektmanagement Damals und Heute
Projektmanagement Damals und HeuteWerfen Sie einen Blick auf das, was sich verändert hat, und entdecken Sie, wo die Zukunft dieses Gebietes hinsteuert.

18.01.2021 | Berni

Arbeitsmanagement-Tools
Arbeitsmanagement-ToolsWarum jedes Team Arbeitsmanagement-Tools benötigt. Man schätzt, dass 25% eines durchschnittlichen Mitarbeiter-Tages durch ineffiziente Arbeit vergeudet werden.

11.12.2020 | Berni


 

Aktuelle PHP Scripte

Simple Forum PHP ansehen Simple Forum PHP

If you need simple forum or discussion on your website, then you've come to the right place. Simple Forum PHP is a script that is very easy to install and administer.

28.08.2021 nevenov | Kategorie: PHP/ Forum PHP Software
Formmailer Bootstrap 4

Mit dem Formmailer kann man sich eMails über seine Seite zukommen lassen.

08.07.2021 arne-home | Kategorie: PHP/ Formular
Fehlerseite Bootstrap 4

Bei Aufruf einer nicht existierenden Seite, teilen Sie Besuchern mit einer eigenen Fehlerseite mit, dass die gewünschte Seite nicht gefunden wurde. Die eigene Fehlerseite sollte dasselbe Design wie die Website haben. Zudem sollte ein Link zur Startseite a

04.07.2021 arne-home | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:44 Uhr.