Seite 1 von 2

Probleme mit einer SQL-Update Anweisung

Verfasst: Mi 6. Okt 2004, 20:39
von Massi
Ich habe ein Problem mit einer Abfrage aus der SQL-Datenbank.
Es sind drei Module:
Modul 1 -> Abfrage von Tagesdaten
Modul 2 -> Auflistung der Abfrage (mehrere Spiele vom Wochenende)
Es fehlen noch die Ergebnisse, die sind dort einzutragen.
Anschliesend sollen sie mit dem 3.Modul abgeschickt werden.
Modul 3 -> Update-Funktion.

Jetzt mein Problem:
Er Listen im 2.Modul (z.B) zwei Spiele auf. Ich gebe die fehlenden Ergebnisse ein. und schicke sie an das Modul 3.
Leider speichert er nur das letzte (im beispiel, das zweite) Ergebnis.

Ich denke das 2.Modul simmt nicht, da ich das dritte mit einer Darstellung ausgetauscht habe und sah, dass nur das zweite Ergebnis dort war.

Hat es was mit der "while"-Funktion zu tun ?

Wer kan mir helfen, habe schon etliche Bücher durch gewälzt, komme aber nicht auf die Lösung.

Der Primärschlüssel ist: "spielnummer"

Hier die Module:


Modul 1

Code: Alles auswählen

<?php 

echo "<table cellspacing=0 cellpadding=0  width=680 class=sppl20>";
echo "<form action=\"/cms/front_content.php?client=1&lang=1&idcat=154&idart=178\" method=\"post\" name=\"eintragen\">";
echo "<tr>";
echo "<td>Anfangsdatum eingeben<input name='anfang'></td><td>Enddatum eingeben<input name='ende'></td>";
echo "</tr>";
echo "</table>";
echo "<input type=submit class=input2 value=Abfrage starten>";
echo "<input type=reset class=input2 value=Eingabe löschen>";
echo "</form>";
?> 

Modul 2

Code: Alles auswählen

<?php 
echo "<br>";
echo "<br>";

echo "<table cellspacing=0 cellpadding=0  width=680 class=sppl20>";
echo "<tr>";
echo "<td width=680 class=seitentitel>Ergebnisse aus der ".$anfang." ".$ende."Kalenderwoche eingeben/ändern</td>";
echo "</tr>";
echo "</table>";



echo "<table cellspacing=0 cellpadding=0  width=680 class=sppl20>";
echo "<tr>";
echo "
<td width=25 class=sppl15>spiel</td>
<td width=25 class=sppl15>tag</td>
<td width=60 class=sppl15>datum</td>
<td width=50 class=sppl15>zeit</td>
<td width=70 class=sppl15>team</td>
<td width=170 class=sppl15>gegner</td>
<td width=190 class=sppl15>halle</td>
<td width=30 class=sppl15>heim</td>
<td width=5 class=sppl15>-</td>
<td width=30 class=sppl15>gast</td>
";
echo "</tr>";





// DB Classe initialisieren 
$db2 = new DB_Contenido; 


 $sql = "SELECT 
                         tag,
                         kw,
                         spielnummer,
                         verein,
                         datum,
                         zeit,
                         wo,
                         mannschaft,
                         gegner,
                         gegnerzahl,
                         halle,
                         ergebnis_hkredblue,
                         ergebnis_gegner
            FROM
                         con_spielplan
           WHERE
                        datum BETWEEN '$anfang' AND '$ende'  
           ORDER BY
                       verein ASC,
                       datum ASC,
                       zeit ASC";

               $db2->query($sql); 


                while ($db2->next_record()) 
  { 

$spielnummer= $db2->f('spielnummer');
$tag= $db2->f('tag');
$verein= $db2->f('verein');
$datum= date("d.m.y",strtotime($db2->f('datum')));
$wo = $db2->f('wo');
$zeit= date("H:i",strtotime($db2->f('zeit')));
$team= $db2->f('mannschaft'); 
$gegner= $db2->f('gegner'); 
$nr= $db2->f('gegnerzahl'); 
$halle= $db2->f('halle'); 
$ergebnis_hkredblue= $db2->f('ergebnis_hkredblue'); 
$ergebnis_gegner= $db2->f('ergebnis_gegner'); 



echo "<tr>";
echo "<form action=\"/cms/front_content.php?client=1&lang=1&idcat=154&idart=269\" method=\"post\" name=\"eintragen\">
<td width=25 class=sppl15>$spielnummer</td>
<td width=25 class=sppl15>$tag</td>
<td width=60 class=sppl15>$datum</td>
<td width=50 class=sppl15>$zeit</td>
<td width=70 class=sppl15>$team</td>
<td width=170 class=sppl15>$gegner $nr</td>
<td width=190 class=sppl15>$halle</td>
<td width=30 class=sppl15><input class='input-ergebnis' name='ergebnis_hkredblue' value='$ergebnis_hkredblue'></td>
<td width=5 class=sppl15>-</td>
<td width=30 class=sppl15><input class='input-ergebnis' name='ergebnis_gegner' value='$ergebnis_gegner'></td>";
echo "</tr>";

echo "<tr>";
echo "<td colspan=10>
<input type='hidden' name='kw' value='$kw'>
<input type='hidden' name='spielnummer' value='$spielnummer'>
<input type='hidden' name='anfang' value='$anfang'>
<input type='hidden' name='ende' value='$ende'>
</td>";
echo "</tr>";


echo "<tr>";
echo "<td colspan=10>
<input type='submit' class='input2' value='Ergebnisse speichern!'>
<input type='reset' class='input2' value='Eingabe löschen'>
</form>
</td>";
echo "</tr>";
}
echo "</table>";

?> 

Modul 3

Code: Alles auswählen

<?php


$db2 = new DB_Contenido; 
echo "Die Spielergebnisse vom $anfang bis $ende aus der $kw Kalenderwoche";
echo "<br>";
echo "mit den Spielnummern: $spielnummer ";

 

        $sql = "Update
                               con_spielplan
                 Set
                               ergebnis_hkredblue='$ergebnis_hkredblue',
                               ergebnis_gegner='$ergebnis_gegner'
                 Where
                              spielnummer=$spielnummer
                ";

                  $db2->query($sql); 

              
  $anz =mysql_affected_rows ();

if ($anz>0) {

          echo "wurden geändert !";}
else {echo "wurden nicht geändert !";}


?> 

Verfasst: Fr 8. Okt 2004, 15:08
von emergence
ähm...

ad. while
http://at.php.net/manual/de/control-str ... .while.php

in deiner while schleife wird solange ein formular generiert bis keine einträge mehr aus der db geliefert werden...

jeder deiner einträge ist von einem form umklammert...

wenn du etwas innerhalb eines form tags stehen hast und du klickst dort auf absenden wird nur der inhalt innerhalb dieses formtags gepostet...

die anderen beiden bleiben unverändert...
somit liefert affected_row immer 1 reihe

Verfasst: Fr 8. Okt 2004, 19:46
von Massi
Hallo emergence,

habe verstanden.

Nur wie bekomme ich das/die Module so hin, dass er alle aufgelisteten Spiele ändert.

Ich stehe völlig auf dem Schlauch, weil ich seit mehreren Tagen alles mögliche ausprobiere und den Wald vor Bäumen nicht sehe.

Gruß Frank

Verfasst: Fr 8. Okt 2004, 20:30
von phpchris

Code: Alles auswählen


<?php
echo "<br>";
echo "<br>";

echo "<table cellspacing=0 cellpadding=0  width=680 class=sppl20>";
echo "<tr>";
echo "<td width=680 class=seitentitel>Ergebnisse aus der ".$anfang." ".$ende."Kalenderwoche eingeben/ändern</td>";
echo "</tr>";
echo "</table>";



echo "<table cellspacing=0 cellpadding=0  width=680 class=sppl20>";
echo "<tr>";
echo "
<td width=25 class=sppl15>spiel</td>
<td width=25 class=sppl15>tag</td>
<td width=60 class=sppl15>datum</td>
<td width=50 class=sppl15>zeit</td>
<td width=70 class=sppl15>team</td>
<td width=170 class=sppl15>gegner</td>
<td width=190 class=sppl15>halle</td>
<td width=30 class=sppl15>heim</td>
<td width=5 class=sppl15>-</td>
<td width=30 class=sppl15>gast</td>
";
echo "</tr>";





// DB Classe initialisieren
$db2 = new DB_Contenido;


$sql = "SELECT
                         tag,
                         kw,
                         spielnummer,
                         verein,
                         datum,
                         zeit,
                         wo,
                         mannschaft,
                         gegner,
                         gegnerzahl,
                         halle,
                         ergebnis_hkredblue,
                         ergebnis_gegner
            FROM
                         con_spielplan
           WHERE
                        datum BETWEEN '$anfang' AND '$ende'
           ORDER BY
                       verein ASC,
                       datum ASC,
                       zeit ASC";

               $db2->query($sql);

echo "<form action=\"/cms/front_content.php?client=1&lang=1&idcat=154&idart=269\" method=\"post\" name=\"eintragen\">";

                while ($db2->next_record())
  {

$spielnummer= $db2->f('spielnummer');
$tag= $db2->f('tag');
$verein= $db2->f('verein');
$datum= date("d.m.y",strtotime($db2->f('datum')));
$wo = $db2->f('wo');
$zeit= date("H:i",strtotime($db2->f('zeit')));
$team= $db2->f('mannschaft');
$gegner= $db2->f('gegner');
$nr= $db2->f('gegnerzahl');
$halle= $db2->f('halle');
$ergebnis_hkredblue= $db2->f('ergebnis_hkredblue');
$ergebnis_gegner= $db2->f('ergebnis_gegner');



echo "<tr>
<td width=25 class=sppl15>$spielnummer</td>
<td width=25 class=sppl15>$tag</td>
<td width=60 class=sppl15>$datum</td>
<td width=50 class=sppl15>$zeit</td>
<td width=70 class=sppl15>$team</td>
<td width=170 class=sppl15>$gegner $nr</td>
<td width=190 class=sppl15>$halle</td>
<td width=30 class=sppl15><input class='input-ergebnis' name='ergebnis_hkredblue' value='$ergebnis_hkredblue'></td>
<td width=5 class=sppl15>-</td>
<td width=30 class=sppl15><input class='input-ergebnis' name='ergebnis_gegner' value='$ergebnis_gegner'></td>";
echo "</tr>";

echo "<tr>";
echo "<td colspan=10>
<input type='hidden' name='kw' value='$kw'>
<input type='hidden' name='spielnummer' value='$spielnummer'>
<input type='hidden' name='anfang' value='$anfang'>
<input type='hidden' name='ende' value='$ende'>
</td>";
echo "</tr>";
}

echo "<tr>";
echo "<td colspan=10>
<input type='submit' class='input2' value='Ergebnisse speichern!'>
<input type='reset' class='input2' value='Eingabe löschen'>
</td>";
echo "</tr>";

echo "</form></table>";

?>

Verfasst: Fr 8. Okt 2004, 20:48
von Massi
Hallo phpchris

habe es ausprobiert.

Leider funktioniert es nicht.

Gruß Frank

Verfasst: Fr 8. Okt 2004, 21:01
von phpchris
Was passiert denn genau?
DerQuelltext war auch auf die Form-Problematik bezogen.

Sorry, ich sehe gerade, dass ich gar nichts dazu geschrieben habe...

OK, also was für einen Fehler hast du noch?

Verfasst: Fr 8. Okt 2004, 21:27
von Massi
Hallo phpchris

Es passiert wie vorher, dass selbe.

Von den zwei aufgelisteten Spielen, wird nur der letzte in der der Datenbank geschrieben.

Gruß Frank

Verfasst: So 17. Okt 2004, 18:22
von Massi
War eine Woche nicht im Lande.
Hat nicht einer eine Idee :idea:

Verfasst: Di 19. Okt 2004, 20:07
von Massi
Hallo Leute,

bin immer noch nicht weiter.
Es muss doch irgendeine Möklichkeit geben.
Ich möchte doch nur eine Abfrage vom Datum her wo alle Spiele des Tages aufgelistet werden. Dort möchte ich die Ergebnisse eintragen und diese dann in die Datenbank schreiben.

Ich brauche unbedingt Hilfe.
Muss ich die while-Anweisung gegen eine andere eintauschen, oder etwas anders machen.
Es geht hier nicht darum das irgendeiner ein Modul schreibt, ich brauche nur Hilfe.
Gruß Frank

Verfasst: Mi 20. Okt 2004, 08:15
von kummer
du musst einfach das eingangs-form-tag vor die while-schlaufe setzen. und dann natürlich das end-form-tag nach der while-schlaufe platzieren. dann sollte es von mir aus gesehen funktionieren.

gruss,
andreas

Verfasst: Mi 20. Okt 2004, 21:48
von Massi
Hallo Andreas

Leider geht es immer noch nicht.
Es wird immer nur ein Ergebnis eingetragen (zwei hatte er gelistet).
Schade
Gruß Frank

Verfasst: Do 21. Okt 2004, 08:40
von kummer
du musst zuerst versuchen, das problem zu lokalisieren. will heissen, du musst herausfinden, ob dein problem daran liegt, dass nicht alle daten übertragen werden (vom client zum server -> formularproblem) oder ob die aktualisierung der db fehlgeschlagen ist.

ich würde dir deshalb empfehlen, anstatt in die db zu schreiben, vorerst einfach mal ein var_dump($_POST) vorzunehmen und zu schauen, welche werte übertragen worden sind. wenn alle ordentlich übertragen worden sind, wissen wir wenigstens schon, wo wir nach dem problem suchen müssen, respektive wo sicher nicht.

Verfasst: Do 21. Okt 2004, 20:28
von Massi
Hallo Andreas

ich hatte einmal das Update-Modul gegen ein Anzeigeteil gewechselt.
Dort kam zu tage, dass nur das zweite (von Zwei gelisteten) geschrieben wird.
Deshalb gehe ich davon aus das es ein Formular-Problem ist.

Danke, bis hier.

Verfasst: Do 21. Okt 2004, 21:31
von SkyBlader
ist doch vööig klar ...


1. formtag vor und nach der schleife stellen ( wie schon beshrieben )

2. du generierst innerhalb der schleife deine 2 spiele-zeilen ( oder halt dann ggf mehr ) ... jedesmal heißt das entsprechende input fehld glecih ( also pro eintragungstyp ).

Wenn das Formular nun abgesendet wird, wird natürlich nur das zweite ( bzw. lezte ) genommen, da er ja von oben nach unten immer wieder überschreibt ...

Bsp:

1.spiel ... feld -> ergebnis_hkredblue <= 111
2.spiel ... feld -> ergebnis_hkredblue <= 999

Beim Versand des Forms erhält das Modul in der Variabel $ergebnis_hkredblue' den Wert des letzten Spieles ( z.b. 999 ).

Entweder du machst es so, das jedes Spiel nur einzeln erweiterbar ist ... oder du machst folgendes:

1. beim erzeugen der felder als feldname (inputname) 'ergebnis_hkredblue' + id des spieles ----> 'ergebnis_hkredblue_spiel1'

2. im Modul parst du das _POST Arary durch, fischt dir alle ergebnis_hkredblue_XXXX felder raus, splittest 'ergebnis_hkredblue' ab und schreibst dir erstmal den übergeben werdt ü id des spiels zwischen ..

SPIEL_ID
WERT_SPIEL_ID

Danach kannst mit den beiden entsprechend eine UPDATE Anweisung aufbauen und das reinschreiben ..


sry, aber für den genauen Code hab ich atm keine Zeit ..... aber ich hoffe du kommst mit dieser Krobanweisung weiter


Gruß

Stefan

Verfasst: Fr 22. Okt 2004, 14:58
von Massi
Hallo Stefan

Danke für deine Hilfe.
Ich denke ich habe den grundgedanken verstanden. Soetwas habe ich zwar noch nie versucht, werde es aber ausprobieren.
Falls Du noch Zeit haben solltest, könntest Du ein paar Tipps ausführlicher posten?
Dann fang ich einmal an die Bücher zu welzen und einiges Versuchen, danke
Frank