2017-10-28 5 views
1

ContextPHP POST-Request-Debugging

Ich habe folgende POST-Pipeline:

index.php -> submit.php -> Liste/item/neu/index.php

index.php hat eine normale Form mit einer Aktion = "submit.php" Eigenschaft. submit.php entscheidet, wo die folgende Postanforderung von einer bestimmten Logik basierend auf der POST-Variablen Inhalt gesendet werden soll.

Das Problem ist, dass ich keinen erfolgreichen Weg gefunden habe, diese Pipeline zu debuggen. Irgendwo versagt etwas, und ich würde ein frisches Augenpaar schätzen.

Was ich versucht habe

  • ich versucht habe, laufende Liste/item/neu/index.php mit Dummy-Parameter durch eine regelmäßige GET-Anfrage. Die Datenbank wird erfolgreich aktualisiert.
  • Ich habe versucht, submit.php (unten) mit Dummy-Parameter durch eine reguläre GET-Anfrage laufen. Der Wert des Ergebnisses $ ist nicht falsch, was darauf hinwies die file_get_contents Anfrage erfolgreich war, aber es ist Wert ist der wörtliche Inhalt der Liste/neu/index.php anstelle der generierte Inhalte, die ich erwarte, dass seine das Ergebnis

    echo $ db-> neu ($ hash, $ content) & & $ db-> update_content_key ($ hash);

Hier ist submit.php

$url = 'list/new/index.php'; 
if($test){ 
    $content = $_GET["i"]; 
    $hash = $_GET["h"]; 
    }else{ 
    $content = $_POST["item"]["content"]; 
    $hash = $_POST["list"]["hash"]; 
    } 
$data = array(
     'item'=>array('content' => $content), 
     'list'=>array('hash' => $hash) 
     ); 
$post_content = http_build_query($data); 
$options = array(
    'http' => array(
     'header' => "Content-type: application/x-www-form-urlencoded\r\n". 
     "Content-Length: " . strlen($post_content) . "\r\n", 
     'method' => 'POST', 
     'content' => $post_content 
     ) 
    ); 
$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 
if ($result === FALSE) { 
    echo "error"; 
    //commenting out for testing. should go back to index.php when it's done 
    //header('Location: '.$root_folder_path.'list/?h='.$hash.'&f='.$result); 
    } 
else{ 
    var_dump($result); 
    //commenting out for testing. should go back to index.php when it's done 
    //header('Location: '.$root_folder_path.'list/?h='.$hash.'&f='.str_replace($root_folder_path,"\n","")); 
    } 

Und hier ist die Liste/item/neu/index.php

$db = new sql($root_folder_path."connection_details.php"); 
if($test){ 
    $content = $_GET["i"]; 
    $hash = $_GET["h"]; 
    }else{ 
    $content = $_POST["item"]["content"]; 
    $hash = $_POST["list"]["hash"]; 
    } 
// insert into DB, use preformatted queries to prevent sqlinjection 
echo $db->new($hash,$content) && $db->update_content_key($hash); 

Das Schlimmste daran ist, dass ich nicht weiß, genug von PHP, um dies effektiv zu debuggen (ich hatte es tatsächlich zu einem bestimmten Zeitpunkt arbeiten, aber ich habe nicht richtig dann ...).

Alle Kommentare und Anregungen sind willkommen. Ich schätze deine Zeit.

+1

Was bedeutet der '$ _POST' im submit.php aussehen (' var_dump ($ _ POST) 'am Anfang der Datei einreichen)? –

+0

@NMoeini Wie erwartet. Hier ist die dump: 'Array (size = 2) 'item' => Array (size = 1) 'content' => string 'test' (Länge = 4) 'Liste' => Array (Größe = 1) 'Hash' => String '47f563d25d9b5993bbf6b666dc512684f6806c60' (Länge = 40) ' – ebichuhamster

Antwort

0

Verstanden.

Ich bin nicht sicher, was den Fehler nennen ich mache (oder, was tatsächlich hinter den Kulissen geht), aber es war die folgende:

auf der POST-Anfrage Ich war mit

$url='list/item/new/index.php' 

verwenden ich das ganze uRL-Schema:

$url = 'https://example.com/list/item/new/index.php';`