Bitte um richtigstellung von PHP-Script

  • PHP

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von KlyX.

    Bitte um richtigstellung von PHP-Script

    Hey, Hab ein PHP Script geschrieben, jedoch funktioniert es nicht ganz...

    Spoiler anzeigen

    PHP-Quellcode

    1. <?php
    2. session_start();
    3. $pin = $_SESSION['Pin'];
    4. $Frage1 = $_POST['Frage1'];
    5. $Frage2 = $_POST['Frage2'];
    6. $Frage3 = $_POST['Frage3'];
    7. $Frage4 = $_POST['Frage4'];
    8. $Frage5 = $_POST['Frage5'];
    9. $Frage6 = $_POST['Frage6'];
    10. $Frage7 = $_POST['Frage7'];
    11. $Frage8 = $_POST['Frage8'];
    12. $Frage9 = $_POST['Frage9'];
    13. $Frage10 = $_POST['Frage10'];
    14. $Frage11 = $_POST['Frage11'];
    15. $Frage12 = $_POST['Frage12'];
    16. $Frage13 = $_POST['Frage13'];
    17. $Frage14 = $_POST['Frage14'];
    18. $Frage15 = $_POST['Frage15'];
    19. $Frage16 = $_POST['Frage16'];
    20. $Frage17 = $_POST['Frage17'];
    21. $Frage18 = $_POST['Frage18'];
    22. $Frage19 = $_POST['Frage19'];
    23. $Frage20 = $_POST['Frage20'];
    24. $Frage21 = $_POST['Frage21'];
    25. $Frage22 = $_POST['Frage22'];
    26. $Frage23 = $_POST['Frage23'];
    27. $Frage24 = $_POST['Frage24'];
    28. $Frage25 = $_POST['Frage25'];
    29. $Frage26 = $_POST['Frage26'];
    30. $Frage27 = $_POST['Frage27'];
    31. $Frage28 = $_POST['Frage28'];
    32. $Frage29 = $_POST['Frage29'];
    33. $Frage30 = $_POST['Frage30'];
    34. $Frage31 = $_POST['Frage31'];
    35. $Frage32 = $_POST['Frage32'];
    36. $Frage33 = $_POST['Frage33'];
    37. $Frage34 = $_POST['Frage34'];
    38. $Frage35 = $_POST['Frage35'];
    39. $Frage36 = $_POST['Frage36'];
    40. $verbindung = mysql_connect("X", "X", "X")
    41. or die ("Fehler");
    42. mysql_select_db("X")
    43. or die ("Fehler");
    44. $abfrage = "SELECT * FROM Befragung_Transporte WHERE Pin= '$Pin' AND Merker='0'";
    45. $result = mysql_query($abfrage);
    46. if(mysql_num_rows($result)==0)
    47. echo "Fehler";
    48. else
    49. {
    50. $query = "UPDATE Befragung_Transport SET Merker = '1', F1 = '$Frage1', F2 = '$Frage2', F3 = '$Frage3', F4 = '$Frage4', F5 = '$Frage5', F6 = '$Frage6', F7 = '$Frage7', F8 = '$Frage8', F9 = '$Frage9', F10 = '$Frage10', F11 = '$Frage11', F12 = '$Frage12', F13 = '$Frage13', F14 = '$Frage14', F15 = '$Frage15', F16 = '$Frage16', F17 = '$Frage17', F18 = '$Frage18', F19 = '$Frage19', F20 = '$Frage20', F21 = '$Frage21', F22 = '$Frage22', F23 = '$Frage23', F24 = '$Frage24', F25 = '$Frage25', F26 = '$Frage26', F27 = '$Frage27', F28 = '$Frage28', F29 = '$Frage29', F30 = '$Frage30', F31 = '$Frage31', F32 = '$Frage32', F33 = '$Frage33', F34 = '$Frage34', F35 = '$Frage35', F36 = '$Frage36' WHERE Pin = Pin = '$pin'";
    51. if(!mysql_query($query,$verbindung))
    52. {
    53. die('ERROR: ' . mysql_error());
    54. }
    55. echo "erfolgreich"
    56. }
    57. ?>



    es kommt einfach garkeine meldung... ich glaub ich hab die if abfragen falsch verschachtelt ?
    Salü windowsfan

    1. Aktivier die Fehlerausgabe von PHP. Damit du auch einen Fehler zurückbekommst, wenn du das Script aufrufst

    PHP-Quellcode

    1. error_reporting(E_ALL);
    2. ini_set('display_errors', TRUE);

    (korrigiert - ist korrekter ;))

    2. sind deine Queries nicht richtig umgesetzt. Hier ein Beispiel aus deinem Script:

    PHP-Quellcode

    1. $abfrage = "SELECT * FROM Befragung_Transporte WHERE Pin= '$Pin' AND Merker='0'";


    $abfrage ist ja ein String, den du mit dem " und " anfängst und abschliesst. ' ' sind die String-Indikatoren beim SQL-Query. Wenn du also Pin= '$Pin' angibst, sucht MySQL in der DB nach dem Wert $Pin anstatt nach dem Inhalt der Variablen. Du musst die Variable als ausserhalb des Strings anhängen. Weiterhin bitte an das Semikolon am Ende einer Abfrage denken ;).
    Um das zu verdeutlichen hier die korrigierte Fassung:

    PHP-Quellcode

    1. $abfrage = "SELECT * FROM Befragung_Transporte WHERE Pin= '" . $Pin' . "' AND Merker='0';";


    EDIT:
    deine If-Abfrage ist auch nicht ganz korrekt. Hinter das

    PHP-Quellcode

    1. echo "erfolgreich"
    gehört ein Semikolon und ich würde das IF fertig machen, sprich ein Else einfügen --> sonst kriegst du eine Fehlermeldung und ein erfolgreich ausgegeben - das wär sinnlos :D. So wärs meiner Ansicht nach korrekt:

    PHP-Quellcode

    1. if(!mysql_query($query,$verbindung))
    2. {
    3. die('ERROR: ' . mysql_error());
    4. }
    5. else
    6. {
    7. echo "erfolgreich";
    8. }


    Ich hoffe, das hilft dir weiter.

    Gruss,
    KlyX
    Chris' Weblog - Mein Blog rund um Vieles :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KlyX“ ()

    Also ganz korrekt ist der Syntax der Folgende:

    PHP-Quellcode

    1. error_reporting(E_ALL);
    2. ini_set('display_errors', TRUE);


    wobei letztere Zeile nicht auf allen Systemen erlaubt ist... kann auch entfernt werden, ist aber hilfreich ;)

    EDIT: versuch auch mal die obigen Anpassungen vorzunehmen (übrigens bei allen SQL-Abfragen in dem Script, ich hab nur eine testweise korrigiert). Wenns dann schon läuft, ist das Errorreporting nicht nötig, ich würds aber während dem Entwickeln und Debugging imm anbehalten.
    Chris' Weblog - Mein Blog rund um Vieles :D
    Hallo KlyX,

    das mit den Variablen im Query muss gehn, ich hab so schon eine menge scripts *zusammenkopiert* und es ist immer alles tatellos gegangen, jedoch auch wenn ich

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);

    Mache bekomm ich nichts angezeigt...
    Hab ich evt. einen Fehler in der ersten If abfrage,

    die sollte zuerst prüfen, ob der PIN in der DB steht, wenn er drin steht soll er eben die Felder updaten.
    sonst einen fehler ausgeben.
    Hm okay, ich kenns nur auf die Methode mit dem Anhängen der Varible.
    Du könntest es allfällig mit einer Ausgabe deiner Query via echo testen... damit du sicher bist, dass die Query korrekt ist ;).

    Und jetzt wo dus sagst... schau mal bei der ersten IF-Abfrage fehlen ja auch die geschweiften klammern ;)

    So dürfte es wohl korrekter sein, denke ich.

    PHP-Quellcode

    1. if(mysql_num_rows($result)==0)
    2. {
    3. echo "Fehler";
    4. }
    5. else
    6. {


    Dass du keine Ausgabe bekommst find ich seltsam...
    Chris' Weblog - Mein Blog rund um Vieles :D
    Um Manawyrns Antwort noch etwas zu erweitern: Die Abfragen könnte man alternativ über PDO machen oder zumindest

    PHP-Quellcode

    1. mysql_real_escape_string()
    .
    Was natürlich auch ginge wäre eine Positiv- und Negativ-Liste. Das ist aber dann schwierig, wenn du nicht so genau weisst, was seitens Benutzer so geschickt werden kann bzw. darf ;)
    Chris' Weblog - Mein Blog rund um Vieles :D
    Danke leute !
    nun funtkioniert es, jedoch hab ich noch 1 ganz kleines problem.

    Der Kunde bekommt eine Woche nach seinem AUftrag einen Link zur Umfrage die schon den pin beinhaltet (bla.at?pin=XXX) es wird gecheckt, ob der in der DB vorhanden ist, wenn ja - dann wird er zur Umfrage.html weitergeleitet und der pin wird in der session gespeichert.

    Wenn er die Umfrage dann gemacht hat, dann wird er zur auswertung.php weitergeleitet - diese lest die session und nimmt die pin variable und update den datensatz, wo er den Pin findet.

    Aber wäred der weiterleitung zum html dokument geht der pin verloren... muss man dem im html dokument zwischenspeichern?

    mfg
    Du musst die Variable über jedes Dokument mitgeben. Sprich, du musst sie an die Auswertung weitergeben und dann auch wieder an das HTML-Dokument.
    Hätt ich jetzt so aus dem Stegreif gesagt.
    Chris' Weblog - Mein Blog rund um Vieles :D