Visualizzazione risultati 1 fino 11 di 11

Discussione: Cancellare riga da pagina

  1. #1
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Question Cancellare riga da pagina

    Ciao a tutti, la domanda è semplicissima e mi serve soltanto una piccola funzione.
    Ho una chat che scrive i dati (quindi i messaggi) non nel db ma in una pagina in php.
    Per scrivere in questa pagina uso questa funzione:
    Codice PHP:
    fwrite($f,$line."\r\n");
    ...e invece per cancellare il valore $f e $line che dovrei fare?
    Grazie.

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Dovresti leggere tutta la pagina e riscriverla (con il flag w nella fopen()) senza la riga che vuoi eliminare.

    Quindi, (per leggere), credo ti sia utile la file().

    Ciao!

    EDIT:

    non avevo visto che il contenuto l'avevi in due variabili. In questo caso, allora forse conviene leggere tutto il file con la file_get_contents(), fare un str_replace() ad esempio in questo modo:

    Codice PHP:
    $nuova_pagina = str_replace(Array($f,$line), file_get_contents('nomefile.php'));
    ...poi con la file_put_contents() aggiorni la pagina...

    Comunque ti consiglio di usare un database.. e se hai il problema delle query puoi usare sqlite. Tempo fa ho fatto una chat con sqlite+ajax carina... E non ci ho impiegato più di qualche ora

    Ciao!
    Ultima modifica di alemoppo : 21-05-2011 alle ore 15.24.49

  3. #3
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Non credo sia un disastro rifare la pagine, visto che sono 26 righe.
    Questa è la pagina che scrive i messaggi:
    Codice PHP:
    <?php
    if (isset($_GET['msg'])){
    if (
    file_exists('msg.html')) {
    $f = fopen('msg.html',"a+");
    } else {
    $f = fopen('msg.html',"w+");
    }
    $nick = isset($_GET['nick']) ? $_GET['nick'] : "Hidden";
    $msg = isset($_GET['msg']) ? htmlspecialchars($_GET['msg']) : ".";
    $line = "<p><span class=\"name\">$nick: </span><span class=\"txt\">$msg</span></p>";
    if (
    $msg == "") {
    exit;
    }
    fclose($f);

    echo
    $line;

    } else if (isset(
    $_GET['all'])) {
    $flag = file('msg.html');
    $content = "";
    foreach (
    $flag as $value) {
    $content .= $value;
    }
    echo
    $content;
    }
    ?>
    E io vorrei fare una pagina di amministrazione dove posso cancellare un messaggio preciso, recuperabile con il GET.
    Grazie.

    EDIT:

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Codice PHP:
    $nuova_pagina = str_replace(Array($f,$line), file_get_contents('nomefile.php'));
    Grazie.
    Quindi in questo modo cancella i valori $f e $line da nomefile.php, giusto?
    E poi come eseguo il comando $nuova_pagina?
    Grazie per la tua disponibilità.
    Ultima modifica di alemoppo : 21-05-2011 alle ore 15.30.05 Motivo: niente UP!

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Come ti ho detto sopra, usando la file_put_contents(), ad esempio:

    Codice PHP:
    file_put_contents('nomefile.php', $nuova_pagina)
    .
    Però guardando il tuo sorgente, $f non è una stringa da cancellare....

    Comunque, ripeto che tramite un database riesci a farlo molto più pulito e semplice...

    Ciao!

  5. #5
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Unhappy

    Grazie, ho fatto qualche modifica e l'ho configurato con il db.
    Funziona tutto tranne l'auto-aggiornamento.
    Allora, qui ho i codice:
    Codice HTML:
        <script language="javascript" type="text/javascript">
          var httpObject = null;
          var link = "";
          var timerID = 0;
          var nickName = "<?php echo $nickname; ?>";
    
          // Get the HTTP Object
          function getHTTPObject(){
             if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
             else if (window.XMLHttpRequest) return new XMLHttpRequest();
             else {
                alert("Your browser does not support AJAX.");
                return null;
             }
          }   
    
          // Change the value of the outputText field
          function setOutput(){
             if(httpObject.readyState == 4){
                var response = httpObject.responseText;
                var objDiv = document.getElementById("result");
                objDiv.innerHTML += response;
                objDiv.scrollTop = objDiv.scrollHeight;
                var inpObj = document.getElementById("msg");
                inpObj.value = "";
                inpObj.focus();
             }
          }
    
          // Change the value of the outputText field
          function setAll(){
             if(httpObject.readyState == 4){
                var response = httpObject.responseText;
                objDiv.scrollTop = objDiv.scrollHeight;
             }
          }
    
          // Implement business logic    
          function doWork(){    
             httpObject = getHTTPObject();
             if (httpObject != null) {
                link = "message.php?nick="+nickName+"&msg="+document.getElementById('msg').value;
                httpObject.open("GET", link , true);
                httpObject.onreadystatechange = setOutput;
                httpObject.send(null);
             }
          }
    
          // Implement business logic    
          function doReload(){    
             httpObject = getHTTPObject();
             var randomnumber=Math.floor(Math.random()*10000);
             if (httpObject != null) {
                link = "message.php?all=1&rnd="+randomnumber;
                httpObject.open("GET", link , true);
                httpObject.onreadystatechange = setAll;
                httpObject.send(null);
             }
          }
    
          function UpdateTimer() {
             doReload();   
             timerID = setTimeout("UpdateTimer()", 5000);
          }
        
        
          function keypressed(e){
             if(e.keyCode=='13'){
                doWork();
             }
          }
        </script>
    Quindi nel tag body richiamo l'aggiornamento:
    Codice HTML:
    <body onLoad="UpdateTimer();">
    Ma è come se non ci fosse.
    Se ti serve posso postarti tutta la pagina PHP.

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Se non riesci ad usare ajax nativo, prova con jquery.ajax().
    Visto che è un framework, devi "includere" nella pagina questo file.

    Ciao!

  7. #7
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Grazie, ma non so come sostituire jquery.ajax() ad ajax.
    Io di ajax non me ne intendo completamente.
    Ho provato ad includere quella pagina con l'ajax nativo ma niente.
    Grazie ancora.

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Ecco un esempio:
    Codice HTML:
    <script src='http://code.jquery.com/jquery-1.6.1.min.js'></script><!-- includo il file jquery -->
    <script language='javascript' type='text/javascript'>
    var variabile = 2;
    function invia()
    {
         $.ajax({
            type: "POST",
            url: "pagina.php",
            data: "dato=valore&altrodato="+variabile,
            success: function(msg){
                   alert("Il server ha risposto:"+msg );
            },
            error: function()
            {
                 alert("Errore");
            }
     });
    }
    </script>
    invocato la funzione invia(), la pagina invierà tramite POST la stringa: "dato=valore&altrodato="+variabile.
    Se va tutto bene, mostra con l'alert la risposta del server (la pagina php), altrimenti da messaggio di errore.

    È molto più semplice di usare ajax nativo

    Ciao!

  9. #9
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Grazie mille.
    Non posso unire jquery con ajax in uno stesso tag <script>, giusto?
    E invece mi puoi dare una dritta per convertire questo per favore?
    Codice:
    <script language="javascript" type="text/javascript">
          function doReload(){    
             httpObject = getHTTPObject();
             var randomnumber=Math.floor(Math.random()*10000);
             if (httpObject != null) {
                link = "message.php?all=1&rnd="+randomnumber;
                httpObject.open("GET", link , true);
                httpObject.onreadystatechange = setAll;
                httpObject.send(null);
             }
          }
    </script>
    Grazie.

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Nel tuo caso, dovresti fare una cosa come:

    Codice HTML:
    <script src='http://code.jquery.com/jquery-1.6.1.min.js'></script><!-- includo il file jquery -->
    <script language='javascript' type='text/javascript'>
    var nickname = "<?= $nick ?>";
    function doWork()
    {
     $.ajax({
    	type: "GET",
    	url: "message.php",
    	data: "nick="+nickName+"&msg="+document.getElementById('msg').value,
    	success: function(msg){
    		var objDiv = document.getElementById("result");
    		objDiv.innerHTML += msg;
    		objDiv.scrollTop = objDiv.scrollHeight;
    		var inpObj = document.getElementById("msg");
    		inpObj.value = "";
    		inpObj.focus();
    	},
    	error: function()
    	{
    		//metti un messaggio di errore
    	}
    });
    }
    
    function doReload()
    {
     $.ajax({
    	type: "GET",
    	url: "message.php",
    	data: "message.php?all=1&rnd="+Math.floor(Math.random()*10000),
    	success: function(msg){
    		   var response = msg;                   //???
    		objDiv.scrollTop = objDiv.scrollHeight;  //???
    	},
    	error: function()
    	{
    		//metti un messaggio di errore
    	}
    });
    }
    
    function UpdateTimer() {
    	doReload();   
    	timerID = setTimeout("UpdateTimer()", 5000);
    }
    
    
    function keypressed(e){
    	if(e.keyCode=='13'){
    	doWork();
    	}
    }
    </script>
    Comunque, non capisco questo:

    Codice:
    // Change the value of the outputText field
          function setAll(){
             if(httpObject.readyState == 4){
                var response = httpObject.responseText;
                objDiv.scrollTop = objDiv.scrollHeight;
             }
          }
    ..Cioè, assegni a response il testo ricevuto e non ci fai nulla.
    Poi, in quella funzione, objDiv non è dichiarato...

    p.s: stiamo andando OT (anzi, ci siamo già andati!)

    Ciao!
    Ultima modifica di alemoppo : 21-05-2011 alle ore 23.58.19

  11. #11
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Grazie, ma adesso non funziona doWork... non mi da nemmeno il messaggio di errore.
    Perdonami, setAll è così:
    Codice:
          function setAll(){
             if(httpObject.readyState == 4){
                var response = httpObject.responseText;
                var objDiv = document.getElementById("result");
                objDiv.innerHTML = response;
                objDiv.scrollTop = objDiv.scrollHeight;
             }
          }
    Ultima modifica di radiodelmomento : 22-05-2011 alle ore 10.58.40

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •