URL: https://www.overclockers.at/coding-stuff/php-mysql-problem_232394/page_1 - zur Vollversion wechseln!
Ich bin grad dabei, Daten aus einer mysql Abfrage in eine Tabelle zu schreiben
Derzeit hab ich mit Kommentaren das Problem ziemlich eingegrenzt.
Code: PHP$name=mysql_result($player_result,$number_rows,"name"); ?> <tr> <td><?php echo $name; ?></td> <?php
ein wird der Table soweit korrekt angezeigt.Code: PHP?> <tr> <td><?php echo $number_rows; ?> </td> <?php
Es kommt kein error? Hast du die PHP errors überhaupt aktiviert? Mit zB.
Code: PHPini_set('display_errors', '1'); error_reporting(E_ALL ^ E_NOTICE);
Zitat von SpikxEs kommt kein error? Hast du die PHP errors überhaupt aktiviert? Mit zB.Code: PHPini_set('display_errors', '1'); error_reporting(E_ALL ^ E_NOTICE);
in der nächsten einkommentierten ZeileCode:PHP Parse error: syntax error, unexpected T_VARIABLE
Code:$number_rows++;
Ohne den genauen Code zu kennen:
Mach einfach mysql_get_assoc und iterier mit einem foreach durch den Resultset. Geht auch mit while -> mysql_get_assoc liefert false wenn kein Ergebnis kommt.
btw. $number_rows hört sich mehr nach einer Anzahl an als nach einer Zählervariable..
mah... Grund für die Meldung war, dass ich direkt nach dem <?php Statement den Kommentar gesetzt hab ( <?php/* ) und die nächste Zeile daher nicht in der php Sektion war
Bin gerade auf ein Verständnisproblem bzgl. Forms gestoßen.
Was passiert, wenn ich keine action setze? Wird dann das Form im selben Script ausgeführt?
Konkret gehts um ein paar Checkboxen, anhand von welchen ich in weiterer Folge die dahinterliegende db updaten möchte. Da mehrere zusätzliche Parameter im Spiel sind möchte ich die Auswertung nicht auslagern (bzw. bin ich dazu derzeit nicht in der Lage).
Kann mir hier jemand ev. gute Howtos liefern? Jene, auf die ich bis jetzt gestoßen bin haben mich leider nicht weitergebracht
"Ausgeführt" wird ein Form gar nicht. Sobald der User auf "Senden" klickt ruft der Browser die URL auf, die im action attribute angegeben ist und sendet die Daten des Formulars als GET oder POST parameter mit.
Wenn du also zum Beispiel eine form.php hast, die das Formular ausgibt, aber auch prozessiert (indem am Anfang im einfachsten Fall bspw.
steht, oder wie auch immer du es dann umsetzt), dann trägst du eben die form.php in der action ein.Code: PHPif( isset( $_POST['submit'] ) { ... }
Zitat von Spikx"Ausgeführt" wird ein Form gar nicht. Sobald der User auf "Senden" klickt ruft der Browser die URL auf, die im action attribute angegeben ist und sendet die Daten des Formulars als GET oder POST parameter mit.
Wenn du also zum Beispiel eine form.php hast, die das Formular ausgibt, aber auch prozessiert (indem am Anfang im einfachsten Fall bspw.steht, oder wie auch immer du es dann umsetzt), dann trägst du eben die form.php in der action ein.Code: PHPif( isset( $_POST['submit'] ) { ... }
Code: PHP<form action="index.php" method="post"> <input type="checkbox" name="participated" value="Yes" /> <input type="checkbox" name="team" value="Yes" /> <input type="submit" name="formSubmit" value="Submit" /> </form> </td> <?php if (isset($_POST['participated']) && $_POST['participated'] == '1') { $id=mysql_result($results_result,$i,"player_id"); if (isset($_POST['team']) && $_POST['team'] == '1') { $team_query="UPDATE T_results SET T_results.team = '2' WHERE T_results.player_id = '$id' && T_results.game_id='$j+1'"; mysql_query($team_query); } else { $team_query="UPDATE T_results SET T_results.team = '1' WHERE T_results.player_id = '$id' && T_results.game_id='$j+1'"; mysql_query($team_query); } }
Im Formular schreibst du "value=Yes", aber im PHP-Code prufest du "... == "1". Apfel != Birne. Aendere 'value="Yes"' in 'value="1"'.
Das Beispiel ist aber nicht komplett, oder? Du verwendest $i, $j, $id die ich nirgends definiert sehe.
Vergiss dich das du anfaellig fuer SQL Injection bist, wenn du Variablen ohne Filterung/Pruefung direkt in SQL-Statements verwendest. Bessere waere es ueberhaupt, PDO und prepared Statements zu verwenden.
Ah, ich dachte, dass true, 1 und yes generell denselben output liefern. Mal schauen, obs an dem liegt.
Das ganze ist natürlich nur ein Auszug vom Code. Die zahlervariablen verwende ich hier kurz zuvor schon zum auslesenderselben rows, die ich updaten möchte. Insofern besitzen diese den 'richtigen' Wert.
Die Problematik von SQL injections ist mir bekannt, dass ich diese durch prepared Statements verhindern kann allerdings nicht. Brauch ich zwar erst später (derzeit lese ich noch keine strings ein), aber danke für den Link
Habe jetzt 'YES' gegen '1' getauscht und die Abfrage funktioniert soweit. Allerdings bin ich kurz darauf auf ein Logikproblem beim Update Statement gestoßen, dass ich mir nicht erklären kann:
Code: PHP<form action="index.php" method="post"> <input type="checkbox" name="participated" value="1" /> <input type="checkbox" name="team" value="1" /> <input type="submit" name="formSubmit" value="Submit" /> </form> </td> <?php if (isset($_POST['participated']) && $_POST['participated'] == '1') { mysql_connect('localhost',$username,$password); @mysql_select_db($database) or die( "Unable to select database"); $player=mysql_result($results_result,$i,"player_id"); $game=$j+1; if (isset($_POST['team']) && $_POST['team'] == '1') { $team_query="UPDATE T_results SET T_results.team = '1' WHERE T_results.player_id = '$player' && T_results.game_id='$game'"; } else { $team_query="UPDATE T_results SET T_results.team = '0' WHERE T_results.player_id = '$player' AND T_results.game_id='$game'"; } mysql_query($team_query); }
Jain, siehe folgendes Beispiel:Zitat von schizoAh, ich dachte, dass true, 1 und yes generell denselben output liefern. Mal schauen, obs an dem liegt.
Das Beispiel ist noch einfach und klar, PHP hat aber leider sehr inkonsistente implizite Type Juggling rules. Ich lege dir PHP Type Juggling und vor allem PHP Type Comparison ans Herz. Obwohl alles dokumentiert ist, kenne diese Seiten oft nicht mal Erfahrene PHP-Entwickler ...Code:$ php -r 'var_dump( true == "1", "Yes" == "1", 1 == "1");' bool(true) bool(false) bool(true)
Wenn du einzelne Werte schon angesehen hast und es dir keinen Rueckschluss gibt, musst du weiter gehen und z.B. das gesamte SQL-Statement ausgeben und schauen ob das so richtig ist/Sinn macht.ZitatCode: PHP$game=$j+1; if (isset($_POST['team']) && $_POST['team'] == '1') { $team_query="UPDATE T_results SET T_results.team = '1' WHERE T_results.player_id = '$player' && T_results.game_id='$game'"; } else { $team_query="UPDATE T_results SET T_results.team = '0' WHERE T_results.player_id = '$player' AND T_results.game_id='$game'"; }
Bei obrigen Queries werden sämtliche Rows upgedatet. Tausche ich $game gegen $j+1 aus (eben den Wert, welchen ich $game übergebe) werden sämtliche Rows mit player_id = '$player' upgedatet.
Gebe ich hier einen bestimmten Integer Wert ein wird nur eine einzelne Row upgedatet (was mein gewünschtes Ziel ist). Gebe ich $game aus wird jener Wert angezeigt, mit welchem ich zuvor $game testweise ersetzt habe.
ist das ziemlich sicher falsch, da in der WHERE Bedingung dann ein Integer-Operation stehen wird welche als String Comparison verwendet wird, z.B. "... WHERE T_results.game_id = '1+1'" wird nicht matchen wo game_id = 2 ist, sondern 1 ... weil SELECT 1 = '1+1' -> 1 ergeben wird (oder anders rum: SELECT 2 = '1+1' -> 0). Aber vielleicht habe ich deine letzte Frage auch nicht ganz verstanden, vielleicht kannst es anders noch formulieren, falls du nicht weiterkommst.Code: PHP$team_query = ".... WHERE .. T_results.game_id = '$j+1'"
Zitat aus einem Post von RektalIch hab einen Teil nicht ganz verstanden, aber wenn du im SQL-Statement schreiben wuerdest:ist das ziemlich sicher falsch, da in der WHERE Bedingung dann ein Integer-Operation stehen wird welche als String Comparison verwendet wirdCode: PHP$team_query = ".... WHERE .. T_results.game_id = '$j+1'"
Code: HTML<input type="hidden" name="part[]" value="0" /> <input type="checkbox" name="part[]" checked="checked" value="1" />
ausgeben möchte erhalte ich nur NULLCode: PHPvar_dump($_POST['part']);
erhalte ich nur die Fehlermeldungen "Undefined index" und "Invalid argument supplied for foreach()"Code: PHPforeach($_POST['part'] as $asdf) { echo $asdf; }
Ganz den Durchblick hab ich noch nicht aber bezüglich des "muss wissen auch wenn checkbox nicht gecheckt ist"-Problem: ist relativ einfach, wenn du einen Index für die einzelnen checkboxen verwendest; dann weißt du beim Submit ganz genau welche und welche nicht gecheckt war. In Code ausgedrückt schreibst du:
Du verwendest beim Generieren des HTML und beim Auswertung des "parts"-Arrays die selben Indizes und wenn bei Auswertung des parts-Array einer nicht gesetzt ist, weiß du dass diese Checkbox eben nicht gesetzt war. Das hört sich vielleicht umständlich an, ist aber relativ einfach.Code:<input name="parts[4]" value="1"...
Zitat von RektalZitat von EarthshakerDie Einfachheit von Apple und die Offenheit von Android kombiniert.
ZitatAd warum $_POST["parts"] NULL ist: nach deiner Analyse fällt mir nichts direkt ein. Hast du dir schon "var_dump($_POST);" angeschaut? Vielleicht ists ja woanders reingerutschtHast eh alle Errors aufgedreht und sicherheitshalber ins PHP error.log geschaut?
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025