Gegen Bilderklau - Das Original

Registrierung Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Statistik Chat Karte Zur Startseite

Gegen Bilderklau - Das Original » Design, Website, Copyright » Homepagehilfe » Homepagehilfe - Archiv » [PHP & MySQL] Ergebniseintragung / Lebendgewinnsumme » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Thema ist geschlossen
Zum Ende der Seite springen Ergebniseintragung / Lebendgewinnsumme
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Remember Remember ist weiblich
ehemals Cousquer


images/avatars/avatar-52037.png

Dabei seit: 01.04.2010
Beiträge: 630

Ergebniseintragung / Lebendgewinnsumme Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallöchen (:
Ich hab mal wieder eine mittelschwere Krise wegen PHP und ich würde mich riesig freuen, wenn mir da mal kurz jemand einen kleinen Tipp geben könnte smile

Ich möchte die Lebendgewinnsumme automatisch ändern lassen (mithilfe von addieren) und ich möchte in einer anderen Tabelle das Ergebnis ändern lassen. Das Formular sieht folgendermaßen aus:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
<?php
include("checkuser.php");
?>

<html>
<head>
<title>Gut Brynne</title>
<link rel="stylesheet" href="http://brynne.bplaced.net/style.css">
</head>

<h2>Ergebnis eintragen</h2>

<form method="POST" action="ergebniseintragen_send.php">
  <table class="border" width="100%">
    
    <tr>
      <td width="50%">Turnier-ID</td>
      <td width="50%"><select name="id" size="1" maxlength="255">

<?php

$id $_GET["id"];

// Verbindung zur Datenbank
include("datenbank.php");

// Hier die Abfrage übersetzt: RUFE * (alle Spalten) VON der Tabelle Pferd auf WO in der Spalte Besitzer nichts steht.
$Ergebnis mysql_query("SELECT * FROM ergebnis WHERE id = '$id'");


// Wenn das Ergebnis 0 ist gib aus
     if (@mysql_num_rows($Ergebnis) == 0) {
    echo "Es gibt momentan keine turnierreiterlosen Pferde.";
    }

    else {
// Sonst zeige an .. 
        while($Data mysql_fetch_array($Ergebnis)) {
        // Der Name wird ausgegeben .. die HTML Elemente sind frei anpassbar- Vor " muss aber immer ein \. 
        // Der Steckbriefname lautet Pferd. Diesem wird jetzt die ID des Pferdes angehängt, damit die Datei nachher weiß, welche Daten sie abfragen muss.
        // Ihr könnt die ganzen anderen Infos auch angeben .. sprich $Data[Jahrgang] oder $Data[Geschlecht]
         echo "<option>$Data[id]</option>";
    }
}
?>


</select></td></tr>


    <tr>
      <td width="50%">Pferd</td>
      <td width="50%"><select name="pferd" size="1" maxlength="255">

<?php

$id $_GET["id"];

// Verbindung zur Datenbank
include("datenbank.php");

// Hier die Abfrage übersetzt: RUFE * (alle Spalten) VON der Tabelle Pferd auf WO in der Spalte Besitzer nichts steht.
$Ergebnis mysql_query("SELECT * FROM ergebnis WHERE id = '$id'");


// Wenn das Ergebnis 0 ist gib aus
     if (@mysql_num_rows($Ergebnis) == 0) {
    echo "Es gibt momentan keine turnierreiterlosen Pferde.";
    }

    else {
// Sonst zeige an .. 
        while($Data mysql_fetch_array($Ergebnis)) {
        // Der Name wird ausgegeben .. die HTML Elemente sind frei anpassbar- Vor " muss aber immer ein \. 
        // Der Steckbriefname lautet Pferd. Diesem wird jetzt die ID des Pferdes angehängt, damit die Datei nachher weiß, welche Daten sie abfragen muss.
        // Ihr könnt die ganzen anderen Infos auch angeben .. sprich $Data[Jahrgang] oder $Data[Geschlecht]
         echo "<option>$Data[pferd]</option>";
    }
}
?>


</select></td></tr>


    <tr>
      <td width="50%">Ergebnis (nur Zahl angeben!)</td>
      <td width="50%"><input type="int" name="ergebnis" size="26" maxlength="5"></td>
    </tr>

    <tr>
      <td width="50%">Geldpreis (nur Zahl angeben!)</td>
      <td width="50%"><input type="int" name="preis" size="26" maxlength="5"></td>
    </tr>



    </table>

  <p>&nbsp;</p>
  <div align=center><p><input type="submit" value="Abschicken" name="B1"><input type="reset" value="Zurücksetzen" name="B2"></p></div>
</form>


</html>


und die ergebnissenden.php

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
<?php
include('checkuser.php')
?>

<html>
<head>
<title>Gut Brynne</title>
<link rel="stylesheet" href="http://brynne.bplaced.net/style.css">
</head>

<?php
//Datenbankverbindung einfügen!
   include('datenbank.php');

//Variablen festlegen
   $id $_POST['id'];
   $ergebnis =  $_POST["ergebnis"];
   $preis $_POST["preis"];
   $pferd $_POST["pferd"];


//wenn eine der Variablen name, pass oder mail leer ist, dann [if]
   if( ($ergebnis=='') ) {
//Ausgabe der Fehlermeldung
      echo "<b>Error</b>
      Bitte gebe eine Platzierung ein!<br><br>
      <a href="javascript:%20history.back(-2)" target="_self">Zurück</a>";
//wenn alles richtig ist:
   } else {

$abfrage "SELECT lebendgewinnsumme FROM pferd WHERE name = '$pferd'";
$ergebnis mysql_query($abfrage);
$Data mysql_fetch_array($ergebnis);

   $geld $Data[lebendgewinnsumme];
   $summe $geld $preis;

$aendern "(UPDATE `pferd` SET lebendgewinnsumme = '$summe' WHERE name = '$pferd') AND (UPDATE `ergebnis` SET ergebnis = '$ergebnis', preis = '$preis' WHERE id = '$id')";
$update mysql_query($aendern);

      if($update==true) {
         echo "<h2>Eintrag erfolgreich</h2>
         Das Ergebnis wurde eingetragen.";
      } else {
         echo "Fehler!";
         include('ergebniseintragen.php');
      }
   }
//PHP schließen
?>


</html>


Nur leider zeigt er mir jetzt jedes mal einen Fehler an, also werd ich wohl irgendwo wieder schmarrn gebaut haben, aber ich finds irgendwie nich. :/

Es wäre wirklich sehr nett & ich würde mich auch total freuen, wenn bitte mal kurz jemand drüberschauen würde und mir dann meine Nase auf den Fehler drücken würde. ;D


LG, Josi

__________________

21.09.2010 21:50 Remember ist offline E-Mail an Remember senden Beiträge von Remember suchen Nehmen Sie Remember in Ihre Freundesliste auf Fügen Sie Remember in Ihre Kontaktliste ein
kext kext ist männlich
»Ich bin ein HAL 9000 Supercomputer.«


images/avatars/avatar-51950.png

Dabei seit: 28.11.2008
Beiträge: 119
Herkunft: Planet Erde

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Es wäre schön, wenn du zumindest mal die Fehlermeldung hier posten würdest. Fehler bzw. schlampigen Code sehe ich an mehreren Stellen. Auch ein Link wäre extrem hilfreich, da man sich das doch nur eingeschränkt vorstellen kann.

__________________

22.09.2010 00:02 kext ist offline E-Mail an kext senden Beiträge von kext suchen Nehmen Sie kext in Ihre Freundesliste auf
Remember Remember ist weiblich
ehemals Cousquer


images/avatars/avatar-52037.png

Dabei seit: 01.04.2010
Beiträge: 630

Themenstarter Thema begonnen von Remember
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das ist ja die Crux an der Sache. Es gibt keine Fehlermeldung. Er zeigt mir nur "Fehler!" an, weil ich das im Formular ja so angegeben habe, wenn der Eintrag nicht gefunzt hat.

Die Seite ist http://brynne.bplaced.net/ und da hab ich mal zu Anschauungszwecken einen Testaccount gemacht mit gleich einer unrealen Nennung (nicht existierendes Pferd und bla). Name des Accs. test - PW: test.

__________________

22.09.2010 20:27 Remember ist offline E-Mail an Remember senden Beiträge von Remember suchen Nehmen Sie Remember in Ihre Freundesliste auf Fügen Sie Remember in Ihre Kontaktliste ein
kext kext ist männlich
»Ich bin ein HAL 9000 Supercomputer.«


images/avatars/avatar-51950.png

Dabei seit: 28.11.2008
Beiträge: 119
Herkunft: Planet Erde

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Füg mal nach der Zeile »echo "Fehler!";« folgendes ein:

php:
1:
echo mysql_errno().": ".mysql_error();
Das sollte dir eine wesentlich detailliertere Fehlermeldung liefern und an welcher Stelle der Fehler liegt.

Um andere Fehlerquellen auszuschließen könntest du auch den Code von unsauberen Stellen etwas bereinigen.

Es heißt z.B. »$Data["lebendgewinnsumme"]« und nicht »$Data[lebendgewinnsumme]«.

Außerdem gehören in SQL-Statements alle Tabellen- und Feldnamen in Backticks, also:

code:
1:
2:
(UPDATE `pferd` SET `lebendgewinnsumme` = '$summe' WHERE `name` = '$pferd')
AND (UPDATE `ergebnis` SET `ergebnis` = '$ergebnis', `preis` = '$preis' WHERE id = '$id')
Außerdem werden Variablen nicht direkt in Strings geschrieben, sondern mit den Strings per Punkt verbunden, also:

php:
1:
2:
$aendern "(UPDATE `pferd` SET `lebendgewinnsumme` = '".$summe."' WHERE `name` = '".$pferd."')
AND (UPDATE `ergebnis` SET `ergebnis` = '".$ergebnis."', `preis` = '".$preis."' WHERE id = '".$id."')";
Außerdem werden Variablen, die aus Benutzereingaben stammen (GET und POST) grundsätzlich maskiert, um SQL-Injections zu verhindern, also:

php:
1:
2:
3:
4:
$aendern "(UPDATE `pferd` SET `lebendgewinnsumme` = '".mysql_real_escape_string($summe)."'
WHERE `name` = '".mysql_real_escape_string($pferd)."')
AND (UPDATE `ergebnis` SET `ergebnis` = '".mysql_real_escape_string($ergebnis)."', `preis` = '".mysql_real_escape_string($preis)."'
WHERE id = '".mysql_real_escape_string($id)."')";
Dementsprechend auch die anderen Stellen im Code.

__________________

22.09.2010 21:12 kext ist offline E-Mail an kext senden Beiträge von kext suchen Nehmen Sie kext in Ihre Freundesliste auf
Remember Remember ist weiblich
ehemals Cousquer


images/avatars/avatar-52037.png

Dabei seit: 01.04.2010
Beiträge: 630

Themenstarter Thema begonnen von Remember
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Dankeschön für deine liebe Auseinanderfieselung (:
Der Code sieht jetzt folgendermaßen aus:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
<?php
include('checkuser.php')
?>

<html>
<head>
<title>Gut Brynne</title>
<link rel="stylesheet" href="http://brynne.bplaced.net/style.css">
</head>

<?php
//Datenbankverbindung einfügen!
   include('datenbank.php');

//Variablen festlegen
   $id $_POST["id"];
   $ergebnis =  $_POST["ergebnis"];
   $preis $_POST["preis"];
   $pferd $_POST["pferd"];


//wenn eine der Variablen name, pass oder mail leer ist, dann [if]
   if( ($ergebnis=='') ) {
//Ausgabe der Fehlermeldung
      echo "<b>Error</b>
      Bitte gebe eine Platzierung ein!<br><br>
      <a href="javascript:%20history.back(-2)" target="_self">Zurück</a>";
      echo mysql_error().": ".mysql_error();
//wenn alles richtig ist:
   } else {

$abfrage "SELECT lebendgewinnsumme FROM pferd WHERE name = '$pferd'";
$ergebnis mysql_query($abfrage);
$Data mysql_fetch_array($ergebnis);

   $geld $Data["lebendgewinnsumme"];
   $summe $geld $preis;

$aendern "(UPDATE `pferd` SET `lebendgewinnsumme` = '".mysql_real_escape_string($summe)."' WHERE `name` = '".mysql_real_escape_string($pferd)."') AND (UPDATE `ergebnis` SET `ergebnis` = '".mysql_real_escape_string($ergebnis)."', `preis` = '".mysql_real_escape_string($preis)."' WHERE `id` = '".mysql_real_escape_string($id)."')";
$update mysql_query($aendern);

      if($update==true) {
         echo "<h2>Eintrag erfolgreich</h2>
         Das Ergebnis wurde eingetragen.";
      } else {
         echo "Fehler!";
         include('ergebniseintragen.php');
         echo mysql_error().": ".mysql_error();
      }
   }
//PHP schließen
?>


</html>


und ich kriege diese Fehlermeldung:

Warning: mysql_real_escape_string() expects parameter 1 to be string, resource given in /users/brynne/www/texte/reiter/ergebniseintragen_send.php on line 39

Das wäre dann diese Zeile:

php:
1:
$aendern "(UPDATE `pferd` SET `lebendgewinnsumme` = '".mysql_real_escape_string($summe)."' WHERE `name` = '".mysql_real_escape_string($pferd)."') AND (UPDATE `ergebnis` SET `ergebnis` = '".mysql_real_escape_string($ergebnis)."', `preis` = '".mysql_real_escape_string($preis)."' WHERE `id` = '".mysql_real_escape_string($id)."')";


Und vielleicht bin ich echt blöd oder ich bin heut einfach zu vernebelt und fertig, aber ich find da einfach nix :/

__________________

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Remember: 22.09.2010 21:44.

22.09.2010 21:37 Remember ist offline E-Mail an Remember senden Beiträge von Remember suchen Nehmen Sie Remember in Ihre Freundesliste auf Fügen Sie Remember in Ihre Kontaktliste ein
kext kext ist männlich
»Ich bin ein HAL 9000 Supercomputer.«


images/avatars/avatar-51950.png

Dabei seit: 28.11.2008
Beiträge: 119
Herkunft: Planet Erde

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Der Fehler tritt scheinbar schon früher auf, denn $summe ist ja augenscheinlich kein String, was es sein sollte, sondern ein wie auch immer geartetes Objekt (mit var_dump() könnte man da mehr herausfinden).

Das liegt möglicherweise daran, dass schon die vorherige Abfrage scheitert.

Du kannst es ja zum Testen einfach mal so machen (ab Zeile 32):

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
$abfrage "SELECT `lebendgewinnsumme` FROM `pferd` WHERE `name` = '".mysql_real_escape_string($pferd)."'";
$ergebnis mysql_query($abfrage);
$Data mysql_fetch_array($ergebnis);
$geld $Data["lebendgewinnsumme"];
$summe $geld $preis;
echo "<pre>";
var_dump($Data);
var_dump($geld);
var_dump($summe);
echo "</pre>";


__________________

22.09.2010 23:22 kext ist offline E-Mail an kext senden Beiträge von kext suchen Nehmen Sie kext in Ihre Freundesliste auf
Remember Remember ist weiblich
ehemals Cousquer


images/avatars/avatar-52037.png

Dabei seit: 01.04.2010
Beiträge: 630

Themenstarter Thema begonnen von Remember
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Uff, damit kann ich jetzt gar nix mehr anfangen. Rausgekommen ist das hier

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
array(2) {
  [0]=>
  string(1) "0"
  ["lebendgewinnsumme"]=>
  string(1) "0"
}
string(1) "0"
int(500)


Das heißt jetzt was? xD

__________________

23.09.2010 18:52 Remember ist offline E-Mail an Remember senden Beiträge von Remember suchen Nehmen Sie Remember in Ihre Freundesliste auf Fügen Sie Remember in Ihre Kontaktliste ein
Leila Leila ist weiblich
Mitglied


Dabei seit: 09.02.2005
Beiträge: 12.987

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

zeigt dir, welcher Variablentyp es jeweils ist, wie lang es ist und was drinsteht Augenzwinkern
23.09.2010 19:26 Leila ist offline E-Mail an Leila senden Homepage von Leila Beiträge von Leila suchen Nehmen Sie Leila in Ihre Freundesliste auf
Remember Remember ist weiblich
ehemals Cousquer


images/avatars/avatar-52037.png

Dabei seit: 01.04.2010
Beiträge: 630

Themenstarter Thema begonnen von Remember
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Okay. Und was kann ich dann damit bewirken oder so? großes Grinsen
Ich hatte nämlich mittlerweile aufgegeben, möchte es aber jetzt wieder probieren.

Der Code seiht mittlerweile so aus:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
<?php
include('checkuser.php')
?>

<html>
<head>
<title>Gut Brynne</title>
<link rel="stylesheet" href="http://brynne.bplaced.net/style.css">
</head>

<?php
//Datenbankverbindung einfügen!
   include('datenbank.php');

//Variablen festlegen
   $id $_POST["id"];
   $ergebnis =  $_POST["ergebnis"];
   $preis $_POST["preis"];
   $pferd $_POST["pferd"];
   $reiter $_POST["reiter"];





//wenn eine der Variablen name, pass oder mail leer ist, dann [if]
   if( ($ergebnis=='') ) {
//Ausgabe der Fehlermeldung
      echo "<b>Error</b>
      Bitte gebe eine Platzierung ein!<br><br>
      <a href="javascript:%20history.back(-2)" target="_self">Zurück</a>";
//wenn alles richtig ist:
   } else {

$abfrage "SELECT lebendgewinnsumme FROM pferd WHERE name='$pferd'";
$ergebnis mysql_query($abfrage);
$Data mysql_fetch_array($ergebnis);
$geld $Data[lebendgewinnsumme];
$summe $geld $preis;

echo "<pre>";
var_dump($Data);
var_dump($geld);
var_dump($summe);
echo "</pre>";

$abfrage2 "SELECT konto FROM mitglieder WHERE name='$reiter'";
$ergebnis2 mysql_query($abfrage2);
$Data mysql_fetch_array($ergebnis2);
$kontostand $Data[konto];
$konto $kontostand $preis;

echo "<pre>";
var_dump($Data);
var_dump($kontostand);
var_dump($konto);
echo "</pre>";

$aendern "(UPDATE `ergebnis` SET `ergebnis` = '".mysql_real_escape_string($ergebnis)."', `preis` = '".mysql_real_escape_string($preis)."' WHERE `id` = '".mysql_real_escape_string($id)."') AND (UPDATE `pferd` SET `lebendgewinnsumme` = '".mysql_real_escape_string($summe)."' WHERE `name` = '".mysql_real_escape_string($pferd)."') AND (UPDATE `mitglieder` SET `konto` = '".mysql_real_escape_string($konto)."' WHERE `name` = '".mysql_real_escape_string($reiter)."')";
$update mysql_query($aendern);

      if($update==true) {
         echo "<h2>Eintrag erfolgreich</h2>
         Das Ergebnis wurde eingetragen und die Gewinne wurden verrechnet.";
      } else {
         echo "Fehler!";
         echo mysql_error().": ".mysql_error();
         include('ergebniseintragen.php');
      }
   }
//PHP schließen
?>


</html>


Und die Fehlermeldung, die ich bekomme, wenn ich versuche ein Ergebnis einzutragen sieht folgendermaßen aus (inklusive diesem vardump gedöns)

Zitat:
array(2) {
[0]=>
string(1) "0"
["lebendgewinnsumme"]=>
string(1) "0"
}
string(1) "0"
int(400)

array(2) {
[0]=>
string(1) "0"
["konto"]=>
string(1) "0"
}
string(1) "0"
int(400)


Warning: mysql_real_escape_string() expects parameter 1 to be string, resource given in /users/brynne/www/texte/reiter/ergebniseintragen_send.php on line 59
Fehler!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 `ergebnis` SET `ergebnis` = '', `preis` = '400' WHERE `id` = '401') AND (' at line 1: 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 `ergebnis` SET `ergebnis` = '', `preis` = '400' WHERE `id` = '401') AND (' at line 1




Würde mich freuen, wenn es schlussendlich klappen würde (:

__________________

05.10.2010 15:22 Remember ist offline E-Mail an Remember senden Beiträge von Remember suchen Nehmen Sie Remember in Ihre Freundesliste auf Fügen Sie Remember in Ihre Kontaktliste ein
kext kext ist männlich
»Ich bin ein HAL 9000 Supercomputer.«


images/avatars/avatar-51950.png

Dabei seit: 28.11.2008
Beiträge: 119
Herkunft: Planet Erde

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du kannst nicht einfach mehrere UPDATE-Befehle mit AND verbinden. Das geht mit einem Semikolon.
php:
1:
2:
3:
4:
5:
6:
7:
$aendern "UPDATE `ergebnis` SET `ergebnis` = '".mysql_real_escape_string($ergebnis)."', 
`preis` = '".mysql_real_escape_string($preis)."' 
WHERE `id` = '".mysql_real_escape_string($id)."';
UPDATE `pferd` SET `lebendgewinnsumme` = '".mysql_real_escape_string($summe)."' 
WHERE `name` = '".mysql_real_escape_string($pferd)."';
UPDATE `mitglieder` SET `konto` = '".mysql_real_escape_string($konto)."' 
WHERE `name` = '".mysql_real_escape_string($reiter)."')";
Probier mal diesen Code aus. Da hier auch jedes mysql_real_escape_string in seiner eigenen Zeile steht, können wir auch herausfinden, welches Probleme macht.

__________________

05.10.2010 21:57 kext ist offline E-Mail an kext senden Beiträge von kext suchen Nehmen Sie kext in Ihre Freundesliste auf
Oli
Server-Administrator


Dabei seit: 13.06.2010
Beiträge: 1.540

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hi,

das Trennen per Semikolon geht AFAIK aus Sicherheitsgründen (bei PHP) nicht. Man muss/sollte für jeden Query mysql_query neu benutzen.

LG
05.10.2010 22:50 Oli ist offline Beiträge von Oli suchen Nehmen Sie Oli in Ihre Freundesliste auf
kext kext ist männlich
»Ich bin ein HAL 9000 Supercomputer.«


images/avatars/avatar-51950.png

Dabei seit: 28.11.2008
Beiträge: 119
Herkunft: Planet Erde

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von Oli
Hi,

das Trennen per Semikolon geht AFAIK aus Sicherheitsgründen (bei PHP) nicht. Man muss/sollte für jeden Query mysql_query neu benutzen.

LG


Du hast recht, mittels mysql_query geht es in der Tat nicht. Dadurch werden atomare Queries wie hier natürlich deutlich erschwert. Schließlich soll im Falle eines Fehlers keine einzige der drei Queries ausgeführt werden, um Dateninkonsistenz zu verhindern. Eine andere Lösung, als die drei Queries einfach ins Blaue zu schießen, habe ich leider gerade auch nicht zur Hand.

Man könnte natürlich die Datenbank einfach umstrukturieren und die Lebendgewinnsumme zur Laufzeit aus allen Ergebnissen mittels Aggregatfunktionen berechnen. Redundanz in Datenbanken ist ja ohnehin böse.

__________________

06.10.2010 00:06 kext ist offline E-Mail an kext senden Beiträge von kext suchen Nehmen Sie kext in Ihre Freundesliste auf
Remember Remember ist weiblich
ehemals Cousquer


images/avatars/avatar-52037.png

Dabei seit: 01.04.2010
Beiträge: 630

Themenstarter Thema begonnen von Remember
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Also, ich habs jetzt einfach mal mit deiner Version gemacht, kext, und da kommt dann diese Fehlermeldung raus:

Zitat:
array(2) {
[0]=>
string(1) "0"
["lebendgewinnsumme"]=>
string(1) "0"
}
string(1) "0"
int(245)

array(2) {
[0]=>
string(1) "0"
["konto"]=>
string(1) "0"
}
string(1) "0"
int(245)


Warning: mysql_real_escape_string() expects parameter 1 to be string, resource given in /users/brynne/www/texte/reiter/ergebniseintragen_send.php on line 59
Fehler!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 `pferd` SET `lebendgewinnsumme` = '245' WHERE `name` = 'Cherokee\\\'s Ca' at line 4: 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 `pferd` SET `lebendgewinnsumme` = '245' WHERE `name` = 'Cherokee\\\'s Ca' at line 4


Hmm, denkt ihr, dass es einfacher wäre, wenn ich die Lebendgewinnsumme so ausgeben lassen würde, dass es nicht bei der Tabelle "Pferd" steht, sondern alle Ergebnisse, wo das Pferd halt den ausgegebenen Namen hat, zusammengezählt werden? Aber das is auch kompliziert, oder?

Mit der Sicherheit ... mei, ich denke, dass keiner absolut großes Interesse daran haben wird einen kleinen dummen VRH zu hacken. Ist ja nicht wirklich interessant großes Grinsen Deshalb wärs auch nicht allzu schlimm, wenn die Sicherheit nicht 100%ig garantiert wäre. Denke ich. Ich möcht es einfach nur schaffen, dass die Lebendgewinnsumme, Ergebnis, Platz und das Benutzerkonto gleichzeitig aktualisiert werden. Aber sie sträuben sich ja leider noch xD

__________________

06.10.2010 15:11 Remember ist offline E-Mail an Remember senden Beiträge von Remember suchen Nehmen Sie Remember in Ihre Freundesliste auf Fügen Sie Remember in Ihre Kontaktliste ein
Oli
Server-Administrator


Dabei seit: 13.06.2010
Beiträge: 1.540

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von kext
Dadurch werden atomare Queries wie hier natürlich deutlich erschwert. Schließlich soll im Falle eines Fehlers keine einzige der drei Queries ausgeführt werden, um Dateninkonsistenz zu verhindern. Eine andere Lösung, als die drei Queries einfach ins Blaue zu schießen, habe ich leider gerade auch nicht zur Hand.

Erschwert, aber nicht unmöglich gemacht. Man kann eine Transaktion durchführen, ähnlich hier (ungetestet):
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
$fehler=0//Variable zur Fehlerüberprüfung
mysql_query("BEGIN"); //Transaktion starten
mysql_query("UPDATE ...") or $fehler++; //bei Fehler wird $fehler um 1 erhöht ...
mysql_query("UPDATE ...") or $fehler++;
mysql_query("UPDATE ...") or $fehler++;
if($fehler 0){ //im Falle eines Fehlers ($fehler beinhaltet eine Zahl größer 0)
  mysql_query("ROLLBACK"); //Änderungen verwerfen
} else { // ansonsten..
  mysql_query("COMMIT"); //Änderungen bestätigen
}
EDIT: Ich vergaß zu erwähnen, dass man hierfür das InnoDB-Format verwenden muss.


@Remember
Du versuchst $ergebnis in die Datenbank zu schreiben, dieses ist jedoch ein MySQL-Rückgabewert:
php:
1:
$ergebnis mysql_query($abfrage);
Was genau versuchst du, in die Tabellenspalte "ergebnis" zu schreiben?


LG

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Oli: 06.10.2010 15:39.

06.10.2010 15:31 Oli ist offline Beiträge von Oli suchen Nehmen Sie Oli in Ihre Freundesliste auf
Remember Remember ist weiblich
ehemals Cousquer


images/avatars/avatar-52037.png

Dabei seit: 01.04.2010
Beiträge: 630

Themenstarter Thema begonnen von Remember
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Was ist denn das InnoDB-Format, wenn ich mal so schlau fragen darf? großes Grinsen

Aah. Na klar! Ich hab gar nicht darauf geachtet, dass ich ergebnis 2x hab Augen rollen Ich möchte den erreichten platz eintragen lassen. Das müsste ja dann einfach funktionieren, wenn ich das ergebnis, das der platz ist, umnenne, oder?

__________________

06.10.2010 19:00 Remember ist offline E-Mail an Remember senden Beiträge von Remember suchen Nehmen Sie Remember in Ihre Freundesliste auf Fügen Sie Remember in Ihre Kontaktliste ein
kext kext ist männlich
»Ich bin ein HAL 9000 Supercomputer.«


images/avatars/avatar-51950.png

Dabei seit: 28.11.2008
Beiträge: 119
Herkunft: Planet Erde

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

InnoDB ist ein Format, in dem MySQL seine Daten ablegt. Wenn du in phpMyAdmin zum Beispiel eine Tabelle erstellst kannst du unten bei Tabellenformat unter anderem auch InnoDB auswählen. Voreingestellt ist MyISAM.

Und zu $ergebnis: Du kannst eins davon einfach umbenennen.

Zitat:
Original von Remember
Hmm, denkt ihr, dass es einfacher wäre, wenn ich die Lebendgewinnsumme so ausgeben lassen würde, dass es nicht bei der Tabelle "Pferd" steht, sondern alle Ergebnisse, wo das Pferd halt den ausgegebenen Namen hat, zusammengezählt werden? Aber das is auch kompliziert, oder?

Das wäre in der Tat die beste Lösung. So wie du es im Moment machst, könnten z.B. zwei Ergebnisse mit den Werten 300 und 500 vorhanden sein, als Summe ist aber 950 eingetragen. Wenn du die Summe gar nicht erst speicherst, sondern jedesmal aus den Ergebnissen berechnest, können solche Widersprüche nicht entstehen.

__________________

06.10.2010 20:03 kext ist offline E-Mail an kext senden Beiträge von kext suchen Nehmen Sie kext in Ihre Freundesliste auf
Remember Remember ist weiblich
ehemals Cousquer


images/avatars/avatar-52037.png

Dabei seit: 01.04.2010
Beiträge: 630

Themenstarter Thema begonnen von Remember
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von kext
Das wäre in der Tat die beste Lösung. So wie du es im Moment machst, könnten z.B. zwei Ergebnisse mit den Werten 300 und 500 vorhanden sein, als Summe ist aber 950 eingetragen. Wenn du die Summe gar nicht erst speicherst, sondern jedesmal aus den Ergebnissen berechnest, können solche Widersprüche nicht entstehen.


Hmm. Ich dachte, dass er es so machen würde, dass er die aktuelle Lebendgewinnsumme ausgibt, dann das Preisgeld aufaddiert und dann updatet. Da hab ich anscheinend gerade einen Denkfehler, weil ich komm grad nicht drauf wie du das auf 300+500=950 kommst großes Grinsen großes Grinsen

Wie könnte ich das denn ausgeben lassen? Also wie ich ein Ergebnis bekomme, wäre mir klar, aber ich möchte ja, dass dann alle Preisgelder von diesem Pferd zusammengezählt werden & dann erst ausgegeben werden.

__________________

06.10.2010 20:37 Remember ist offline E-Mail an Remember senden Beiträge von Remember suchen Nehmen Sie Remember in Ihre Freundesliste auf Fügen Sie Remember in Ihre Kontaktliste ein
Oli
Server-Administrator


Dabei seit: 13.06.2010
Beiträge: 1.540

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hi,

ich denke, kext meinte, dass du das Ergebnis gar nicht speicherst, sondern jedes Mal mit MySQL errechnen lässt, in etwa so:

code:
1:
SELECT SUM(lebendgewinnsumme) FROM `pferd` WHERE ...


Das würde das Speichern eines Ergebnisses überflüssig machen, weil MySQL selbst die Summe bildet und dir diese zurückgibt.
06.10.2010 21:04 Oli ist offline Beiträge von Oli suchen Nehmen Sie Oli in Ihre Freundesliste auf
kext kext ist männlich
»Ich bin ein HAL 9000 Supercomputer.«


images/avatars/avatar-51950.png

Dabei seit: 28.11.2008
Beiträge: 119
Herkunft: Planet Erde

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das ist es ja gerade. 300 + 500 ist ja eben nicht 950, aber es könnt so in der Datenbank stehen (meistens wird da wohl 300 + 500 = 800 stehen^^). So etwas nennt man Redundanz, man speichert einen Wert (hier 800) mehrfach ab.

Das ist in Datenbanken unerwünscht, weil man darauf achten muss, dass die Daten konsistent bleiben und dort eben nicht 300 + 500 = 950 steht. Wenn wir einfach die 800 aus der Datenbank ersatzlos streichen, müssen wir bei jedem Aufruf der Seite aus 300 und 500 den Wert berechnen, können aber sicher sein, dass er auch stimmt.

Du hast ja eine Tabelle »ergebnisse«, in der das Preisgeld für jedes Turnier jedes Pferdes drinsteht. Beim Pferd brauchst du die Lebendgewinnsumme deshalb gar nicht zu speichern, weil sie indirekt auch in der Ergebnistabelle steht. Du musst sie nur jedes mal berechnen. Dafür kannst du eine Query benutzen, die so ähnlich ist, wie diese hier:
code:
1:
SELECT `pferdid`, SUM(`preis`) AS `lebendgewinnsumme` FROM `ergebnisse` WHERE `pferdid` = '3' GROUP BY `pferdid`
Im Feld »lebendgewinnsumme« steht dann die Lebendgewinnsumme vom Pferd mit der ID 3.

__________________

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von kext: 06.10.2010 21:08.

06.10.2010 21:06 kext ist offline E-Mail an kext senden Beiträge von kext suchen Nehmen Sie kext in Ihre Freundesliste auf
Remember Remember ist weiblich
ehemals Cousquer


images/avatars/avatar-52037.png

Dabei seit: 01.04.2010
Beiträge: 630

Themenstarter Thema begonnen von Remember
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Okay, Lebendgewinnsumme wird jetzt perfekt angezeigt.
Danke danke dankeschön <3

Nur leider zeigt er jetzt die einzelnen Turniere nicht mehr an. Also gar nicht mehr. Der entsprechende Codeteil wäre:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
<div class="head" style="float:left; width:650px; margin-left:20px; margin-bottom:0px;"><h3>Erfolge (bis einschliesslich 5. Platz)</h3></div>
<div class=stute align=center</a>Bisherige Lebendgewinnsumme:
<?php
    $abfrage="SELECT `pferd`, SUM(`preis`) AS `lebendgewinnsumme` FROM `ergebnis` WHERE `pferd` = '".addslashes($Data[name])."' GROUP BY `pferd`";
    $ergebnis mysql_query($abfrage) or die("$abfrage<hr />" .mysql_error());
     while($Data mysql_fetch_array($ergebnis)){
     echo"<b>$Data[lebendgewinnsumme]</b>v€";
}
?></div><br>

<table width=100% style="border-collapse:no-collapse; border:0px solid red;">
<tr> <td class="hengst" colspan=2><div align=center><b>Ergebnis</b></div></td>  <td class="hengst"><div align=center><b>Prüfung</b></div></td>   <td class="hengst"><div align=center><b>Austragungsort</b></div></td>   <td class="hengst"><div align=center><b>Reiter</b></div></td></tr>
<?php
    $abfrage="SELECT * FROM `ergebnis` WHERE pferd = '".addslashes($Data[name])."' AND (ergebnis = '1' OR ergebnis = '2' OR ergebnis = '3' OR ergebnis = '4' OR ergebnis = '5') order by ergebnis ASC";
    $ergebnis mysql_query($abfrage) or die("$abfrage<hr />" .mysql_error());
     while($Data mysql_fetch_array($ergebnis)){
     echo"<tr align=center> <td class="stute"><b>$Data[ergebnis].</b></td> <td class="stute">$Data[preis]v€</td> <td class="stute">$Data[pruefung]</td> <td class="stute"><a href="$Data[hofaddy]" target="blank">$Data[hofname]</a></td>  <td class="stute">$Data[reiter]</td> </tr>";
}
?></table></div></div></div><br><br><br>


Ich hatte doch eigentlich den einen PHP-Teil geschlossen. Normalerweise müsste das doch passen, oder?

__________________

06.10.2010 21:34 Remember ist offline E-Mail an Remember senden Beiträge von Remember suchen Nehmen Sie Remember in Ihre Freundesliste auf Fügen Sie Remember in Ihre Kontaktliste ein
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Thema ist geschlossen
Gegen Bilderklau - Das Original » Design, Website, Copyright » Homepagehilfe » Homepagehilfe - Archiv » [PHP & MySQL] Ergebniseintragung / Lebendgewinnsumme

Impressum

Forensoftware: Burning Board, entwickelt von WoltLab GmbH