2010-09-29 10 views
1

Je suis perplexe. Je fais une forme de base en PHP, et cela fonctionne parfaitement sur une installation de bureau Ubuntu 10.04 courante, mais échoue lors de l'exécution sur le serveur web, qui utilise Ubuntu 9.10 avec, pour autant que je peux voir, pas de différences évidentes dans la configuration. Une variable de session ($ _SESSION ['id']) est définie sur 1 sur la page précédente, puis le script est composé de:
(1) session_start();
(2) Requête SQL pour extraire un enregistrement de la table db en fonction de la valeur de session de id (select * from products où id = $ _ SESSION ['id'])
(3) Une fonction à imprimer le formulaire lui-même, avec un message d'erreur si nécessaire. Le formulaire est juste quelques boutons radio nommés "opinion", avec un message d'erreur à utiliser si aucun d'eux n'a été pressé.
(4) Le code:Le script de formulaire PHP fonctionne sur le bureau, mais pas sur le serveur

if (!isset($_POST['submit']))// if the Submit button has not been pressed ... 
{ 
    showpage($error=false); // ... show the form 
} 
else 
{ 
    if (!isset($_POST['opinion'])) // if Submit was pressed, but no radio button ... 
    { 
     showpage($error=true); // ... reprint the form with the error message 
    } 
    else // if both radio button and Submit were pressed 
    { 
     $_SESSION['id']=$_SESSION['id']+1; // increment the session variable 
     $_SESSION['opinion']=$_POST['opinion']; // convert the radio button value into a session variable 
     header("Location: myratings.php"); // present a new page which will be based on the incremented id 
    } 
} 

Sur le bureau, appuyez sur Soumettre prend, comme prévu, à travers tous les éléments de la table, présentant une nouvelle forme à chaque fois. Mais sur le serveur, en appuyant sur Envoyer produit une page vierge, et ce n'est que lorsque vous appuyez sur le bouton Précédent que le nouveau formulaire attendu apparaît.

Sur le bureau, le message d'erreur disparaît lorsque vous appuyez sur le bouton d'option, puis sur Envoyer, mais sur le serveur, il semble continuer à apparaître s'il a été utilisé une seule fois. .

Ceci est probablement quelque chose de simple, mais je ne peux pas voir directement plus :-(Si la raison est évidente aveuglante à tout le monde, s'il vous plaît me mettre hors de ma misère

Mise à jour:.

OK - voici le code de la page (opinions.php):.

<?php 
session_start(); 
header("Content-type: text/html; charset=utf-8"); 
include("includes/header.php"); 

$id=$_SESSION['id']; 

$sql="select * from products where id=$id"; 
$result=pg_query($db_handle,$sql) or die("Can't get the items"); 
while ($row=pg_fetch_object($result)) 
{ 
    $id=$row->id; 
    $product=$row->product; 
} 

function showpage($product, $error=false) 
{ 
    echo '<form action="opinions.php" method="POST">'; 
    echo '<table width="600" align="center">'; 
    echo '<tr><td colspan="3" class="ratings"><h3>How often would you use $product?</h3></td></tr>'; 
    echo '<tr>'; 
    echo '<td width="200" class="ratings">Never<input type="radio" name="opinion" value="1"></td>'; 
    echo '<td width="200" class="ratings">Sometimes<input type="radio" name="opinion" value="2"></td>'; 
    echo '<td width="200" class="ratings">Often<input type="radio" name="opinion" value="3"></td>'; 
    echo '</tr>'; 
    if ($error) {echo '<tr><td colspan="3" class="ratingserror">Please press a raddio button!</td></tr>';} 
    echo '<tr><td colspan="3" class="ratings"><input type="submit" name="submit" value="Continue"></td></tr>'; 
    echo '</table>'; 
    echo '</form>'; 
} 

if (!isset($_POST['submit'])) 
{ 
    showpage($product, $error=false); 
} 
else 
{ 
    if (!isset($_POST['opinion'])) 
    { 
     showpage($product, $error=true); 
    } 
    else 
    { 
     $_SESSION['id']=$_SESSION['id']+1; 
     header("Location: opinions.php"); 
    } 
} 

include("includes/footer.php"); 
?> 

header.php et footer.php ne contiennent que des meubles page

+1

Rien d'évident pour moi, mais il pourrait aider à voir ce que fait 'showpage', ainsi que ce qui pourrait être dans votre journal d'erreur –

Répondre

0

De votre description - vous ne pouvez pas définir le $_SESSION['id'] avant d'appeler session_start(). Peut-être poster tout votre code pour la page. Jetez également print_r($_SESSION) dans certains endroits pour des tests supplémentaires.

+0

Ajouté ci-dessus - le point sur le '$ _SESSION ['id']' est un bon onem mais alors pourquoi ça marche localement? – donnek

Questions connexes