הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   שגיאה ב foreach (https://hosts.co.il/forums/showthread.php?t=67622)

kfir91 23-09-08 17:24

שגיאה ב foreach
 
רושם לי שגיאה בזה :
קוד:

foreach($_POST['name'] as $name) {
foreach($_POST['goals'] as $goals) {
foreach($_POST['assists'] as $assists) {
foreach($_POST['open'] as $open) { 
foreach($_POST['yellows'] as $yellows) { 
foreach($_POST['reds'] as $reds) { 
foreach($_POST['grade'] as $grade) { 
mysql_query("INSERT INTO `playerstat`(open,goals,assists,yellows,reds,grade,playerid) VALUES('$open', '$goals', '$assists', '$yellows', '$reds', '$grade', '$name')");
} } } } } } }

מה הבעיה? ואם אי אפשר לעשות ככה איך עושים

Xinxy 23-09-08 18:52

מה השגיאה?

DvirCohen 23-09-08 19:11

אתה לא הבנת איך משתמשים בforeach כנראה.
מטרת הלולאה היא לעבור על מערך, מה שאתה עשית זה פשוט רצית להציב במשתנה כל ערך של _POST.
בשביל לעשות דבר כזה, פשוט היית צריך לעשות ככה:

קוד:


$name = $_POST['name'];
$goals = $_POST['goals'];
$assists = $_POST['assists'];
...
mysql_query(...);

בforeach צריך לתת מערך, לא איבר של מערך (שהוא לא מערך כמובן).
לדוגמא:

קוד:


$arr = array( 'firstname' => 'dvir', 'lastname' => 'cohen' );

foreach( $arr as $name => $val )
{
  print $name . ": ". $val;
}


kfir91 23-09-08 19:59

כמו שעשיתי זה המטרה של זה . כמו שאת עשית זה סה"כ מערך אחד

יש לי טופס שהשמות של כל שדה זה מערך אני רוצה להפוך את כל המערכים למשתנים ולהכניס את זה לבסיס נתונים

כמו שעשיתי פה :



קוד:



foreach($_POST['name'] as $name) {
foreach($_POST['goals'] as $goals) {
foreach($_POST['assists'] as $assists) {
foreach($_POST['open'] as $open) { 
foreach($_POST['yellows'] as $yellows) { 
foreach($_POST['reds'] as $reds) { 
foreach($_POST['grade'] as $grade) { 
mysql_query("INSERT INTO `playerstat`(open,goals,assists,yellows,reds,grade,playerid) VALUES('$open', '$goals', '$assists', '$yellows', '$reds', '$grade', '$name')");
} } } } } } }



רק שהקוד הזה לא עובד .. אבל הבנתם כביכול את המטרה... אז איך אני עושה את זה ?

DvirCohen 23-09-08 20:27

שוב אתה לא מבין, המטרה של foreach זה לא לשים איבר של מערך בתוך משנה, אלא לעבור על כל המערך וכל פעם להתייחס לאיבר הנוכחי.
אם אתה רוצה להפוך את איברי המערך למשתנים, יש לך 2 דרכים:

1. הקצרה יותר - להשתמש בextract (פחות מומלץ מכוון שאם יש לך מחלקה למשל DB ויש לך איבר $_POST['DB'] יהיו בעיות).
מה שהפונקציה עושה היא הופכת כל איבר במערך למשתנה עם שם האיבר וערכו, כלומר:

קוד:

$arr = array( 'name' => 'dvir', 'age' => 17 );
extract( $arr ); // $name = "dvir" $age = 17

2. פשוט להציב משתנים..
קוד:

$name = $_POST['name'];
$goals = $_POST['goals'];
....


kfir91 23-09-08 21:19

בוא אני ינסה להסביר לך מחדש
זה הטופס כן :
קוד:

echo "<tr><td class=\"righttd\"><select name=\"name[$i]\">";

$query = "SELECT * FROM `players` order by number";
$result = mysql_query($query , $db);
while ($row=mysql_fetch_array($result)) {
echo "<option value=\"$row[id]\">$row[name]</option>";
}
echo "</select></td><td class=\"lefttdcheck\"><input type=\"checkbox\" name=\"goals[$i]\">שער <input type=\"checkbox\" name=\"assists[$i]\">בישול <input type=\"checkbox\" name=\"open[$i]\">פתח <input type=\"checkbox\" name=\"yellows[$i]\">צהוב <input type=\"checkbox\" name=\"reds[$i]\">אדום <input type=\"text\" name=\"grade[$i]\">ציון </td></tr>";
}

echo "</table><table><tr><td class=\"submitbar\"><input type=\"submit\" name=\"submit\" value=\"שלח\"></td></tr></table></form>";

הטופס הזה אמור להכניס את כל הנתונים שנכנסו אליו למסד נתונים
בשביל זה צריך foreach שיבודד את המערכים למשתנה וכל פעם יכניס.
ניסיתי לעשות כמו בקוד שרשמתי למעלה לא עובד. יש קוד אחר שיכניס לי את כל הנתונים שנכנסים פה למערך ?

Rom 23-09-08 21:40

כפיר, צר לי איך דביר דובר אמת..
בתוך המשתנה $_POST['name'] אין מערך. יש מחרוזת רגילה.
אלא אם עשית משהו אחר, ותצטרך להראות את שאר הקוד.

בתוך הforeach אתה שם מערך, ומה שאתה שמת זה מחרוזת.

kfir91 23-09-08 21:56

עכשיו תגידו לי שאסור לשים $_POST ב foreach תגידו אתם עושים צחוק איזה מחרוזת ?
הסברתי בצורה מפורטת מה אני צריך , יש לי טופס שהשמות של השדות בטופס הם מערכים
מה שאני צריך שהנתון בכל אחד מתא במערך יכנס למקום המדויק שלו במסד נתונים כמו שעשיתי.
איך אני עושה את זה

Rom 23-09-08 21:57

איך השמות של השדות בטופס יכולים להיות מערך?

ו $_POST אתה כן יכול לשים בforeach
אבל $_POST["name"] אתה לא יכול..

kfir91 23-09-08 21:59

מחייה שפת ה PHP וואלה יופי . זה לא פעם ראשונה שאני משתמש ב foreach ואני אומר לך שכן אפשר לשים $_POST[name] בתוך foreach וזה כן עובד. אבל פה פשוט זה לא עובד לי כי שמתי foreach בתוך foreach אז מה שאני מחפש זה שיטה אחרת.
בד"כ שעשיתי את זה עבדתי רק עם foreach אחד אז זה עבד.

Rom 23-09-08 22:08

אשמח אם תשלח את החלק HTML שקשור לזה גם.
אולי אני אצליח להבין בבירור למה אתה מתכוון.

נראה לי שהבנתי למה אתה מתכוון:

יש לך קוד HTML כזה:

קוד:

<input type="text" name="array[]" />
<input type="text" name="array[]" />
<input type="text" name="array[]" />

<input type="text" name="array2[]" />
<input type="text" name="array2[]" />
<input type="text" name="array2[]" />

ואתה רוצה להכניס למסד פעם אחת מידע עם הarray הראשון, והarray2 הראשון, פעם שניה עם הarray ה2 והarray2 השני?

אז תעשה דבר כזה:

PHP קוד:


for($i 0$i<3$i++)
echo 
$_POST["array"][$i]; 

או משהו באיזה הזה. כמובן שתשנה את הecho לפקודה של MYSQL.

kfir91 23-09-08 22:12

אין שום HTML שקשור זה הקוד של הטופס שהעלאתי בהודעה הקודמת .
זה שולח לדף שהראתי בהודעה הראשית וזה אמור להוסיף למסד

Rom 23-09-08 22:14

תראה את העריכה של ההודעה הקודמת..

DvirCohen 23-09-08 22:27

תקשיב. אתה יכול להתווכח עד מחר, אבל לולאת foreach חייבת לקבל מערך.
אלא אם כן $_POST['name'] הוא מערך בפני עצמו (והוא לא לפי השאילתה שלך), אין לך מה להמשיך להתווכח, כי מה שאתה עושה לא נכון.

kfir91 23-09-08 22:39

לא נכון אבל עובד :\

kfir91 24-09-08 14:24

ציטוט:

נכתב במקור על ידי Rom (פרסם 669039)
אשמח אם תשלח את החלק HTML שקשור לזה גם.
אולי אני אצליח להבין בבירור למה אתה מתכוון.

נראה לי שהבנתי למה אתה מתכוון:

יש לך קוד HTML כזה:

קוד:

<input type="text" name="array[]" />
<input type="text" name="array[]" />
<input type="text" name="array[]" />

<input type="text" name="array2[]" />
<input type="text" name="array2[]" />
<input type="text" name="array2[]" />

ואתה רוצה להכניס למסד פעם אחת מידע עם הarray הראשון, והarray2 הראשון, פעם שניה עם הarray ה2 והarray2 השני?

אז תעשה דבר כזה:

PHP קוד:


for($i 0$i<3$i++)
echo 
$_POST["array"][$i]; 

או משהו באיזה הזה. כמובן שתשנה את הecho לפקודה של MYSQL.

לא
אני רוצה להכניס רק פעם אחת למסד insert into אחד שבו הוא יכניס את המידע של ה array הראשון, השני , השלישי,הרביעי,החמישי וכו'...

Rom 24-09-08 16:58

אתה יודע מה זה array?

איזה מידע יש לך בתוך ה$_POST["name" אתה יודע?

Sagi 24-09-08 20:30

כפיר מה השגיאה שלך בדיוק?

Sagi 24-09-08 20:40

אני חושב שהבנתי המ אתה רוצה לעשות

דבר ראשון הטופס צריך להיות ככה
PHP קוד:

$query "SELECT * FROM `players` order by number";
$result mysql_query($query $db);
while (
$row=mysql_fetch_array($result)) {
echo 
"<option value=\"$row[id]\">$row[name]</option>";
}
echo 
"</select></td><td class=\"lefttdcheck\"><input type=\"checkbox\" name=\"goals[]\">שער <input type=\"checkbox\" name=\"assists[]\">בישול <input type=\"checkbox\" name=\"open[]\">פתח <input type=\"checkbox\" name=\"yellows[]\">צהוב <input type=\"checkbox\" name=\"reds[]\">אדום <input type=\"text\" name=\"grade[]\">ציון </td></tr>";



עכשיו לאחר השליחה תנסה ככה
PHP קוד:

$count=count($_POST[name]);
for(
$i=0;$count>=$i;$i++){
$name=$_POST[name][$i];
$goals=$_POST[goals][$i];
$assists=$_POST[assists][$i];
$open=$_POST[open][$i];
$yellows=$_POST[yellows][$i];
$reds=$_POST[reds][$i];
$grade=$_POST[grade][$i];
//insert into bla bla


מקווה שעזרתי

kfir91 24-09-08 21:58

עזרת שגיא תודה


כל הזמנים הם GMT +2. הזמן כעת הוא 02:42.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ