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

הוסטס - פורום אחסון האתרים הגדול בישראל (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 אחד אז זה עבד.


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

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