Problemi anomalo insermento in db

rino2002

Utente Attivo
13 Set 2018
34
0
6
Ciao a tutti, ultimamente sto progettando un piccolo blog.
Ma all'inserimento dell'articolo alcune volta procede tutto alla perfezione ed altre volte mi da errore.
Ho provato anceh vairi inserimenti ed anche con caratteri lunari l'inserimento va a buon fine, poi quando mi metto e scrivo io un'articolo, mi da errore...sembra prorpio una presa in giro.... se qualcuno può dare un'occhiata al codice e magari dirmi qual'è il problema...grazie mille!
questo è il form in html
HTML:
<form align="left" action="add_articolo.php" method="post" enctype="multipart/form-data">

<hr>
   
<br><input type="text" name="titolo" value="" placeholder="titolo"><br>
<br><textarea name="articolo" value="" placeholder="articolo"></textarea><br>    

    <br> <input type="hidden" name="action" value="upload"/>
            <label>Carica la tua foto dalla libreria:</label>
    <input type="file" name="fileToUpload" id="fileToUpload">

<input type="submit" value="Create" name="submit">
</form>
ecco invece l'inserimento:
PHP:
 if (isset($_POST['titolo']))
    {
    
        $titolo = $_POST['titolo'];
        $articolo = $_POST['articolo'];
        $name = $_FILES["fileToUpload"]["name"];
        $evidenza = 0;


        $sql = "INSERT INTO blog (titolo,articolo,name,evidenza) VALUES ('$titolo','$articolo','$name','$evidenza')";
        
        if ($conn->query($sql) === TRUE) {
            echo "Pubblicato!<br />";
        }
        else {
            echo "Errore!<br />";
        }
    }
    include_once("includes/menu.php");
Grazie per l'attenzione.
 
un blog?
:rolleyes:
non e' una cosa facile da riscrivere da zero , ti consiglio d'installare WordPress ;)
 
Ciao, guarda l'ho chiamato blog ma effettivamente mi serve solamente per pubblicare un notizia. Il sito ha altre caratteristiche per questo non installo wordpress...il problema però è che non capisco perchè solo a volte mi dà l'errore in queso inserimento.
 
se qualcuno può dare un'occhiata al codice e magari dirmi qual'è il problema...

Il codice potrebbe comportarsi male per diversi fattori:
1- Mancata sanitizzazione delle string
2- Mancato cast delle stesse
3- Record troppo lungo
4- Field mancante
5- File non passato
6- Aggiungi apostrofi nei testi (come giusto che sia), di conseguenza la query (per come scritta) genera error...

Ti consiglio di modificare come segue:


PHP:
//Messa qui per comodità
function only_string($string){
    return filter_var($string, FILTER_SANITIZE_STRING) ;
}
$sql = 'INSERT INTO blog (titolo,articolo,name,evidenza) VALUES ("'.only_string($titolo).'","'.only_string($articolo).'","'.only_string($name).'","'.only_string($evidenza).'")';

Lascia stare WP, non serve un cannone per sparare ad una formica....
 
grazie mille, adesso sembra funzionare molto meglio, finalmente!
Posso solo domandarti una cosa?
Perchè adesso non mi esegue il codice?
Ad esempio se nell'articolo inserisco dei tag <h2> non me li esegue!
grazie comuque
 
Il problema che poi se elimino only_string, non mi pubblica l'articolo...mi da il problema che avevo all'inizio
 
Il problema che poi se elimino only_string, non mi pubblica l'articolo...mi da il problema che avevo all'inizio
guardando il tuo primo post, noto che non fai nessun controllo per la gestione degli apici,
se nel titolo o nell'articolo fossero presenti degli apici, questi modificano la query,
esempio, supponi che nel titolo ci sia l' albero, il risultato nella query sarà, VALUES ('l' albero',
puoi verificare che ci sono 3 apici e nasce l'errore

verifica se questo motivo è la vera causa dell'errore,
perché se non lo indichi, chi ti risponde può solo sperare di indovinare

ho comunque preparato una modifica al tuo codice, prova ad applicarla, attento solo alla variabile $slash che dipende dal db usato

PHP:
function FixSQL($param)
{
    $slash = "\\";    // la doppia barra rovescia vale per mySQL, se db fosse ms sql va messo $slash = "'";
    if ( strpos($param, "'") !== false ) $param = str_replace("'", $slash."'", $param);
    return $param;
}

if (isset($_POST["titolo"]))
{
    $titolo   = FixSQL($_POST["titolo"]);
    $articolo = FixSQL($_POST["articolo"]);
    $name     = $_FILES["fileToUpload"]["name"];
    $evidenza = 0;

    $sql = "INSERT INTO blog (titolo, articolo, name, evidenza) VALUES ('$titolo','$articolo','$name','$evidenza')";
  
    if ($conn->query($sql) === TRUE) { echo "Pubblicato!<br />"; }
    else                             { echo "Errore!<br />"; }
}
include_once("includes/menu.php");
 
ciao marino51 , grazie mille del consiglio! Non avevo pensato che l'errore potesse essere quello degli apici.....sembra funzionare! Ti ringrazio e spero che funzionerà tutto per il meglio...buonaserata
 

Discussioni simili