Gå til innhold

Legges ikke i array?


Anbefalte innlegg

Hei.

 

Har denne koden:

 

<?php
foreach ($_POST['sign'] as $ID => $show) {
$what = quote_smart($show);
$upt = mysql_query("UPDATE `user_sign` SET `show`='$what` WHERE `id`='$ID'");
}
?>


<?php
$select = Mysql_query("SELECT * FROM `user_sign` WHERE `user_id`='" .$l['id']. "'");
while($s=mysql_fetch_array($select)) {
$sss = mysql_query("SELECT * FROM `sign` WHERE `id`='" .$s['sign_id']. "'");
$sss = mysql_fetch_array($sss);
?>
<tr>
<td>
<?php echo $sss['name']; ?>
</td>
<td>
<img src="<?php echo $sss['image']; ?>">
</td>

<td>
<select name="sign['<?php echo $s['id']; ?>']">
<option value="1" <?php if($s['show'] == 1) { echo "selected=\"selected\""; } ?> >Ja</option>
<option value="0" <?php if($s['show'] == 0) { echo "selected=\"selected\""; } ?> >Nei</option>
</select>
</td>
</tr>
<?php

}
?>

 

( Det er litt unødvending kode imellom øverste og nederste del)

 

Poenget er at select'en lages ikke i en array, og den vil da ikke oppdateres. jeg får den ikke til å legges i en array. Noen som kan hjelpe meg? Takk på forhånd!

Lenke til kommentar
Videoannonse
Annonse
Hei.

 

Har denne koden:

 

<?php
foreach ($_POST['sign'] as $ID => $show) {
$what = quote_smart($show);
$upt = mysql_query("UPDATE `user_sign` SET `show`='$what` WHERE `id`='$ID'");
}
?>


<?php
$select = Mysql_query("SELECT * FROM `user_sign` WHERE `user_id`='" .$l['id']. "'");
while($s=mysql_fetch_array($select)) {
$sss = mysql_query("SELECT * FROM `sign` WHERE `id`='" .$s['sign_id']. "'");
$sss = mysql_fetch_array($sss);
?>
<tr>
<td>
<?php echo $sss['name']; ?>
</td>
<td>
<img src="<?php echo $sss['image']; ?>">
</td>

<td>
<select name="sign['<?php echo $s['id']; ?>']">
<option value="1" <?php if($s['show'] == 1) { echo "selected=\"selected\""; } ?> >Ja</option>
<option value="0" <?php if($s['show'] == 0) { echo "selected=\"selected\""; } ?> >Nei</option>
</select>
</td>
</tr>
<?php

}
?>

 

( Det er litt unødvending kode imellom øverste og nederste del)

 

Poenget er at select'en lages ikke i en array, og den vil da ikke oppdateres. jeg får den ikke til å legges i en array. Noen som kan hjelpe meg? Takk på forhånd!

Hvis du kutter ned koden din til et eksempel med fornuftige variabelnavn (ikke $sss, $upt, $what og $show da det ikke forteller noe om hva du forventer å finne her) samt gir litt innblikk i hva pokker $_POST['sign'] er ment å inneholder (er det et skilt eller en samling signaturer?) så kanskje jeg kan hjelpe.

 

Som et generelt feilsøkingsråd så er var_dump() en god venn. Kombinerer du dette med å legge spørringen i en variabel som du sender til mysql_query() så har du kommet et godt stykke på vei.

 

Jeg synes ikke så mye om å legge et hentet resultat fra en spørring i samme variabel som resultatet av spørringen. Dette vil veldig ofte virke veldig greit, men det er en mulig feilkilde og det er veldig lite å hente på dette.

 

Så for å summere opp

 

foreach($_POST['sign_id_list'] as $user_id => $sign_id)

 

$query = "UPDATE `user_sign` SET `show`='$what` WHERE `id`='$ID'";

$result = mysql_query($query) or die(mysql_error()." in query $query");

while($row = mysql_fetch_array($result, MYSQL_ASSOC))

 

 

...og hvorfor valgte du $s['show'] istedenfor $field['selected'] når du skrev "if($s['show'] == 1) { echo "selected=\"selected\""; }" ?? Når jeg leser ['show'] så ser jeg for meg at dette er noen felt som i visse tilfeller vil være skjult for brukeren ikke at de ikke er standardverdier eller forvalgte verdier...

Lenke til kommentar
$s['show'] = $s = sign, ['show'] = om den vises til alle :)

 

greia er at man skal kunne endre show value mellom 1 og 0.

Hvis du koder på en C=64 og er begrenset til 40 tegn i bredden så forstår jeg at $s kan gjøre ting mer lesbart. Men på dagens monitorer så er 180 tegn ikke unormalt og da er ikke $s bedre enn $sign. Ikke nesten en gang.

 

<?php
//Siden det ikke er helt klart hva $_POST['sign'] inneholder så finner jeg ikke noe bedre for $show og $what, men det virker som at det ikke er her problemet er.
foreach ($_POST['sign'] as $ID => $show) 
{
$what = quote_smart($show);
//ID skal her være definert som INT NOT NULL AUTO_INCRIMENT PRIMARY KEY. Den skal IKKE være VARCHAR().
$query = "UPDATE `user_sign` SET `show`='$what` WHERE `id`=$ID";
//Jeg vil ikke engang gjette hva $upt skal stå for...
$upt = mysql_query($query) or die(mysql_error()." in query:<br/> $query"; //ALLTID feilsjekk resultater fra DB!
}

//Hvor pokker kommer $l['id'] fra? 'Ledger'? 'Login'? 'License'? Hvilke felt velges her? Hvordan ser tabellstrukturen ut?
//Generelt sett så skal alle ID-er være numeriske.
$query = "SELECT * FROM `user_sign` WHERE `user_id`={$l['id']}";
$user_result = mysql_query($query) or die(mysql_error()." in query:<br/> $query"; //ALLTID feilsjekk resultater fra DB!


while($user_row=mysql_fetch_array($user_result))
{
//Igjen, her skal sign_id være en INT NOT NULL og indeksert med KEY.
$query = "SELECT * FROM `sign` WHERE `id`={$user_row['sign_id']}";
$sign_result = mysql_query($query) or die(mysql_error()." in query:<br/> $query"; //ALLTID feilsjekk resultater fra DB!
$sign_row = mysql_fetch_array($sign_result);

output_table_row($sign_result['name'], $sign_result['image'], $user_result['id'], $sign_result['display']);
}


function output_table_row($name, $image, $id, $display)
{
echo "<tr><td>$name</td>";
echo "<td><img src=\"$image\"></td>";

echo "<td><select name=\"$id\">";

echo '<option value="1"';
if($display) 
	echo 'selected="selected">Ja</option>';


echo '<option value="0"';
if($!display) 
	echo 'selected="selected">Nei</option>';

echo '</select></td></tr>';
}

?>

 

Ser ikke dette bedre ut?

Lenke til kommentar
det kan så være, men jeg ser ikke hvordan din skal funke bedre enn min da det printes ut på samme måte?

Fordi da er det enklere å feilsøke.

 

Hvis du nå kan produsere resultatet av skriptet så blir det faktisk mulig å begynne feilsøkingen.

 

...og forkortelser er helt greit til du får litt størrelse på skriptene dine og skal fortsette kodingen et halvt år etter. Da blir det straks vanskeligere å huske hva pokker du tenkte da du laget en variabel. $user_sing gir både deg selv og andre en mye bedre pekepinn på hva det handler om enn $sss noen gang vil gjøre.

Lenke til kommentar
Først må jeg prøve å forstå scriptet, og sette meg inn i helt andre variabler.

 

Og hvor kommer denne fra? "//Generelt sett så skal alle ID-er være numeriske."

sefølgelig er alle ID'ene tall!

Tall i SQL står som oftest ikke innenfor strengeavskillere '

 

Er det noe problem som gjør at du ikke klarer å gjengi resultatet av skriptet?

Lenke til kommentar

Hahaha, dette er så trist at det nesten er morsomt... Så trist at jeg ikke føler for å bidra. Jeg er 100% sikker på at jeg kunne ha løst problemet - hva nå enn problemet er - men denne forbanna lille viljen til å gjøre en innsats for at det skal være lettere å hjelpe gir meg svært liten lyst.

 

LaCrouX, variabelnavn eksisterer av meget gode grunner og jo fortere du lærer det; jo bedre. Vi gir blanke i hvorvidt du tror de er nyttige, men så lenge vi foretrekker dem, så kommer du mye lengre ved å bare gjøre som vi sier og skrive om den jævla møkkakoden din slik at den blir litt mer forståelig. Aller helst burde du isolere problemet i et fint lite eksempel, men det er kanskje mye å forvente...

Lenke til kommentar

vet ikke om dere la merke til det, men mange variabler i koden over som ikke er definert.

 

( Du hadde forresten kodefeil på linje 22, 28, 35 og 55.. )

 

er en feil på linje 90 som fjernes ved å legge til <?php } ?> påslutten, men da funker ingenting?

 

 

 

Skilt<br>
<?php
if(isset($_POST['update'])) {
/*

foreach ($_POST['sign'] as $ID => $show) {
$what = quote_smart($show);
$upt = mysql_query("UPDATE `user_sign` SET `show`='$what` WHERE `id`='$ID'");
}

print_r($_POST['sign']);
*/


//Siden det ikke er helt klart hva $_POST['sign'] inneholder så finner jeg ikke noe bedre for $show og $what, men det virker som at det ikke er her problemet er.
foreach ($_POST['sign'] as $ID => $show)
{
$what = quote_smart($show);
//ID skal her være definert som INT NOT NULL AUTO_INCRIMENT PRIMARY KEY. Den skal IKKE være VARCHAR().
$query = "UPDATE `user_sign` SET `show`='$what` WHERE `id`=$ID";
//Jeg vil ikke engang gjette hva $upt skal stå for...
$upt = mysql_query($query) or die(mysql_error()." in query:<br/> $query"); //ALLTID feilsjekk resultater fra DB!
}

//Hvor pokker kommer $l['id'] fra? 'Ledger'? 'Login'? 'License'? Hvilke felt velges her? Hvordan ser tabellstrukturen ut?
//Generelt sett så skal alle ID-er være numeriske.
$query = "SELECT * FROM `user_sign` WHERE `user_id`={$l['id']}";
$user_result = mysql_query($query) or die(mysql_error()." in query:<br/> $query"); //ALLTID feilsjekk resultater fra DB!


while($user_row=mysql_fetch_array($user_result))
{
//Igjen, her skal sign_id være en INT NOT NULL og indeksert med KEY.
$query = "SELECT * FROM `sign` WHERE `id`={$user_row['sign_id']}";
$sign_result = mysql_query($query) or die(mysql_error()." in query:<br/> $query"); //ALLTID feilsjekk resultater fra DB!
$sign_row = mysql_fetch_array($sign_result);

output_table_row($sign_result['name'], $sign_result['image'], $user_result['id'], $sign_result['display']);
}


function output_table_row($name, $image, $id, $display)
{
echo "<tr><td>$name</td>";
echo "<td><img src=\"$image\"></td>";

echo "<td><select name=\"$id\">";

echo '<option value="1"';
if($display) {
	echo 'selected="selected">Ja</option>';


echo '<option value="0"';

if(!$display)
	echo 'selected="selected">Nei</option>';

echo '</select></td></tr>';
}


echo "Du har oppdatert skiltene som vises.<br>";
}
?>
<form method="POST" action="">
<table align="center">
<tr>
<td width="100">
Navn
</td width="100">
<td>
Bilde
</td>

<td width="150">
Vises skiltet?
</td>
</tr>
<?php
output_table_row();
?>

<td colspan="3">
<center><input type="submit" name="update" value=" Oppdater! "></center>
</td>
</tr>
</table>
</form>

 

 

Endret av LaCrouX
Lenke til kommentar

Jeg er usikker på hvordan vi skal gå videre her...

 

Ahh... Istedenfor å forsøke å utvide kodeeksemplet så bør du redusere det slik at du har noe som virker. Derifra så kan du utvide det igjen til du finner problemet og så lage et kodeeksempel som illustrerer det nøyaktige problemet.

 

Er problemet at en <select name="navn[1]"> ikke blir oversatt til $_POST['navn'][1], men isteden $_POST['navn[1]'] eller omvendt så har vi kommet ett steg nærmere.

 

Er problemet at en verdi ikke blir økt i en teller så kan vi komme litt nærmere da også.

 

 

....Hvilken variabel var problemet forresten? Hvor er det matrisen ikke blir definert riktig?

Lenke til kommentar

Problemet her er nok fnuttene trådstarter dytter rundt indeksen. name="var[1]" vil gi $_POST['var'][1] mens name="var['1']" vil gi $_POST['var'][''1''] eller noe i den duren. Pleier å være en fordel å aksessere numeriske indekser som nettopp numerisk, og ikke som en string.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...