Probleme mit einer SQL-Update Anweisung

Massi
Beiträge: 29
Registriert: Mi 10. Mär 2004, 12:24
Wohnort: Hamburg
Kontaktdaten:

Probleme mit einer SQL-Update Anweisung

Beitrag 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 !";}


?> 
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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
*** make your own tools (wishlist :: thx)
Massi
Beiträge: 29
Registriert: Mi 10. Mär 2004, 12:24
Wohnort: Hamburg
Kontaktdaten:

Beitrag 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
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag 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>";

?>
Massi
Beiträge: 29
Registriert: Mi 10. Mär 2004, 12:24
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Massi »

Hallo phpchris

habe es ausprobiert.

Leider funktioniert es nicht.

Gruß Frank
phpchris
Beiträge: 438
Registriert: Fr 28. Mai 2004, 16:07
Kontaktdaten:

Beitrag 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?
Massi
Beiträge: 29
Registriert: Mi 10. Mär 2004, 12:24
Wohnort: Hamburg
Kontaktdaten:

Beitrag 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
Massi
Beiträge: 29
Registriert: Mi 10. Mär 2004, 12:24
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Massi »

War eine Woche nicht im Lande.
Hat nicht einer eine Idee :idea:
Massi
Beiträge: 29
Registriert: Mi 10. Mär 2004, 12:24
Wohnort: Hamburg
Kontaktdaten:

Beitrag 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
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Massi
Beiträge: 29
Registriert: Mi 10. Mär 2004, 12:24
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Massi »

Hallo Andreas

Leider geht es immer noch nicht.
Es wird immer nur ein Ergebnis eingetragen (zwei hatte er gelistet).
Schade
Gruß Frank
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag 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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Massi
Beiträge: 29
Registriert: Mi 10. Mär 2004, 12:24
Wohnort: Hamburg
Kontaktdaten:

Beitrag 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.
SkyBlader
Beiträge: 303
Registriert: Do 18. Mär 2004, 16:23
Wohnort: Ratingen / NRW
Kontaktdaten:

Beitrag 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
Contenido 4.4.4/4.4.5 - Contenido 4.5.x

Module:sn_multinav für 4.5.x
Massi
Beiträge: 29
Registriert: Mi 10. Mär 2004, 12:24
Wohnort: Hamburg
Kontaktdaten:

Beitrag 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
Gesperrt