• ModSenior

    Invece di:
    [php]
    mysql_query($modificannunci) or die("fallita");
    [/php]
    Metti:
    [php]
    mysql_query($modificannunci) or die("fallita".mysql_error());
    [/php]
    Cosi da visualizzare l'errore.


  • User

    Notice: Undefined index: annuncio in C:\xampp\htdocs\prova\modifica_annunci_2.php on line 60

    Notice: Undefined index: annuncio in C:\xampp\htdocs\prova\modifica_annunci_2.php on line 61
    fallitaYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

    Mi dice questo


  • ModSenior

    Non arrivano quelle variabili POST che tu utilizzi, ci sarà un altro nome impostato nel form.


  • User

    @Thedarkita said:

    Non arrivano quelle variabili POST che tu utilizzi, ci sarà un altro nome impostato nel form.

    Non riesco a modificare i dati...anche con le modifiche...ecco il codice modificato...

    [PHP]<?php
    //inizio la sessione utente
    session_start();
    //includo i parametri del db
    include("varDB.inc");
    //apro la connessione al db e lo seleziono
    $conn=mysql_connect($host,$user,$password) or die;
    mysql_select_db($db);

    //inizializzo la variabile messaggio
    $messaggio="";

    ?>

    <html> <!-- striscia in alto-->

    <head>
        <!-- css esterno -->
            <link rel="stylesheet" type="text/css" href="stile.css">
            <title>modifica annunci </title>
    </head>
    
    
        <body>
        <!-- striscia in alto -->
            <table>
                    <tr>
                        <td>
                            <p><font face="magneto" color="black" size="20px"><center><b><i>"LA BOTTEGA DELL'USATO"</i></b></center></p>    
                            
                        </td>         
                    </tr>
            </table>
    

    <div id="menu">
    <ul>
    <?php
    //controllo che ci sia una sessione utente, altrimenti "sessione scaduta"

    if(isset($_SESSION['utente'])){
    
     echo"<li><font face='georgia' color='red'size='4px'>ciao " . $_SESSION['utente'] . "!</li>";
                                        echo"<li><a href='login.php?azione=logout'>logout</a></li>";
                                        echo"<li><a href='cancellato.php'>cancella</a></li>";
                                        
                                        echo"<br>";
                                        echo"<br>";
                                    }else{
                                    
                                    $messaggio= "<font color='black' face='times new roman' size='4px'>sessione scaduta";
                                }
                                
    ?>
       </ul>
                            </div>
    

    <?php

    $id_ann=$_GET['annuncio'];
    $ris=mysql_query("SELECT * FROM annunci_cerco WHERE id=".$_GET['annuncio']);

    ?>
    <form method="POST" action="modifica_annunci_2.php"><?php echo $id_ann ?>
    <p>modifica i tuoi annunci</p>

    Titolo  <input type="text" name="title" value=""/><br>
    
    Testo <textarea name="body" cols="10" rows="10"></textarea>
    
    <input type="submit" name="invia" value="inserisci"/>
    

    </form>

    <?php
    mysql_close();

    ?>

    </body>
    </html>
    [/PHP]

    [PHP]<?php
    //inizio la sessione utente
    session_start();
    //includo i parametri del db
    include("varDB.inc");
    //apro la connessione al db e lo seleziono
    $conn=mysql_connect($host,$user,$password) or die;
    mysql_select_db($db);

    //inizializzo la variabile messaggio
    $messaggio="";

    ?>

    <html> <!-- striscia in alto-->

    <head>
        <!-- css esterno -->
            <link rel="stylesheet" type="text/css" href="stile.css">
            <title>modifica annunci </title>
    </head>
    
    
        <body>
        <!-- striscia in alto -->
            <table>
                    <tr>
                        <td>
                            <p><font face="magneto" color="black" size="20px"><center><b><i>"LA BOTTEGA DELL'USATO"</i></b></center></p>    
                            
                        </td>         
                    </tr>
            </table>
    

    <div id="menu">
    <ul>
    <?php
    //controllo che ci sia una sessione utente, altrimenti "sessione scaduta"

    if(isset($_SESSION['utente'])){
    
     echo"<li><font face='georgia' color='red'size='4px'>ciao " . $_SESSION['utente'] . "!</li>";
                                        echo"<li><a href='login.php?azione=logout'>logout</a></li>";
                                        echo"<li><a href='cancellato.php'>cancella</a></li>";
                                        
                                        echo"<br>";
                                        echo"<br>";
                                    }else{
                                    
                                    $messaggio= "<font color='black' face='times new roman' size='4px'>sessione scaduta";
                                }
                                
    ?>
       </ul>
                            </div>
    

    <?php

    $id_ann=$_GET['id'];
    $title=$_POST['title'];

    $body=$_POST['body'];

    if($title=="" ||$body==""){
    echo "<font color='black' face='times new roman' size='4px'>Non hai riempito i campi";

                $q="UPDATE annunci_cerco SET title='$title', body='$body' WHERE id=$id_ann";
    

    mysql_query($q);

    echo"modifica ok";
    }else{

        echo"impossibile modificare";}
    
    
    mysql_close();    
    

    ?>

    </body>
    </html>
    [/PHP]


  • ModSenior

    Ma che senso ha fare un controllo che i campi siano vuoti e fare l'update in quel caso? Non dovresti fare il contrario?


  • User

    Hai ragione, ma ero solo per leggere se la modifica era andata a buon fine...al posto di quello ho inserito...

    [PHP]$m=mysql_query("UPDATE annunci_cerco SET title='$title',body='$body' WHERE id=$id_ann");
    if($m){

    echo"modifica ok";
    }else{

        echo"impossibile modificare";}
    

    [/PHP]

    Però le modifiche non vanno a buon fine..perchè leggo impossibile modificare...come è possibile?


  • ModSenior

    La query genera un qualche errore, aggiungi mysql_error() per mostrarlo.


  • User

    @Thedarkita said:

    La query genera un qualche errore, aggiungi mysql_error() per mostrarlo.

    Mi da questo messaggio fallitaQuery was empty


  • ModSenior

    Devi fare in questo modo:
    [php]
    $m=mysql_query("UPDATE annunci_cerco SET title='$title',body='$body' WHERE id=$id_ann") or die(mysql_error());
    if($m){

    echo"modifica ok";
    }else{

        echo"impossibile modificare";} 
    

    [/php]


  • User

    ecco l'errore che mi da..

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

    la seconda olta che ho provato mi dice sempre fallitaQuery was empty


  • ModSenior

    Avrai il carattere ' in una delle 3 variabili che passi alla query, devi usare addslashes.
    TI consiglio inoltre una lettura di questa guida:
    http://www.giorgiotave.it/forum/scripting-e-risorse-utili/189074-guida-sql-injection.html


  • User

    Mi puoi spiegare cosa significa?


  • ModSenior

    Dovresti leggere la guida per capire, li è tutto spiegato sui problemi che derivano dagli apici e determinate configurazioni di php.


  • User

    Adesso funziona tutto!!!mi è bastato cambiare questo della pag contenente i dati inviati dal form
    $id_ann=$_POST['id'];
    al postodi $id_ann=$_GET['id'];

    graazie dell'aiuto!!!


  • User

    volevo chiedere ancora una volta..vorrei verificare prima di una modifica e di una cancellazione l'esistenza del messaggio..come posso fare?


  • ModSenior

    Fai una query select e controlli con mysql_num_rows se c'è il record.


  • User

    Tipo una cosa del genere?

    [PHP]if($title!="" && $body !=""){
    $risultato = mysql_query("SELECT * FROM annunci_offro WHERE autore='".$_SESSION['utente']."'")or die(mysql_error("query annunci fallita"));
    mysql_num_rows($risultato);

    $modifica=mysql_query("UPDATE annunci_offro SET title='$title',body='$body' WHERE id=$id_ann") or die(mysql_error("query modifica fallita"));

    echo"modifica ok";
    header("refresh:2;URL=annunci_offro.php");
    }else{

        echo"impossibile modificare";
        header("refresh:2;URL=annunci_offro.php");
        } 
    

    }
    mysql_close();

    ?>
    [/PHP]

    dove prima della query update ho messo select con il num_rows


  • ModSenior

    [php]
    mysql_num_rows($risultato);
    [/php]
    Restituisce il numero di record quindi tu dovresti fare una cosa del tipo:
    [php]
    if(mysql_num_rows($risultato) == 0)
    die('ID non presente');
    [/php]


  • User

    [PHP]
    if($title!="" && $body !=""){
    $risultato = mysql_query("SELECT * FROM annunci_offro WHERE autore='".$_SESSION['utente']."'")or die(mysql_error("query annunci fallita"));
    if(mysql_num_rows($risultato) == 0)
    die('ID non presente');

    $modifica=mysql_query("UPDATE annunci_offro SET title='$title',body='$body' WHERE id=$id_ann") or die(mysql_error("query modifica fallita"));

    echo"modifica ok";
    header("refresh:2;URL=annunci_offro.php");
    }else{

        echo"impossibile modificare";
        header("refresh:2;URL=annunci_offro.php");
        } 
    

    }
    mysql_close();

    ?>

    [/PHP]

    Mi diresti se va bene così?


  • ModSenior

    Si va bene cosi, ma la funzione mysql_error non ha come primo parametro una stringa.