GET e POST - ??

Salve, ho un problema come faccio ad dirgli che non deve visualizzare anche la form del metodo post?.

perchè voglio inserire insert e update insieme.

se faccio cosi: articoli.php?update=1  mi deve visulizzare solo la form da modificare i dati ed non quella di inserimento.

Mi aiutate ad corregere questo codice?.

grazie.

ora vi posto il codice:

<?php
include("include.php");
//include("".$template."/header.php");
?>
<script language="JavaScript">

function validazione(){
with(document.modulo) {
   if (modulo.categoria.selectedIndex == 0)
    {
    alert ('Seleziona la categoria!!');
   categoria.focus();
    return false;
    } 
   
   if(autore.value=="") {
   alert("Inserire l'autore");
   autore.focus();
   return false;
   }
   if(titolo.value=="")
   {
   alert("Inserire il titolo");
   titolo.focus();
   return false;
   }
   if (modulo.pub.selectedIndex == 0)
    {
    alert ('Seleziona lo stato di attivazione!!');
   pub.focus();
    return false;
    } 
   if(descrizione.value=="")
   {
   alert("Inserire la descrizione");
   descrizione.focus();
   return false;
   }
   if(testo.value=="")
   {
   alert("Inserire il testo");
   testo.focus();
   return false;
   }
   if(data.value=="")
   { 
   alert("Inserire la data");
   data.focus();
   return false;
   }

}
alert("Il modulo è completo, grazie");
return true;
}   </script>
<?


$categoria = $_POST["categoria"];
$autore = $_POST["autore"];
$titolo = $_POST["titolo"];
$descrizione = $_POST["descrizione"];
$testo = $_POST["testo"];
$data = $_POST["data"];
$pub = $_POST["pub"];

if($_POST['submit'])
{
$sql = "INSERT INTO  articoli (".
"art_categoria,".
"art_autore,".
"art_titolo,".
"art_descrizione,".
"art_testo,".
"art_data,".
"art_pub ) VALUES(".
"'".$categoria."',".
"'".$autore."',".
"'".$titolo."',".
"'".$descrizione."',".
"'".$testo."',".
"'".$data."',".
"".$pub.")";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
 
  }
}else{
?><form action="<?=$_SERVER['PHP_SELF']?>" method="post" name="modulo"  onSubmit="return validazione();">
<p>Inserire categoria<p><select name="categoria" >
<option value="nodefinito" selected>Seleziona categoria</option>
<option value="staff">Staff</option>
<option value="annunci">Annunci</option> 
</select>
</p>
<p>Inserire l'autore <input type="text" name="autore"></p>
<p>Inserire il titolo <input type="text" name="titolo"></p>
Inserire la descrizione<p><textarea name="descrizione" rows="10" cols="30"></textarea></p>
Inserire il testo<p><textarea name="testo" rows="10" cols="30"></textarea></p>
Inserire data<p><input type="text" name="data"></p>
<p>Inserire Pubblicazione<p><select name="pub" >
<option value="nodefinito" selected>Attivazione</option>
<option value="1">1</option>
<option value="0">0</option> 
</select>
</p><p><input type="submit" name="submit" value="Aggiungi" />
<?
}
}
if($_POST && isset($_GET['id']))
{
   // Qui Aggiorno l'articolo
}
elseif(isset($_GET['id']))
{
// Qui mostro form per modificare dati.
$result = mysql_query("SELECT * FROM articoli WHERE art_id='".$_GET['id']."'");

while($row = mysql_fetch_array($result))
  {
  $id= $row['art_id'];
  $categoria = $row['art_categoria'];
  $titolo = $row['art_titolo'];
  $autore = $row['art_autore'];
  $descrizione = $row['art_descrizione'];
  $testo = $row['art_testo'];
  $data = $row['art_data'];
  $pub = $row['art_pub'];
 
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post" name="modulo"  onSubmit="return validazione();">
<p><input type="hidden" value="<?=$id?>"></p>
<p>Inserire categoria<p><select name="categoria" >
<option value="nodefinito" selected>Seleziona categoria</option>
<option value="staff">Staff</option>
<option value="annunci">Annunci</option> 
</select>
</p>
<p>Inserire l'autore <input type="text" name="autore" value="<?=$autore?>"></p>
<p>Inserire il titolo <input type="text" name="titolo" value="<?=$titolo?>"></p>
Inserire la descrizione<p><textarea name="descrizione" rows="10" cols="30"><?=$descrizione?></textarea></p>
Inserire il testo<p><textarea name="testo" rows="10" cols="30"><?=$testo?></textarea></p>
Inserire data<p><input type="text" name="data" value="<?=$data?>"></p>
<p>Inserire Pubblicazione<p><select name="pub" >
<option value="nodefinito" selected>Attivazione</option>
<option value="1">1</option>
<option value="0">0</option> 
</select>
</p><p><input type="submit" name="submit" value="Modifica" />
<?
}
}
mysql_close($con);
?>
<?php // include("".$template."/footer.php"); ?>
inviato 8 anni fa
luigi
X 0 X

ho provato mettere anche cosi:

if($_POST['update'])
{
   // Qui Aggiorno l'articolo
}
else
{

fà ma visualizza anche il form di inserimento.

grazie.

risposto 8 anni fa
luigi
modificato 8 anni fa
X 0 X

come posso fare?.  :)

risposto 8 anni fa
luigi
X 0 X

Separare i due script?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Separare i due script?

si , alla fine faccio cosi....

ma è possibile che non si possa fare?.

ciao. notte.

risposto 8 anni fa
luigi
X 0 X
if($_POST['update'])

Update è un valore booleano? Tu hai messo 1, ma non è booleano è di testo dato che proviene da una get (o da un post), meglio sarebbe stato:

if((bool)$_POST['update'])

o ancora meglio dato che col metodo di prima non ti metti al sicuro dalle injection di vario tipo, dato che anche: "<script>alert('booom!')</script>" è un valore booleano valido e persino true!

if($_POST['update'] == '1')

così solo se il valore è 1 la condizione è verificata.

Ps: togli alert("Il modulo è completo, grazie"); return true; è inutile e ridondante, che il modulo è completo lo so dal momento che non mi da errore ma procede con il resto dell'applicazione, così invece mi obblighi ad un click in più.

PPS: ma tu fai queste cose qui?  :o

// Qui mostro form per modificare dati.
$result = mysql_query("SELECT * FROM articoli WHERE art_id='".$_GET['id']."'"); <--------<<<<

Con una GET così l'injection via SQL è troppo facile, non vale nemmeno provarci  :D

risposto 8 anni fa
Marco Grazia
X 0 X

eh infatti... per quanto riguarda le form GET / POST suggerirei di dare un'occhiata anche alle espressioni regolari e alle relative funzioni php, così avrai sempre stringhe in entrata con la certezza che i dati saranno innocui!

risposto 8 anni fa
larchitetto
X 0 X

[

PPS: ma tu fai queste cose qui?  :o

// Qui mostro form per modificare dati.
$result = mysql_query("SELECT * FROM articoli WHERE art_id='".$_GET['id']."'"); <--------<<<<

Con una GET così l'injection via SQL è troppo facile, non vale nemmeno provarci  :D

Scusa era una prova.... comunque come sarebbe la cosa?.

io però ho creato questa funzione per dopo metterla ai Get e Post.

eccola :

function FixSQL($stringa)
  {
  $stringa = @str_replace("''","'",$stringa);
  return $stringa;
  }

tu sai se esistono altri carrateri da evitare sql injection?.

grazie.

questa si applica cosi: FixSQL($_GET o $_POST)

etc.

mi protesti dire come fare?.

grazie.

risposto 8 anni fa
luigi
X 0 X

Ma insomma sostituire apici non capisco che beneficio farebbe, meglio sarebbe fare un controllo tramite altre funzioni, ad esempio nel manuale trovi questo esempio interessante:

function utf8_urldecode($str) {
    $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));
    return htmlspecialchars(html_entity_decode($str,null,'UTF-8'));
}

decodifica separando in una url le eventuali variabili presenti, passandole come UTF-8 che ha il vantaggio di mantenere la corrispondenza dei caratteri.

Faccio notare che gli URI vengono trattati dai server Web sempre e solo come UTF-8 e restituiscono sempre e solo UTF-8.

Se ci sono caratteri particolari nella stringa che compone un URI questi vengono sempre e comunque passati come carattere e UTF-8 garantisce sempre la resa del carattere, poi, html_entity_decode() ritorna il valore così come lo si cercava, mentre htmlspecialchars lo pulisce da qualsia tipo di tag.

E questa è ua regola da seguire sempre passando valori attraverso POST e peggio ancora GET.

Meglio di tutto però sarebbe poter usare un server con su il PHP 5.2.x e quindi usare le funzioni di filtro.

Detto questo comunque questi sistemi, il tuo e quello postato da me, non ti permettono di filtrare una richiesta scritta in SQL, perché ad esempio se io scrivo in un ipotetico URL ....miosito.it/fai_quialcosa.php?id=luis08 e ammesso che la get passa direttamente il valore in una query che mi fa vedere tutti i dati dell'account di luis08, io non solo ottengo ciò che cerco, ma addirittura non posso essere fermato, dato che, luis08 passa qualsiasi filtro, infatti, non ha tag o caratteri particolari al suo interno, è solo il tuo nickname :)

Quindi per evitare cose di questo genere, che credimi, sono alla base del cracking di un database, l'unica è di non passare mai direttamente da una get un qualsiasi valore ad una query, ma effetturare sempre dei passaggi intermedi, usando magari un sistema di parametrizzazione.

Prima quindi controlli che la get non contenga codice nativo con una funzione simile a quella che ti ho passato prima e che trovi nel manuale online del php (fonte di ogni ispirazione) e poi usi un parametro ma mai il valore diretto.

Cerca di usare server che ti danno l'accesso a funzioni avanzate del PHP e soprattutto che abbiano su una versione sempre aggiornata del linguaggio perché: i bug del PHP vengono corretti solo aggiornando il linguaggio e perché nuove funzioni e nuove funzionalità vengono aggiunte proprio per evitare che un errore banale come il tuo possano inficiare il tuo database o peggio l'intero server.

Ad esempio le funzioni di accesso ai database della libreria PDO stanno molto attente al cross site scripting e all'injection di codice maligno, mettendo un insieme di funzionalità che permettono di avere del codice funzionale e potenzialmente immune da questo tipo di problemi.

Qui trovi qualcosa sulla libreria PDO che è un'estensione al linguaggio del PHP 5 che i server dovrebbero sempre implementare.

Altra cosa sono i filtri su cui avevo scritto un intero post.

Scusa se sono stato lungo e prolisso, ma gestendo un server so quanto è importante per la sicurezza dell'intero server errori banali; è un mio chiodo fisso la sicurezza, ho già pagato abbastanza per cose che non dipendevano dalla mia volontà :)

risposto 8 anni fa
Marco Grazia
X 0 X

grazie marcolino per la spiegazione.....

ultima cosa come si usa questa funzione:

function utf8_urldecode($str) {
    $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#38;#x\\1;",urldecode($str));
    return htmlspecialchars(html_entity_decode($str,null,'UTF-8'));
}

percaso cosi:

utf8_urldecode($_GET['etc...']);
utf8_urldecode($_POST['etc...']);

grazie mille per la lezione sei stato chiaro.

risposto 8 anni fa
luigi
X 0 X

allora mi sta quasi riuscendo ma non capisco una cosa che mi da un  Warning e non inserisce nulla, come mai? che sbaglio?.

Lasciamo ora perdere le SQL Injection e altro e il controllo della form.

Passiamo ad risolvere questo problema:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in D:\serverwww\htdocs\fido\admin_articoli.php on line 201

Error:

Che cosa è che gli può dare questo messaggio?.

sto prendento spunto dalla guida di questo sito è ho cambiato alcune cose.

Mi potete aiutare.... vorrei scrivere nello stesso codice ed avendo insert update delete nella solita pagina.

Non me lo chiedete , ma mi sono preso una fissa di fare un solita pagina che a tutto insert update delete.

ciao.

saluti

ecco il codice:

<?php
include("include.php");
?>
<script language="JavaScript">

function validazione(){
with(document.modulo) {
   if (modulo.categoria.selectedIndex == 0)
    {
    alert ('Seleziona la categoria!!');
   categoria.focus();
    return false;
    } 
   
   if(autore.value=="") {
   alert("Inserire l'autore");
   autore.focus();
   return false;
   }
   if(titolo.value=="")
   {
   alert("Inserire il titolo");
   titolo.focus();
   return false;
   }
   if (modulo.pub.selectedIndex == 0)
    {
    alert ('Seleziona lo stato di attivazione!!');
   pub.focus();
    return false;
    } 
   if(descrizione.value=="")
   {
   alert("Inserire la descrizione");
   descrizione.focus();
   return false;
   }
   if(testo.value=="")
   {
   alert("Inserire il testo");
   testo.focus();
   return false;
   }
   if(data.value=="")
   { 
   alert("Inserire la data");
   data.focus();
   return false;
   }

}
alert("Il modulo è completo, grazie");
return true;
}   
</script>
<?
$categoria = $_POST["categoria"];
$autore = $_POST["autore"];
$titolo = $_POST["titolo"];
$descrizione = $_POST["descrizione"];
$testo = $_POST["testo"];
$data = $_POST["data"];
$pub = $_POST["pub"];
$email = "pippo@pippoparolo.pipppetee";

/* Qui vedete che ho cambiato preso dalla guida di qui */

if($_POST['submit']) {
aggiungi_record();
}
elseif($_GET['art']=="agg"){
aggiungi_form();
?>
<?
}
elseif($_GET['art']=="modifica"){

modifica_form();   

}else{
    visualizza_record();
}
function visualizza_record()
{   
    $query = "SELECT * FROM articoli ORDER BY art_data ";
    $res = paging($query,6,5);
    if (!$res[0]) { echo "non ci sono dati";}
    else
    {
    while($dati = mysql_fetch_array($res[0]))
    {
    ?>

        <h3><?php echo "<br>".$dati['art_titolo']; ?></h3>
        <p><?php echo "<br>".$dati["art_categoria"]; ?> </p>
        <p align="right"><a href="admin_articoli.php?show=&id=<?php echo "".$dati["art_id"].""; ?>">Leggi News</a>
        </p>
    <?
    }
    }
    echo "<br>".$res[1];
  }
  
function modifica_form()
  {
  
// Qui mostro form per modificare dati.
$result = mysql_query("SELECT * FROM articoli WHERE art_id='".$_GET['id']."'");

while($row = mysql_fetch_array($result))
  {
  $id= $row['art_id'];
  $categoria = $row['art_categoria'];
  $titolo = $row['art_titolo'];
  $autore = $row['art_autore'];
  $descrizione = $row['art_descrizione'];
  $testo = $row['art_testo'];
  $data = $row['art_data'];
  $pub = $row['art_pub'];
?>
<form action="?art=modifica&id=<?=$id?>" method="post" name="modulo"  onSubmit="return validazione();">
<p><input type="hidden" value="<?=$id?>"></p>
<p>Inserire categoria<p><select name="categoria" >
<option value="nodefinito" selected>Seleziona categoria</option>
<?php
$result = mysql_query("SELECT * FROM articoli_categorie");

while($row = mysql_fetch_array($result))
  {
  $nome= $row['cat_nome'];
  ?>
<option value="<?=$nome?>" <?if($categoria==$nome) echo 'selected="selected"'?>><?=$nome?></option>  
  <?php
  }
?>
   </select>
</p>
<p>Inserire l'autore <input type="text" name="autore" value="<?=$autore?>"></p>
<p>Inserire il titolo <input type="text" name="titolo" value="<?=$titolo?>"></p>
Inserire la descrizione<p><textarea name="descrizione" rows="10" cols="30"><?=$descrizione?></textarea></p>
Inserire il testo<p><textarea name="testo" rows="10" cols="30"><?=$testo?></textarea></p>
Inserire data<p><input type="text" name="data" value="<?=$data?>"></p>
<p>Inserire Pubblicazione<p><select name="pub" >
<option value="nodefinito" selected>Attivazione</option>
<option value="1">1</option>
   <option value="0">0</option> 
</select>
</p><p><input type="submit" name="update" value="Modifica" />
<?
}
}
function aggiungi_form()
{
?>
<form action="" method="post" name="aggiungi"  onSubmit="return validazione();">
<p>Inserire categoria<p><select name="categoria" >
<option value="nodefinito" selected>Seleziona categoria</option>
<?php
$result = mysql_query("SELECT * FROM articoli_categorie");

while($row = mysql_fetch_array($result))
  {
  $nome= $row['cat_nome'];
  ?>
  <option value="<?=$nome?>"><?=$nome?></option>
  <?php
  }
?>
  </select>
</p>
<p>Inserire l'autore <input type="text" name="autore"></p>
<p>Inserire il titolo <input type="text" name="titolo"></p>
Inserire la descrizione<p><textarea name="descrizione" rows="10" cols="30"></textarea></p>
Inserire il testo<p><textarea name="testo" rows="10" cols="30"></textarea></p>
Inserire data<p><input type="text" name="data"></p>
<p>Inserire Pubblicazione<p><select name="pub" >
<option value="nodefinito" selected>Attivazione</option>
<option value="1">1</option>
<option value="0">0</option> 
</select>
</p><p><input type="submit" name="submit" value="Aggiungi" />
<?
}
function aggiungi_record()
{

/*
Qui mi da il Warning come mai? che sbaglio?.

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in D:\serverwww\htdocs\fido\admin_articoli.php on line 201
Error:
*/

$sql = "INSERT INTO  articoli (art_categoria,".
"art_autore,".
"art_email,".
"art_titolo,".
"art_descrizione,".
"art_testo,".
"art_data,".
"art_pub ) VALUES(".
"'".$categoria."',".
"'".$autore."',".
"'".$email."',".
"'".$titolo."',".
"'".$descrizione."',".
"'".$testo."',".
"'".$data."',".
"".$pub.")";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
 
  }
 
}
?>
risposto 8 anni fa
luigi
X 0 X

scusate, ho risolto era la connessione al database.

risposto 8 anni fa
luigi
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda