Archief - PHP: Never ending update

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

koebeest

Legacy Member
Hoi, bij men scriptje is het de bedoeling dat wanneer de persoon het onderdeel slager uit het dropdown menu gaat selecteren dat hij soort in de tabel update naar de value van de keuze in het dropdown menu. Nu wanneer ik dit probeer uit te voeren ontstaat er een soort van nooit eindigende loop. Hij wil steeds invoeren maar toch voert hij niks in. Na het gebruik van de E_all code kreeg ik deze foutmeldingen :
Notice: Undefined index: winkel in /usr/home/deb1367/domains/ikbenjens.com/public_html/economic/pandstats.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at /usr/home/deb1367/domains/ikbenjens.com/public_html/economic/pandstats.php:7) in /usr/home/deb1367/domains/ikbenjens.com/public_html/economic/pandstats.php on line 7

Notice: Undefined variable: id in /usr/home/deb1367/domains/ikbenjens.com/public_html/economic/pandstats.php on line 8

Notice: Undefined index: submit in /usr/home/deb1367/domains/ikbenjens.com/public_html/economic/pandstats.php on line 9

Notice: Undefined index: keuze in /usr/home/deb1367/domains/ikbenjens.com/public_html/economic/pandstats.php on line 10
dit is de code:
PHP:
 <?php 
session_start();
include("config.php");
$spelernaam = $_SESSION["nickname"];
if(isset($_SESSION["nickname"])){
if (isset($_GET["winkel"]) || $_GET["winkel"] != ""){ $id = $_GET["winkel"]; }else{header("Location: pandstats.php");}
$var = mysql_fetch_array(mysql_query("SELECT * FROM winkel WHERE winkelid = '$id'"));
$send = $_POST['submit'];
$start = $_POST['keuze'];

if ($send){
	if (!empty($start))
	{
	mysql_query("UPDATE winkel SET soort = '$start'
 WHERE winkelid = '$id'") or die (mysql_error());
	}
	}


?>  


<form name="form1">
  <table width="139" border="1">
    <tr> 
      <td width="66">&nbsp;</td>
      <td width="57">&nbsp;</td>
    </tr>
    <tr> 
      <td><select name="keuze" size="1">
          <option value="slager" selected>Slager</option>
        </select></td>
      <td><input name="submit" type="submit" id="submit" value="Verander"></td>
    </tr>
    <tr> 
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr> 
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
  </table>
</form>
<?php
}else{echo "niet ingelogd";}
exit();
?>

PS: Uw prefix systeem werkt nie in IE

screen:
http://img234.imageshack.us/my.php?image=prefix9fi.jpg

dJeez

Legacy Member
if (isset($_GET["winkel"]) || $_GET["winkel"] != "")
vervangen door
if (isset($_GET["winkel"]) && $_GET["winkel"] != "")

En waarom je eerst de waarde "nickname" uit je sessie leest om vervolgens te controleren of die waarde wel effectief bestaat is mij een raadsel, logischerwijs zou ik die 2 omdraaien.

killgore

Legacy Member
voor post vars aan te spreken doe je al 1 ding goed (ze nl. in lokale var steken).
Nog beter is:

$lokalevar=isset($_POST["globalevar"])?$_POST["globalevar"]:'';
edit:
functie ervoor

PHP:
function importpostglobals()
{
    $arguments = func_get_args();
    for($i=0,$l=func_num_args();$i<$l;$i++)
    {
    	global $$arguments[$i];
        $$arguments[$i] = isset($_POST[$arguments[$i]])?$_POST[$arguments[$i]]:'';
    }
}

oproepen doe je dan bv. met
importpostglobals("hallo","test");
hierbij zullen de variabelen $hallo en $test gevormd worden, dus let op dat je niets overschrijft.

Erlend

Legacy Member
dus:

$naam = $_POST['naam'];

is niet optimaal? Zonder even naar validatie te kijken.

killgore

Legacy Member
Erlend zei:
dus:

$naam = $_POST['naam'];

is niet optimaal? Zonder even naar validatie te kijken.
optimaal, valt te zien wat ge eronder verstaat.

Ik ga uit van het principe elke fout moet weg (dus ik wil geen enkele foutmelding zien bij error_reporting(E_ALL);) en global vars gebruiken zonder te controleren of ze geset zijn is een fout.

Kijken of ze geset zijn gaat trager dan gewoon kopiëren heh, dus in die zin kan je zeggen dat het suboptimaal is, maar het is gewoon correcter.

Erlend

Legacy Member
Okay, ik kijk inderdaad eerst of ze geset zijn...had geen idee dat deze
methode trager is.

SpoBo

Legacy Member
gaat natuurlijk niets uitmaken bij kleine sites. En ik ga er vanuit dat 1 variabele checken sneller gaat als al uw variabelen loopen en degene die ge nodig hebt kopieren.

wat gemakkelijker werkt is een hidden value toevoegen aan uw form.. ff voorbeeldje:
PHP:
$query = "SELECT * FROM news WHERE news_id = '$dnid'";
			$result = mysql_query($query);
			$fetch = mysql_fetch_array($result);
			$news_title = $fetch[news_title];
			?>
			<form action="<?php echo $_SERVER['PHP_SELF']."?section=news&amp;action=addnews"; ?>" method=POST>
				<br>Weet u zeker dat u het volgende newsitem wilt verwijderen ? <strong><?php echo $news_title; ?></strong><br>
				<input type="submit" value=ja>
				<input type="hidden" name="delete_news_id" value="<?php echo $dnid; ?>" />
				<input type="hidden" name="_delete_news_check" value="1"/>
			</form>
en dan vanboven of gewoon ergens anders:
PHP:
if (array_key_exists('_delete_news_check', $_POST)) {
	$delete_news_id = $_POST['delete_news_id'];
	if (isset($delete_news_id)){
		$sql = "DELETE FROM news WHERE news_id = '$delete_news_id'";
		if ($debug)
		echo $sql;
		$sql_result = mysql_query($sql) or die ($error_bericht_query." ".$sql);
	}
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan