• User Attivo

    Url troppo lungo da errore

    Buongiorno!
    Sto creando un piccolo forum tutto in php e MySQL(Simple Net Forum)...
    Adesso avrei un piccolo problemino...
    Questo è l'errore:

    Request-URI Too Large

    The requested URL's length exceeds the capacity limit for this server. request failed: URI too long

    Apache/1.3.34 Server at localhost.local Port 80

    E adesso vi spiego...
    Praticamente, quando un utente crea un nuovo topic, ho messo anche il bottoncino Anteprima il quale apre una piccola finestra e li l'utente può vedere l'anteprima del suo messaggio...
    Ecco il codice:

    [PHP]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML><HEAD><TITLE>Crea un nuovo topic</TITLE>
    <link rel="stylesheet" type="text/css" href="cssindex/stile.css">
    <script language="JavaScript" type="text/javascript">
    <!--
    function verifica(form) {
    if( confirm("Sei sicuro di voler continuare?") ) {
    return true;
    }
    return false;
    }

    // -->
    </script>
    </head>
    <BODY>
    <center>

    <?php
    ####Controlla se ci sono i parametri get adeguati###
    if(!isset($_GET['fs']) ||
    !isset($_GET['t']) ||
    !is_numeric($_GET['t']) ||
    !is_numeric($_GET['fs'])) die ("Il link non contiene parametri GET adeguati, potresti averli modificati.</center></body></html>");
    require("config.php");

    Recupero il titolo del forum dal DB

    $query2 = @mysql_query("SELECT * FROM snf_main WHERE snf_id = '" . $_GET[fs] . "'")or die("Fatal ERROR: ".mysql_error());
    if(mysql_num_rows($query2) != 1)die("Fatal ERROR: Il forum non esiste!");
    $result2 = @mysql_fetch_array($query2);

    if(isset($_COOKIE['username'])){
    ?>
    <form method="post" action="snf_post_topic.php" name = "form1">
    <table border="0" width="95%" height="455">

    <tbody>
    

    <tr>
    <td width="100%" colspan="2" height="131">
    <?php
    if(isset($_COOKIE['username'])) echo "Benvenuto, <b>".$_COOKIE['username']."</b>!  <a href = "snf_logout.php">LogOut</a>";
    ?> <center>
    <ul id="menu">
    <li><a href="index.php" target="_self" title="Home!" >Home</a></li>
    <li><a href="loginpage.php" target="_self" title="Login!">Login</a></li>
    <li><a href="register.php" target="_self" title="Registrati!" >Registrazione</a></li>
    <li><a href="#" target="_self" title="Profilo!">Profilo</a></li>
    <li><a href="#" target="_self" title="Frequently Asked Questions!">FAQ</a></li>
    </ul> </center>

    </td>
    

    </tr>

    <tr>
        <td colspan="2" align="left" width="50%" height="66">
        <div class="hr"><hr /></div>
        <h3><font color="#3366ff" face="Trebuchet MS" size="3"><?php echo "<a href=\"index.php\">Main</a> »";
    

    echo "<a href="show.php?fs=$_GET[fs]">";
    echo $result2[snf_title]."</a> » Nuovo topic";
    ?></font></h3>

        </td>
    
      </tr>
    
      <tr>
    
        <td align="left" width="50%" bgcolor="#D2EFE2" height="30"><font face="Trebuchet MS" size="2">Titolo</font></td>
    
        <td align="left" width="53%" bgcolor="#D2DEF6" height="30"><font face="Trebuchet MS" size="2"><input name="topic_title" class="textbox" type="text" size="20" ></font><font color="#3366FF" face="Trebuchet MS" size="4">*</font></td>
    
      </tr>
    
      <tr>
    
        <td align="left" width="50%" bgcolor="#D2DEF6" height="45" valign = "top"><font face="Trebuchet MS" size="2">Contenuto</font></td>
    
        <td align="left" width="53%" bgcolor="#D2EFE2" height="45"><font face="Trebuchet MS" size="4"><textarea name="topic_contents" class="textbox" size="20" rows="20" cols="90%"></textarea><font color="#3366FF">*</font></font></td>
        <input name = "topic_user" value = "<?php echo $_COOKIE['username']; ?>" type = "hidden">
      </tr>
    
      <tr>
    
        <td colspan="2" align="left" width="50%" height="66">
         <div class="hr"><hr /></div>
         <p align="center">
         <input value="Submit" onClick="return verifica(this);" name="submit" class="button" type="submit" title="Registrati!">
         <input value="Anteprima" name="preview" class="button" type="submit" title="Anteprima"
         onClick = "a = document.form1.topic_title.value; b = document.form1.topic_contents.value;window.open('preview.php?title='+escape(a)+'&amp;topic_contents='+escape(b)+'','Anteprima','width=600,height=600 ,toolbar=no, location=no,status=yes,menubar=no,scrollbars=yes,resizable=no');return false;">
         </td>
    
      </tr>
    
    
      <tr>
    
        <td colspan="2" align="left" width="50%" height="65">
    
          <p>&nbsp;</p>
          <p>&nbsp;</p>
        </td>
    
      </tr>
    
    </tbody>
    

    </table>

    </form></center>
    <?php
    } else {
    echo "Effettua il <a href = "loginpage.php">LogIn</a> oppure <a href = "register.php">Registrati</a>";
    }

    ?>
    <p><BR></BODY></HTML>[/PHP]
    Ed ecco la stringa incriminata:

     <input value="Anteprima" name="preview" class="button" type="submit" title="Anteprima"
             onClick = "a = document.form1.topic_title.value; b = document.form1.topic_contents.value;window.open('preview.php?title='+escape(a)+'&amp;topic_contents='+escape(b)+'','Anteprima','width=600,height=600 ,toolbar=no, location=no,status=yes,menubar=no,scrollbars=yes,resizable=no');return false;">
    

    Praticamente, questa piccola porzione di javascript preleva il testo dai due campi(snf_title e snf_contents)e crea un parametro get del tipo:
    previw.php?title=titolodelcampo&contents=contenuto

    Se il contenuto è troppo lungo(e quindi di conseguenza l'url diventa praticamente luuuunghissimo) mi da l'errore che ho riportato sopra...avete dei consigli?:(:(


  • User Attivo

    Invece di aprire il popup passando i valori tramite querystring, aprilo ed inviaci i dati con una form con il metodo POST.

    In ogni caso, non è un problema di PHP ma di HTTP/Javascript.


  • User Attivo

    Si potrebbe anche risolvere mettendo nella pagina che riceve i dati post(ovvero snf_post_topic.php) questo codice:
    <?php
    if(isset($_POST['submit'])) {
    inserisci i dati
    }elseif(isset($_POST['anteprima')){
    vedi l'anteprima
    }

    ?>

    giusto?


  • User Attivo

    Perché non ti ispiri al forum gt?

    Quando clicchi su anteprima si ricarica la pagina mostrando l'anteprima e subito sotto nuovamente il form per le modifiche...